diff options
| author | 2025-02-05 12:04:29 -0800 | |
|---|---|---|
| committer | 2025-02-05 12:12:27 -0800 | |
| commit | 387b97fa84ce6faef6553ccdbdba6d49dcfcc16f (patch) | |
| tree | 0afba87cbce5394e07ecd892a0c74215d0059233 | |
| parent | 5a8361875234b125027f624393ff567118525062 (diff) | |
Allow long clicks on maximize icon using switch access
The current implementation only allows listeners from a touchscreen
source. When a user uses switch access to long click, the onLongClick
listener is called, but the onTouch listener never is. This change
ignores onLongClick calls that have gone through onTouch first but
allows long clicks that are recieved directly from an onLongClick call.
Bug: 391652399
Test: open and close maximize menu using both switch access and
touchscreen
Flag: com.android.window.flags.enable_desktop_windowing_mode
Change-Id: Ie7d703a53aab8fa097b4850ca7d35129f1f58f77
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java index a3a0baebcba1..235ebd7cf3cc 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java @@ -911,7 +911,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, private boolean mIsCustomHeaderGesture; private boolean mIsResizeGesture; private boolean mIsDragging; - private boolean mTouchscreenInUse; + private boolean mLongClickDisabled; private int mDragPointerId = -1; private MotionEvent mMotionEvent; @@ -997,10 +997,12 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, mMotionEvent = e; final int id = v.getId(); final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(mTaskId); - if ((e.getSource() & SOURCE_TOUCHSCREEN) == SOURCE_TOUCHSCREEN) { - mTouchscreenInUse = e.getActionMasked() != ACTION_UP - && e.getActionMasked() != ACTION_CANCEL; - } + final boolean touchscreenSource = + (e.getSource() & SOURCE_TOUCHSCREEN) == SOURCE_TOUCHSCREEN; + // Disable long click during events from a non-touchscreen source + mLongClickDisabled = !touchscreenSource && e.getActionMasked() != ACTION_UP + && e.getActionMasked() != ACTION_CANCEL; + if (id != R.id.caption_handle && id != R.id.desktop_mode_caption && id != R.id.open_menu_button && id != R.id.close_window && id != R.id.maximize_window && id != R.id.minimize_window) { @@ -1070,7 +1072,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, @Override public boolean onLongClick(View v) { final int id = v.getId(); - if (id == R.id.maximize_window && mTouchscreenInUse) { + if (id == R.id.maximize_window && !mLongClickDisabled) { final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(mTaskId); moveTaskToFront(decoration.mTaskInfo); if (decoration.isMaximizeMenuActive()) { |