forked from upstream-mirrors/OpenTracks
Update track list activity lifecycle to fix bug with sharedPreferenceChangeListener needing to update the UI
This commit is contained in:
@@ -87,7 +87,6 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
|
|
||||||
private static final String TAG = TrackListActivity.class.getSimpleName();
|
private static final String TAG = TrackListActivity.class.getSimpleName();
|
||||||
private static final String START_GPS_KEY = "start_gps_key";
|
private static final String START_GPS_KEY = "start_gps_key";
|
||||||
|
|
||||||
private static final String[] PROJECTION = new String[] { TracksColumns._ID, TracksColumns.NAME,
|
private static final String[] PROJECTION = new String[] { TracksColumns._ID, TracksColumns.NAME,
|
||||||
TracksColumns.DESCRIPTION, TracksColumns.CATEGORY, TracksColumns.STARTTIME,
|
TracksColumns.DESCRIPTION, TracksColumns.CATEGORY, TracksColumns.STARTTIME,
|
||||||
TracksColumns.TOTALDISTANCE, TracksColumns.TOTALTIME, TracksColumns.ICON };
|
TracksColumns.TOTALDISTANCE, TracksColumns.TOTALTIME, TracksColumns.ICON };
|
||||||
@@ -96,8 +95,10 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
private final Runnable bindChangedCallback = new Runnable() {
|
private final Runnable bindChangedCallback = new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// After binding changes (is available), update the total time in
|
/*
|
||||||
// trackController.
|
* After binding changes (e.g., becomes available), update the total time
|
||||||
|
* in trackController.
|
||||||
|
*/
|
||||||
runOnUiThread(new Runnable() {
|
runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -116,10 +117,10 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
recordingTrackId = service.startNewTrack();
|
long trackId = service.startNewTrack();
|
||||||
startNewRecording = false;
|
startNewRecording = false;
|
||||||
Intent intent = IntentUtils.newIntent(TrackListActivity.this, TrackDetailActivity.class)
|
Intent intent = IntentUtils.newIntent(TrackListActivity.this, TrackDetailActivity.class)
|
||||||
.putExtra(TrackDetailActivity.EXTRA_TRACK_ID, recordingTrackId);
|
.putExtra(TrackDetailActivity.EXTRA_TRACK_ID, trackId);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
TrackListActivity.this, R.string.track_list_record_success, Toast.LENGTH_SHORT).show();
|
TrackListActivity.this, R.string.track_list_record_success, Toast.LENGTH_SHORT).show();
|
||||||
@@ -308,6 +309,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
};
|
};
|
||||||
|
|
||||||
// The following are set in onCreate
|
// The following are set in onCreate
|
||||||
|
private SharedPreferences sharedPreferences;
|
||||||
private TrackRecordingServiceConnection trackRecordingServiceConnection;
|
private TrackRecordingServiceConnection trackRecordingServiceConnection;
|
||||||
private TrackController trackController;
|
private TrackController trackController;
|
||||||
private ListView listView;
|
private ListView listView;
|
||||||
@@ -315,9 +317,9 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
private TrackDataHub trackDataHub;
|
private TrackDataHub trackDataHub;
|
||||||
|
|
||||||
// Preferences
|
// Preferences
|
||||||
private boolean metricUnits;
|
private boolean metricUnits = PreferencesUtils.METRIC_UNITS_DEFAULT;
|
||||||
private long recordingTrackId;
|
private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
|
||||||
private boolean recordingTrackPaused;
|
private boolean recordingTrackPaused = PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT;
|
||||||
|
|
||||||
// Menu items
|
// Menu items
|
||||||
private MenuItem searchMenuItem;
|
private MenuItem searchMenuItem;
|
||||||
@@ -336,14 +338,11 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
|
setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
|
||||||
setContentView(R.layout.track_list);
|
setContentView(R.layout.track_list);
|
||||||
|
|
||||||
|
sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
|
||||||
|
|
||||||
trackRecordingServiceConnection = new TrackRecordingServiceConnection(
|
trackRecordingServiceConnection = new TrackRecordingServiceConnection(
|
||||||
this, bindChangedCallback);
|
this, bindChangedCallback);
|
||||||
|
|
||||||
SharedPreferences sharedPreferences = getSharedPreferences(
|
|
||||||
Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
|
|
||||||
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
|
||||||
sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null);
|
|
||||||
|
|
||||||
trackController = new TrackController(
|
trackController = new TrackController(
|
||||||
this, trackRecordingServiceConnection, true, recordListener, stopListener);
|
this, trackRecordingServiceConnection, true, recordListener, stopListener);
|
||||||
|
|
||||||
@@ -415,25 +414,35 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
@Override
|
@Override
|
||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
trackDataHub.start();
|
|
||||||
AnalyticsUtils.sendPageViews(this, "/page/track_list");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
// Register shared preferences listener
|
||||||
protected void onPause() {
|
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
||||||
super.onPause();
|
|
||||||
trackController.stop();
|
// Update shared preferences
|
||||||
trackDataHub.unregisterTrackDataListener(trackDataListener);
|
sharedPreferenceChangeListener.onSharedPreferenceChanged(null, null);
|
||||||
|
|
||||||
|
// Update track recording service connection
|
||||||
|
TrackRecordingServiceConnectionUtils.resumeConnection(this, trackRecordingServiceConnection);
|
||||||
|
|
||||||
|
trackDataHub.start();
|
||||||
|
|
||||||
|
// Update track data hub
|
||||||
|
handleStartGps();
|
||||||
|
|
||||||
|
AnalyticsUtils.sendPageViews(this, "/page/track_list");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
TrackRecordingServiceConnectionUtils.resumeConnection(this, trackRecordingServiceConnection);
|
|
||||||
trackController.update(
|
|
||||||
recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT, recordingTrackPaused);
|
|
||||||
handleStartGps();
|
|
||||||
|
|
||||||
|
// Update UI
|
||||||
|
boolean isRecording = recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
|
||||||
|
updateMenuItems(isRecording);
|
||||||
|
resourceCursorAdapter.notifyDataSetChanged();
|
||||||
|
trackController.update(isRecording, recordingTrackPaused);
|
||||||
|
|
||||||
|
// Check Google Play Services
|
||||||
int code = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
|
int code = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
|
||||||
if (code != ConnectionResult.SUCCESS) {
|
if (code != ConnectionResult.SUCCESS) {
|
||||||
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(code, this, 0);
|
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(code, this, 0);
|
||||||
@@ -442,22 +451,34 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSaveInstanceState(Bundle outState) {
|
protected void onPause() {
|
||||||
super.onSaveInstanceState(outState);
|
super.onPause();
|
||||||
outState.putBoolean(START_GPS_KEY, startGps);
|
|
||||||
|
// Update UI
|
||||||
|
trackController.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStop() {
|
protected void onStop() {
|
||||||
super.onStop();
|
super.onStop();
|
||||||
|
|
||||||
|
// Unregister shared preferences listener
|
||||||
|
sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
||||||
|
|
||||||
|
trackRecordingServiceConnection.unbind();
|
||||||
|
|
||||||
|
// Update track data hub
|
||||||
|
trackDataHub.unregisterTrackDataListener(trackDataListener);
|
||||||
|
|
||||||
trackDataHub.stop();
|
trackDataHub.stop();
|
||||||
|
|
||||||
AnalyticsUtils.dispatch();
|
AnalyticsUtils.dispatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
super.onDestroy();
|
super.onSaveInstanceState(outState);
|
||||||
trackRecordingServiceConnection.unbind();
|
outState.putBoolean(START_GPS_KEY, startGps);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -606,6 +627,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
if (startGpsMenuItem != null) {
|
if (startGpsMenuItem != null) {
|
||||||
startGpsMenuItem.setIcon(startGps ? R.drawable.menu_stop_gps : R.drawable.menu_start_gps);
|
startGpsMenuItem.setIcon(startGps ? R.drawable.menu_stop_gps : R.drawable.menu_start_gps);
|
||||||
startGpsMenuItem.setTitle(startGps ? R.string.menu_stop_gps : R.string.menu_start_gps);
|
startGpsMenuItem.setTitle(startGps ? R.string.menu_stop_gps : R.string.menu_start_gps);
|
||||||
|
startGpsMenuItem.setVisible(!isRecording);
|
||||||
}
|
}
|
||||||
if (importMenuItem != null) {
|
if (importMenuItem != null) {
|
||||||
importMenuItem.setVisible(!isRecording);
|
importMenuItem.setVisible(!isRecording);
|
||||||
|
|||||||
Reference in New Issue
Block a user