mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-01 00:06:47 +00:00
Fix taskbar crash after cleanup
- Set LayoutTransition after adding initial views - End running transitions in cleanup - Only run update listener if LayoutTransition is active Test: No crash after taskbar cleanup() Bug: 182512211 Change-Id: I1049857935d09235388c1ef1fe4d89ef53b79aa5
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user