diff --git a/MyTracks/src/com/google/android/apps/mytracks/MyTracksApplication.java b/MyTracks/src/com/google/android/apps/mytracks/MyTracksApplication.java index f32f055e4..2788cd88d 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MyTracksApplication.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MyTracksApplication.java @@ -15,7 +15,6 @@ */ package com.google.android.apps.mytracks; -import com.google.android.apps.mytracks.content.TrackDataHub; import com.google.android.apps.mytracks.services.RemoveTempFilesService; import com.google.android.apps.mytracks.util.AnalyticsUtils; import com.google.android.apps.mytracks.util.ApiAdapterFactory; @@ -31,8 +30,6 @@ import android.content.Intent; */ public class MyTracksApplication extends Application { - private TrackDataHub trackDataHub; - @Override public void onCreate() { super.onCreate(); @@ -43,21 +40,4 @@ public class MyTracksApplication extends Application { Intent intent = new Intent(this, RemoveTempFilesService.class); startService(intent); } - - /** - * Gets the application's TrackDataHub. Note: use synchronized to make sure - * only one instance is created per application. - */ - public synchronized TrackDataHub getTrackDataHub() { - if (trackDataHub == null) { - /* - * TODO: One TrackDataHub per TrackDetailActivity. Match start/stop - * TrackDataHub with TrackDetailActivity lifecycle. Call - * TrackDataHub.loadTrack when TrackDetailActivity resumes. - */ - trackDataHub = TrackDataHub.newInstance(getApplicationContext()); - trackDataHub.start(); - } - return trackDataHub; - } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java index f8b6fe38e..a476ec7fd 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java @@ -137,8 +137,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE) .registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); trackRecordingServiceConnection = new TrackRecordingServiceConnection(this, null); - trackDataHub = ((MyTracksApplication) getApplication()).getTrackDataHub(); - trackDataHub.loadTrack(trackId); + trackDataHub = TrackDataHub.newInstance(this); mapViewContainer = getLayoutInflater().inflate(R.layout.map, null); ApiAdapterFactory.getApiAdapter().disableHardwareAccelerated(mapViewContainer); @@ -167,19 +166,19 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del public void onNewIntent(Intent intent) { setIntent(intent); handleIntent(intent); - trackDataHub.loadTrack(trackId); showMarker(); } @Override protected void onStart() { super.onStart(); - //trackDataHub.start(); + trackDataHub.start(); } @Override protected void onResume() { super.onResume(); + trackDataHub.loadTrack(trackId); TrackRecordingServiceConnectionUtils.resume(this, trackRecordingServiceConnection); setTitle(trackId == PreferencesUtils.getLong(this, R.string.recording_track_id_key)); } @@ -193,7 +192,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del @Override protected void onStop() { super.onStop(); - //trackDataHub.stop(); + trackDataHub.stop(); } @Override @@ -350,12 +349,19 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del } /** - * @return the mapViewContainer + * Gets the map view container. */ public View getMapViewContainer() { return mapViewContainer; } + /** + * Gets the {@link TrackDataHub}. + */ + public TrackDataHub getTrackDataHub() { + return trackDataHub; + } + /** * Handles the data in the intent. */ diff --git a/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataHub.java b/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataHub.java index a65a993a0..dcd2189fc 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataHub.java +++ b/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataHub.java @@ -316,7 +316,12 @@ public class TrackDataHub implements DataSourceListener { } } } else if (PreferencesUtils.getKey(context, R.string.selected_track_id_key).equals(key)) { - selectedTrackId = PreferencesUtils.getLong(context, R.string.selected_track_id_key); + long trackId = PreferencesUtils.getLong(context, R.string.selected_track_id_key); + if (trackId == selectedTrackId) { + Log.i(TAG, "Not reloading track " + trackId); + return; + } + selectedTrackId = trackId; loadDataForAll(); } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChartFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChartFragment.java index 7ba531a68..a7964af05 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChartFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChartFragment.java @@ -18,7 +18,7 @@ package com.google.android.apps.mytracks.fragments; import com.google.android.apps.mytracks.ChartView; import com.google.android.apps.mytracks.Constants; -import com.google.android.apps.mytracks.MyTracksApplication; +import com.google.android.apps.mytracks.TrackDetailActivity; import com.google.android.apps.mytracks.content.MyTracksLocation; import com.google.android.apps.mytracks.content.Sensor; import com.google.android.apps.mytracks.content.Sensor.SensorDataSet; @@ -358,7 +358,7 @@ public class ChartFragment extends Fragment implements TrackDataListener { * accessed by multiple threads. */ private synchronized void resumeTrackDataHub() { - trackDataHub = ((MyTracksApplication) getActivity().getApplication()).getTrackDataHub(); + trackDataHub = ((TrackDetailActivity) getActivity()).getTrackDataHub(); trackDataHub.registerTrackDataListener(this, EnumSet.of( TrackDataType.SELECTED_TRACK, TrackDataType.TRACKS_TABLE, diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/MapFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/MapFragment.java index 8557c6fdb..02dbc55f6 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/MapFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/MapFragment.java @@ -17,14 +17,13 @@ package com.google.android.apps.mytracks.fragments; import com.google.android.apps.mytracks.MapOverlay; -import com.google.android.apps.mytracks.MyTracksApplication; import com.google.android.apps.mytracks.TrackDetailActivity; -import com.google.android.apps.mytracks.content.TrackDataType; import com.google.android.apps.mytracks.content.MyTracksProviderUtils; import com.google.android.apps.mytracks.content.MyTracksProviderUtils.Factory; import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.TrackDataHub; import com.google.android.apps.mytracks.content.TrackDataListener; +import com.google.android.apps.mytracks.content.TrackDataType; import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.util.ApiAdapterFactory; @@ -418,7 +417,7 @@ public class MapFragment extends Fragment * accessed by multiple threads. */ private synchronized void resumeTrackDataHub() { - trackDataHub = ((MyTracksApplication) getActivity().getApplication()).getTrackDataHub(); + trackDataHub = ((TrackDetailActivity) getActivity()).getTrackDataHub(); trackDataHub.registerTrackDataListener(this, EnumSet.of( TrackDataType.SELECTED_TRACK, TrackDataType.WAYPOINTS_TABLE, diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java index 554362342..580ed784f 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java @@ -16,7 +16,7 @@ package com.google.android.apps.mytracks.fragments; -import com.google.android.apps.mytracks.MyTracksApplication; +import com.google.android.apps.mytracks.TrackDetailActivity; import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.TrackDataHub; import com.google.android.apps.mytracks.content.TrackDataListener; @@ -255,7 +255,7 @@ public class StatsFragment extends Fragment implements TrackDataListener { * be accessed by multiple threads. */ private synchronized void resumeTrackDataHub() { - trackDataHub = ((MyTracksApplication) getActivity().getApplication()).getTrackDataHub(); + trackDataHub = ((TrackDetailActivity) getActivity()).getTrackDataHub(); trackDataHub.registerTrackDataListener(this, EnumSet.of( TrackDataType.SELECTED_TRACK, TrackDataType.TRACKS_TABLE,