Fix BP did not dismiss after swiping up the notification bar
AuthBiometricView doesn't use dismissWithoutCallback/dismissFromSystemServer
to close BP, so move disable operation to onDetachedFromWindow to avoid
AuthDialogPanelInteractionDetector work abnormally.
Bug: b/277841109
Test: atest AuthContainerTest
Change-Id: I1a699c7b8791fe0402f0d8da6bf6666385838e23
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
index e42f051..517f94f 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
@@ -637,6 +637,7 @@
@Override
public void onDetachedFromWindow() {
+ mPanelInteractionDetector.disable();
OnBackInvokedDispatcher dispatcher = findOnBackInvokedDispatcher();
if (dispatcher != null) {
findOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(mBackCallback);
@@ -674,7 +675,6 @@
@Override
public void dismissWithoutCallback(boolean animate) {
- mPanelInteractionDetector.disable();
if (animate) {
animateAway(false /* sendReason */, 0 /* reason */);
} else {
@@ -685,7 +685,6 @@
@Override
public void dismissFromSystemServer() {
- mPanelInteractionDetector.disable();
animateAway(false /* sendReason */, 0 /* reason */);
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetector.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetector.kt
index 6c62a39..b72801d 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetector.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetector.kt
@@ -30,6 +30,7 @@
@MainThread
fun disable() {
if (action != null) {
+ Log.i(TAG, "Disable dectector")
action = null
shadeExpansionStateManager.removeExpansionListener(this::onPanelExpansionChanged)
}
@@ -40,7 +41,7 @@
mainExecutor.execute {
action?.let {
if (event.tracking || (event.expanded && event.fraction > 0)) {
- Log.v(TAG, "Detected panel interaction, event: $event")
+ Log.i(TAG, "Detected panel interaction, event: $event")
it.onPanelInteraction.run()
disable()
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
index b4696e4..f914e75 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
@@ -170,24 +170,16 @@
}
@Test
- fun testFocusLossAfterRotating() {
+ fun testActionCancel_panelInteractionDetectorDisable() {
val container = initializeFingerprintContainer()
- waitForIdleSync()
-
- val requestID = authContainer?.requestId ?: 0L
-
- verify(callback).onDialogAnimatedIn(requestID)
- container.onOrientationChanged()
- container.onWindowFocusChanged(false)
- waitForIdleSync()
-
- verify(callback, never()).onDismissed(
- eq(AuthDialogCallback.DISMISSED_USER_CANCELED),
- eq<ByteArray?>(null), /* credentialAttestation */
- eq(requestID)
+ container.mBiometricCallback.onAction(
+ AuthBiometricView.Callback.ACTION_USER_CANCELED
)
+ waitForIdleSync()
+ verify(panelInteractionDetector).disable()
}
+
@Test
fun testActionAuthenticated_sendsDismissedAuthenticated() {
val container = initializeFingerprintContainer()