Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9fac9e9d authored by Vincent Wang's avatar Vincent Wang
Browse files

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
parent 6218576e
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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 */);
    }

+2 −1
Original line number Diff line number Diff line
@@ -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()
                }
+6 −14
Original line number Diff line number Diff line
@@ -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()