From 5a308591af1890fba82948af6f734d084c3d52aa Mon Sep 17 00:00:00 2001 From: LuK1337 <priv.luk@gmail.com> Date: Thu, 25 Nov 2021 17:39:29 +0100 Subject: [PATCH] Use custom flag for edge long swipe gesture Previously we were using same flags that'd be used for regular back key long press thus being unable to determine whether the event was sent from EdgeBackGestureHandle or not. Fixes: https://gitlab.com/LineageOS/issues/android/-/issues/4194 Change-Id: I5c4fd455f581ac5c9c5e3a146095be33e82e8d6e --- core/java/android/view/KeyEvent.java | 6 ++++++ .../navigationbar/gestural/EdgeBackGestureHandler.java | 4 ++-- .../java/com/android/server/policy/PhoneWindowManager.java | 4 +--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index 846d1ea61ce1..72decc96d784 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -1212,6 +1212,12 @@ public class KeyEvent extends InputEvent implements Parcelable { */ public static final int FLAG_TRACKING = 0x200; + /** + * Private flag that indicates that event was sent from EdgeBackGestureHandler. + * @hide + */ + public static final int FLAG_LONG_SWIPE = 0x800; + /** * Set when a key event has been synthesized to implement default behavior * for an event that the application did not handle. 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 5dfa88583d8f..94cc165499e7 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -276,9 +276,9 @@ public class EdgeBackGestureHandler extends CurrentUserTracker // TODO(b/186519446): use a different method than isFalseTouch mFalsingManager.isFalseTouch(BACK_GESTURE); boolean sendDown = sendEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK, - isLongPress ? KeyEvent.FLAG_LONG_PRESS : 0); + isLongPress ? KeyEvent.FLAG_LONG_SWIPE : 0); boolean sendUp = sendEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK, - isLongPress ? KeyEvent.FLAG_LONG_PRESS : 0); + isLongPress ? KeyEvent.FLAG_LONG_SWIPE : 0); if (DEBUG_MISSING_GESTURE) { Log.d(DEBUG_MISSING_GESTURE_TAG, "Triggered back: down=" + sendDown + ", up=" + sendUp); diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index e50adccb0751..cbd53de2d9ae 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -691,8 +691,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { private LineageHardwareManager mLineageHardware; private boolean mLongSwipeDown; - private static final int LONG_SWIPE_FLAGS = KeyEvent.FLAG_LONG_PRESS - | KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY; private class PolicyHandler extends Handler { @Override @@ -4034,7 +4032,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Handle special keys. switch (keyCode) { case KeyEvent.KEYCODE_BACK: { - boolean isLongSwipe = (event.getFlags() & LONG_SWIPE_FLAGS) == LONG_SWIPE_FLAGS; + boolean isLongSwipe = (event.getFlags() & KeyEvent.FLAG_LONG_SWIPE) != 0; if (mLongSwipeDown && isLongSwipe && !down) { // Trigger long swipe action performKeyAction(mEdgeLongSwipeAction, event); -- GitLab