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

Commit 7379aee0 authored by MiltonWu's avatar MiltonWu Committed by Milton Wu
Browse files

Add context to FingerprintExtPreferencesProvider

Bug: 405274627
Test: atest FingerprintSettingsFragmentTest
Flag: EXEMPT interface changed
Change-Id: I66527bab885555df1dcab087862e5b1a96593ef5
parent 33936788
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ public interface FingerprintFeatureProvider {
    default FingerprintExtPreferencesProvider getExtPreferenceProvider(
            @NonNull Context context
    ) {
        return new FingerprintExtPreferencesProvider();
        return new FingerprintExtPreferencesProvider(context);
    }

    /**
+20 −5
Original line number Diff line number Diff line
@@ -468,12 +468,10 @@ public class FingerprintSettings extends SubSettings {
         * Add new preferences from FingerprintExtPreferencesProvider
         */
        public void setupExtFingerprintPreferences() {
            final FingerprintExtPreferencesProvider preferencesProvider =
                    FeatureFactory.getFeatureFactory().getFingerprintFeatureProvider()
                            .getExtPreferenceProvider(requireContext());
            FingerprintExtPreferencesProvider preferencesProvider = getExtPreferenceProvider();
            for (int index = 0; index < preferencesProvider.getSize(); ++index) {
                final RestrictedPreference preference = preferencesProvider.newPreference(
                        index, this::inflateFromResource, requireContext());
                        index, this::inflateFromResource);
                if (preference == null || findPreference(preference.getKey()) != null) {
                    continue;
                }
@@ -485,6 +483,12 @@ public class FingerprintSettings extends SubSettings {
            }
        }

        @NonNull
        private FingerprintExtPreferencesProvider getExtPreferenceProvider() {
            return FeatureFactory.getFeatureFactory().getFingerprintFeatureProvider()
                    .getExtPreferenceProvider(requireContext());
        }

        /**
         *
         */
@@ -748,7 +752,8 @@ public class FingerprintSettings extends SubSettings {
            // This needs to be after setting ids, otherwise
            // |mRequireScreenOnToAuthPreferenceController.isChecked| is always checking the primary
            // user instead of the user with |mUserId|.
            if (isSfps() || (screenOffUnlockUdfps() && isScreenOffUnlcokSupported())) {
            if (isSfps() || (screenOffUnlockUdfps() && isScreenOffUnlcokSupported())
                    || getExtPreferenceProvider().getSize() > 0) {
                scrollToPreference(fpPrefKey);
                addFingerprintUnlockCategory();
            }
@@ -1266,6 +1271,16 @@ public class FingerprintSettings extends SubSettings {

                }
            }

            if (mFingerprintUnlockCategoryPreferenceController == null
                    && getExtPreferenceProvider().getSize() > 0 && controllers != null) {
                for (AbstractPreferenceController controller : controllers) {
                    if (KEY_FINGERPRINT_UNLOCK_CATEGORY.equals(controller.getPreferenceKey())) {
                        mFingerprintUnlockCategoryPreferenceController =
                                (FingerprintUnlockCategoryController) controller;
                    }
                }
            }
            return controllers;
        }

+1 −2
Original line number Diff line number Diff line
@@ -27,14 +27,13 @@ import com.android.settingslib.RestrictedPreference
 *
 * @see com.android.settings.biometrics.fingerprint.FingerprintSettings
 */
open class FingerprintExtPreferencesProvider {
open class FingerprintExtPreferencesProvider(protected val context: Context) {

    open val size: Int = 0

    open fun newPreference(
        index: Int,
        inflater: PreferenceInflater,
        context: Context
    ): RestrictedPreference? = null

    interface PreferenceInflater {
+40 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ import androidx.fragment.app.FragmentTransaction;
import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider;

import com.android.settings.biometrics.fingerprint.feature.FingerprintExtPreferencesProvider;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.ConfirmDeviceCredentialActivity;
import com.android.settings.search.BaseSearchIndexProvider;
@@ -79,6 +80,7 @@ import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
import com.android.settings.testutils.shadow.ShadowSettingsPreferenceFragment;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.RestrictedSwitchPreference;

import org.junit.After;
@@ -123,6 +125,12 @@ public class FingerprintSettingsFragmentTest {
    private PackageManager mPackageManager;
    @Mock
    private BiometricManager mBiometricManager;
    @Mock
    private FingerprintExtPreferencesProvider mExtPreferencesProvider;
    @Mock
    private RestrictedPreference mRestrictedPreference0;
    @Mock
    private RestrictedPreference mRestrictedPreference1;

    @Captor
    private ArgumentCaptor<CancellationSignal> mCancellationSignalArgumentCaptor =
@@ -159,6 +167,11 @@ public class FingerprintSettingsFragmentTest {
        when(mFakeFeatureFactory.getFingerprintFeatureProvider()
                .getFingerprintSettingsFeatureProvider())
                .thenReturn(mFingerprintSettingsFeatureProvider);

        when(mFakeFeatureFactory.getFingerprintFeatureProvider()
                .getExtPreferenceProvider(mContext))
                .thenReturn(mExtPreferencesProvider);
        when(mExtPreferencesProvider.getSize()).thenReturn(0);
    }

    @After
@@ -417,6 +430,33 @@ public class FingerprintSettingsFragmentTest {
        assertThat(checkEnrolledPerf).isNull();
    }

    @Test
    public void testHasExtPreferences() {
        String key0 = "ExtKey0";
        String key1 = "ExtKey1";
        when(mRestrictedPreference0.getKey()).thenReturn(key0);
        when(mRestrictedPreference1.getKey()).thenReturn(key1);
        when(mExtPreferencesProvider.getSize()).thenReturn(2);
        when(mExtPreferencesProvider.newPreference(eq(0),
                any(FingerprintExtPreferencesProvider.PreferenceInflater.class)))
                .thenReturn(mRestrictedPreference0);
        when(mExtPreferencesProvider.newPreference(eq(1),
                any(FingerprintExtPreferencesProvider.PreferenceInflater.class)))
                .thenReturn(mRestrictedPreference1);

        Fingerprint fingerprint = new Fingerprint("Test", 0, 0);
        doReturn(List.of(fingerprint)).when(mFingerprintManager).getEnrolledFingerprints(anyInt());
        setUpFragment(false, PRIMARY_USER_ID, TYPE_UDFPS_OPTICAL, 5);

        shadowOf(Looper.getMainLooper()).idle();

        Preference preference0 = mFragment.findPreference(key0);
        assertThat(preference0).isEqualTo(mRestrictedPreference0);

        Preference preference1 = mFragment.findPreference(key1);
        assertThat(preference1).isEqualTo(mRestrictedPreference1);
    }

    private void setSensor(@FingerprintSensorProperties.SensorType int sensorType,
            int maxFingerprints) {
        final ArrayList<FingerprintSensorPropertiesInternal> props = new ArrayList<>();