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

Commit a8f485ec authored by Ilya Matyukhin's avatar Ilya Matyukhin Committed by Automerger Merge Worker
Browse files

Merge "Fix BiometricPrompt retrying without finger lift" into tm-qpr-dev am:...

Merge "Fix BiometricPrompt retrying without finger lift" into tm-qpr-dev am: 69c39233 am: 0d4b2a1f

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20192843



Change-Id: I9eb1446b3981a45f1232af592d2d0e52dd0d0358
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents f109727e 0d4b2a1f
Loading
Loading
Loading
Loading
+0 −13
Original line number Diff line number Diff line
@@ -652,17 +652,6 @@ public class AuthController implements CoreStartable, CommandQueue.Callbacks,
        mUdfpsController.onAodInterrupt(screenX, screenY, major, minor);
    }

    /**
     * Cancel a fingerprint scan manually. This will get rid of the white circle on the udfps
     * sensor area even if the user hasn't explicitly lifted their finger yet.
     */
    public void onCancelUdfps() {
        if (mUdfpsController == null) {
            return;
        }
        mUdfpsController.onCancelUdfps();
    }

    private void sendResultAndCleanUp(@DismissedReason int reason,
            @Nullable byte[] credentialAttestation) {
        if (mReceiver == null) {
@@ -1021,8 +1010,6 @@ public class AuthController implements CoreStartable, CommandQueue.Callbacks,
        } else {
            Log.w(TAG, "onBiometricError callback but dialog is gone");
        }

        onCancelUdfps();
    }

    @Override
+7 −11
Original line number Diff line number Diff line
@@ -788,7 +788,7 @@ public class UdfpsController implements DozeReceiver {
            // ACTION_UP/ACTION_CANCEL,  we need to be careful about not letting the screen
            // accidentally remain in high brightness mode. As a mitigation, queue a call to
            // cancel the fingerprint scan.
            mCancelAodTimeoutAction = mFgExecutor.executeDelayed(this::onCancelUdfps,
            mCancelAodTimeoutAction = mFgExecutor.executeDelayed(this::cancelAodInterrupt,
                    AOD_INTERRUPT_TIMEOUT_MILLIS);
            // using a hard-coded value for major and minor until it is available from the sensor
            onFingerDown(requestId, screenX, screenY, minor, major);
@@ -815,26 +815,22 @@ public class UdfpsController implements DozeReceiver {
    }

    /**
     * Cancel UDFPS affordances - ability to hide the UDFPS overlay before the user explicitly
     * lifts their finger. Generally, this should be called on errors in the authentication flow.
     *
     * The sensor that triggers an AOD fingerprint interrupt (see onAodInterrupt) doesn't give
     * ACTION_UP/ACTION_CANCEL events, so and AOD interrupt scan needs to be cancelled manually.
     * The sensor that triggers {@link #onAodInterrupt} doesn't emit ACTION_UP or ACTION_CANCEL
     * events, which means the fingerprint gesture created by the AOD interrupt needs to be
     * cancelled manually.
     * This should be called when authentication either succeeds or fails. Failing to cancel the
     * scan will leave the display in the UDFPS mode until the user lifts their finger. On optical
     * sensors, this can result in illumination persisting for longer than necessary.
     */
    void onCancelUdfps() {
    @VisibleForTesting
    void cancelAodInterrupt() {
        if (!mIsAodInterruptActive) {
            return;
        }
        if (mOverlay != null && mOverlay.getOverlayView() != null) {
            onFingerUp(mOverlay.getRequestId(), mOverlay.getOverlayView());
        }
        if (mCancelAodTimeoutAction != null) {
            mCancelAodTimeoutAction.run();
        mCancelAodTimeoutAction = null;
        }
        mIsAodInterruptActive = false;
    }

+1 −1
Original line number Diff line number Diff line
@@ -665,7 +665,7 @@ public class UdfpsControllerTest extends SysuiTestCase {
        mUdfpsController.onAodInterrupt(0, 0, 0f, 0f);
        when(mUdfpsView.isDisplayConfigured()).thenReturn(true);
        // WHEN it is cancelled
        mUdfpsController.onCancelUdfps();
        mUdfpsController.cancelAodInterrupt();
        // THEN the display is unconfigured
        verify(mUdfpsView).unconfigureDisplay();
    }