diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java index 3567c17afa..21a2d512ab 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java @@ -120,11 +120,6 @@ public class TaskbarView extends LinearLayout implements FolderIcon.FolderIconPa } protected void init(int numHotseatIcons, int numRecentIcons) { - mLayoutTransition = new LayoutTransition(); - addUpdateListenerForAllLayoutTransitions( - () -> mControllerCallbacks.onItemPositionsChanged(this)); - setLayoutTransition(mLayoutTransition); - mHotseatStartIndex = 0; mHotseatEndIndex = mHotseatStartIndex + numHotseatIcons - 1; updateHotseatItems(new ItemInfo[numHotseatIcons]); @@ -135,6 +130,14 @@ public class TaskbarView extends LinearLayout implements FolderIcon.FolderIconPa mRecentsStartIndex = dividerIndex + 1; mRecentsEndIndex = mRecentsStartIndex + numRecentIcons - 1; updateRecentTasks(new Task[numRecentIcons]); + + mLayoutTransition = new LayoutTransition(); + addUpdateListenerForAllLayoutTransitions(() -> { + if (getLayoutTransition() == mLayoutTransition) { + mControllerCallbacks.onItemPositionsChanged(this); + } + }); + setLayoutTransition(mLayoutTransition); } private void addUpdateListenerForAllLayoutTransitions(Runnable onUpdate) { @@ -159,10 +162,20 @@ public class TaskbarView extends LinearLayout implements FolderIcon.FolderIconPa } protected void cleanup() { + endAllLayoutTransitionAnimators(); + setLayoutTransition(null); removeAllViews(); mHotseatRecentsDivider = null; } + private void endAllLayoutTransitionAnimators() { + mLayoutTransition.getAnimator(LayoutTransition.CHANGE_APPEARING).end(); + mLayoutTransition.getAnimator(LayoutTransition.CHANGE_DISAPPEARING).end(); + mLayoutTransition.getAnimator(LayoutTransition.CHANGING).end(); + mLayoutTransition.getAnimator(LayoutTransition.APPEARING).end(); + mLayoutTransition.getAnimator(LayoutTransition.DISAPPEARING).end(); + } + /** * Sets the alpha of the background color behind all the Taskbar contents. * @param alpha 0 is fully transparent, 1 is fully opaque.