From 02c578327d7cd178b87293568069b58e2319957b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20Mart=C3=ADnez?= Date: Tue, 9 Mar 2021 19:45:30 +0100 Subject: [PATCH] Shared element transition (from List to Recorded). --- .../de/dennisguse/opentracks/TrackListActivity.java | 13 +++++++++---- .../opentracks/TrackRecordedActivity.java | 10 ++++++++++ .../fragments/StatisticsRecordedFragment.java | 4 +++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 53ae3b4e1..111551c97 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -17,6 +17,7 @@ package de.dennisguse.opentracks; import android.Manifest; +import android.app.ActivityOptions; import android.app.SearchManager; import android.content.Context; import android.content.Intent; @@ -29,6 +30,7 @@ import android.location.LocationManager; import android.os.Bundle; import android.provider.Settings; import android.util.Log; +import android.util.Pair; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; @@ -195,17 +197,20 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe viewBinding.trackList.setEmptyView(viewBinding.trackListEmptyView); viewBinding.trackList.setOnItemClickListener((parent, view, position, trackId) -> { - Intent newIntent; if (trackId == recordingTrackId.getId()) { // Is recording -> open record activity. - newIntent = IntentUtils.newIntent(TrackListActivity.this, TrackRecordingActivity.class) + Intent newIntent = IntentUtils.newIntent(TrackListActivity.this, TrackRecordingActivity.class) .putExtra(TrackRecordedActivity.EXTRA_TRACK_ID, new Track.Id(trackId)); + startActivity(newIntent); } else { // Not recording -> open detail activity. - newIntent = IntentUtils.newIntent(TrackListActivity.this, TrackRecordedActivity.class) + Intent newIntent = IntentUtils.newIntent(TrackListActivity.this, TrackRecordedActivity.class) .putExtra(TrackRecordedActivity.EXTRA_TRACK_ID, new Track.Id(trackId)); + ActivityOptions activityOptions = ActivityOptions.makeSceneTransitionAnimation( + this, + new Pair<>(view.findViewById(R.id.list_item_icon), TrackRecordedActivity.VIEW_TRACK_ICON)); + startActivity(newIntent, activityOptions.toBundle()); } - startActivity(newIntent); }); resourceCursorAdapter = new ResourceCursorAdapter(this, R.layout.list_item, null, 0) { diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java index 7e547c0db..970649cc7 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java @@ -24,6 +24,7 @@ import android.view.MenuItem; import android.view.View; import androidx.annotation.NonNull; +import androidx.core.view.ViewCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.viewpager2.adapter.FragmentStateAdapter; @@ -55,6 +56,8 @@ public class TrackRecordedActivity extends AbstractListActivity implements Confi private static final String TAG = TrackRecordedActivity.class.getSimpleName(); + public static final String VIEW_TRACK_ICON = "track_icon"; + public static final String EXTRA_TRACK_ID = "track_id"; public static final String EXTRA_MARKER_ID = "marker_id"; @@ -84,6 +87,8 @@ public class TrackRecordedActivity extends AbstractListActivity implements Confi if (savedInstanceState != null) { viewBinding.trackDetailActivityViewPager.setCurrentItem(savedInstanceState.getInt(CURRENT_TAB_TAG_KEY)); } + + postponeEnterTransition(); } @Override @@ -275,4 +280,9 @@ public class TrackRecordedActivity extends AbstractListActivity implements Confi } } } + + public void startPostponedEnterTransitionWith(View viewIcon, View viewName) { + ViewCompat.setTransitionName(viewIcon, TrackRecordedActivity.VIEW_TRACK_ICON); + startPostponedEnterTransition(); + } } \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java index db7948095..9c82f74e1 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java @@ -34,6 +34,7 @@ import java.util.ArrayList; import java.util.List; import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.TrackRecordedActivity; import de.dennisguse.opentracks.adapters.SensorsAdapter; import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.content.provider.ContentProviderUtils; @@ -64,7 +65,6 @@ public class StatisticsRecordedFragment extends Fragment { return fragment; } - private TrackStatistics trackStatistics; private SensorStatistics sensorStatistics; private SensorsAdapter sensorsAdapter; @@ -164,6 +164,8 @@ public class StatisticsRecordedFragment extends Fragment { loadTrackDescription(track); updateUI(); updateSensorUI(); + + ((TrackRecordedActivity) getActivity()).startPostponedEnterTransitionWith(viewBinding.statsActivityTypeIcon, viewBinding.statsNameValue); } }); }