From 91d26f0b5e65978ff03c0a0f87e4930e12eedd24 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 30 Apr 2021 10:36:36 -0700 Subject: [PATCH] Some 3P launcher transition fixes Bug: 182494821 Test: Manual Change-Id: Ia003b50493dce24a439fc735c990ee470975f68f --- .../android/quickstep/AbsSwipeUpHandler.java | 14 ++++---- .../android/quickstep/RecentsActivity.java | 34 ++++++++++++++++++- .../fallback/FallbackRecentsView.java | 16 ++++++--- .../quickstep/fallback/RecentsState.java | 12 +++++++ .../android/quickstep/views/RecentsView.java | 13 +++++-- 5 files changed, 74 insertions(+), 15 deletions(-) diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index ecaac94565..54adde29ae 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -47,7 +47,6 @@ import static com.android.quickstep.MultiStateCallback.DEBUG_STATES; import static com.android.quickstep.util.NavigationModeFeatureFlag.LIVE_TILE; import static com.android.quickstep.util.SwipePipToHomeAnimator.FRACTION_END; import static com.android.quickstep.util.SwipePipToHomeAnimator.FRACTION_START; -import static com.android.quickstep.views.RecentsView.RECENTS_GRID_PROGRESS; import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHOLD; import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME; @@ -55,7 +54,6 @@ import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.ACT import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.TargetApi; import android.app.ActivityManager; @@ -464,8 +462,6 @@ public abstract class AbsSwipeUpHandler, mDeviceState.getRotationTouchHelper() .onEndTargetCalculated(mGestureState.getEndTarget(), mActivityInterface); - - mRecentsView.onGestureEndTargetCalculated(mGestureState.getEndTarget()); }); notifyGestureStartedAsync(); @@ -1133,6 +1129,10 @@ public abstract class AbsSwipeUpHandler, } homeAnimFactory.playAtomicAnimation(velocityPxPerMs.y); mLauncherTransitionController = null; + + if (mRecentsView != null) { + mRecentsView.onPrepareGestureEndAnimation(null, mGestureState.getEndTarget()); + } } else { AnimatorSet animatorSet = new AnimatorSet(); ValueAnimator windowAnim = mCurrentShift.animateToValue(start, end); @@ -1171,9 +1171,9 @@ public abstract class AbsSwipeUpHandler, } }); animatorSet.play(windowAnim); - S state = mActivityInterface.stateFromGestureEndTarget(mGestureState.getEndTarget()); - if (mRecentsView != null && state.displayOverviewTasksAsGrid(mDp)) { - animatorSet.play(ObjectAnimator.ofFloat(mRecentsView, RECENTS_GRID_PROGRESS, 1)); + if (mRecentsView != null) { + mRecentsView.onPrepareGestureEndAnimation( + animatorSet, mGestureState.getEndTarget()); } animatorSet.setDuration(duration).setInterpolator(interpolator); animatorSet.start(); diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java index eee02b9b46..0e9e3ad029 100644 --- a/quickstep/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/src/com/android/quickstep/RecentsActivity.java @@ -22,11 +22,13 @@ import static com.android.launcher3.QuickstepTransitionManager.RECENTS_LAUNCH_DU import static com.android.launcher3.QuickstepTransitionManager.STATUS_BAR_TRANSITION_DURATION; import static com.android.launcher3.QuickstepTransitionManager.STATUS_BAR_TRANSITION_PRE_DELAY; import static com.android.launcher3.Utilities.createHomeIntent; +import static com.android.launcher3.graphics.SysUiScrim.SYSUI_PROGRESS; import static com.android.launcher3.testing.TestProtocol.OVERVIEW_STATE_ORDINAL; import static com.android.quickstep.TaskUtils.taskIsATargetWithMode; import static com.android.quickstep.TaskViewUtils.createRecentsWindowAnimator; import static com.android.quickstep.util.NavigationModeFeatureFlag.LIVE_TILE; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING; +import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -36,6 +38,7 @@ import android.content.res.Configuration; import android.os.Bundle; import android.os.Handler; import android.os.Looper; +import android.view.SurfaceControl.Transaction; import android.view.View; import androidx.annotation.Nullable; @@ -48,6 +51,7 @@ import com.android.launcher3.LauncherAnimationRunner.AnimationResult; import com.android.launcher3.R; import com.android.launcher3.WrappedAnimationRunnerImpl; import com.android.launcher3.WrappedLauncherAnimationRunner; +import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.Interpolators; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.compat.AccessibilityManagerCompat; @@ -92,6 +96,8 @@ public final class RecentsActivity extends StatefulActivity { private Handler mUiHandler = new Handler(Looper.getMainLooper()); + private static final long HOME_APPEAR_DURATION = 250; + private RecentsDragLayer mDragLayer; private ScrimView mScrimView; private FallbackRecentsView mFallbackRecentsView; @@ -114,6 +120,7 @@ public final class RecentsActivity extends StatefulActivity { mScrimView = findViewById(R.id.scrim_view); mFallbackRecentsView = findViewById(R.id.overview_panel); mActionsView = findViewById(R.id.overview_actions_view); + SYSUI_PROGRESS.set(getRootView().getSysUiScrim(), 0f); SplitPlaceholderView splitPlaceholderView = findViewById(R.id.split_placeholder); splitPlaceholderView.init( @@ -351,7 +358,32 @@ public final class RecentsActivity extends StatefulActivity { } private void startHomeInternal() { - startActivity(createHomeIntent()); + WrappedLauncherAnimationRunner runner = new WrappedLauncherAnimationRunner( + getMainThreadHandler(), this::onCreateAnimationToHome, true); + RemoteAnimationAdapterCompat adapterCompat = + new RemoteAnimationAdapterCompat(runner, HOME_APPEAR_DURATION, 0); + startActivity(createHomeIntent(), + ActivityOptionsCompat.makeRemoteAnimation(adapterCompat).toBundle()); + } + + private void onCreateAnimationToHome( + int transit, RemoteAnimationTargetCompat[] appTargets, + RemoteAnimationTargetCompat[] wallpaperTargets, + RemoteAnimationTargetCompat[] nonAppTargets, AnimationResult result) { + AnimatorPlaybackController controller = getStateManager() + .createAnimationToNewWorkspace(RecentsState.BG_LAUNCHER, HOME_APPEAR_DURATION); + controller.dispatchOnStart(); + + RemoteAnimationTargets targets = new RemoteAnimationTargets( + appTargets, wallpaperTargets, nonAppTargets, MODE_OPENING); + for (RemoteAnimationTargetCompat app : targets.apps) { + new Transaction().setAlpha(app.leash.getSurfaceControl(), 1).apply(); + } + AnimatorSet anim = new AnimatorSet(); + anim.play(controller.getAnimationPlayer()); + anim.setDuration(HOME_APPEAR_DURATION); + result.setAnimation(anim, this, + () -> getStateManager().goToState(RecentsState.HOME, false)); } @Override diff --git a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java index 4d4b6e1467..1bb8e96aa9 100644 --- a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java +++ b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java @@ -20,6 +20,7 @@ import static com.android.quickstep.fallback.RecentsState.DEFAULT; import static com.android.quickstep.fallback.RecentsState.HOME; import static com.android.quickstep.fallback.RecentsState.MODAL_TASK; +import android.animation.AnimatorSet; import android.annotation.TargetApi; import android.app.ActivityManager.RunningTaskInfo; import android.content.Context; @@ -27,6 +28,9 @@ import android.os.Build; import android.util.AttributeSet; import android.util.Log; +import androidx.annotation.Nullable; + +import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.statemanager.StateManager.StateListener; import com.android.launcher3.testing.TestProtocol; @@ -67,7 +71,6 @@ public class FallbackRecentsView extends RecentsView setCurrentTask(-1)); - runDismissAnimation(pa); + AnimatorPlaybackController controller = pa.createPlaybackController(); + controller.dispatchOnStart(); + animatorSet.play(controller.getAnimationPlayer()); } } } diff --git a/quickstep/src/com/android/quickstep/fallback/RecentsState.java b/quickstep/src/com/android/quickstep/fallback/RecentsState.java index 96c0e48731..b6cfdce65a 100644 --- a/quickstep/src/com/android/quickstep/fallback/RecentsState.java +++ b/quickstep/src/com/android/quickstep/fallback/RecentsState.java @@ -50,6 +50,7 @@ public class RecentsState implements BaseState { public static final RecentsState BACKGROUND_APP = new BackgroundAppState(2, FLAG_DISABLE_RESTORE | FLAG_NON_INTERACTIVE | FLAG_FULL_SCREEN); public static final RecentsState HOME = new RecentsState(3, 0); + public static final RecentsState BG_LAUNCHER = new LauncherState(4, 0); public final int ordinal; private final int mFlags; @@ -161,4 +162,15 @@ public class RecentsState implements BaseState { return getOverviewScaleAndOffsetForBackgroundState(activity); } } + + private static class LauncherState extends RecentsState { + LauncherState(int id, int flags) { + super(id, flags); + } + + @Override + public float[] getOverviewScaleAndOffset(RecentsActivity activity) { + return new float[] { NO_SCALE, 1 }; + } + } } diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 3c59441c66..9797afd32b 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -1631,7 +1631,16 @@ public abstract class RecentsView