Merge "Add context to FingerprintExtPreferencesProvider" into main

This commit is contained in:
Treehugger Robot
2025-03-21 02:23:39 -07:00
committed by Android (Google) Code Review
4 changed files with 62 additions and 8 deletions

View File

@@ -73,7 +73,7 @@ public interface FingerprintFeatureProvider {
default FingerprintExtPreferencesProvider getExtPreferenceProvider( default FingerprintExtPreferencesProvider getExtPreferenceProvider(
@NonNull Context context @NonNull Context context
) { ) {
return new FingerprintExtPreferencesProvider(); return new FingerprintExtPreferencesProvider(context);
} }
/** /**

View File

@@ -468,12 +468,10 @@ public class FingerprintSettings extends SubSettings {
* Add new preferences from FingerprintExtPreferencesProvider * Add new preferences from FingerprintExtPreferencesProvider
*/ */
public void setupExtFingerprintPreferences() { public void setupExtFingerprintPreferences() {
final FingerprintExtPreferencesProvider preferencesProvider = FingerprintExtPreferencesProvider preferencesProvider = getExtPreferenceProvider();
FeatureFactory.getFeatureFactory().getFingerprintFeatureProvider()
.getExtPreferenceProvider(requireContext());
for (int index = 0; index < preferencesProvider.getSize(); ++index) { for (int index = 0; index < preferencesProvider.getSize(); ++index) {
final RestrictedPreference preference = preferencesProvider.newPreference( final RestrictedPreference preference = preferencesProvider.newPreference(
index, this::inflateFromResource, requireContext()); index, this::inflateFromResource);
if (preference == null || findPreference(preference.getKey()) != null) { if (preference == null || findPreference(preference.getKey()) != null) {
continue; 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 // This needs to be after setting ids, otherwise
// |mRequireScreenOnToAuthPreferenceController.isChecked| is always checking the primary // |mRequireScreenOnToAuthPreferenceController.isChecked| is always checking the primary
// user instead of the user with |mUserId|. // user instead of the user with |mUserId|.
if (isSfps() || (screenOffUnlockUdfps() && isScreenOffUnlcokSupported())) { if (isSfps() || (screenOffUnlockUdfps() && isScreenOffUnlcokSupported())
|| getExtPreferenceProvider().getSize() > 0) {
scrollToPreference(fpPrefKey); scrollToPreference(fpPrefKey);
addFingerprintUnlockCategory(); 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; return controllers;
} }

View File

@@ -27,14 +27,13 @@ import com.android.settingslib.RestrictedPreference
* *
* @see com.android.settings.biometrics.fingerprint.FingerprintSettings * @see com.android.settings.biometrics.fingerprint.FingerprintSettings
*/ */
open class FingerprintExtPreferencesProvider { open class FingerprintExtPreferencesProvider(protected val context: Context) {
open val size: Int = 0 open val size: Int = 0
open fun newPreference( open fun newPreference(
index: Int, index: Int,
inflater: PreferenceInflater, inflater: PreferenceInflater,
context: Context
): RestrictedPreference? = null ): RestrictedPreference? = null
interface PreferenceInflater { interface PreferenceInflater {

View File

@@ -70,6 +70,7 @@ import androidx.fragment.app.FragmentTransaction;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider; 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.ChooseLockSettingsHelper;
import com.android.settings.password.ConfirmDeviceCredentialActivity; import com.android.settings.password.ConfirmDeviceCredentialActivity;
import com.android.settings.search.BaseSearchIndexProvider; 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.ShadowSettingsPreferenceFragment;
import com.android.settings.testutils.shadow.ShadowUserManager; import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.testutils.shadow.ShadowUtils; import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.RestrictedSwitchPreference; import com.android.settingslib.RestrictedSwitchPreference;
import org.junit.After; import org.junit.After;
@@ -123,6 +125,12 @@ public class FingerprintSettingsFragmentTest {
private PackageManager mPackageManager; private PackageManager mPackageManager;
@Mock @Mock
private BiometricManager mBiometricManager; private BiometricManager mBiometricManager;
@Mock
private FingerprintExtPreferencesProvider mExtPreferencesProvider;
@Mock
private RestrictedPreference mRestrictedPreference0;
@Mock
private RestrictedPreference mRestrictedPreference1;
@Captor @Captor
private ArgumentCaptor<CancellationSignal> mCancellationSignalArgumentCaptor = private ArgumentCaptor<CancellationSignal> mCancellationSignalArgumentCaptor =
@@ -159,6 +167,11 @@ public class FingerprintSettingsFragmentTest {
when(mFakeFeatureFactory.getFingerprintFeatureProvider() when(mFakeFeatureFactory.getFingerprintFeatureProvider()
.getFingerprintSettingsFeatureProvider()) .getFingerprintSettingsFeatureProvider())
.thenReturn(mFingerprintSettingsFeatureProvider); .thenReturn(mFingerprintSettingsFeatureProvider);
when(mFakeFeatureFactory.getFingerprintFeatureProvider()
.getExtPreferenceProvider(mContext))
.thenReturn(mExtPreferencesProvider);
when(mExtPreferencesProvider.getSize()).thenReturn(0);
} }
@After @After
@@ -417,6 +430,33 @@ public class FingerprintSettingsFragmentTest {
assertThat(checkEnrolledPerf).isNull(); 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, private void setSensor(@FingerprintSensorProperties.SensorType int sensorType,
int maxFingerprints) { int maxFingerprints) {
final ArrayList<FingerprintSensorPropertiesInternal> props = new ArrayList<>(); final ArrayList<FingerprintSensorPropertiesInternal> props = new ArrayList<>();