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(
@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
*/
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;
}

View File

@@ -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 {

View File

@@ -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<>();