From 42276318b9682389f1b3c5efde6c323aa066fc82 Mon Sep 17 00:00:00 2001 From: Jeremy Sim Date: Mon, 18 Apr 2022 17:21:33 -0700 Subject: [PATCH] Fix crash bug when splitting with animations disabled Fixes a bug where disabling animations (through Settings) would cause split staging to crash. The crash occurs because when animations are disabled, StateManager advances to OVERVIEW_SPLIT_SELECT too quickly, and does not trigger the appropriate code block in RecentsViewStateController#handleSplitSelectionState(). This causes a crash. Fixed by changing the conditional so that it always runs when OVERVIEW_SPLIT_SELECT is the target state, no matter the starting state. Note: If more animations are added for this state in the future, the conditional may need to be tweaked further. Fixes: 223598955 Test: Confirmed not crashing on 2 devices when splitting in a variety of ways. Change-Id: I7f3def88f124fa1babe9a943adf72c10f58b7131 --- .../RecentsViewStateController.java | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java index 947d3e26da..86f26c3673 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java @@ -107,7 +107,6 @@ public final class RecentsViewStateController extends */ private void handleSplitSelectionState(@NonNull LauncherState toState, @Nullable PendingAnimation builder) { - LauncherState currentState = mLauncher.getStateManager().getState(); boolean animate = builder != null; PagedOrientationHandler orientationHandler = ((RecentsView) mLauncher.getOverviewPanel()).getPagedOrientationHandler(); @@ -116,7 +115,7 @@ public final class RecentsViewStateController extends TASK_PRIMARY_SPLIT_TRANSLATION, TASK_SECONDARY_SPLIT_TRANSLATION, mLauncher.getDeviceProfile()); - if (isSplitSelectionState(currentState, toState)) { + if (toState == OVERVIEW_SPLIT_SELECT) { // Animation to "dismiss" selected taskView PendingAnimation splitSelectInitAnimation = mRecentsView.createSplitSelectInitAnimation( toState.getTransitionDuration(mLauncher)); @@ -125,30 +124,18 @@ public final class RecentsViewStateController extends toState.getSplitSelectTranslation(mLauncher), LINEAR); splitSelectInitAnimation.setFloat(mRecentsView, taskViewsFloat.second, 0, LINEAR); - if (!animate && isSplitSelectionState(currentState, toState)) { + if (!animate) { splitSelectInitAnimation.buildAnim().start(); - } else if (animate && - isSplitSelectionState(currentState, toState)) { + } else { builder.add(splitSelectInitAnimation.buildAnim()); } - } - if (isSplitSelectionState(currentState, toState)) { mRecentsView.applySplitPrimaryScrollOffset(); } else { mRecentsView.resetSplitPrimaryScrollOffset(); } } - /** - * @return true if {@param toState} is {@link LauncherState#OVERVIEW_SPLIT_SELECT} - * and {@param fromState} is not {@link LauncherState#OVERVIEW_SPLIT_SELECT} - */ - private boolean isSplitSelectionState(@NonNull LauncherState fromState, - @NonNull LauncherState toState) { - return fromState != OVERVIEW_SPLIT_SELECT && toState == OVERVIEW_SPLIT_SELECT; - } - private void setAlphas(PropertySetter propertySetter, StateAnimationConfig config, LauncherState state) { float clearAllButtonAlpha = state.areElementsVisible(mLauncher, CLEAR_ALL_BUTTON) ? 1 : 0;