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

Commit cccf5375 authored by Joshua McCloskey's avatar Joshua McCloskey Committed by Joshua Mccloskey
Browse files

SideFPS bp cancels on power press

Test: atest FingerprintAuthenticationclient
Test: manually verified with bioemtric prompt
Fixes: 255486712
Change-Id: I1e7851ccd1d3045fee847c532b5b7d991ed0fe4a
parent 5b370f22
Loading
Loading
Loading
Loading
+9 −19
Original line number Diff line number Diff line
@@ -72,7 +72,6 @@ import java.util.function.Supplier;
class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession>
        implements Udfps, LockoutConsumer, PowerPressHandler {
    private static final String TAG = "FingerprintAuthenticationClient";
    private static final int MESSAGE_IGNORE_AUTH = 1;
    private static final int MESSAGE_AUTH_SUCCESS = 2;
    private static final int MESSAGE_FINGER_UP = 3;
    @NonNull
@@ -249,12 +248,6 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession>
                () -> {
                    long delay = 0;
                    if (authenticated && mSensorProps.isAnySidefpsType()) {
                        if (mHandler.hasMessages(MESSAGE_IGNORE_AUTH)) {
                            Slog.i(TAG, "(sideFPS) Ignoring auth due to recent power press");
                            onErrorInternal(BiometricConstants.BIOMETRIC_ERROR_POWER_PRESSED,
                                    0, true);
                            return;
                        }
                        delay = isKeyguard() ? mWaitForAuthKeyguard : mWaitForAuthBp;

                        if (mSideFpsLastAcquireStartTime != -1) {
@@ -515,18 +508,15 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession>
        if (mSensorProps.isAnySidefpsType()) {
            Slog.i(TAG, "(sideFPS): onPowerPressed");
            mHandler.post(() -> {
                if (mHandler.hasMessages(MESSAGE_AUTH_SUCCESS)) {
                    Slog.i(TAG, "(sideFPS): Ignoring auth in queue");
                Slog.i(TAG, "(sideFPS): finishing auth");
                // Ignore auths after a power has been detected
                mHandler.removeMessages(MESSAGE_AUTH_SUCCESS);
                // Do not call onError() as that will send an additional callback to coex.
                    onErrorInternal(BiometricConstants.BIOMETRIC_ERROR_POWER_PRESSED, 0, true);
                onErrorInternal(BiometricConstants.BIOMETRIC_ERROR_POWER_PRESSED,
                        0, true);
                mSensorOverlays.hide(getSensorId());
                mAuthSessionCoordinator.authEndedFor(getTargetUserId(),
                        mBiometricStrength, getSensorId(), getRequestId());
                }
                mHandler.removeMessages(MESSAGE_IGNORE_AUTH);
                mHandler.postDelayed(() -> {
                }, MESSAGE_IGNORE_AUTH, mIgnoreAuthFor);

            });
        }
    }
+14 −0
Original line number Diff line number Diff line
@@ -620,6 +620,20 @@ public class FingerprintAuthenticationClientTest {
        verify(mCallback).onClientFinished(any(), eq(true));
    }

    @Test
    public void sideFpsPowerPressCancelsIsntantly() throws Exception {
        when(mSensorProps.isAnySidefpsType()).thenReturn(true);

        final FingerprintAuthenticationClient client = createClient(1);
        client.start(mCallback);

        client.onPowerPressed();
        mLooper.dispatchAll();

        verify(mCallback, never()).onClientFinished(any(), eq(true));
        verify(mCallback).onClientFinished(any(), eq(false));
    }

    private FingerprintAuthenticationClient createClient() throws RemoteException {
        return createClient(100 /* version */, true /* allowBackgroundAuthentication */);
    }