From fbb9d21e73e2c68a6a56617d8756058d2ead640f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n?= Date: Sat, 26 Sep 2020 16:47:51 +0200 Subject: [PATCH] TrackRecordingActivity keeps Track.Id value instead of track object. Every time the track is needed it gets it. Fixes #435. --- .../opentracks/TrackRecordedActivity.java | 32 +++++++++---------- .../fragments/StatisticsRecordedFragment.java | 9 +++--- .../opentracks/util/TrackUtils.java | 9 ++++-- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java index 97cb81b02..b6183a732 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java @@ -55,11 +55,11 @@ import de.dennisguse.opentracks.util.TrackUtils; */ public class TrackRecordedActivity extends AbstractListActivity implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller, ConfirmDeleteDialogFragment.ConfirmDeleteCaller, TrackActivityDataHubInterface { + private static final String TAG = TrackRecordedActivity.class.getSimpleName(); + public static final String EXTRA_TRACK_ID = "track_id"; public static final String EXTRA_MARKER_ID = "marker_id"; - private static final String TAG = TrackRecordedActivity.class.getSimpleName(); - private static final String CURRENT_TAB_TAG_KEY = "current_tab_tag_key"; // The following are set in onCreate. @@ -67,7 +67,7 @@ public class TrackRecordedActivity extends AbstractListActivity implements Choos private TrackDataHub trackDataHub; private ViewPager pager; - private Track track; + private Track.Id trackId; @Override protected void onCreate(Bundle savedInstanceState) { @@ -100,8 +100,8 @@ public class TrackRecordedActivity extends AbstractListActivity implements Choos // Update UI this.invalidateOptionsMenu(); - if (track != null) { - trackDataHub.loadTrack(track.getId()); + if (trackId != null) { + trackDataHub.loadTrack(trackId); } } @@ -139,6 +139,7 @@ public class TrackRecordedActivity extends AbstractListActivity implements Choos public boolean onPrepareOptionsMenu(Menu menu) { menu.findItem(R.id.track_detail_markers).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); menu.findItem(R.id.track_detail_resume_track).setVisible(!PreferencesUtils.isRecording(this)); + Track track = contentProviderUtils.getTrack(trackId); setTitle(track != null ? track.getName() : ""); return super.onPrepareOptionsMenu(menu); } @@ -148,29 +149,29 @@ public class TrackRecordedActivity extends AbstractListActivity implements Choos Intent intent; switch (item.getItemId()) { case R.id.track_detail_share: - intent = IntentUtils.newShareFileIntent(this, track.getId()); + intent = IntentUtils.newShareFileIntent(this, trackId); intent = Intent.createChooser(intent, null); startActivity(intent); return true; case R.id.track_detail_menu_show_on_map: - IntentDashboardUtils.startDashboard(this, false, track.getId()); + IntentDashboardUtils.startDashboard(this, false, trackId); return true; case R.id.track_detail_markers: intent = IntentUtils.newIntent(this, MarkerListActivity.class) - .putExtra(MarkerListActivity.EXTRA_TRACK_ID, track.getId()); + .putExtra(MarkerListActivity.EXTRA_TRACK_ID, trackId); startActivity(intent); return true; case R.id.track_detail_edit: intent = IntentUtils.newIntent(this, TrackEditActivity.class) - .putExtra(TrackEditActivity.EXTRA_TRACK_ID, track.getId()); + .putExtra(TrackEditActivity.EXTRA_TRACK_ID, trackId); startActivity(intent); return true; case R.id.track_detail_delete: - deleteTracks(track.getId()); + deleteTracks(trackId); return true; case R.id.track_detail_resume_track: Intent newIntent = IntentUtils.newIntent(TrackRecordedActivity.this, TrackRecordingActivity.class) - .putExtra(TrackRecordingActivity.EXTRA_TRACK_ID, track.getId()); + .putExtra(TrackRecordingActivity.EXTRA_TRACK_ID, trackId); startActivity(newIntent); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); finish(); @@ -204,7 +205,7 @@ public class TrackRecordedActivity extends AbstractListActivity implements Choos } private void handleIntent(Intent intent) { - Track.Id trackId = intent.getParcelableExtra(EXTRA_TRACK_ID); + trackId = intent.getParcelableExtra(EXTRA_TRACK_ID); Marker.Id markerId = intent.getParcelableExtra(EXTRA_MARKER_ID); if (markerId != null) { @@ -221,8 +222,6 @@ public class TrackRecordedActivity extends AbstractListActivity implements Choos Log.e(TAG, "TrackDetailActivity needs EXTRA_TRACK_ID."); finish(); } - - track = contentProviderUtils.getTrack(trackId); } public void chooseActivityType(String category) { @@ -232,6 +231,7 @@ public class TrackRecordedActivity extends AbstractListActivity implements Choos @Override public void onChooseActivityTypeDone(String iconValue) { String category = getString(TrackIconUtils.getIconActivityType(iconValue)); + Track track = contentProviderUtils.getTrack(trackId); TrackUtils.updateTrack(this, track, null, category, null, contentProviderUtils); } @@ -251,9 +251,9 @@ public class TrackRecordedActivity extends AbstractListActivity implements Choos public Fragment getItem(int position) { switch (position) { case 0: - return StatisticsRecordedFragment.newInstance(track.getId()); + return StatisticsRecordedFragment.newInstance(trackId); case 1: - return IntervalsFragment.newInstance(track.getId()); + return IntervalsFragment.newInstance(trackId); case 2: return ChartFragment.newInstance(false); case 3: diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java index b4d7f4430..27f77676c 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java @@ -51,7 +51,8 @@ public class StatisticsRecordedFragment extends Fragment { private TrackStatistics trackStatistics; private String category = ""; - private Track track; + private Track.Id trackId; + private ContentProviderUtils contentProviderUtils; private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (preferences, key) -> { if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key) || PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) { @@ -103,9 +104,8 @@ public class StatisticsRecordedFragment extends Fragment { public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Track.Id trackId = getArguments().getParcelable(TRACK_ID_KEY); - ContentProviderUtils contentProviderUtils = new ContentProviderUtils(getContext()); - track = contentProviderUtils.getTrack(trackId); + trackId = getArguments().getParcelable(TRACK_ID_KEY); + contentProviderUtils = new ContentProviderUtils(getContext()); } @Override @@ -184,6 +184,7 @@ public class StatisticsRecordedFragment extends Fragment { if (isResumed()) { getActivity().runOnUiThread(() -> { if (isResumed()) { + Track track = contentProviderUtils.getTrack(trackId); trackStatistics = track != null ? track.getTrackStatistics() : null; category = track != null ? track.getCategory() : ""; updateUI(); diff --git a/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java b/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java index 4320672ed..79d354bc2 100644 --- a/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java @@ -35,17 +35,22 @@ public class TrackUtils { } public static void updateTrack(Context context, Track track, String name, String category, String description, ContentProviderUtils contentProviderUtils) { + boolean update = false; if (name != null) { track.setName(name); + update = true; } if (category != null) { track.setCategory(category); track.setIcon(TrackIconUtils.getIconValue(context, category)); + update = true; } - if (description != null) { track.setDescription(description); + update = true; + } + if (update) { + contentProviderUtils.updateTrack(track); } - contentProviderUtils.updateTrack(track); } }