mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-23 00:33:09 +02:00
@@ -6,7 +6,7 @@ android {
|
||||
defaultConfig {
|
||||
applicationId "com.health.openscale"
|
||||
testApplicationId "com.health.openscale.test"
|
||||
minSdkVersion 18
|
||||
minSdkVersion 19
|
||||
targetSdkVersion 27
|
||||
versionCode 23
|
||||
versionName "1.7"
|
||||
|
@@ -49,10 +49,11 @@ import com.health.openscale.core.utils.CsvHelper;
|
||||
import com.health.openscale.gui.fragments.FragmentUpdateListener;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.text.ParseException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
@@ -194,6 +195,18 @@ public class OpenScale {
|
||||
public void deleteScaleUser(int id) {
|
||||
userDAO.delete(userDAO.get(id));
|
||||
selectedScaleUser = null;
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
|
||||
// Remove user specific settings
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
final String prefix = ScaleUser.getPreferenceKey(id, "");
|
||||
for (String key : prefs.getAll().keySet()) {
|
||||
if (key.startsWith(prefix)) {
|
||||
editor.remove(key);
|
||||
}
|
||||
}
|
||||
editor.apply();
|
||||
}
|
||||
|
||||
public void updateScaleUser(ScaleUser user) {
|
||||
@@ -332,7 +345,7 @@ public class OpenScale {
|
||||
updateScaleData();
|
||||
}
|
||||
|
||||
private String getFilenameFromUri(Uri uri) {
|
||||
public String getFilenameFromUri(Uri uri) {
|
||||
Cursor cursor = context.getContentResolver().query(
|
||||
uri, null, null, null, null);
|
||||
cursor.moveToFirst();
|
||||
@@ -362,9 +375,10 @@ public class OpenScale {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean exportData(String filename) {
|
||||
public boolean exportData(Uri uri) {
|
||||
try {
|
||||
CsvHelper.exportTo(new FileWriter(filename), scaleMeasurementList);
|
||||
OutputStream output = context.getContentResolver().openOutputStream(uri);
|
||||
CsvHelper.exportTo(new OutputStreamWriter(output), scaleMeasurementList);
|
||||
return true;
|
||||
} catch (IOException e) {
|
||||
Toast.makeText(context, context.getResources().getString(R.string.error_exporting) + " " + e.getMessage(), Toast.LENGTH_SHORT).show();
|
||||
|
@@ -152,6 +152,14 @@ public class ScaleUser {
|
||||
return Converters.fromKilogram(initialWeight, scaleUnit);
|
||||
}
|
||||
|
||||
public static String getPreferenceKey(int userId, String key) {
|
||||
return String.format("user.%d.%s", userId, key);
|
||||
}
|
||||
|
||||
public String getPreferenceKey(String key) {
|
||||
return getPreferenceKey(getId(), key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
|
@@ -26,7 +26,6 @@ import android.content.pm.PackageManager;
|
||||
import android.content.res.Configuration;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.preference.PreferenceManager;
|
||||
@@ -48,7 +47,6 @@ import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.health.openscale.BuildConfig;
|
||||
@@ -81,6 +79,7 @@ public class MainActivity extends AppCompatActivity
|
||||
private MenuItem bluetoothStatus;
|
||||
|
||||
private static final int IMPORT_DATA_REQUEST = 100;
|
||||
private static final int EXPORT_DATA_REQUEST = 101;
|
||||
|
||||
private DrawerLayout drawerLayout;
|
||||
private Toolbar toolbar;
|
||||
@@ -400,9 +399,7 @@ public class MainActivity extends AppCompatActivity
|
||||
importCsvFile();
|
||||
return true;
|
||||
case R.id.exportData:
|
||||
if (PermissionHelper.requestWritePermission(this)) {
|
||||
exportCsvFile();
|
||||
}
|
||||
exportCsvFile();
|
||||
return true;
|
||||
case R.id.shareData:
|
||||
shareCsvFile();
|
||||
@@ -556,7 +553,7 @@ public class MainActivity extends AppCompatActivity
|
||||
else {
|
||||
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
intent.setType("text/*");
|
||||
intent.setType("*/*");
|
||||
|
||||
startActivityForResult(
|
||||
Intent.createChooser(intent, getResources().getString(R.string.label_import)),
|
||||
@@ -564,50 +561,95 @@ public class MainActivity extends AppCompatActivity
|
||||
}
|
||||
}
|
||||
|
||||
private void exportCsvFile() {
|
||||
AlertDialog.Builder filenameDialog = new AlertDialog.Builder(this);
|
||||
private String getExportFilename(ScaleUser selectedScaleUser) {
|
||||
return String.format("openScale %s.csv", selectedScaleUser.getUserName());
|
||||
}
|
||||
|
||||
filenameDialog.setTitle(getResources().getString(R.string.info_set_filename) + " "
|
||||
+ Environment.getExternalStorageDirectory().getPath());
|
||||
private void startActionCreateDocumentForExportIntent() {
|
||||
OpenScale openScale = OpenScale.getInstance(getApplicationContext());
|
||||
ScaleUser selectedScaleUser = openScale.getSelectedScaleUser();
|
||||
|
||||
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
intent.setType("text/csv");
|
||||
intent.putExtra(Intent.EXTRA_TITLE, getExportFilename(selectedScaleUser));
|
||||
|
||||
startActivityForResult(intent, EXPORT_DATA_REQUEST);
|
||||
}
|
||||
|
||||
private boolean doExportData(Uri uri) {
|
||||
OpenScale openScale = OpenScale.getInstance(getApplicationContext());
|
||||
if (openScale.exportData(uri)) {
|
||||
String filename = openScale.getFilenameFromUri(uri);
|
||||
Toast.makeText(this,
|
||||
getResources().getString(R.string.info_data_exported) + " " + filename,
|
||||
Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private String getExportPreferenceKey(ScaleUser selectedScaleUser) {
|
||||
return selectedScaleUser.getPreferenceKey("exportUri");
|
||||
}
|
||||
|
||||
private void exportCsvFile() {
|
||||
OpenScale openScale = OpenScale.getInstance(getApplicationContext());
|
||||
final ScaleUser selectedScaleUser = openScale.getSelectedScaleUser();
|
||||
|
||||
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
|
||||
|
||||
final ScaleUser selectedScaleUser = OpenScale.getInstance(getApplicationContext()).getSelectedScaleUser();
|
||||
String exportFilename = prefs.getString("exportFilename" + selectedScaleUser.getId(),
|
||||
"openScale_data_" + selectedScaleUser.getUserName() + ".csv");
|
||||
Uri uri;
|
||||
try {
|
||||
String exportUri = prefs.getString(getExportPreferenceKey(selectedScaleUser), "");
|
||||
uri = Uri.parse(exportUri);
|
||||
getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
uri = null;
|
||||
}
|
||||
|
||||
final EditText txtFilename = new EditText(this);
|
||||
txtFilename.setText(exportFilename);
|
||||
if (uri == null) {
|
||||
startActionCreateDocumentForExportIntent();
|
||||
return;
|
||||
}
|
||||
|
||||
filenameDialog.setView(txtFilename);
|
||||
AlertDialog.Builder exportDialog = new AlertDialog.Builder(this);
|
||||
exportDialog.setTitle(R.string.label_export);
|
||||
exportDialog.setMessage(getResources().getString(R.string.label_export_overwrite,
|
||||
openScale.getFilenameFromUri(uri)));
|
||||
|
||||
filenameDialog.setPositiveButton(getResources().getString(R.string.label_export), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
String fullPath = Environment.getExternalStorageDirectory().getPath() + "/" + txtFilename.getText().toString();
|
||||
|
||||
if (OpenScale.getInstance(getApplicationContext()).exportData(fullPath)) {
|
||||
prefs.edit().putString("exportFilename" + selectedScaleUser.getId(), txtFilename.getText().toString()).commit();
|
||||
Toast.makeText(getApplicationContext(), getResources().getString(
|
||||
R.string.info_data_exported) + " " + fullPath, Toast.LENGTH_SHORT).show();
|
||||
final Uri exportUri = uri;
|
||||
exportDialog.setPositiveButton(R.string.label_yes, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
if (!doExportData(exportUri)) {
|
||||
prefs.edit().remove(getExportPreferenceKey(selectedScaleUser)).apply();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
filenameDialog.setNegativeButton(getResources().getString(R.string.label_cancel), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
exportDialog.setNegativeButton(R.string.label_no, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
startActionCreateDocumentForExportIntent();
|
||||
}
|
||||
});
|
||||
exportDialog.setNeutralButton(R.string.label_cancel, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
filenameDialog.show();
|
||||
exportDialog.show();
|
||||
}
|
||||
|
||||
private void shareCsvFile() {
|
||||
final ScaleUser selectedScaleUser = OpenScale.getInstance(getApplicationContext()).getSelectedScaleUser();
|
||||
|
||||
File shareFile = new File(getApplicationContext().getCacheDir(),
|
||||
String.format("openScale %s.csv", selectedScaleUser.getUserName()));
|
||||
if (!OpenScale.getInstance(getApplicationContext()).exportData(shareFile.getPath())) {
|
||||
getExportFilename(selectedScaleUser));
|
||||
if (!OpenScale.getInstance(getApplicationContext()).exportData(Uri.fromFile(shareFile))) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -629,8 +671,30 @@ public class MainActivity extends AppCompatActivity
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
||||
if (requestCode == IMPORT_DATA_REQUEST && resultCode == RESULT_OK && data != null) {
|
||||
OpenScale.getInstance(getApplicationContext()).importData(data.getData());
|
||||
if (resultCode != RESULT_OK || data == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
OpenScale openScale = OpenScale.getInstance(getApplicationContext());
|
||||
|
||||
switch (requestCode) {
|
||||
case IMPORT_DATA_REQUEST:
|
||||
openScale.importData(data.getData());
|
||||
break;
|
||||
case EXPORT_DATA_REQUEST:
|
||||
if (doExportData(data.getData())) {
|
||||
try {
|
||||
getContentResolver().takePersistableUriPermission(
|
||||
data.getData(), Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
||||
String key = getExportPreferenceKey(openScale.getSelectedScaleUser());
|
||||
PreferenceManager.getDefaultSharedPreferences(this).edit()
|
||||
.putString(key, data.getData().toString()).apply();
|
||||
}
|
||||
catch (Exception ex) {
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -646,13 +710,6 @@ public class MainActivity extends AppCompatActivity
|
||||
permissionGranted = false;
|
||||
}
|
||||
break;
|
||||
case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE:
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
exportCsvFile();
|
||||
} else {
|
||||
permissionGranted = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!permissionGranted) {
|
||||
|
@@ -78,7 +78,6 @@
|
||||
<string name="info_data_all_deleted">Totes les entrades eliminades</string>
|
||||
<string name="info_data_exported">Dades exportades a</string>
|
||||
<string name="info_data_imported">Dades importades de</string>
|
||||
<string name="info_set_filename">Establir nom d\'arxiu a</string>
|
||||
<string name="info_enter_value_cm">Valor en cm</string>
|
||||
<string name="info_enter_value_unit">Valor en</string>
|
||||
<string name="info_enter_comment">Comentari opcional</string>
|
||||
|
@@ -18,7 +18,6 @@
|
||||
<string name="info_is_not_available">ist nicht verfügbar</string>
|
||||
<string name="info_no_selected_user">Kein Benutzer vorhanden. Bitte erzeugen Sie ein neuen Benutzer unter Einstellungen.</string>
|
||||
<string name="info_on_date">am</string>
|
||||
<string name="info_set_filename">Setzte Dateiname auf</string>
|
||||
<string name="label_birthday">Geburtstag</string>
|
||||
<string name="label_bluetooth_enable">Suche nach Waage beim Start</string>
|
||||
<string name="label_bluetooth_title">Bluetooth</string>
|
||||
|
@@ -78,7 +78,6 @@
|
||||
<string name="info_data_all_deleted">Todas las entradas borradas</string>
|
||||
<string name="info_data_exported">Datos exportados a</string>
|
||||
<string name="info_data_imported">Datos importados de</string>
|
||||
<string name="info_set_filename">Establecer nombre de archivo a</string>
|
||||
<string name="info_enter_value_cm">Introduzca valor en cm</string>
|
||||
<string name="info_enter_value_unit">Introduzca valor en</string>
|
||||
<string name="info_enter_comment">Introduzca un comentario opcional</string>
|
||||
|
@@ -72,7 +72,6 @@
|
||||
<string name="info_data_all_deleted">Toutes les entrées ont été supprimées de la base de données</string>
|
||||
<string name="info_data_exported">Données exportées vers</string>
|
||||
<string name="info_data_imported">Donnéees importées depuis</string>
|
||||
<string name="info_set_filename">Définir le nom du fichier vers</string>
|
||||
<string name="info_enter_value_cm">Entrez la valeur en cm</string>
|
||||
<string name="info_enter_value_unit">Entrez la valeur en</string>
|
||||
<string name="info_enter_comment">Ajouter un commentaire optionnel</string>
|
||||
|
@@ -54,7 +54,6 @@
|
||||
<string name="info_on_date">でした -</string>
|
||||
<string name="info_no_selected_user">ユーザーは存在しません!設定で新しいユーザを入れてください</string>
|
||||
<string name="label_add_user">ユーザーの追加する</string>
|
||||
<string name="info_set_filename">にファイル名を設定</string>
|
||||
<string name="label_enable_labels">メモの上にデータ点</string>
|
||||
<string name="info_is_visible">表示されています</string>
|
||||
<string name="info_is_not_visible">表示されていません</string>
|
||||
|
@@ -80,7 +80,6 @@
|
||||
<string name="info_data_all_deleted">Alle database vermeldingen verwijderd</string>
|
||||
<string name="info_data_exported">Data geexporteerd naar</string>
|
||||
<string name="info_data_imported">Data geinporteerd van</string>
|
||||
<string name="info_set_filename">Zet bestandsnaam op</string>
|
||||
<string name="info_enter_value_cm">Geef waarde op cm\'s in</string>
|
||||
<string name="info_enter_value_unit">Geef waaarde op</string>
|
||||
<string name="info_enter_comment">Voeg een optionele opmerking toe.</string>
|
||||
|
@@ -75,7 +75,6 @@
|
||||
<string name="info_data_all_deleted">Wszytkie wpisy w bazie danych usunięte</string>
|
||||
<string name="info_data_exported">Dane wyeksportowane do</string>
|
||||
<string name="info_data_imported">Dane zaimportowane z</string>
|
||||
<string name="info_set_filename">Ustaw nazwę pliku na</string>
|
||||
<string name="info_enter_value_cm">Wprowadź wartość w cm</string>
|
||||
<string name="info_enter_value_unit">Wprowadź wartość w</string>
|
||||
<string name="info_enter_comment">Wprowadź opcjonlany komentarz</string>
|
||||
|
@@ -44,7 +44,6 @@
|
||||
<string name="info_no_evaluation_available">Valor não pode ser processado</string>
|
||||
<string name="info_on_date">em</string>
|
||||
<string name="info_no_selected_user">Nenhum usuário existe. Por favor, crie um novo usuário em Configurações.</string>
|
||||
<string name="info_set_filename">Definir nome de arquivo para</string>
|
||||
<string name="info_step_on_scale">Por favor suba na balança para medidas de referência</string>
|
||||
<string name="label_add_user">Adicionar usuário</string>
|
||||
<string name="label_backup">Backup</string>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="title_overview">Prehľad</string>
|
||||
<string name="title_overview">Prehľad</string>
|
||||
<string name="title_graph">Graf</string>
|
||||
<string name="title_table">Tabuľka</string>
|
||||
<string name="title_statistics">Štatistiky</string>
|
||||
@@ -64,7 +64,6 @@
|
||||
<string name="info_data_all_deleted">Všetkých položky boli vymazané z databázy</string>
|
||||
<string name="info_data_exported">Údaje boli exportované do</string>
|
||||
<string name="info_data_imported">Údaje boli importované z</string>
|
||||
<string name="info_set_filename">Nastaviť názov súboru na</string>
|
||||
<string name="info_enter_value_cm">Zadajte hodnotu v cm</string>
|
||||
<string name="info_enter_value_unit">Zadajte hodnotu v palcoch</string>
|
||||
<string name="info_enter_comment">Zadajte voliteľný komentár</string>
|
||||
|
@@ -80,7 +80,6 @@
|
||||
<string name="info_data_all_deleted">Alla databasposter borttagna</string>
|
||||
<string name="info_data_exported">Data exporterad till</string>
|
||||
<string name="info_data_imported">Data importerad från</string>
|
||||
<string name="info_set_filename">Sätt filnamn till</string>
|
||||
<string name="info_enter_value_cm">Ange värde i cm</string>
|
||||
<string name="info_enter_value_unit">Ange värde i</string>
|
||||
<string name="info_enter_comment">Ange en frivillig kommentar</string>
|
||||
@@ -187,5 +186,6 @@
|
||||
<string name="label_set_default_order">Ställ in standardordning</string>
|
||||
|
||||
<string name="label_weeks_view">Veckovy</string>
|
||||
<string name="label_export_overwrite">Skriv över föregående export \"%s\"?</string>
|
||||
|
||||
</resources>
|
||||
|
@@ -76,7 +76,6 @@
|
||||
<string name="info_data_all_deleted">Veri tabaný giriþi silindi</string>
|
||||
<string name="info_data_exported">Veri dýþarý aktarma</string>
|
||||
<string name="info_data_imported">Veri içeri aktarma</string>
|
||||
<string name="info_set_filename">Dosya adýný ayarla</string>
|
||||
<string name="info_enter_value_cm">Deðeri cm olarak girin</string>
|
||||
<string name="info_enter_value_unit">Ýçine deðer girin</string>
|
||||
<string name="info_enter_comment">Ýsteðebaðlý açýklama girin</string>
|
||||
|
@@ -88,7 +88,6 @@
|
||||
<string name="info_data_all_deleted">All database entries deleted</string>
|
||||
<string name="info_data_exported">Data exported to</string>
|
||||
<string name="info_data_imported">Data imported from</string>
|
||||
<string name="info_set_filename">Set filename to</string>
|
||||
<string name="info_enter_value_cm">Enter value in cm</string>
|
||||
<string name="info_enter_value_unit">Enter value in</string>
|
||||
<string name="info_enter_comment">Enter an optional comment</string>
|
||||
@@ -211,6 +210,7 @@
|
||||
<string name="label_measurement_order">Measurement order</string>
|
||||
<string name="label_press_hold_reorder">Press and hold to reorder</string>
|
||||
<string name="label_set_default_order">Set default order</string>
|
||||
<string name="label_export_overwrite">Overwrite previous export \"%s\"?</string>
|
||||
|
||||
|
||||
</resources>
|
||||
|
Reference in New Issue
Block a user