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

Commit b2e00d2f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Refine get props inside FingerprintRepository"

parents 271362af 5d7bab1c
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import android.content.res.Resources;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -39,10 +41,21 @@ import java.util.List;
 */
public class FingerprintRepository {

    private static final String TAG = "FingerprintRepository";
    @NonNull private final FingerprintManager mFingerprintManager;

    private List<FingerprintSensorPropertiesInternal> mSensorPropertiesCache;

    public FingerprintRepository(@NonNull FingerprintManager fingerprintManager) {
        mFingerprintManager = fingerprintManager;
        mFingerprintManager.addAuthenticatorsRegisteredCallback(
                new IFingerprintAuthenticatorsRegisteredCallback.Stub() {
                    @Override
                    public void onAllAuthenticatorsRegistered(
                            List<FingerprintSensorPropertiesInternal> sensors) {
                        mSensorPropertiesCache = sensors;
                    }
                });
    }

    /**
@@ -86,9 +99,12 @@ public class FingerprintRepository {

    @Nullable
    private FingerprintSensorPropertiesInternal getFirstFingerprintSensorPropertiesInternal() {
        // TODO(b/264827022) use API addAuthenticatorsRegisteredCallback
        final List<FingerprintSensorPropertiesInternal> props =
                mFingerprintManager.getSensorPropertiesInternal();
        final List<FingerprintSensorPropertiesInternal> props = mSensorPropertiesCache;
        if (props == null) {
            // Handle this case if it really happens
            Log.e(TAG, "Sensor properties cache is null");
            return null;
        }
        return props.size() > 0 ? props.get(0) : null;
    }

+39 −72
Original line number Diff line number Diff line
@@ -23,24 +23,19 @@ import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFP
import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFPS_ULTRASONIC;
import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UNKNOWN;

import static com.google.common.truth.Truth.assertThat;
import static com.android.settings.biometrics2.utils.FingerprintRepositoryUtils.newFingerprintRepository;
import static com.android.settings.biometrics2.utils.FingerprintRepositoryUtils.setupFingerprintEnrolledFingerprints;
import static com.android.settings.biometrics2.utils.FingerprintRepositoryUtils.setupSuwMaxFingerprintsEnrollable;

import static org.mockito.Mockito.when;
import static com.google.common.truth.Truth.assertThat;

import android.content.Context;
import android.content.res.Resources;
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;

import androidx.annotation.NonNull;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;

import com.android.settings.testutils.ResourcesUtils;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -49,8 +44,6 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

import java.util.ArrayList;

@RunWith(AndroidJUnit4.class)
public class FingerprintRepositoryTest {

@@ -60,114 +53,88 @@ public class FingerprintRepositoryTest {
    @Mock private FingerprintManager mFingerprintManager;

    private Context mContext;
    private FingerprintRepository mFingerprintRepository;

    @Before
    public void setUp() {
        mContext = ApplicationProvider.getApplicationContext();
        mFingerprintRepository = new FingerprintRepository(mFingerprintManager);
    }

    @Test
    public void testCanAssumeSensorType_forUnknownSensor() {
        setupFingerprintFirstSensor(mFingerprintManager, TYPE_UNKNOWN, 1);
        assertThat(mFingerprintRepository.canAssumeUdfps()).isFalse();
        assertThat(mFingerprintRepository.canAssumeSfps()).isFalse();
        final FingerprintRepository repository = newFingerprintRepository(mFingerprintManager,
                TYPE_UNKNOWN, 1);
        assertThat(repository.canAssumeUdfps()).isFalse();
        assertThat(repository.canAssumeSfps()).isFalse();
    }

    @Test
    public void testCanAssumeSensorType_forRearSensor() {
        setupFingerprintFirstSensor(mFingerprintManager, TYPE_REAR, 1);
        assertThat(mFingerprintRepository.canAssumeUdfps()).isFalse();
        assertThat(mFingerprintRepository.canAssumeSfps()).isFalse();
        final FingerprintRepository repository = newFingerprintRepository(mFingerprintManager,
                TYPE_REAR, 1);
        assertThat(repository.canAssumeUdfps()).isFalse();
        assertThat(repository.canAssumeSfps()).isFalse();
    }

    @Test
    public void testCanAssumeSensorType_forUdfpsUltrasonicSensor() {
        setupFingerprintFirstSensor(mFingerprintManager, TYPE_UDFPS_ULTRASONIC, 1);
        assertThat(mFingerprintRepository.canAssumeUdfps()).isTrue();
        assertThat(mFingerprintRepository.canAssumeSfps()).isFalse();
        final FingerprintRepository repository = newFingerprintRepository(mFingerprintManager,
                TYPE_UDFPS_ULTRASONIC, 1);
        assertThat(repository.canAssumeUdfps()).isTrue();
        assertThat(repository.canAssumeSfps()).isFalse();
    }

    @Test
    public void testCanAssumeSensorType_forUdfpsOpticalSensor() {
        setupFingerprintFirstSensor(mFingerprintManager, TYPE_UDFPS_OPTICAL, 1);
        assertThat(mFingerprintRepository.canAssumeUdfps()).isTrue();
        assertThat(mFingerprintRepository.canAssumeSfps()).isFalse();
        final FingerprintRepository repository = newFingerprintRepository(mFingerprintManager,
                TYPE_UDFPS_OPTICAL, 1);
        assertThat(repository.canAssumeUdfps()).isTrue();
        assertThat(repository.canAssumeSfps()).isFalse();
    }

    @Test
    public void testCanAssumeSensorType_forPowerButtonSensor() {
        setupFingerprintFirstSensor(mFingerprintManager, TYPE_POWER_BUTTON, 1);
        assertThat(mFingerprintRepository.canAssumeUdfps()).isFalse();
        assertThat(mFingerprintRepository.canAssumeSfps()).isTrue();
        final FingerprintRepository repository = newFingerprintRepository(mFingerprintManager,
                TYPE_POWER_BUTTON, 1);
        assertThat(repository.canAssumeUdfps()).isFalse();
        assertThat(repository.canAssumeSfps()).isTrue();
    }

    @Test
    public void testCanAssumeSensorType_forHomeButtonSensor() {
        setupFingerprintFirstSensor(mFingerprintManager, TYPE_HOME_BUTTON, 1);
        assertThat(mFingerprintRepository.canAssumeUdfps()).isFalse();
        assertThat(mFingerprintRepository.canAssumeSfps()).isFalse();
        final FingerprintRepository repository = newFingerprintRepository(mFingerprintManager,
                TYPE_HOME_BUTTON, 1);
        assertThat(repository.canAssumeUdfps()).isFalse();
        assertThat(repository.canAssumeSfps()).isFalse();
    }

    @Test
    public void testGetMaxFingerprints() {
        setupFingerprintFirstSensor(mFingerprintManager, TYPE_UNKNOWN, 999);
        assertThat(mFingerprintRepository.getMaxFingerprints()).isEqualTo(999);
        final FingerprintRepository repository = newFingerprintRepository(mFingerprintManager,
                TYPE_UNKNOWN, 999);
        assertThat(repository.getMaxFingerprints()).isEqualTo(999);
    }

    @Test
    public void testGetNumOfEnrolledFingerprintsSize() {
        final FingerprintRepository repository = newFingerprintRepository(mFingerprintManager,
                TYPE_UNKNOWN, 999);
        setupFingerprintEnrolledFingerprints(mFingerprintManager, 10, 3);
        setupFingerprintEnrolledFingerprints(mFingerprintManager, 22, 99);

        assertThat(mFingerprintRepository.getNumOfEnrolledFingerprintsSize(10)).isEqualTo(3);
        assertThat(mFingerprintRepository.getNumOfEnrolledFingerprintsSize(22)).isEqualTo(99);
        assertThat(repository.getNumOfEnrolledFingerprintsSize(10)).isEqualTo(3);
        assertThat(repository.getNumOfEnrolledFingerprintsSize(22)).isEqualTo(99);
    }

    @Test
    public void testGetMaxFingerprintsInSuw() {
        final FingerprintRepository repository = newFingerprintRepository(mFingerprintManager,
                TYPE_UNKNOWN, 999);
        setupSuwMaxFingerprintsEnrollable(mContext, mResources, 333);
        assertThat(mFingerprintRepository.getMaxFingerprintsInSuw(mResources))
        assertThat(repository.getMaxFingerprintsInSuw(mResources))
                .isEqualTo(333);

        setupSuwMaxFingerprintsEnrollable(mContext, mResources, 20);
        assertThat(mFingerprintRepository.getMaxFingerprintsInSuw(mResources)).isEqualTo(20);
    }

    public static void setupSuwMaxFingerprintsEnrollable(
            @NonNull Context context,
            @NonNull Resources mockedResources,
            int numOfFp) {
        final int resId = ResourcesUtils.getResourcesId(context, "integer",
                "suw_max_fingerprints_enrollable");
        when(mockedResources.getInteger(resId)).thenReturn(numOfFp);
    }

    public static void setupFingerprintFirstSensor(
            @NonNull FingerprintManager mockedFingerprintManager,
            @FingerprintSensorProperties.SensorType int sensorType,
            int maxEnrollmentsPerUser) {

        final ArrayList<FingerprintSensorPropertiesInternal> props = new ArrayList<>();
        props.add(new FingerprintSensorPropertiesInternal(
                0 /* sensorId */,
                SensorProperties.STRENGTH_STRONG,
                maxEnrollmentsPerUser,
                new ArrayList<>() /* componentInfo */,
                sensorType,
                true /* resetLockoutRequiresHardwareAuthToken */));
        when(mockedFingerprintManager.getSensorPropertiesInternal()).thenReturn(props);
        assertThat(repository.getMaxFingerprintsInSuw(mResources)).isEqualTo(20);
    }

    public static void setupFingerprintEnrolledFingerprints(
            @NonNull FingerprintManager mockedFingerprintManager,
            int userId,
            int enrolledFingerprints) {
        final ArrayList<Fingerprint> ret = new ArrayList<>();
        for (int i = 0; i < enrolledFingerprints; ++i) {
            ret.add(new Fingerprint("name", 0, 0, 0L));
        }
        when(mockedFingerprintManager.getEnrolledFingerprints(userId)).thenReturn(ret);
    }
}
+109 −68

