Merge "Revert "Invalidate when switching to new consumer"" into sc-dev

This commit is contained in:
Winson Chung
2021-05-11 21:21:18 +00:00
committed by Android (Google) Code Review

View File

@@ -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<T extends StatefulActivity<S>,
protected final BaseActivityInterface<S, T> 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<Runnable> mRecentsAnimationStartCallbacks = new ArrayList<>();
private final OnScrollChangedListener mOnRecentsScrollListener = this::onRecentsViewScroll;
@@ -148,9 +146,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
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<T extends StatefulActivity<S>,
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<T extends StatefulActivity<S>,
// 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<T extends StatefulActivity<S>,
}
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<T extends StatefulActivity<S>,
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<T extends StatefulActivity<S>,
endLauncherTransitionController();
updateSysUiFlags(1 /* windowProgress == overview */);
}
doLogGesture(NEW_TASK, taskToLaunch, taskPageIndex);
doLogGesture(NEW_TASK, taskToLaunch);
});
}
@@ -1366,39 +1356,29 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
}
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<T extends StatefulActivity<S>,
() -> 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<T extends StatefulActivity<S>,
}
SystemUiProxy.INSTANCE.get(mContext).onOverviewShown(false, TAG);
TaskView taskToLaunch = mRecentsView.getCurrentPageTaskView();
doLogGesture(RECENTS, taskToLaunch, getLogGestureTaskIndex(taskToLaunch));
doLogGesture(RECENTS, mRecentsView.getCurrentPageTaskView());
reset();
}