Don't defer finish, only defer disableInputProxy
We should always finish the controller when requested, to ensure everything is cleaned up immediately. But if touch is in progress, we should keep input proxy enabled until touch up/cancel. Test: swipe up to launcher and interact with it during the transition - Swipe to recents and scroll it or dismiss the current task - Swipe to home and open another app or swipe again on the nav bar Bug: 157771305 Change-Id: Ida53289e4ecbd5e5d16933fcc79bbebdf1f8d898
This commit is contained in:
parent
625bd51fe3
commit
cc558e86fb
|
@ -29,7 +29,6 @@ import android.view.KeyEvent;
|
|||
import android.view.MotionEvent;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.UiThread;
|
||||
|
||||
import com.android.launcher3.util.Preconditions;
|
||||
|
@ -58,8 +57,7 @@ public class RecentsAnimationController {
|
|||
private boolean mUseLauncherSysBarFlags = false;
|
||||
private boolean mSplitScreenMinimized = false;
|
||||
private boolean mTouchInProgress;
|
||||
private boolean mFinishPending;
|
||||
private @Nullable Runnable mFinishPendingCallback;
|
||||
private boolean mDisableInputProxyPending;
|
||||
|
||||
public RecentsAnimationController(RecentsAnimationControllerCompat controller,
|
||||
boolean allowMinimizeSplitScreen,
|
||||
|
@ -138,12 +136,12 @@ public class RecentsAnimationController {
|
|||
|
||||
@UiThread
|
||||
public void finishAnimationToHome() {
|
||||
finishAndClear(true /* toRecents */, null, false /* sendUserLeaveHint */);
|
||||
finishAndDisableInputProxy(true /* toRecents */, null, false /* sendUserLeaveHint */);
|
||||
}
|
||||
|
||||
@UiThread
|
||||
public void finishAnimationToApp() {
|
||||
finishAndClear(false /* toRecents */, null, false /* sendUserLeaveHint */);
|
||||
finishAndDisableInputProxy(false /* toRecents */, null, false /* sendUserLeaveHint */);
|
||||
}
|
||||
|
||||
/** See {@link #finish(boolean, Runnable, boolean)} */
|
||||
|
@ -162,19 +160,16 @@ public class RecentsAnimationController {
|
|||
@UiThread
|
||||
public void finish(boolean toRecents, Runnable onFinishComplete, boolean sendUserLeaveHint) {
|
||||
Preconditions.assertUIThread();
|
||||
if (!toRecents) {
|
||||
finishAndClear(false, onFinishComplete, sendUserLeaveHint);
|
||||
if (toRecents && mTouchInProgress) {
|
||||
// Finish the controller as requested, but don't disable input proxy yet.
|
||||
mDisableInputProxyPending = true;
|
||||
finishController(toRecents, onFinishComplete, sendUserLeaveHint);
|
||||
} else {
|
||||
if (mTouchInProgress) {
|
||||
mFinishPending = true;
|
||||
mFinishPendingCallback = onFinishComplete;
|
||||
} else {
|
||||
finishAndClear(true, onFinishComplete, sendUserLeaveHint);
|
||||
}
|
||||
finishAndDisableInputProxy(toRecents, onFinishComplete, sendUserLeaveHint);
|
||||
}
|
||||
}
|
||||
|
||||
private void finishAndClear(boolean toRecents, Runnable onFinishComplete,
|
||||
private void finishAndDisableInputProxy(boolean toRecents, Runnable onFinishComplete,
|
||||
boolean sendUserLeaveHint) {
|
||||
disableInputProxy();
|
||||
finishController(toRecents, onFinishComplete, sendUserLeaveHint);
|
||||
|
@ -262,11 +257,9 @@ public class RecentsAnimationController {
|
|||
} else if (action == ACTION_CANCEL || action == ACTION_UP) {
|
||||
// Finish any pending actions
|
||||
mTouchInProgress = false;
|
||||
if (mFinishPending) {
|
||||
mFinishPending = false;
|
||||
finishAndClear(true /* toRecents */, mFinishPendingCallback,
|
||||
false /* sendUserLeaveHint */);
|
||||
mFinishPendingCallback = null;
|
||||
if (mDisableInputProxyPending) {
|
||||
mDisableInputProxyPending = false;
|
||||
disableInputProxy();
|
||||
}
|
||||
}
|
||||
if (mInputConsumer != null) {
|
||||
|
|
Loading…
Reference in New Issue