File changed.

Preview size limit exceeded, changes collapsed.

+3 −3
Original line number Diff line number Diff line
@@ -20,10 +20,10 @@ import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHE
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_SKIP;
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;
import static com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollIntroduction.EXTRA_FINGERPRINT_ENROLLED_COUNT;
import static com.android.settings.biometrics2.data.repository.FingerprintRepositoryTest.setupFingerprintEnrolledFingerprints;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollmentViewModel.SAVED_STATE_IS_WAITING_ACTIVITY_RESULT;
import static com.android.settings.biometrics2.util.EnrollmentRequestUtil.newAllFalseRequest;
import static com.android.settings.biometrics2.util.EnrollmentRequestUtil.newIsSuwRequest;
import static com.android.settings.biometrics2.utils.EnrollmentRequestUtils.newAllFalseRequest;
import static com.android.settings.biometrics2.utils.EnrollmentRequestUtils.newIsSuwRequest;
import static com.android.settings.biometrics2.utils.FingerprintRepositoryUtils.setupFingerprintEnrolledFingerprints;

import static com.google.common.truth.Truth.assertThat;

+2 −2
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 */

package com.android.settings.biometrics2.util;
package com.android.settings.biometrics2.utils;

import static com.android.settings.biometrics.BiometricEnrollBase.EXTRA_FROM_SETTINGS_SUMMARY;

@@ -33,7 +33,7 @@ import androidx.annotation.NonNull;

import com.android.settings.biometrics2.ui.model.EnrollmentRequest;

public class EnrollmentRequestUtil {
public class EnrollmentRequestUtils {

    @NonNull
    public static EnrollmentRequest newAllFalseRequest(@NonNull Context context) {
Loading