From 40f2463f09db9f3fc7a7acf16848a0cdf947b0dd Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Thu, 7 Nov 2019 18:59:30 +0100 Subject: [PATCH] Fail safety: if settings cannot loaded (invalid data in sharedpreferences), reset it and try again. --- .../opentracks/settings/SettingsActivity.java | 13 +++++++++++-- src/main/res/values/strings.xml | 6 +++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java index cd33ba81b..b24ede107 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java @@ -2,6 +2,7 @@ package de.dennisguse.opentracks.settings; import android.content.SharedPreferences; import android.os.Bundle; +import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; @@ -69,7 +70,15 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - setPreferencesFromResource(R.xml.settings, rootKey); + try { + setPreferencesFromResource(R.xml.settings, rootKey); + } catch (ClassCastException e) { + // Some sharedPreference is broken: delete all and reset them; it is just a last resort... + Toast.makeText(getContext(), R.string.settings_error_initial_values_restored, Toast.LENGTH_LONG).show(); + PreferencesUtils.resetPreferences(getContext(), true); + + setPreferencesFromResource(R.xml.settings, rootKey); + } updateUnits(); } @@ -94,7 +103,6 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit } private void configListPreference(int key, int valueArray, boolean metricUnits) { - //TODO Can we make values an int array? String[] values = getResources().getStringArray(valueArray); final String[] options = new String[values.length]; switch (key) { @@ -162,6 +170,7 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit private void updateUnits() { boolean metricUnits = PreferencesUtils.isMetricUnits(getActivity()); + //TODO Refactor this! configFrequencyPreference(R.string.voice_frequency_key, metricUnits); configFrequencyPreference(R.string.split_frequency_key, metricUnits); configListPreference(R.string.min_recording_interval_key, R.array.min_recording_interval_values, metricUnits); diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 1b1f1f65b..9292076f8 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1219,7 +1219,11 @@ limitations under the License. All settings have been reverted to the default values - + + Sorry, but an error occurred: and the all settings were reset to there default values. + + +