Loading packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +30 −14 Original line number Diff line number Diff line Loading @@ -2141,7 +2141,6 @@ public final class NotificationPanelViewController implements Dumpable { if ((h > touchSlop || (h < -touchSlop && mQsExpanded)) && Math.abs(h) > Math.abs(x - mInitialTouchX) && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)) { debugLog("onQsIntercept - start tracking expansion"); mView.getParent().requestDisallowInterceptTouchEvent(true); mShadeLog.onQsInterceptMoveQsTrackingEnabled(h); mQsTracking = true; Loading Loading @@ -2352,7 +2351,7 @@ public final class NotificationPanelViewController implements Dumpable { if (!mSplitShadeEnabled && computeQsExpansionFraction() <= 0.01 && getExpandedFraction() < 1.0) { mShadeLog.logMotionEvent(event, "handleQsTouch: QQS touched while shade collapsing"); "handleQsTouch: QQS touched while shade collapsing, QS tracking disabled"); mQsTracking = false; } if (!mQsExpandImmediate && mQsTracking) { Loading Loading @@ -5796,12 +5795,9 @@ public final class NotificationPanelViewController implements Dumpable { /** @see ViewGroup#onInterceptTouchEvent(MotionEvent) */ public boolean onInterceptTouchEvent(MotionEvent event) { mShadeLog.logMotionEvent(event, "NPVC onInterceptTouchEvent"); if (SPEW_LOGCAT) { Log.v(TAG, "NPVC onInterceptTouchEvent (" + event.getId() + "): (" + event.getX() + "," + event.getY() + ")"); } if (mQs.disallowPanelTouches()) { mShadeLog.logMotionEvent(event, "NPVC not intercepting touch, panel touches disallowed"); return false; } initDownStates(event); Loading Loading @@ -5834,8 +5830,15 @@ public final class NotificationPanelViewController implements Dumpable { + "QsIntercept"); return true; } if (mInstantExpanding || !mNotificationsDragEnabled || mTouchDisabled || (mMotionAborted && event.getActionMasked() != MotionEvent.ACTION_DOWN)) { if (mInstantExpanding || !mNotificationsDragEnabled || mTouchDisabled) { mShadeLog.logNotInterceptingTouchInstantExpanding(mInstantExpanding, !mNotificationsDragEnabled, mTouchDisabled); return false; } if (mMotionAborted && event.getActionMasked() != MotionEvent.ACTION_DOWN) { mShadeLog.logMotionEventStatusBarState(event, mStatusBarStateController.getState(), "NPVC MotionEvent not intercepted: non-down action, motion was aborted"); return false; } Loading Loading @@ -5890,6 +5893,9 @@ public final class NotificationPanelViewController implements Dumpable { } break; case MotionEvent.ACTION_POINTER_DOWN: mShadeLog.logMotionEventStatusBarState(event, mStatusBarStateController.getState(), "onInterceptTouchEvent: pointer down action"); if (mStatusBarStateController.getState() == StatusBarState.KEYGUARD) { mMotionAborted = true; mVelocityTracker.clear(); Loading Loading @@ -5931,7 +5937,8 @@ public final class NotificationPanelViewController implements Dumpable { // events are received in this handler with identical downTimes. Until the // source of the issue can be located, detect this case and ignore. // see b/193350347 Log.w(TAG, "Duplicate down event detected... ignoring"); mShadeLog.logMotionEvent(event, "onTouch: duplicate down event detected... ignoring"); return true; } mLastTouchDownTime = event.getDownTime(); Loading @@ -5939,6 +5946,8 @@ public final class NotificationPanelViewController implements Dumpable { if (mQsFullyExpanded && mQs != null && mQs.disallowPanelTouches()) { mShadeLog.logMotionEvent(event, "onTouch: ignore touch, panel touches disallowed and qs fully expanded"); return false; } Loading @@ -5946,6 +5955,8 @@ public final class NotificationPanelViewController implements Dumpable { // otherwise user would be able to pull down QS or expand the shade. if (mCentralSurfaces.isBouncerShowingScrimmed() || mCentralSurfaces.isBouncerShowingOverDream()) { mShadeLog.logMotionEvent(event, "onTouch: ignore touch, bouncer scrimmed or showing over dream"); return false; } Loading Loading @@ -6003,15 +6014,17 @@ public final class NotificationPanelViewController implements Dumpable { private boolean handleTouch(MotionEvent event) { if (mInstantExpanding) { mShadeLog.logMotionEvent(event, "onTouch: touch ignored due to instant expanding"); mShadeLog.logMotionEvent(event, "handleTouch: touch ignored due to instant expanding"); return false; } if (mTouchDisabled && event.getActionMasked() != MotionEvent.ACTION_CANCEL) { mShadeLog.logMotionEvent(event, "onTouch: non-cancel action, touch disabled"); mShadeLog.logMotionEvent(event, "handleTouch: non-cancel action, touch disabled"); return false; } if (mMotionAborted && event.getActionMasked() != MotionEvent.ACTION_DOWN) { mShadeLog.logMotionEvent(event, "onTouch: non-down action, motion was aborted"); mShadeLog.logMotionEventStatusBarState(event, mStatusBarStateController.getState(), "handleTouch: non-down action, motion was aborted"); return false; } Loading @@ -6021,7 +6034,7 @@ public final class NotificationPanelViewController implements Dumpable { // Turn off tracking if it's on or the shade can get stuck in the down position. onTrackingStopped(true /* expand */); } mShadeLog.logMotionEvent(event, "onTouch: drag not enabled"); mShadeLog.logMotionEvent(event, "handleTouch: drag not enabled"); return false; } Loading Loading @@ -6094,6 +6107,9 @@ public final class NotificationPanelViewController implements Dumpable { } break; case MotionEvent.ACTION_POINTER_DOWN: mShadeLog.logMotionEventStatusBarState(event, mStatusBarStateController.getState(), "handleTouch: pointer down action"); if (mStatusBarStateController.getState() == StatusBarState.KEYGUARD) { mMotionAborted = true; endMotionEvent(event, x, y, true /* forceCancel */); Loading packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt +38 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,29 @@ class ShadeLogger @Inject constructor(@ShadeLog private val buffer: LogBuffer) { ) } fun logMotionEventStatusBarState(event: MotionEvent, statusBarState: Int, message: String) { log( LogLevel.VERBOSE, { str1 = message long1 = event.eventTime long2 = event.downTime int1 = event.action int2 = statusBarState double1 = event.y.toDouble() }, { "$str1\neventTime=$long1,downTime=$long2,y=$double1,action=$int1," + "statusBarState=${when (int2) { 0 -> "SHADE" 1 -> "KEYGUARD" 2 -> "SHADE_LOCKED" else -> "UNKNOWN:$int2" }}" } ) } fun logExpansionChanged( message: String, fraction: Float, Loading Loading @@ -164,4 +187,19 @@ class ShadeLogger @Inject constructor(@ShadeLog private val buffer: LogBuffer) { "tap to be detected: proximityIsNotNear: $bool1, isNotFalseTap: $bool2" }) } fun logNotInterceptingTouchInstantExpanding( instantExpanding: Boolean, notificationsDragEnabled: Boolean, touchDisabled: Boolean ) { log(LogLevel.VERBOSE, { bool1 = instantExpanding bool2 = notificationsDragEnabled bool3 = touchDisabled }, { "NPVC not intercepting touch, instantExpanding: $bool1, " + "!notificationsDragEnabled: $bool2, touchDisabled: $bool3" }) } } Loading
packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +30 −14 Original line number Diff line number Diff line Loading @@ -2141,7 +2141,6 @@ public final class NotificationPanelViewController implements Dumpable { if ((h > touchSlop || (h < -touchSlop && mQsExpanded)) && Math.abs(h) > Math.abs(x - mInitialTouchX) && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)) { debugLog("onQsIntercept - start tracking expansion"); mView.getParent().requestDisallowInterceptTouchEvent(true); mShadeLog.onQsInterceptMoveQsTrackingEnabled(h); mQsTracking = true; Loading Loading @@ -2352,7 +2351,7 @@ public final class NotificationPanelViewController implements Dumpable { if (!mSplitShadeEnabled && computeQsExpansionFraction() <= 0.01 && getExpandedFraction() < 1.0) { mShadeLog.logMotionEvent(event, "handleQsTouch: QQS touched while shade collapsing"); "handleQsTouch: QQS touched while shade collapsing, QS tracking disabled"); mQsTracking = false; } if (!mQsExpandImmediate && mQsTracking) { Loading Loading @@ -5796,12 +5795,9 @@ public final class NotificationPanelViewController implements Dumpable { /** @see ViewGroup#onInterceptTouchEvent(MotionEvent) */ public boolean onInterceptTouchEvent(MotionEvent event) { mShadeLog.logMotionEvent(event, "NPVC onInterceptTouchEvent"); if (SPEW_LOGCAT) { Log.v(TAG, "NPVC onInterceptTouchEvent (" + event.getId() + "): (" + event.getX() + "," + event.getY() + ")"); } if (mQs.disallowPanelTouches()) { mShadeLog.logMotionEvent(event, "NPVC not intercepting touch, panel touches disallowed"); return false; } initDownStates(event); Loading Loading @@ -5834,8 +5830,15 @@ public final class NotificationPanelViewController implements Dumpable { + "QsIntercept"); return true; } if (mInstantExpanding || !mNotificationsDragEnabled || mTouchDisabled || (mMotionAborted && event.getActionMasked() != MotionEvent.ACTION_DOWN)) { if (mInstantExpanding || !mNotificationsDragEnabled || mTouchDisabled) { mShadeLog.logNotInterceptingTouchInstantExpanding(mInstantExpanding, !mNotificationsDragEnabled, mTouchDisabled); return false; } if (mMotionAborted && event.getActionMasked() != MotionEvent.ACTION_DOWN) { mShadeLog.logMotionEventStatusBarState(event, mStatusBarStateController.getState(), "NPVC MotionEvent not intercepted: non-down action, motion was aborted"); return false; } Loading Loading @@ -5890,6 +5893,9 @@ public final class NotificationPanelViewController implements Dumpable { } break; case MotionEvent.ACTION_POINTER_DOWN: mShadeLog.logMotionEventStatusBarState(event, mStatusBarStateController.getState(), "onInterceptTouchEvent: pointer down action"); if (mStatusBarStateController.getState() == StatusBarState.KEYGUARD) { mMotionAborted = true; mVelocityTracker.clear(); Loading Loading @@ -5931,7 +5937,8 @@ public final class NotificationPanelViewController implements Dumpable { // events are received in this handler with identical downTimes. Until the // source of the issue can be located, detect this case and ignore. // see b/193350347 Log.w(TAG, "Duplicate down event detected... ignoring"); mShadeLog.logMotionEvent(event, "onTouch: duplicate down event detected... ignoring"); return true; } mLastTouchDownTime = event.getDownTime(); Loading @@ -5939,6 +5946,8 @@ public final class NotificationPanelViewController implements Dumpable { if (mQsFullyExpanded && mQs != null && mQs.disallowPanelTouches()) { mShadeLog.logMotionEvent(event, "onTouch: ignore touch, panel touches disallowed and qs fully expanded"); return false; } Loading @@ -5946,6 +5955,8 @@ public final class NotificationPanelViewController implements Dumpable { // otherwise user would be able to pull down QS or expand the shade. if (mCentralSurfaces.isBouncerShowingScrimmed() || mCentralSurfaces.isBouncerShowingOverDream()) { mShadeLog.logMotionEvent(event, "onTouch: ignore touch, bouncer scrimmed or showing over dream"); return false; } Loading Loading @@ -6003,15 +6014,17 @@ public final class NotificationPanelViewController implements Dumpable { private boolean handleTouch(MotionEvent event) { if (mInstantExpanding) { mShadeLog.logMotionEvent(event, "onTouch: touch ignored due to instant expanding"); mShadeLog.logMotionEvent(event, "handleTouch: touch ignored due to instant expanding"); return false; } if (mTouchDisabled && event.getActionMasked() != MotionEvent.ACTION_CANCEL) { mShadeLog.logMotionEvent(event, "onTouch: non-cancel action, touch disabled"); mShadeLog.logMotionEvent(event, "handleTouch: non-cancel action, touch disabled"); return false; } if (mMotionAborted && event.getActionMasked() != MotionEvent.ACTION_DOWN) { mShadeLog.logMotionEvent(event, "onTouch: non-down action, motion was aborted"); mShadeLog.logMotionEventStatusBarState(event, mStatusBarStateController.getState(), "handleTouch: non-down action, motion was aborted"); return false; } Loading @@ -6021,7 +6034,7 @@ public final class NotificationPanelViewController implements Dumpable { // Turn off tracking if it's on or the shade can get stuck in the down position. onTrackingStopped(true /* expand */); } mShadeLog.logMotionEvent(event, "onTouch: drag not enabled"); mShadeLog.logMotionEvent(event, "handleTouch: drag not enabled"); return false; } Loading Loading @@ -6094,6 +6107,9 @@ public final class NotificationPanelViewController implements Dumpable { } break; case MotionEvent.ACTION_POINTER_DOWN: mShadeLog.logMotionEventStatusBarState(event, mStatusBarStateController.getState(), "handleTouch: pointer down action"); if (mStatusBarStateController.getState() == StatusBarState.KEYGUARD) { mMotionAborted = true; endMotionEvent(event, x, y, true /* forceCancel */); Loading
packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt +38 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,29 @@ class ShadeLogger @Inject constructor(@ShadeLog private val buffer: LogBuffer) { ) } fun logMotionEventStatusBarState(event: MotionEvent, statusBarState: Int, message: String) { log( LogLevel.VERBOSE, { str1 = message long1 = event.eventTime long2 = event.downTime int1 = event.action int2 = statusBarState double1 = event.y.toDouble() }, { "$str1\neventTime=$long1,downTime=$long2,y=$double1,action=$int1," + "statusBarState=${when (int2) { 0 -> "SHADE" 1 -> "KEYGUARD" 2 -> "SHADE_LOCKED" else -> "UNKNOWN:$int2" }}" } ) } fun logExpansionChanged( message: String, fraction: Float, Loading Loading @@ -164,4 +187,19 @@ class ShadeLogger @Inject constructor(@ShadeLog private val buffer: LogBuffer) { "tap to be detected: proximityIsNotNear: $bool1, isNotFalseTap: $bool2" }) } fun logNotInterceptingTouchInstantExpanding( instantExpanding: Boolean, notificationsDragEnabled: Boolean, touchDisabled: Boolean ) { log(LogLevel.VERBOSE, { bool1 = instantExpanding bool2 = notificationsDragEnabled bool3 = touchDisabled }, { "NPVC not intercepting touch, instantExpanding: $bool1, " + "!notificationsDragEnabled: $bool2, touchDisabled: $bool3" }) } }