diff --git a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java index 85ccf29578..94aaf15e2d 100644 --- a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java +++ b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java @@ -335,10 +335,14 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag launcherAnimator.play(dragLayerAlpha); launcherAnimator.play(dragLayerTransY); mDragLayer.setLayerType(View.LAYER_TYPE_HARDWARE, null); + + // Pause page indicator animations as they lead to layer trashing. + mLauncher.getWorkspace().getPageIndicator().pauseAnimations(); endListener = () -> { mDragLayer.setLayerType(View.LAYER_TYPE_NONE, null); mDragLayer.setAlpha(1); mDragLayer.setTranslationY(0); + mLauncher.getWorkspace().getPageIndicator().skipAnimationsToEnd(); }; } return new Pair<>(launcherAnimator, endListener); @@ -694,6 +698,13 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag workspaceAnimator.setStartDelay(LAUNCHER_RESUME_START_DELAY); workspaceAnimator.setDuration(333); workspaceAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN); + currentPage.setLayerType(View.LAYER_TYPE_HARDWARE, null); + workspaceAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + currentPage.setLayerType(View.LAYER_TYPE_NONE, null); + } + }); // Animate the shelf in two parts: slide in, and overeshoot. AllAppsTransitionController allAppsController = mLauncher.getAllAppsController(); @@ -715,7 +726,6 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag allAppsOvershoot.setDuration(153); allAppsOvershoot.setInterpolator(Interpolators.OVERSHOOT_0); - anim.play(workspaceAnimator); anim.playSequentially(allAppsSlideIn, allAppsOvershoot); anim.addListener(mReapplyStateListener); diff --git a/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java b/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java index 3c16cde24f..1383f53aba 100644 --- a/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java +++ b/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java @@ -41,8 +41,9 @@ public class WorkspacePageIndicator extends View implements Insettable, PageIndi private static final int LINE_ALPHA_ANIMATOR_INDEX = 0; private static final int NUM_PAGES_ANIMATOR_INDEX = 1; private static final int TOTAL_SCROLL_ANIMATOR_INDEX = 2; + private static final int ANIMATOR_COUNT = 3; - private ValueAnimator[] mAnimators = new ValueAnimator[3]; + private ValueAnimator[] mAnimators = new ValueAnimator[ANIMATOR_COUNT]; private final Handler mDelayedLineFadeHandler = new Handler(Looper.getMainLooper()); private final Launcher mLauncher; @@ -232,6 +233,28 @@ public class WorkspacePageIndicator extends View implements Insettable, PageIndi mAnimators[animatorIndex].start(); } + /** + * Pauses all currently running animations. + */ + public void pauseAnimations() { + for (int i = 0; i < ANIMATOR_COUNT; i++) { + if (mAnimators[i] != null) { + mAnimators[i].pause(); + } + } + } + + /** + * Force-ends all currently running or paused animations. + */ + public void skipAnimationsToEnd() { + for (int i = 0; i < ANIMATOR_COUNT; i++) { + if (mAnimators[i] != null) { + mAnimators[i].end(); + } + } + } + @Override public void setInsets(Rect insets) { DeviceProfile grid = mLauncher.getDeviceProfile();