diff options
2 files changed, 25 insertions, 14 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index 629d3d4d50ba..13ce20cb5822 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -4603,20 +4603,20 @@ public final class NotificationPanelViewController implements Dumpable {                          return false;                      } -                    // If the view that would receive the touch is disabled, just have status bar -                    // eat the gesture. -                    if (event.getAction() == MotionEvent.ACTION_DOWN && !mView.isEnabled()) { -                        Log.v(TAG, -                                String.format( -                                        "onTouchForwardedFromStatusBar: " -                                                + "panel view disabled, eating touch at (%d,%d)", -                                        (int) event.getX(), -                                        (int) event.getY() -                                ) -                        ); -                        return true; +                    if (event.getAction() == MotionEvent.ACTION_DOWN) { +                        // If the view that would receive the touch is disabled, just have status +                        // bar eat the gesture. +                        if (!mView.isEnabled()) { +                            mShadeLog.logMotionEvent(event, +                                    "onTouchForwardedFromStatusBar: panel view disabled"); +                            return true; +                        } +                        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 mView.dispatchTouchEvent(event);                  }              }; diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java index 69a45599668b..f5b3bd081c72 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java @@ -831,7 +831,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {      public void handleTouchEventFromStatusBar_panelAndViewEnabled_viewReceivesEvent() {          when(mCommandQueue.panelsEnabled()).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); @@ -839,6 +839,17 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {      }      @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      public void testA11y_initializeNode() {          AccessibilityNodeInfo nodeInfo = new AccessibilityNodeInfo();          mAccessibilityDelegate.onInitializeAccessibilityNodeInfo(mView, nodeInfo);  |