Register/unregister onSharedPreferenceChangeListener in onStart and on Stop

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