From c70e374219fd6ceb604307708ec88b6bd3281a84 Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Wed, 31 Oct 2012 14:43:35 -0700 Subject: [PATCH] Register/unregister onSharedPreferenceChangeListener in onStart and on Stop --- .../android/apps/mytracks/MapOverlay.java | 8 +- .../apps/mytracks/MarkerListActivity.java | 109 +++++++++++------- .../apps/mytracks/SearchListActivity.java | 56 +++++---- .../apps/mytracks/TrackDetailActivity.java | 23 ++-- .../apps/mytracks/TrackListActivity.java | 12 +- .../maps/DynamicSpeedTrackPathDescriptor.java | 6 +- .../maps/FixedSpeedTrackPathDescriptor.java | 13 +-- .../apps/mytracks/maps/TrackPathFactory.java | 6 +- .../settings/BackupSettingsActivity.java | 43 ++++--- .../settings/StatsSettingsActivity.java | 39 +++++-- 10 files changed, 190 insertions(+), 125 deletions(-) diff --git a/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java b/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java index 439195966..36bc3d927 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java @@ -62,8 +62,10 @@ public class MapOverlay { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key == null - || PreferencesUtils.getKey(context, R.string.track_color_mode_key).equals(key)) { - trackPath = TrackPathFactory.getTrackPath(context); + || key.equals(PreferencesUtils.getKey(context, R.string.track_color_mode_key))) { + trackColorMode = PreferencesUtils.getString( + context, R.string.track_color_mode_key, PreferencesUtils.TRACK_COLOR_MODE_DEFAULT); + trackPath = TrackPathFactory.getTrackPath(context, trackColorMode); } } }; @@ -73,6 +75,8 @@ public class MapOverlay { private final BlockingQueue pendingLocations; private final List waypoints; + private String trackColorMode = PreferencesUtils.TRACK_COLOR_MODE_DEFAULT; + private boolean showEndMarker = true; private TrackPath trackPath; diff --git a/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java index 95f88a218..adb6c550a 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java @@ -51,31 +51,27 @@ import android.widget.ListView; /** * Activity to show a list of markers in a track. - * + * * @author Leif Hendrik Wilden */ public class MarkerListActivity extends AbstractMyTracksActivity { - + public static final String EXTRA_TRACK_ID = "track_id"; private static final String TAG = MarkerListActivity.class.getSimpleName(); - - private static final String[] PROJECTION = new String[] { - WaypointsColumns._ID, - WaypointsColumns.NAME, - WaypointsColumns.DESCRIPTION, - WaypointsColumns.CATEGORY, - WaypointsColumns.TYPE, - WaypointsColumns.TIME}; + + private static final String[] PROJECTION = new String[] { WaypointsColumns._ID, + WaypointsColumns.NAME, WaypointsColumns.DESCRIPTION, WaypointsColumns.CATEGORY, + WaypointsColumns.TYPE, WaypointsColumns.TIME }; // Callback when an item is selected in the contextual action mode - private ContextualActionModeCallback contextualActionModeCallback = - new ContextualActionModeCallback() { - @Override - public boolean onClick(int itemId, int position, long id) { - return handleContextItem(itemId, id); - } - }; + private ContextualActionModeCallback + contextualActionModeCallback = new ContextualActionModeCallback() { + @Override + public boolean onClick(int itemId, int position, long id) { + return handleContextItem(itemId, id); + } + }; /* * Note that sharedPreferenceChangeListener cannot be an anonymous inner @@ -86,14 +82,28 @@ public class MarkerListActivity extends AbstractMyTracksActivity { @Override public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { // Note that the key can be null - if (PreferencesUtils.getKey(MarkerListActivity.this, R.string.recording_track_id_key) - .equals(key) || PreferencesUtils.getKey( - MarkerListActivity.this, R.string.recording_track_paused_key).equals(key)) { + if (key == null || key.equals( + PreferencesUtils.getKey(MarkerListActivity.this, R.string.recording_track_id_key))) { + recordingTrackId = PreferencesUtils.getLong( + MarkerListActivity.this, R.string.recording_track_id_key); + } + if (key == null || key.equals(PreferencesUtils.getKey( + MarkerListActivity.this, R.string.recording_track_paused_key))) { + recordingTrackPaused = PreferencesUtils.getBoolean(MarkerListActivity.this, + R.string.recording_track_paused_key, + PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT); + } + if (key != null) { updateMenu(); } } }; + private SharedPreferences sharedPreferences; + + private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; + private boolean recordingTrackPaused = PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT; + private long trackId = -1; private ResourceCursorAdapter resourceCursorAdapter; @@ -104,23 +114,21 @@ public class MarkerListActivity extends AbstractMyTracksActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + + sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE); trackId = getIntent().getLongExtra(EXTRA_TRACK_ID, -1L); if (trackId == -1L) { Log.d(TAG, "invalid track id"); finish(); return; } - - setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); - getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE) - .registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); ListView listView = (ListView) findViewById(R.id.marker_list); listView.setEmptyView(findViewById(R.id.marker_list_empty)); listView.setOnItemClickListener(new OnItemClickListener() { - @Override + @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Intent intent = IntentUtils.newIntent(MarkerListActivity.this, MarkerDetailActivity.class) .putExtra(MarkerDetailActivity.EXTRA_MARKER_ID, id); @@ -128,7 +136,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity { } }); resourceCursorAdapter = new ResourceCursorAdapter(this, R.layout.list_item, null, 0) { - @Override + @Override public void bindView(View view, Context context, Cursor cursor) { int typeIndex = cursor.getColumnIndex(WaypointsColumns.TYPE); int nameIndex = cursor.getColumnIndex(WaypointsColumns.NAME); @@ -156,28 +164,44 @@ public class MarkerListActivity extends AbstractMyTracksActivity { final long firstWaypointId = MyTracksProviderUtils.Factory.get(this) .getFirstWaypointId(trackId); getSupportLoaderManager().initLoader(0, null, new LoaderCallbacks() { - @Override + @Override public Loader onCreateLoader(int arg0, Bundle arg1) { - return new CursorLoader(MarkerListActivity.this, - WaypointsColumns.CONTENT_URI, - PROJECTION, + return new CursorLoader(MarkerListActivity.this, WaypointsColumns.CONTENT_URI, PROJECTION, WaypointsColumns.TRACKID + "=? AND " + WaypointsColumns._ID + "!=?", - new String[] { String.valueOf(trackId), String.valueOf(firstWaypointId) }, - null); + new String[] { String.valueOf(trackId), String.valueOf(firstWaypointId) }, null); } - @Override + @Override public void onLoadFinished(Loader loader, Cursor cursor) { resourceCursorAdapter.swapCursor(cursor); } - @Override + @Override public void onLoaderReset(Loader loader) { resourceCursorAdapter.swapCursor(null); } }); } + @Override + protected void onStart() { + super.onStart(); + sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + sharedPreferenceChangeListener.onSharedPreferenceChanged(null, null); + } + + @Override + protected void onResume() { + super.onResume(); + updateMenu(); + } + + @Override + protected void onStop() { + super.onStop(); + sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + } + @Override protected int getLayoutResId() { return R.layout.marker_list; @@ -195,11 +219,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity { private void updateMenu() { if (insertMarkerMenuItem != null) { - boolean isRecording = trackId - == PreferencesUtils.getLong(this, R.string.recording_track_id_key); - boolean isPaused = PreferencesUtils.getBoolean(this, R.string.recording_track_paused_key, - PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT); - insertMarkerMenuItem.setVisible(isRecording && !isPaused); + insertMarkerMenuItem.setVisible(trackId == recordingTrackId && !recordingTrackPaused); } } @@ -226,8 +246,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity { @Override public boolean onContextItemSelected(MenuItem item) { - if (handleContextItem( - item.getItemId(), ((AdapterContextMenuInfo) item.getMenuInfo()).id)) { + if (handleContextItem(item.getItemId(), ((AdapterContextMenuInfo) item.getMenuInfo()).id)) { return true; } return super.onContextItemSelected(item); @@ -235,7 +254,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity { /** * Handles a context item selection. - * + * * @param itemId the menu item id * @param markerId the marker id * @return true if handled. @@ -266,7 +285,9 @@ public class MarkerListActivity extends AbstractMyTracksActivity { @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_SEARCH) { - if (ApiAdapterFactory.getApiAdapter().handleSearchKey(searchMenuItem)) { return true; } + if (ApiAdapterFactory.getApiAdapter().handleSearchKey(searchMenuItem)) { + return true; + } } return super.onKeyUp(keyCode, event); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java index 99f755fca..1d489aa14 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java @@ -93,6 +93,11 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { + if (key == null || key.equals( + PreferencesUtils.getKey(SearchListActivity.this, R.string.metric_units_key))) { + metricUnits = PreferencesUtils.getBoolean(SearchListActivity.this, + R.string.metric_units_key, PreferencesUtils.METRIC_UNITS_DEFAULT); + } if (key == null || key.equals( PreferencesUtils.getKey(SearchListActivity.this, R.string.recording_track_id_key))) { recordingTrackId = PreferencesUtils.getLong( @@ -113,45 +118,44 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele // Callback when an item is selected in the contextual action mode private ContextualActionModeCallback contextualActionModeCallback = new ContextualActionModeCallback() { - @Override + @Override public boolean onClick(int itemId, int position, long id) { return handleContextItem(itemId, position); } }; + private SharedPreferences sharedPreferences; private TrackRecordingServiceConnection trackRecordingServiceConnection; private MyTracksProviderUtils myTracksProviderUtils; private SearchEngine searchEngine; private SearchRecentSuggestions searchRecentSuggestions; private MyTracksLocationManager myTracksLocationManager; - private long recordingTrackId; - private boolean recordingTrackPaused; - private boolean metricUnits; private ArrayAdapter> arrayAdapter; + private boolean metricUnits = PreferencesUtils.METRIC_UNITS_DEFAULT; + private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; + private boolean recordingTrackPaused = PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT; + // UI elements private ListView listView; private MenuItem searchMenuItem; - + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); + sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE); trackRecordingServiceConnection = new TrackRecordingServiceConnection(this, null); myTracksProviderUtils = MyTracksProviderUtils.Factory.get(this); searchEngine = new SearchEngine(myTracksProviderUtils); searchRecentSuggestions = SearchEngineProvider.newHelper(this); myTracksLocationManager = new MyTracksLocationManager(this); - SharedPreferences sharedPreferences = getSharedPreferences( - Constants.SETTINGS_NAME, Context.MODE_PRIVATE); - sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); listView = (ListView) findViewById(R.id.search_list); listView.setEmptyView(findViewById(R.id.search_list_empty)); listView.setOnItemClickListener(new OnItemClickListener() { - @Override + @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Map item = arrayAdapter.getItem(position); Long trackId = (Long) item.get(TRACK_ID_FIELD); @@ -169,7 +173,7 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele }); arrayAdapter = new ArrayAdapter>( this, R.layout.list_item, R.id.list_item_name) { - @Override + @Override public View getView(int position, View convertView, android.view.ViewGroup parent) { View view; if (convertView == null) { @@ -204,22 +208,24 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele @Override protected void onStart() { super.onStart(); + sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + sharedPreferenceChangeListener.onSharedPreferenceChanged(null, null); TrackRecordingServiceConnectionUtils.startConnection(this, trackRecordingServiceConnection); } - - @Override - protected void onResume() { - super.onResume(); - metricUnits = PreferencesUtils.getBoolean( - this, R.string.metric_units_key, PreferencesUtils.METRIC_UNITS_DEFAULT); - } @Override - protected void onStop() { - super.onStop(); - trackRecordingServiceConnection.unbind(); + protected void onResume() { + super.onResume(); + arrayAdapter.notifyDataSetChanged(); } + @Override + protected void onStop() { + super.onStop(); + sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + trackRecordingServiceConnection.unbind(); + } + @Override protected void onDestroy() { super.onDestroy(); @@ -266,7 +272,7 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele AdapterContextMenuInfo adapterContextMenuInfo = (AdapterContextMenuInfo) item.getMenuInfo(); if (handleContextItem(item.getItemId(), adapterContextMenuInfo.position)) { return true; - } + } return super.onContextItemSelected(item); } @@ -387,8 +393,8 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele */ private List> prepareResultsforDisplay( Collection scoredResults) { - ArrayList> output = new ArrayList>(scoredResults - .size()); + ArrayList> output = new ArrayList>( + scoredResults.size()); for (ScoredResult result : scoredResults) { Map resultMap = new HashMap(); if (result.track != null) { @@ -423,7 +429,7 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele boolean statistics = waypoint.getType() == Waypoint.TYPE_STATISTICS; long time = waypoint.getLocation().getTime(); - + resultMap.put(IS_RECORDING_FIELD, false); resultMap.put(IS_PAUSED_FIELD, true); resultMap.put(ICON_ID_FIELD, statistics ? R.drawable.yellow_pushpin : R.drawable.blue_pushpin); diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java index e8619b649..13e54fd28 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java @@ -75,6 +75,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del private static final String CURRENT_TAB_TAG_KEY = "current_tab_tag_key"; // The following are set in onCreate + private SharedPreferences sharedPreferences; private TrackRecordingServiceConnection trackRecordingServiceConnection; private TrackDataHub trackDataHub; private TabHost tabHost; @@ -86,8 +87,8 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del private long markerId; // Preferences - private long recordingTrackId; - private boolean recordingTrackPaused; + private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; + private boolean recordingTrackPaused = PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT; private MenuItem insertMarkerMenuItem; private MenuItem playMenuItem; @@ -173,10 +174,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del super.onCreate(savedInstanceState); handleIntent(getIntent()); - SharedPreferences sharedPreferences = getSharedPreferences( - Constants.SETTINGS_NAME, Context.MODE_PRIVATE); - sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); + sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE); trackRecordingServiceConnection = new TrackRecordingServiceConnection( this, bindChangedCallback); @@ -207,6 +205,10 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del @Override protected void onStart() { super.onStart(); + + sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + sharedPreferenceChangeListener.onSharedPreferenceChanged(null, null); + TrackRecordingServiceConnectionUtils.startConnection(this, trackRecordingServiceConnection); trackDataHub.start(); AnalyticsUtils.sendPageViews(this, "/page/track_detail"); @@ -216,9 +218,13 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del protected void onResume() { super.onResume(); trackDataHub.loadTrack(trackId); - trackController.update(trackId == recordingTrackId, recordingTrackPaused); + + // Update UI + boolean isRecording = trackId == recordingTrackId; + updateMenuItems(isRecording, recordingTrackPaused); + trackController.update(isRecording, recordingTrackPaused); } - + @Override protected void onPause() { super.onPause(); @@ -228,6 +234,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del @Override protected void onStop() { super.onStop(); + sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); trackRecordingServiceConnection.unbind(); trackDataHub.stop(); AnalyticsUtils.dispatch(); diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java index e22248082..5f7d32a9f 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -426,9 +426,6 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac trackDataHub.start(); - // Update track data hub - handleStartGps(); - AnalyticsUtils.sendPageViews(this, "/page/track_list"); } @@ -436,6 +433,9 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac protected void onResume() { super.onResume(); + // Update track data hub + handleStartGps(); + // Update UI boolean isRecording = recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; updateMenuItems(isRecording); @@ -454,6 +454,9 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac protected void onPause() { super.onPause(); + // Update track data hub + trackDataHub.unregisterTrackDataListener(trackDataListener); + // Update UI trackController.stop(); } @@ -467,9 +470,6 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac trackRecordingServiceConnection.unbind(); - // Update track data hub - trackDataHub.unregisterTrackDataListener(trackDataListener); - trackDataHub.stop(); AnalyticsUtils.dispatch(); diff --git a/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java b/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java index cc26c7e35..b9dae800b 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java +++ b/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java @@ -43,8 +43,7 @@ public class DynamicSpeedTrackPathDescriptor implements TrackPathDescriptor { sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if (PreferencesUtils.getKey(context, R.string.track_color_mode_percentage_key) - .equals(key)) { + if (key == null || key.equals(PreferencesUtils.getKey(context, R.string.track_color_mode_percentage_key))) { speedMargin = PreferencesUtils.getInt(context, R.string.track_color_mode_percentage_key, PreferencesUtils.TRACK_COLOR_MODE_PERCENTAGE_DEFAULT); } @@ -62,10 +61,9 @@ public class DynamicSpeedTrackPathDescriptor implements TrackPathDescriptor { public DynamicSpeedTrackPathDescriptor(Context context) { this.context = context; - speedMargin = PreferencesUtils.getInt(context, R.string.track_color_mode_percentage_key, - PreferencesUtils.TRACK_COLOR_MODE_PERCENTAGE_DEFAULT); context.getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE) .registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + sharedPreferenceChangeListener.onSharedPreferenceChanged(null, null); } @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/maps/FixedSpeedTrackPathDescriptor.java b/MyTracks/src/com/google/android/apps/mytracks/maps/FixedSpeedTrackPathDescriptor.java index a07736306..733195d8a 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/maps/FixedSpeedTrackPathDescriptor.java +++ b/MyTracks/src/com/google/android/apps/mytracks/maps/FixedSpeedTrackPathDescriptor.java @@ -35,11 +35,13 @@ public class FixedSpeedTrackPathDescriptor implements TrackPathDescriptor { sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if (PreferencesUtils.getKey(context, R.string.track_color_mode_slow_key).equals(key)) { + if (key == null + || key.equals(PreferencesUtils.getKey(context, R.string.track_color_mode_slow_key))) { slowSpeed = PreferencesUtils.getInt(context, R.string.track_color_mode_slow_key, PreferencesUtils.TRACK_COLOR_MODE_SLOW_DEFAULT); - } else if (PreferencesUtils.getKey(context, R.string.track_color_mode_medium_key) - .equals(key)) { + } + if (key == null || key.equals( + PreferencesUtils.getKey(context, R.string.track_color_mode_medium_key))) { normalSpeed = PreferencesUtils.getInt(context, R.string.track_color_mode_medium_key, PreferencesUtils.TRACK_COLOR_MODE_MEDIUM_DEFAULT); } @@ -53,12 +55,9 @@ public class FixedSpeedTrackPathDescriptor implements TrackPathDescriptor { public FixedSpeedTrackPathDescriptor(Context context) { this.context = context; - slowSpeed = PreferencesUtils.getInt(context, R.string.track_color_mode_slow_key, - PreferencesUtils.TRACK_COLOR_MODE_SLOW_DEFAULT); - normalSpeed = PreferencesUtils.getInt(context, R.string.track_color_mode_medium_key, - PreferencesUtils.TRACK_COLOR_MODE_MEDIUM_DEFAULT); context.getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE) .registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + sharedPreferenceChangeListener.onSharedPreferenceChanged(null, null); } @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/maps/TrackPathFactory.java b/MyTracks/src/com/google/android/apps/mytracks/maps/TrackPathFactory.java index 15a16a092..11421c828 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/maps/TrackPathFactory.java +++ b/MyTracks/src/com/google/android/apps/mytracks/maps/TrackPathFactory.java @@ -16,7 +16,6 @@ package com.google.android.apps.mytracks.maps; -import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.maps.mytracks.R; import android.content.Context; @@ -35,10 +34,7 @@ public class TrackPathFactory { * * @param context the context */ - public static TrackPath getTrackPath(Context context) { - String trackColorMode = PreferencesUtils.getString( - context, R.string.track_color_mode_key, PreferencesUtils.TRACK_COLOR_MODE_DEFAULT); - + public static TrackPath getTrackPath(Context context, String trackColorMode) { if (context.getString(R.string.settings_map_track_color_mode_dynamic_value) .equals(trackColorMode)) { return new MultiColorTrackPath(context, new DynamicSpeedTrackPathDescriptor(context)); diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/BackupSettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/BackupSettingsActivity.java index 416ce4978..3f9d1cd16 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/settings/BackupSettingsActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/settings/BackupSettingsActivity.java @@ -43,8 +43,11 @@ public class BackupSettingsActivity extends AbstractSettingsActivity { private static final int DIALOG_CONFIRM_RESTORE_ID = 0; - Preference backupPreference; - Preference restorePreference; + private SharedPreferences sharedPreferences; + private Preference backupPreference; + private Preference restorePreference; + + private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; /* * Note that sharedPreferenceChangeListenr cannot be an anonymous inner class. @@ -52,11 +55,14 @@ public class BackupSettingsActivity extends AbstractSettingsActivity { */ private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() { - @Override + @Override public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { - // Note that key can be null - if (PreferencesUtils.getKey(BackupSettingsActivity.this, R.string.recording_track_id_key) - .equals(key)) { + if (key == null || key.equals(PreferencesUtils.getKey( + BackupSettingsActivity.this, R.string.recording_track_id_key))) { + recordingTrackId = PreferencesUtils.getLong( + BackupSettingsActivity.this, R.string.recording_track_id_key); + } + if (key != null) { updateUi(); } } @@ -66,8 +72,7 @@ public class BackupSettingsActivity extends AbstractSettingsActivity { @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); - getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE) - .registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE); addPreferencesFromResource(R.xml.backup_settings); backupPreference = findPreference(getString(R.string.settings_backup_now_key)); @@ -96,7 +101,7 @@ public class BackupSettingsActivity extends AbstractSettingsActivity { } return DialogUtils.createConfirmationDialog(this, R.string.settings_backup_restore_confirm_message, new DialogInterface.OnClickListener() { - @Override + @Override public void onClick(DialogInterface dialog, int which) { Intent intent = IntentUtils.newIntent( BackupSettingsActivity.this, RestoreChooserActivity.class); @@ -105,22 +110,34 @@ public class BackupSettingsActivity extends AbstractSettingsActivity { }); } + @Override + protected void onStart() { + super.onStart(); + sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + sharedPreferenceChangeListener.onSharedPreferenceChanged(null, null); + } + @Override protected void onResume() { super.onResume(); updateUi(); } + @Override + protected void onStop() { + super.onStop(); + sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + } + /** * Updates the UI based on the recording state. */ private void updateUi() { - boolean isRecording = PreferencesUtils.getLong(this, R.string.recording_track_id_key) - != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; + boolean isRecording = recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; backupPreference.setEnabled(!isRecording); restorePreference.setEnabled(!isRecording); - backupPreference.setSummary(isRecording ? R.string.settings_not_while_recording - : R.string.settings_backup_now_summary); + backupPreference.setSummary( + isRecording ? R.string.settings_not_while_recording : R.string.settings_backup_now_summary); restorePreference.setSummary(isRecording ? R.string.settings_not_while_recording : R.string.settings_backup_restore_summary); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/StatsSettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/StatsSettingsActivity.java index 89e5214f7..299478c74 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/settings/StatsSettingsActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/settings/StatsSettingsActivity.java @@ -41,22 +41,33 @@ public class StatsSettingsActivity extends AbstractSettingsActivity { sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { - // Note that key can be null - if (PreferencesUtils.getKey(StatsSettingsActivity.this, R.string.metric_units_key) - .equals(key)) { + if (key == null || key.equals( + PreferencesUtils.getKey(StatsSettingsActivity.this, R.string.metric_units_key))) { + metricUnits = PreferencesUtils.getBoolean(StatsSettingsActivity.this, + R.string.metric_units_key, PreferencesUtils.METRIC_UNITS_DEFAULT); + } + if (key != null) { updateUi(); } } }; + private SharedPreferences sharedPreferences; + private boolean metricUnits = PreferencesUtils.METRIC_UNITS_DEFAULT; + @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); addPreferencesFromResource(R.xml.stats_settings); + sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE); + } - getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE) - .registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + @Override + protected void onStart() { + super.onStart(); + sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + sharedPreferenceChangeListener.onSharedPreferenceChanged(null, null); } @Override @@ -65,15 +76,21 @@ public class StatsSettingsActivity extends AbstractSettingsActivity { updateUi(); } + @Override + protected void onStop() { + super.onStop(); + sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + } + @SuppressWarnings("deprecation") private void updateUi() { CheckBoxPreference reportSpeedCheckBoxPreference = (CheckBoxPreference) findPreference( getString(R.string.report_speed_key)); - boolean metric = PreferencesUtils.getBoolean( - this, R.string.metric_units_key, PreferencesUtils.METRIC_UNITS_DEFAULT); - reportSpeedCheckBoxPreference.setSummaryOn(metric ? getString(R.string.description_speed_metric) - : getString(R.string.description_speed_imperial)); - reportSpeedCheckBoxPreference.setSummaryOff(metric ? getString(R.string.description_pace_metric) - : getString(R.string.description_pace_imperial)); + reportSpeedCheckBoxPreference.setSummaryOn( + metricUnits ? getString(R.string.description_speed_metric) + : getString(R.string.description_speed_imperial)); + reportSpeedCheckBoxPreference.setSummaryOff( + metricUnits ? getString(R.string.description_pace_metric) + : getString(R.string.description_pace_imperial)); } }