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.
+
+
+