summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author mattsziklay <mattsziklay@google.com> 2023-02-08 11:40:30 -0800
committer Matt Sziklay <mattsziklay@google.com> 2023-02-14 21:59:57 +0000
commitb45e67c06ce8142af48939eed480a62990b0e471 (patch)
tree660601e662ca5a791089ca082fd6984f53dc88c5
parent7cf6cd856728484e8ca543bde7ca9501fb1923af (diff)
Update DesktopModeTouchEventListener to correctly identify click events.
Fixes a bug where click inputs are considered drag inputs, preventing onClick events from occurring. Bug: 268396444 Test: Manual. Drag/click caption and confirm correct behavior. Test: atest DragDetectorTest Change-Id: I2990438e0d9f0c38738a65a0c36d18307d34fd2e
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java33
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragDetector.java4
2 files changed, 23 insertions, 14 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 44e4a31c36f0..de5f2f467e99 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
@@ -250,25 +250,30 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
@Override
public boolean onTouch(View v, MotionEvent e) {
- boolean isDrag = false;
final int id = v.getId();
if (id != R.id.caption_handle && id != R.id.desktop_mode_caption) {
return false;
}
- if (id == R.id.caption_handle) {
- isDrag = mDragDetector.onMotionEvent(e);
- }
- if (e.getAction() != MotionEvent.ACTION_DOWN) {
- return isDrag;
- }
- final RunningTaskInfo taskInfo = mTaskOrganizer.getRunningTaskInfo(mTaskId);
- if (taskInfo.isFocused) {
- return isDrag;
+ switch (e.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ mDragDetector.onMotionEvent(e);
+ final RunningTaskInfo taskInfo = mTaskOrganizer.getRunningTaskInfo(mTaskId);
+ if (taskInfo.isFocused) {
+ return mDragDetector.isDragEvent();
+ }
+ final WindowContainerTransaction wct = new WindowContainerTransaction();
+ wct.reorder(mTaskToken, true /* onTop */);
+ mSyncQueue.queue(wct);
+ return false;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ boolean res = mDragDetector.isDragEvent();
+ mDragDetector.onMotionEvent(e);
+ return res;
+ default:
+ mDragDetector.onMotionEvent(e);
+ return mDragDetector.isDragEvent();
}
- final WindowContainerTransaction wct = new WindowContainerTransaction();
- wct.reorder(mTaskToken, true /* onTop */);
- mSyncQueue.queue(wct);
- return true;
}
/**
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragDetector.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragDetector.java
index 4fac843b05db..cf1850b92373 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragDetector.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragDetector.java
@@ -94,6 +94,10 @@ class DragDetector {
mTouchSlop = touchSlop;
}
+ boolean isDragEvent() {
+ return mIsDragEvent;
+ }
+
private void resetState() {
mIsDragEvent = false;
mInputDownPoint.set(0, 0);