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

Commit eac87846 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
Merged-In: I1e7851ccd1d3045fee847c532b5b7d991ed0fe4a
parent 72b75946
Loading
Loading
Loading
Loading
+6 −17
Original line number Diff line number Diff line
@@ -69,7 +69,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
@@ -235,12 +234,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) {
@@ -497,16 +490,12 @@ 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);
                }
                mHandler.removeMessages(MESSAGE_IGNORE_AUTH);
                mHandler.postDelayed(() -> {
                }, MESSAGE_IGNORE_AUTH, mIgnoreAuthFor);

                mSensorOverlays.hide(getSensorId());
            });
        }
    }
+14 −0
Original line number Diff line number Diff line
@@ -616,6 +616,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 */);
    }