diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java index 8f8496aa..bb746299 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java @@ -42,122 +42,92 @@ import java.util.List; import java.util.Set; public class BackupPreferences extends PreferenceFragment { + private static final String PREFERENCE_KEY_EXPORT_DIR = "exportDir"; private static final String PREFERENCE_KEY_IMPORT_BACKUP = "importBackup"; private static final String PREFERENCE_KEY_EXPORT_BACKUP = "exportBackup"; + EditTextPreference exportDir; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.backup_preferences); + exportDir = (EditTextPreference) findPreference(PREFERENCE_KEY_EXPORT_DIR); + exportDir.setSummary(exportDir.getText()); + exportDir.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + preference.setSummary((String) newValue); + return true; + } + }); + Preference importBackup = findPreference(PREFERENCE_KEY_IMPORT_BACKUP); - importBackup.setOnPreferenceClickListener(new onClickListenerImportBackup()); + importBackup.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + if (PermissionHelper.requestReadPermission(getActivity())) { + importBackup(); + } + return true; + } + }); Preference exportBackup = findPreference(PREFERENCE_KEY_EXPORT_BACKUP); - exportBackup.setOnPreferenceClickListener(new onClickListenerExportBackup()); - - initSummary(getPreferenceScreen()); + exportBackup.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + if (PermissionHelper.requestWritePermission(getActivity())) { + exportBackup(); + } + return true; + } + }); } - private void initSummary(Preference p) { - if (p instanceof PreferenceGroup) { - PreferenceGroup pGrp = (PreferenceGroup) p; - for (int i = 0; i < pGrp.getPreferenceCount(); i++) { - initSummary(pGrp.getPreference(i)); - } - } else { - updatePrefSummary(p); - } + private boolean isExternalStoragePresent() { + return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); } - private void updatePrefSummary(Preference p) - { - if (p instanceof ListPreference) - { - ListPreference listPref = (ListPreference) p; - p.setSummary(listPref.getEntry()); + private File getExportDir() { + if (!isExternalStoragePresent()) { + return null; } - if (p instanceof EditTextPreference) - { - EditTextPreference editTextPref = (EditTextPreference) p; - if (p.getTitle().toString().contains("assword")) - { - p.setSummary("******"); - } - else - { - p.setSummary(editTextPref.getText()); - } - } - - if (p instanceof MultiSelectListPreference) - { - MultiSelectListPreference editMultiListPref = (MultiSelectListPreference) p; - - CharSequence[] entries = editMultiListPref.getEntries(); - CharSequence[] entryValues = editMultiListPref.getEntryValues(); - List currentEntries = new ArrayList<>(); - Set currentEntryValues = editMultiListPref.getValues(); - - for (int i = 0; i < entries.length; i++) - { - if (currentEntryValues.contains(entryValues[i].toString())) currentEntries.add(entries[i].toString()); - } - - p.setSummary(currentEntries.toString()); - } - } - - private class onClickListenerImportBackup implements Preference.OnPreferenceClickListener { - @Override - public boolean onPreferenceClick(Preference preference) { - if (PermissionHelper.requestReadPermission(getActivity())) { - importBackup(); - } - - return true; - } - } - - private class onClickListenerExportBackup implements Preference.OnPreferenceClickListener { - @Override - public boolean onPreferenceClick(Preference preference) { - if (PermissionHelper.requestWritePermission(getActivity())) { - exportBackup(); - } - - return true; - } + return new File(Environment.getExternalStorageDirectory(), exportDir.getText()); } private boolean importBackup() { - File exportDir = new File(Environment.getExternalStorageDirectory(), PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).getString("exportDir", "openScale Backup")); - - String databaseName = "openScale.db"; - - if (!isExternalStoragePresent()) + File exportDir = getExportDir(); + if (exportDir == null) { return false; + } - File exportFile = getActivity().getApplicationContext().getDatabasePath(databaseName); - File importFile = new File(exportDir, databaseName); + File dbFile = getActivity().getDatabasePath(OpenScale.DATABASE_NAME); + File importFile = new File(exportDir, OpenScale.DATABASE_NAME); if (!importFile.exists()) { - Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.error_importing) + " " + exportDir + "/" + databaseName + " " + getResources().getString(R.string.label_not_found), Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getResources().getString(R.string.error_importing) + + " " + importFile.getPath() + " " + + getResources().getString(R.string.label_not_found), Toast.LENGTH_SHORT).show(); return false; } try { - exportFile.createNewFile(); - copyFile(importFile, exportFile); - Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.info_data_imported) + " " + exportDir + "/" + databaseName, Toast.LENGTH_SHORT).show(); + dbFile.createNewFile(); + copyFile(importFile, dbFile); + + Toast.makeText(getActivity(), getResources().getString(R.string.info_data_imported) + + " " + importFile.getPath(), Toast.LENGTH_SHORT).show(); } catch (IOException e) { - Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.error_importing) + " " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getResources().getString(R.string.error_importing) + + " " + e.getMessage(), Toast.LENGTH_SHORT).show(); return false; } - OpenScale openScale = OpenScale.getInstance(getActivity().getApplicationContext()); + OpenScale openScale = OpenScale.getInstance(getActivity()); openScale.reopenDatabase(); List scaleUserList = openScale.getScaleUserList(); @@ -171,15 +141,16 @@ public class BackupPreferences extends PreferenceFragment { } private boolean exportBackup() { - File exportDir = new File(Environment.getExternalStorageDirectory(), PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).getString("exportDir", "openScale Backup")); - - String databaseName = "openScale.db"; - - if (!isExternalStoragePresent()) + File exportDir = getExportDir(); + if (exportDir == null) { return false; + } - File dbFile = getActivity().getApplicationContext().getDatabasePath(databaseName); - File file = new File(exportDir, databaseName); + // Make sure all changes are written to the file before exporting + OpenScale.getInstance(getActivity()).reopenDatabase(); + + File dbFile = getActivity().getDatabasePath(OpenScale.DATABASE_NAME); + File file = new File(exportDir, OpenScale.DATABASE_NAME); if (!exportDir.exists()) { exportDir.mkdirs(); @@ -189,9 +160,11 @@ public class BackupPreferences extends PreferenceFragment { file.createNewFile(); copyFile(dbFile, file); - Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.info_data_exported) + " " + exportDir + "/" + databaseName, Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getResources().getString(R.string.info_data_exported) + + " " + file.getPath(), Toast.LENGTH_SHORT).show(); } catch (IOException e) { - Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.error_exporting) + " " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getResources().getString(R.string.error_exporting) + + " " + e.getMessage(), Toast.LENGTH_SHORT).show(); return false; } @@ -211,10 +184,6 @@ public class BackupPreferences extends PreferenceFragment { } } - private boolean isExternalStoragePresent() { - return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); - } - public void onMyOwnRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_READ_STORAGE: