From f19a809f72ef8d1595ec82cbef295bec078ea207 Mon Sep 17 00:00:00 2001 From: "[1;3C" Date: Wed, 9 Dec 2020 13:28:22 -0800 Subject: [PATCH] Map shell transition to recents animation This hooks up the essential start/finish. One thing to note is that it uses the normal startActivity rather than a special startRecents call for shell transitions. Bug: 162503077 Test: Enable shell transit. Open an app, use gesture to open recents. Change-Id: Ia51fa8baeb43bf3fa768b25a840b629ec94e16a1 --- .../quickstep/TaskAnimationManager.java | 23 +++++++++++++++++-- .../quickstep/TouchInteractionService.java | 2 +- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/quickstep/src/com/android/quickstep/TaskAnimationManager.java b/quickstep/src/com/android/quickstep/TaskAnimationManager.java index 6f2f86eac2..02c27636fc 100644 --- a/quickstep/src/com/android/quickstep/TaskAnimationManager.java +++ b/quickstep/src/com/android/quickstep/TaskAnimationManager.java @@ -21,7 +21,10 @@ import static com.android.quickstep.GestureState.GestureEndTarget.RECENTS; import static com.android.quickstep.GestureState.STATE_RECENTS_ANIMATION_INITIALIZED; import static com.android.quickstep.GestureState.STATE_RECENTS_ANIMATION_STARTED; +import android.content.Context; import android.content.Intent; +import android.os.Bundle; +import android.os.SystemProperties; import android.util.Log; import androidx.annotation.UiThread; @@ -30,11 +33,15 @@ import com.android.launcher3.Utilities; import com.android.launcher3.config.FeatureFlags; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.ActivityManagerWrapper; +import com.android.systemui.shared.system.ActivityOptionsCompat; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; +import com.android.systemui.shared.system.RemoteTransitionCompat; import java.util.function.Consumer; public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAnimationListener { + public static final boolean ENABLE_SHELL_TRANSITIONS = + SystemProperties.getBoolean("persist.debug.shell_transit", false); private RecentsAnimationController mController; private RecentsAnimationCallbacks mCallbacks; @@ -43,7 +50,11 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn private GestureState mLastGestureState; private RemoteAnimationTargetCompat mLastAppearedTaskTarget; private Consumer mLaunchOtherTaskHandler; + private Context mCtx; + TaskAnimationManager(Context ctx) { + mCtx = ctx; + } /** * Preloads the recents animation. */ @@ -122,8 +133,16 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn final long eventTime = gestureState.getSwipeUpStartTimeMs(); mCallbacks.addListener(gestureState); mCallbacks.addListener(listener); - UI_HELPER_EXECUTOR.execute(() -> ActivityManagerWrapper.getInstance() - .startRecentsActivity(intent, eventTime, mCallbacks, null, null)); + + if (ENABLE_SHELL_TRANSITIONS) { + RemoteTransitionCompat transition = new RemoteTransitionCompat(mCallbacks, + mController != null ? mController.getController() : null); + Bundle options = ActivityOptionsCompat.makeRemoteTransition(transition).toBundle(); + mCtx.startActivity(intent, options); + } else { + UI_HELPER_EXECUTOR.execute(() -> ActivityManagerWrapper.getInstance() + .startRecentsActivity(intent, eventTime, mCallbacks, null, null)); + } gestureState.setState(STATE_RECENTS_ANIMATION_INITIALIZED); return mCallbacks; } diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index 196cae754d..0f409374bb 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -309,7 +309,7 @@ public class TouchInteractionService extends Service implements PluginListener