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:
@@ -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 */);
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user