diff --git a/MyTracks/src/com/google/android/apps/mytracks/MyTracksMap.java b/MyTracks/src/com/google/android/apps/mytracks/MyTracksMap.java index c60e9888e..6a03b04bf 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MyTracksMap.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MyTracksMap.java @@ -866,28 +866,36 @@ public class MyTracksMap extends MapActivity } @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, - String key) { + public void onSharedPreferenceChanged( + final SharedPreferences sharedPreferences, + final String key) { if (key != null) { - if (key.equals(getString(R.string.min_required_accuracy_key))) { - minRequiredAccuracy = sharedPreferences.getInt( - getString(R.string.min_required_accuracy_key), - MyTracksSettings.DEFAULT_MIN_REQUIRED_ACCURACY); - } else if (key.equals(getString(R.string.selected_track_key))) { - long selectedTrackId = - sharedPreferences.getLong(getString(R.string.selected_track_key), - -1); - setSelectedTrack(selectedTrackId); - } else if (key.equals(getString(R.string.recording_track_key))) { - recordingTrackId = - sharedPreferences.getLong(getString(R.string.recording_track_key), - -1); - if (selectedTrack != null) { - mapOverlay.setShowEndMarker( - selectedTrack.getId() != recordingTrackId); - mapView.postInvalidate(); + uiHandler.post(new Runnable() { + @Override + public void run() { + if (key.equals(getString(R.string.min_required_accuracy_key))) { + minRequiredAccuracy = sharedPreferences.getInt( + getString(R.string.min_required_accuracy_key), + MyTracksSettings.DEFAULT_MIN_REQUIRED_ACCURACY); + } else if (key.equals(getString(R.string.selected_track_key))) { + long selectedTrackId = + sharedPreferences.getLong( + getString(R.string.selected_track_key), + -1); + setSelectedTrack(selectedTrackId); + } else if (key.equals(getString(R.string.recording_track_key))) { + recordingTrackId = + sharedPreferences.getLong( + getString(R.string.recording_track_key), + -1); + if (selectedTrack != null) { + mapOverlay.setShowEndMarker( + selectedTrack.getId() != recordingTrackId); + mapView.postInvalidate(); + } + } } - } + }); } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/StatsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/StatsActivity.java index a0deb9c4a..e3136e71e 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/StatsActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/StatsActivity.java @@ -216,43 +216,51 @@ public class StatsActivity extends Activity @Override public void onSharedPreferenceChanged( - SharedPreferences sharedPreferences, String key) { + final SharedPreferences sharedPreferences, final String key) { Log.d(MyTracksConstants.TAG, "StatsActivity: onSharedPreferences changed " + key); if (key != null) { - if (key.equals(getString(R.string.selected_track_key))) { - selectedTrackId = - sharedPreferences.getLong(getString(R.string.selected_track_key), - -1); - checkLiveTrack(); - restoreStats(); - updateLocation(null); - } else if (key.equals(getString(R.string.recording_track_key))) { - recordingTrackId = - sharedPreferences.getLong(getString(R.string.recording_track_key), - -1); - checkLiveTrack(); - restoreStats(); - updateLocation(null); - } else if (key.equals(getString(R.string.metric_units_key))) { - metricUnits = - sharedPreferences.getBoolean( - getString(R.string.metric_units_key), true); - utils.setMetricUnits(metricUnits); - utils.updateUnits(); - restoreStats(); - } else if (key.equals(getString(R.string.report_speed_key))) { - displaySpeed = - sharedPreferences.getBoolean(getString(R.string.report_speed_key), - true); - utils.setReportSpeed(displaySpeed); - utils.updateUnits(); - utils.setSpeedLabel( - R.id.speed_label, R.string.speed, R.string.pace_label); - Log.w(MyTracksConstants.TAG, "Setting speed labels"); - utils.setSpeedLabels(); - restoreStats(); - } + runOnUiThread(new Runnable() { + @Override + public void run() { + if (key.equals(getString(R.string.selected_track_key))) { + selectedTrackId = + sharedPreferences.getLong( + getString(R.string.selected_track_key), + -1); + checkLiveTrack(); + restoreStats(); + updateLocation(null); + } else if (key.equals(getString(R.string.recording_track_key))) { + recordingTrackId = + sharedPreferences.getLong( + getString(R.string.recording_track_key), + -1); + checkLiveTrack(); + restoreStats(); + updateLocation(null); + } else if (key.equals(getString(R.string.metric_units_key))) { + metricUnits = + sharedPreferences.getBoolean( + getString(R.string.metric_units_key), true); + utils.setMetricUnits(metricUnits); + utils.updateUnits(); + restoreStats(); + } else if (key.equals(getString(R.string.report_speed_key))) { + displaySpeed = + sharedPreferences.getBoolean( + getString(R.string.report_speed_key), + true); + utils.setReportSpeed(displaySpeed); + utils.updateUnits(); + utils.setSpeedLabel( + R.id.speed_label, R.string.speed, R.string.pace_label); + Log.w(MyTracksConstants.TAG, "Setting speed labels"); + utils.setSpeedLabels(); + restoreStats(); + } + } + }); } } @@ -353,8 +361,13 @@ public class StatsActivity extends Activity } track = providerUtils.getTrack(selectedTrackId); + if (track == null || track.getStatistics() == null) { + utils.setAllToUnknown(); + return; + } + startTime = track.getStatistics().getStartTime(); - if(!selectedTrackIsRecording()) { + if (!selectedTrackIsRecording()) { utils.setTime(R.id.total_time_register, track.getStatistics().getTotalTime()); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java index 65eebf418..026cd6b56 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java @@ -36,7 +36,6 @@ import android.app.Service; import android.content.ContentValues; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; import android.database.Cursor; import android.database.sqlite.SQLiteException; import android.location.Location;