Merge "Prevent touch event dispatch on the top edge when collapsed" into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-12-01 22:30:29 +00:00
committed by Android (Google) Code Review
2 changed files with 25 additions and 14 deletions

View File

@@ -4618,20 +4618,20 @@ public final class NotificationPanelViewController implements Dumpable {
return false; return false;
} }
// If the view that would receive the touch is disabled, just have status bar if (event.getAction() == MotionEvent.ACTION_DOWN) {
// eat the gesture. // If the view that would receive the touch is disabled, just have status
if (event.getAction() == MotionEvent.ACTION_DOWN && !mView.isEnabled()) { // bar eat the gesture.
Log.v(TAG, if (!mView.isEnabled()) {
String.format( mShadeLog.logMotionEvent(event,
"onTouchForwardedFromStatusBar: " "onTouchForwardedFromStatusBar: panel view disabled");
+ "panel view disabled, eating touch at (%d,%d)", return true;
(int) event.getX(), }
(int) event.getY() if (isFullyCollapsed() && event.getY() < 1f) {
) // b/235889526 Eat events on the top edge of the phone when collapsed
); mShadeLog.logMotionEvent(event, "top edge touch ignored");
return true; return true;
}
} }
return mView.dispatchTouchEvent(event); return mView.dispatchTouchEvent(event);
} }
}; };

View File

@@ -843,13 +843,24 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
public void handleTouchEventFromStatusBar_panelAndViewEnabled_viewReceivesEvent() { public void handleTouchEventFromStatusBar_panelAndViewEnabled_viewReceivesEvent() {
when(mCommandQueue.panelsEnabled()).thenReturn(true); when(mCommandQueue.panelsEnabled()).thenReturn(true);
when(mView.isEnabled()).thenReturn(true); when(mView.isEnabled()).thenReturn(true);
MotionEvent event = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0); MotionEvent event = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 2f, 0);
mNotificationPanelViewController.getStatusBarTouchEventHandler().handleTouchEvent(event); mNotificationPanelViewController.getStatusBarTouchEventHandler().handleTouchEvent(event);
verify(mView).dispatchTouchEvent(event); verify(mView).dispatchTouchEvent(event);
} }
@Test
public void handleTouchEventFromStatusBar_topEdgeTouch_viewNeverReceivesEvent() {
when(mCommandQueue.panelsEnabled()).thenReturn(true);
when(mView.isEnabled()).thenReturn(true);
MotionEvent event = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0);
mNotificationPanelViewController.getStatusBarTouchEventHandler().handleTouchEvent(event);
verify(mView, never()).dispatchTouchEvent(event);
}
@Test @Test
public void testA11y_initializeNode() { public void testA11y_initializeNode() {
AccessibilityNodeInfo nodeInfo = new AccessibilityNodeInfo(); AccessibilityNodeInfo nodeInfo = new AccessibilityNodeInfo();