From ad89a821450e9a61bd85225fbcf921f8ca51e94b Mon Sep 17 00:00:00 2001 From: Shan Huang Date: Wed, 2 Mar 2022 00:04:13 +0000 Subject: [PATCH] Turn off predictive back Test: m -j. Test back in apps that opt-in, opt-out & sysUI Bug: 222170518 Change-Id: I97ae7769ff2e04eb7fb39c49e025b255cdba057f --- .../android/window/WindowOnBackInvokedDispatcher.java | 2 +- .../android/wm/shell/back/BackAnimationController.java | 3 +++ .../com/android/wm/shell/dagger/WMShellBaseModule.java | 7 +++++-- .../navigationbar/gestural/EdgeBackGestureHandler.java | 9 +++++++++ .../com/android/server/wm/BackNavigationController.java | 2 +- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/core/java/android/window/WindowOnBackInvokedDispatcher.java b/core/java/android/window/WindowOnBackInvokedDispatcher.java index 94e5ea960f4fe..909e2770ddccd 100644 --- a/core/java/android/window/WindowOnBackInvokedDispatcher.java +++ b/core/java/android/window/WindowOnBackInvokedDispatcher.java @@ -54,7 +54,7 @@ public class WindowOnBackInvokedDispatcher implements OnBackInvokedDispatcher { private static final String TAG = "WindowOnBackDispatcher"; private static final String BACK_PREDICTABILITY_PROP = "persist.debug.back_predictability"; private static final boolean IS_BACK_PREDICTABILITY_ENABLED = SystemProperties - .getInt(BACK_PREDICTABILITY_PROP, 1) > 0; + .getInt(BACK_PREDICTABILITY_PROP, 0) > 0; /** Convenience hashmap to quickly decide if a callback has been added. */ private final HashMap mAllCallbacks = new HashMap<>(); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java index 9b414681c0fa8..8d5fdfbc8cb08 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java @@ -52,6 +52,9 @@ import com.android.wm.shell.common.annotations.ShellMainThread; */ public class BackAnimationController implements RemoteCallable { + private static final String BACK_PREDICTABILITY_PROP = "persist.debug.back_predictability"; + public static final boolean IS_ENABLED = SystemProperties + .getInt(BACK_PREDICTABILITY_PROP, 0) > 0; private static final String BACK_PREDICTABILITY_PROGRESS_THRESHOLD_PROP = "persist.debug.back_predictability_progress_threshold"; private static final int PROGRESS_THRESHOLD = SystemProperties diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java index c94f3d197dea1..0362b3fba36b8 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java @@ -699,7 +699,10 @@ public abstract class WMShellBaseModule { Context context, @ShellMainThread ShellExecutor shellExecutor ) { - return Optional.of( - new BackAnimationController(shellExecutor, context)); + if (BackAnimationController.IS_ENABLED) { + return Optional.of( + new BackAnimationController(shellExecutor, context)); + } + return Optional.empty(); } } diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java index 9ea27634df6ae..9199911896760 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -263,6 +263,15 @@ public class EdgeBackGestureHandler extends CurrentUserTracker // Notify FalsingManager that an intentional gesture has occurred. // TODO(b/186519446): use a different method than isFalseTouch mFalsingManager.isFalseTouch(BACK_GESTURE); + // Only inject back keycodes when ahead-of-time back dispatching is disabled. + if (mBackAnimation == null) { + boolean sendDown = sendEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK); + boolean sendUp = sendEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK); + if (DEBUG_MISSING_GESTURE) { + Log.d(DEBUG_MISSING_GESTURE_TAG, "Triggered back: down=" + + sendDown + ", up=" + sendUp); + } + } mOverviewProxyService.notifyBackAction(true, (int) mDownPoint.x, (int) mDownPoint.y, false /* isButton */, !mIsOnLeftEdge); diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java index 487aff63b555d..23f14a7b7a163 100644 --- a/services/core/java/com/android/server/wm/BackNavigationController.java +++ b/services/core/java/com/android/server/wm/BackNavigationController.java @@ -53,7 +53,7 @@ class BackNavigationController { * Returns true if the back predictability feature is enabled */ static boolean isEnabled() { - return SystemProperties.getInt(BACK_PREDICTABILITY_PROP, 1) > 0; + return SystemProperties.getInt(BACK_PREDICTABILITY_PROP, 0) > 0; } static boolean isScreenshotEnabled() {