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
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<CachedLocation> pendingLocations;
private final List<Waypoint> waypoints;
private String trackColorMode = PreferencesUtils.TRACK_COLOR_MODE_DEFAULT;
private boolean showEndMarker = true;
private TrackPath trackPath;
@@ -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<Cursor>() {
@Override
@Override
public Loader<Cursor> 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<Cursor> loader, Cursor cursor) {
resourceCursorAdapter.swapCursor(cursor);
}
@Override
@Override
public void onLoaderReset(Loader<Cursor> 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);
}
@@ -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<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
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<String, Object> 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<Map<String, Object>>(
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<Map<String, Object>> prepareResultsforDisplay(
Collection<ScoredResult> scoredResults) {
ArrayList<Map<String, Object>> output = new ArrayList<Map<String, Object>>(scoredResults
.size());
ArrayList<Map<String, Object>> output = new ArrayList<Map<String, Object>>(
scoredResults.size());
for (ScoredResult result : scoredResults) {
Map<String, Object> resultMap = new HashMap<String, Object>();
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);
@@ -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();
@@ -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();
@@ -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
@@ -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
@@ -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));
@@ -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);
}
@@ -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));
}
}