diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 25be30fc4b..d04bfe95e2 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -63,7 +63,6 @@ import android.graphics.Matrix; import android.graphics.PointF; import android.graphics.Rect; import android.os.Build; -import android.os.Handler; import android.os.IBinder; import android.os.SystemClock; import android.view.MotionEvent; @@ -136,7 +135,6 @@ public abstract class AbsSwipeUpHandler, protected final BaseActivityInterface mActivityInterface; protected final InputConsumerProxy mInputConsumerProxy; protected final ActivityInitListener mActivityInitListener; - private final Handler mHandler = new Handler(); // Callbacks to be made once the recents animation starts private final ArrayList mRecentsAnimationStartCallbacks = new ArrayList<>(); private final OnScrollChangedListener mOnRecentsScrollListener = this::onRecentsViewScroll; @@ -148,9 +146,6 @@ public abstract class AbsSwipeUpHandler, protected Runnable mGestureEndCallback; protected MultiStateCallback mStateCallback; protected boolean mCanceled; - // One time flag set when onConsumerAboutToBeSwitched() is called, indicating that certain - // shared animations should not be canceled when this handler is invalidated - private boolean mConsumerIsSwitching; private boolean mRecentsViewScrollLinked = false; private static int getFlagForIndex(int index, String name) { @@ -1007,14 +1002,7 @@ public abstract class AbsSwipeUpHandler, animateToProgress(startShift, endShift, duration, interpolator, endTarget, velocity); } - private int getLogGestureTaskIndex(@Nullable TaskView targetTask) { - return mRecentsView == null || targetTask == null - ? LOG_NO_OP_PAGE_INDEX - : mRecentsView.indexOfChild(targetTask); - } - - private void doLogGesture(GestureEndTarget endTarget, @Nullable TaskView targetTask, - int pageIndex) { + private void doLogGesture(GestureEndTarget endTarget, @Nullable TaskView targetTask) { StatsLogManager.EventEnum event; switch (endTarget) { case HOME: @@ -1043,6 +1031,9 @@ public abstract class AbsSwipeUpHandler, // We probably never received an animation controller, skip logging. return; } + int pageIndex = endTarget == LAST_TASK + ? LOG_NO_OP_PAGE_INDEX + : mRecentsView.getNextPage(); // TODO: set correct container using the pageIndex logger.log(event); } @@ -1294,18 +1285,18 @@ public abstract class AbsSwipeUpHandler, } public void onConsumerAboutToBeSwitched() { - mConsumerIsSwitching = true; if (mActivity != null) { // In the off chance that the gesture ends before Launcher is started, we should clear // the callback here so that it doesn't update with the wrong state mActivity.clearRunOnceOnStartCallback(); + resetLauncherListeners(); } if (mGestureState.getEndTarget() != null && !mGestureState.isRunningAnimationToLauncher()) { cancelCurrentAnimation(); } else { mStateCallback.setStateOnUiThread(STATE_FINISH_WITH_NO_END); + reset(); } - reset(); } public boolean isCanceled() { @@ -1316,14 +1307,13 @@ public abstract class AbsSwipeUpHandler, private void resumeLastTask() { mRecentsAnimationController.finish(false /* toRecents */, null); ActiveGestureLog.INSTANCE.addLog("finishRecentsAnimation", false); - doLogGesture(LAST_TASK, null, getLogGestureTaskIndex(null)); + doLogGesture(LAST_TASK, null); reset(); } @UiThread private void startNewTask() { TaskView taskToLaunch = mRecentsView == null ? null : mRecentsView.getNextPageTaskView(); - int taskPageIndex = getLogGestureTaskIndex(taskToLaunch); startNewTask(success -> { if (!success) { reset(); @@ -1332,7 +1322,7 @@ public abstract class AbsSwipeUpHandler, endLauncherTransitionController(); updateSysUiFlags(1 /* windowProgress == overview */); } - doLogGesture(NEW_TASK, taskToLaunch, taskPageIndex); + doLogGesture(NEW_TASK, taskToLaunch); }); } @@ -1366,39 +1356,29 @@ public abstract class AbsSwipeUpHandler, } private void invalidateHandler() { - if (!mConsumerIsSwitching) { - if (!LIVE_TILE.get() || !mActivityInterface.isInLiveTileMode() - || mGestureState.getEndTarget() != RECENTS) { - mInputConsumerProxy.destroy(); - mTaskAnimationManager.setLiveTileCleanUpHandler(null); - } - endRunningWindowAnim(false /* cancel */); + if (!LIVE_TILE.get() || !mActivityInterface.isInLiveTileMode() + || mGestureState.getEndTarget() != RECENTS) { + mInputConsumerProxy.destroy(); + mTaskAnimationManager.setLiveTileCleanUpHandler(null); + } + mInputConsumerProxy.unregisterCallback(); + endRunningWindowAnim(false /* cancel */); - if (mGestureEndCallback != null) { - mGestureEndCallback.run(); - } + if (mGestureEndCallback != null) { + mGestureEndCallback.run(); } - mInputConsumerProxy.unregisterCallback(); mActivityInitListener.unregister(); ActivityManagerWrapper.getInstance().unregisterTaskStackListener(mActivityRestartListener); mTaskSnapshot = null; } private void invalidateHandlerWithLauncher() { - if (!mConsumerIsSwitching) { - endLauncherTransitionController(); - mRecentsView.onGestureAnimationEnd(); - } + endLauncherTransitionController(); mRecentsView.removeOnScrollChangedListener(mOnRecentsScrollListener); + mRecentsView.onGestureAnimationEnd(); resetLauncherListeners(); - - mHandler.post(() -> { - // Defer clearing the activity since invalidation can happen over multiple callbacks. - mActivity = null; - mRecentsView = null; - }); } private void endLauncherTransitionController() { @@ -1516,8 +1496,7 @@ public abstract class AbsSwipeUpHandler, () -> mStateCallback.setStateOnUiThread(STATE_CURRENT_TASK_FINISHED)); } ActiveGestureLog.INSTANCE.addLog("finishRecentsAnimation", true); - TaskView taskToLaunch = mRecentsView == null ? null : mRecentsView.getCurrentPageTaskView(); - doLogGesture(HOME, taskToLaunch, getLogGestureTaskIndex(taskToLaunch)); + doLogGesture(HOME, mRecentsView == null ? null : mRecentsView.getCurrentPageTaskView()); } /** @@ -1548,8 +1527,7 @@ public abstract class AbsSwipeUpHandler, } SystemUiProxy.INSTANCE.get(mContext).onOverviewShown(false, TAG); - TaskView taskToLaunch = mRecentsView.getCurrentPageTaskView(); - doLogGesture(RECENTS, taskToLaunch, getLogGestureTaskIndex(taskToLaunch)); + doLogGesture(RECENTS, mRecentsView.getCurrentPageTaskView()); reset(); }