diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index a2b84efee..410e59f4d 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -135,7 +135,6 @@ limitations under the License.
android:value=".SearchListActivity" />
-
diff --git a/src/main/java/de/dennisguse/opentracks/InitPreferences.java b/src/main/java/de/dennisguse/opentracks/InitPreferences.java
index 9c3e1aba0..798e084ef 100644
--- a/src/main/java/de/dennisguse/opentracks/InitPreferences.java
+++ b/src/main/java/de/dennisguse/opentracks/InitPreferences.java
@@ -1,7 +1,8 @@
package de.dennisguse.opentracks;
import android.app.Application;
-import android.preference.PreferenceManager;
+
+import de.dennisguse.opentracks.util.PreferencesUtils;
public class InitPreferences extends Application {
@Override
@@ -9,11 +10,6 @@ public class InitPreferences extends Application {
super.onCreate();
//Set default values of preferences on first start.
- PreferenceManager.setDefaultValues(this, R.xml.settings, false);
- PreferenceManager.setDefaultValues(this, R.xml.settings_advanced, false);
- PreferenceManager.setDefaultValues(this, R.xml.settings_chart, false);
- PreferenceManager.setDefaultValues(this, R.xml.settings_recording, false);
- PreferenceManager.setDefaultValues(this, R.xml.settings_sensors, false);
- PreferenceManager.setDefaultValues(this, R.xml.settings_statistics, false);
+ PreferencesUtils.resetPreferences(this, false);
}
}
diff --git a/src/main/java/de/dennisguse/opentracks/settings/AdvancedSettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/AdvancedSettingsActivity.java
deleted file mode 100644
index b50472cad..000000000
--- a/src/main/java/de/dennisguse/opentracks/settings/AdvancedSettingsActivity.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package de.dennisguse.opentracks.settings;
-
-import android.app.Dialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceClickListener;
-import android.util.Log;
-import android.widget.Toast;
-
-import de.dennisguse.opentracks.Constants;
-import de.dennisguse.opentracks.R;
-import de.dennisguse.opentracks.util.DialogUtils;
-import de.dennisguse.opentracks.util.PreferencesUtils;
-
-/**
- * An activity for advanced settings.
- *
- * @author Jimmy Shih
- */
-public class AdvancedSettingsActivity extends AbstractSettingsActivity {
-
- private static final String TAG = AdvancedSettingsActivity.class.getSimpleName();
-
- private static final int DIALOG_CONFIRM_RESET_ID = 1;
-
- private Preference resetPreference;
-
- private SharedPreferences sharedPreferences;
- private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
-
- /*
- * Note that sharedPreferenceChangeListenr cannot be an anonymous inner class.
- * Anonymous inner class will get garbage collected.
- */
- private final OnSharedPreferenceChangeListener
- sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
- @Override
- public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
- if (key != null && key.equals(PreferencesUtils.getKey(
- AdvancedSettingsActivity.this, R.string.recording_track_id_key))) {
- recordingTrackId = PreferencesUtils.getLong(
- AdvancedSettingsActivity.this, R.string.recording_track_id_key);
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- updateUi();
- }
- });
- }
- }
- };
-
- @Override
- protected void onCreate(Bundle bundle) {
- super.onCreate(bundle);
- addPreferencesFromResource(R.xml.settings_advanced);
-
- sharedPreferences = PreferencesUtils.getSharedPreferences(this);
-
- resetPreference = findPreference(getString(R.string.settings_reset_key));
- resetPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference arg0) {
- showDialog(DIALOG_CONFIRM_RESET_ID);
- return true;
- }
- });
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
- recordingTrackId = PreferencesUtils.getLong(this, R.string.recording_track_id_key);
- updateUi();
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
- }
-
- @Override
- protected Dialog onCreateDialog(int id) {
- switch (id) {
- case DIALOG_CONFIRM_RESET_ID:
- return DialogUtils.createConfirmationDialog(this, R.string.settings_reset_confirm_title,
- getString(R.string.settings_reset_confirm_message),
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface d, int button) {
- onResetPreferencesConfirmed();
- }
- });
- default:
- return null;
- }
- }
-
- /**
- * Updates the UI based on the recording state.
- */
- private void updateUi() {
- boolean isRecording = recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
- resetPreference.setEnabled(!isRecording);
- resetPreference.setSummary(isRecording ? getString(R.string.settings_not_while_recording) : "");
- }
-
- /**
- * Callback when the user confirms resetting all settings.
- */
- private void onResetPreferencesConfirmed() {
- // Change preferences in a separate thread
- new Thread() {
- @Override
- public void run() {
- Log.i(TAG, "Resetting all settings");
-
- // Actually wipe preferences and save synchronously
- sharedPreferences.edit().clear().apply();
-
- // Give UI feedback in the UI thread
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- Toast.makeText(AdvancedSettingsActivity.this, R.string.settings_reset_done, Toast.LENGTH_SHORT)
- .show();
- // Restart the settings activity so all changes are loaded
- Intent intent = getIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intent);
- }
- });
- }
- }.start();
- }
-}
diff --git a/src/main/java/de/dennisguse/opentracks/settings/ResetDialogPreference.java b/src/main/java/de/dennisguse/opentracks/settings/ResetDialogPreference.java
new file mode 100644
index 000000000..02e1e9ba2
--- /dev/null
+++ b/src/main/java/de/dennisguse/opentracks/settings/ResetDialogPreference.java
@@ -0,0 +1,33 @@
+package de.dennisguse.opentracks.settings;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.preference.DialogPreference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.Toast;
+
+import de.dennisguse.opentracks.R;
+import de.dennisguse.opentracks.util.PreferencesUtils;
+
+public class ResetDialogPreference extends DialogPreference {
+
+ public ResetDialogPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ protected View onCreateDialogView() {
+ return super.onCreateDialogView();
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ super.onClick(dialog, which);
+ if (which == DialogInterface.BUTTON_POSITIVE) {
+ PreferencesUtils.resetPreferences(getContext(), true);
+
+ Toast.makeText(getContext(), R.string.settings_reset_done, Toast.LENGTH_SHORT).show();
+ }
+ }
+}
diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java
index d5e6c4d45..adeec8bab 100644
--- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java
+++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java
@@ -17,12 +17,14 @@
package de.dennisguse.opentracks.settings;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
-import de.dennisguse.opentracks.util.IntentUtils;
import de.dennisguse.opentracks.R;
+import de.dennisguse.opentracks.util.IntentUtils;
+import de.dennisguse.opentracks.util.PreferencesUtils;
/**
* An activity for accessing settings.
@@ -31,6 +33,27 @@ import de.dennisguse.opentracks.R;
*/
public class SettingsActivity extends AbstractSettingsActivity {
+ private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
+
+ /*
+ * Note that sharedPreferenceChangeListenr cannot be an anonymous inner class.
+ * Anonymous inner class will get garbage collected.
+ */
+ private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
+ if (key != null && key.equals(PreferencesUtils.getKey(SettingsActivity.this, R.string.recording_track_id_key))) {
+ recordingTrackId = PreferencesUtils.getLong(SettingsActivity.this, R.string.recording_track_id_key);
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ updateUI();
+ }
+ });
+ }
+ }
+ };
+
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
@@ -41,7 +64,20 @@ public class SettingsActivity extends AbstractSettingsActivity {
configPreference(R.string.settings_stats_key, StatsSettingsActivity.class);
configPreference(R.string.settings_recording_key, RecordingSettingsActivity.class);
configPreference(R.string.settings_sensor_key, SensorSettingsActivity.class);
- configPreference(R.string.settings_advanced_key, AdvancedSettingsActivity.class);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ PreferencesUtils.getSharedPreferences(this).registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
+ recordingTrackId = PreferencesUtils.getLong(this, R.string.recording_track_id_key);
+ updateUI();
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ PreferencesUtils.getSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
}
/**
@@ -61,4 +97,12 @@ public class SettingsActivity extends AbstractSettingsActivity {
}
});
}
+
+ private void updateUI() {
+ //TODO Remove the following if recordingTrackId is replaced by direct communication rather than via preferences.
+ boolean isRecording = recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
+ Preference resetPreference = findPreference(getString(R.string.settings_reset_key));
+ resetPreference.setEnabled(!isRecording);
+ resetPreference.setSummary(isRecording ? getString(R.string.settings_not_while_recording) : "");
+ }
}
diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java
index 89214a16e..3533d1b09 100644
--- a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java
+++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java
@@ -71,6 +71,7 @@ public class PreferencesUtils {
public static final int RECORDING_GPS_ACCURACY_EXCELLENT = 10;
public static final int RECORDING_GPS_ACCURACY_POOR = 2000;
+ @Deprecated //NOTE: is at the moment still used to determine if a track is currently recorded; better ask the service directly.
public static final long RECORDING_TRACK_ID_DEFAULT = -1L;
public static final boolean RECORDING_TRACK_PAUSED_DEFAULT = true;
@@ -246,4 +247,12 @@ public class PreferencesUtils {
public static boolean isChartByDistance(Context context) {
return CHART_X_AXIS_DEFAULT.equals(getString(context, R.string.chart_x_axis_key, CHART_X_AXIS_DEFAULT));
}
+
+ public static void resetPreferences(Context context, boolean readAgain) {
+ PreferenceManager.setDefaultValues(context, R.xml.settings, readAgain);
+ PreferenceManager.setDefaultValues(context, R.xml.settings_chart, readAgain);
+ PreferenceManager.setDefaultValues(context, R.xml.settings_recording, readAgain);
+ PreferenceManager.setDefaultValues(context, R.xml.settings_sensors, readAgain);
+ PreferenceManager.setDefaultValues(context, R.xml.settings_statistics, readAgain);
+ }
}
diff --git a/src/main/res/xml/settings.xml b/src/main/res/xml/settings.xml
index efe708f90..b18b36b9d 100644
--- a/src/main/res/xml/settings.xml
+++ b/src/main/res/xml/settings.xml
@@ -31,10 +31,16 @@ limitations under the License.
android:key="@string/settings_sensor_key"
android:persistent="false"
android:title="@string/settings_sensor" />
-
+
+
+
diff --git a/src/main/res/xml/settings_advanced.xml b/src/main/res/xml/settings_advanced.xml
deleted file mode 100644
index 44c385fbe..000000000
--- a/src/main/res/xml/settings_advanced.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
\ No newline at end of file