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