From 8b08a1fd81ce267b7b13d07bf2ea1b7b9dbbb63f Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Thu, 15 Feb 2018 11:32:25 -0800 Subject: [PATCH] Cancel existing launcher animation earlier to prevent unnecessary AllApps animation. Prior to this change: * User presses home before opening app transition finishes * Close app transition starts * AllAppsTransitionController#mProgress = 1.3 (starts offscreen) * Launcher#onNewIntent makes call to AllAppsTransitionController#setStateWithAnimation * targetProgress != mProgress (1 != 1.3), so it runs an animator that looks odd ie. fast duration, only AllApps animates compared to expected full closing app transition Change-Id: I755787aebf637675cb9aae23fc5784f5a5b6c811 --- .../launcher3/LauncherStateManager.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java index e0b84bf462..170fcd7075 100644 --- a/src/com/android/launcher3/LauncherStateManager.java +++ b/src/com/android/launcher3/LauncherStateManager.java @@ -175,6 +175,7 @@ public class LauncherStateManager { mConfig.reset(); if (!animated) { + preOnStateTransitionStart(); onStateTransitionStart(state); for (StateHandler handler : getStateHandlers()) { handler.setState(state); @@ -231,6 +232,8 @@ public class LauncherStateManager { protected AnimatorSet createAnimationToNewWorkspaceInternal(final LauncherState state, AnimatorSetBuilder builder, final Runnable onCompleteRunnable) { + preOnStateTransitionStart(); + for (StateHandler handler : getStateHandlers()) { builder.startTag(handler); handler.setStateWithAnimation(state, builder, mConfig); @@ -269,6 +272,15 @@ public class LauncherStateManager { return mConfig.mCurrentAnimation; } + private void preOnStateTransitionStart() { + // If we are still animating to launcher from an app, + // finish it and let this state animation take over. + LauncherAppTransitionManager transitionManager = mLauncher.getAppTransitionManager(); + if (transitionManager != null) { + transitionManager.finishLauncherAnimation(); + } + } + private void onStateTransitionStart(LauncherState state) { mState.onStateDisabled(mLauncher); mState = state; @@ -279,13 +291,6 @@ public class LauncherStateManager { // Only disable clipping if needed, otherwise leave it as previous value. mLauncher.getWorkspace().setClipChildren(false); } - - // If we are still animating to launcher from an app, - // finish it and let this state animation take over. - LauncherAppTransitionManager transitionManager = mLauncher.getAppTransitionManager(); - if (transitionManager != null) { - transitionManager.finishLauncherAnimation(); - } } private void onStateTransitionEnd(LauncherState state) {