Don't send lock icon touches to NotifShade If the lock icon affordance enters the device, we don't want the shade to expand after device entry. Test: manual Fixes: 208364482 Change-Id: If2d5b5296f7820b099e4315f9586632993617955
diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java index 8847639..1633923 100644 --- a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java
@@ -661,26 +661,38 @@ * @return whether to intercept the touch event */ public boolean onTouchEvent(MotionEvent event, Runnable onGestureDetectedRunnable) { - if (mSensorTouchLocation.contains((int) event.getX(), (int) event.getY()) - && (mView.getVisibility() == View.VISIBLE - || (mAodFp != null && mAodFp.getVisibility() == View.VISIBLE))) { + if (onInterceptTouchEvent(event)) { mOnGestureDetectedRunnable = onGestureDetectedRunnable; mGestureDetector.onTouchEvent(event); - } - - // we continue to intercept all following touches until we see MotionEvent.ACTION_CANCEL UP - // or MotionEvent.ACTION_UP. this is to avoid passing the touch to NPV - // after the lock icon disappears on device entry - if (mDownDetected) { - if (event.getAction() == MotionEvent.ACTION_CANCEL - || event.getAction() == MotionEvent.ACTION_UP) { - mDownDetected = false; - } return true; } + + mDownDetected = false; return false; } + /** + * Intercepts the touch if the onDown event and current event are within this lock icon view's + * bounds. + */ + public boolean onInterceptTouchEvent(MotionEvent event) { + if (!inLockIconArea(event) || !isClickable()) { + return false; + } + + if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { + return true; + } + + return mDownDetected; + } + + private boolean inLockIconArea(MotionEvent event) { + return mSensorTouchLocation.contains((int) event.getX(), (int) event.getY()) + && (mView.getVisibility() == View.VISIBLE + || (mAodFp != null && mAodFp.getVisibility() == View.VISIBLE)); + } + private boolean isClickable() { return mUdfpsSupported || mShowUnlockIcon; }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java index 01587f7..55f1450 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java
@@ -338,6 +338,11 @@ return true; } + if (mLockIconViewController.onInterceptTouchEvent(ev)) { + // immediately return true; don't send the touch to the drag down helper + return true; + } + boolean intercept = false; if (mNotificationPanelViewController.isFullyExpanded() && mDragDownHelper.isDragDownEnabled()