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
This commit is contained in:
Vincent Wang
2023-04-12 09:06:32 +00:00
parent 6218576ef9
commit 9fac9e9dcb
3 changed files with 9 additions and 17 deletions

View File

@@ -637,6 +637,7 @@ public class AuthContainerView extends LinearLayout
@Override
public void onDetachedFromWindow() {
mPanelInteractionDetector.disable();
OnBackInvokedDispatcher dispatcher = findOnBackInvokedDispatcher();
if (dispatcher != null) {
findOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(mBackCallback);
@@ -674,7 +675,6 @@ public class AuthContainerView extends LinearLayout
@Override
public void dismissWithoutCallback(boolean animate) {
mPanelInteractionDetector.disable();
if (animate) {
animateAway(false /* sendReason */, 0 /* reason */);
} else {
@@ -685,7 +685,6 @@ public class AuthContainerView extends LinearLayout
@Override
public void dismissFromSystemServer() {
mPanelInteractionDetector.disable();
animateAway(false /* sendReason */, 0 /* reason */);
}

View File

@@ -30,6 +30,7 @@ constructor(
@MainThread
fun disable() {
if (action != null) {
Log.i(TAG, "Disable dectector")
action = null
shadeExpansionStateManager.removeExpansionListener(this::onPanelExpansionChanged)
}
@@ -40,7 +41,7 @@ constructor(
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()
}

View File

@@ -170,24 +170,16 @@ class AuthContainerViewTest : SysuiTestCase() {
}
@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()