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

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

Restart fingerprint auth on cancel.

Test: atest FingerprintSettingsFragmentTest
Fixes: 336572954
Change-Id: Ie64d509caf052271a141e466f5c840e92f5dc119
parent 1eca5e76
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -352,11 +352,6 @@ public class FingerprintSettings extends SubSettings {
         */
        protected void handleError(int errMsgId, CharSequence msg) {
            switch (errMsgId) {
                case FingerprintManager.FINGERPRINT_ERROR_CANCELED:
                case FingerprintManager.FINGERPRINT_ERROR_USER_CANCELED:
                    // Only happens if we get preempted by another activity, or canceled by the
                    // user (e.g. swipe up to home). Ignored.
                    return;
                case FingerprintManager.FINGERPRINT_ERROR_LOCKOUT:
                    mInFingerprintLockout = true;
                    // We've been locked out.  Reset after 30s.
+29 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.settings.biometrics.fingerprint;

import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_POWER_BUTTON;
import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_REAR;
import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFPS_OPTICAL;

import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment;
@@ -33,13 +34,16 @@ import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.Intent;
import android.content.pm.UserInfo;
import android.hardware.biometrics.ComponentInfoInternal;
import android.hardware.biometrics.SensorProperties;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintSensorProperties;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
@@ -80,6 +84,7 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;

import java.util.ArrayList;
import java.util.List;

@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowSettingsPreferenceFragment.class, ShadowUtils.class, ShadowFragment.class,
@@ -147,7 +152,6 @@ public class FingerprintSettingsFragmentTest {
    public void testCancellationSignalLifeCycle() {
        setUpFragment(false);

        mFingerprintAuthenticateSidecar.setFingerprintManager(mFingerprintManager);

        doNothing().when(mFingerprintManager).authenticate(any(),
                mCancellationSignalArgumentCaptor.capture(),
@@ -213,6 +217,7 @@ public class FingerprintSettingsFragmentTest {
        doReturn(fragmentManager).when(mActivity).getSupportFragmentManager();

        mFingerprintAuthenticateSidecar = new FingerprintAuthenticateSidecar();
        mFingerprintAuthenticateSidecar.setFingerprintManager(mFingerprintManager);
        doReturn(mFingerprintAuthenticateSidecar).when(fragmentManager).findFragmentByTag(
                "authenticate_sidecar");

@@ -246,4 +251,27 @@ public class FingerprintSettingsFragmentTest {
                true /* resetLockoutRequiresHardwareAuthToken */));
        doReturn(props).when(mFingerprintManager).getSensorPropertiesInternal();
    }

    @Test
    public void testAuthOnFragmentSetup() {
        doReturn(List.of(new Fingerprint("Finger 1", 1, 2, 3)))
                .when(mFingerprintManager).getEnrolledFingerprints(anyInt());
        setUpFragment(false, 1, TYPE_REAR);

        verify(mFingerprintManager).authenticate(any(), any(),
                any(), any(), anyInt());
    }

    @Test
    public void testErrorCancelledRestartsAuth() {
        doReturn(List.of(new Fingerprint("Finger 1", 1, 2, 3)))
                .when(mFingerprintManager).getEnrolledFingerprints(anyInt());
        setUpFragment(false, 1, TYPE_REAR);

        // When we receive a cancel, we should restart auth.
        mFragment.handleError(FingerprintManager.FINGERPRINT_ERROR_CANCELED, "blah");

        verify(mFingerprintManager, times(2)).authenticate(any(), any(),
                any(), any(), anyInt());
    }
}