Loading res/xml/security_settings_fingerprint.xml +16 −1 Original line number Diff line number Diff line Loading @@ -19,10 +19,21 @@ xmlns:settings="http://schemas.android.com/apk/res-auto" android:title="@string/security_settings_fingerprint_preference_title"> <PreferenceCategory android:key="security_settings_fingerprints_enrolled" settings:controller="com.android.settings.biometrics.fingerprint.FingerprintsEnrolledCategoryPreferenceController"> </PreferenceCategory> <androidx.preference.Preference android:key="key_fingerprint_add" android:title="@string/fingerprint_add_title" android:icon="@drawable/ic_add_24dp"/> <PreferenceCategory android:key="security_settings_fingerprint_unlock_category" android:title="@string/security_settings_fingerprint_settings_preferences_category" settings:controller="com.android.settings.biometrics.fingerprint.FingerprintUnlockCategoryPreferenceController"> settings:controller="com.android.settings.biometrics.fingerprint.FingerprintUnlockCategoryController" settings:isPreferenceVisible="false"> <com.android.settingslib.RestrictedSwitchPreference android:key="security_settings_require_screen_on_to_auth" Loading @@ -32,4 +43,8 @@ settings:controller="com.android.settings.biometrics.fingerprint.FingerprintSettingsRequireScreenOnToAuthPreferenceController" /> </PreferenceCategory> <PreferenceCategory android:key="security_settings_fingerprint_footer"> </PreferenceCategory> </PreferenceScreen> src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java +77 −48 Original line number Diff line number Diff line Loading @@ -171,8 +171,12 @@ public class FingerprintSettings extends SubSettings { private static final String KEY_IS_ENROLLING = "is_enrolled"; private static final String KEY_REQUIRE_SCREEN_ON_TO_AUTH = "security_settings_require_screen_on_to_auth"; private static final String KEY_FINGERPRINTS_ENROLLED_CATEGORY = "security_settings_fingerprints_enrolled"; private static final String KEY_FINGERPRINT_UNLOCK_CATEGORY = "security_settings_fingerprint_unlock_category"; private static final String KEY_FINGERPRINT_UNLOCK_FOOTER = "security_settings_fingerprint_footer"; private static final int MSG_REFRESH_FINGERPRINT_TEMPLATES = 1000; private static final int MSG_FINGER_AUTH_SUCCESS = 1001; Loading @@ -189,10 +193,15 @@ public class FingerprintSettings extends SubSettings { protected static final boolean DEBUG = false; private List<AbstractPreferenceController> mControllers; private FingerprintUnlockCategoryController mFingerprintUnlockCategoryPreferenceController; private FingerprintSettingsRequireScreenOnToAuthPreferenceController mRequireScreenOnToAuthPreferenceController; private Preference mAddFingerprintPreference; private RestrictedSwitchPreference mRequireScreenOnToAuthPreference; private PreferenceCategory mFingerprintsEnrolledCategory; private PreferenceCategory mFingerprintUnlockCategory; private PreferenceCategory mFingerprintUnlockFooter; private FingerprintManager mFingerprintManager; private FingerprintUpdater mFingerprintUpdater; Loading Loading @@ -259,9 +268,6 @@ public class FingerprintSettings extends SubSettings { } private void updateDialog() { if (isSfps()) { setRequireScreenOnToAuthVisibility(); } RenameDialog renameDialog = (RenameDialog) getFragmentManager(). findFragmentByTag(RenameDialog.class.getName()); if (renameDialog != null) { Loading @@ -277,7 +283,8 @@ public class FingerprintSettings extends SubSettings { case MSG_REFRESH_FINGERPRINT_TEMPLATES: removeFingerprintPreference(msg.arg1); updateAddPreference(); retryFingerprint(); updateFingerprintUnlockCategoryVisibility(); updatePreferences(); break; case MSG_FINGER_AUTH_SUCCESS: highlightFingerprintItem(msg.arg1); Loading Loading @@ -423,6 +430,9 @@ public class FingerprintSettings extends SubSettings { addFirstFingerprint(null); } } final PreferenceScreen root = getPreferenceScreen(); root.removeAll(); addPreferencesFromResource(getPreferenceScreenResId()); updateFooterColumns(activity); } Loading Loading @@ -512,48 +522,33 @@ public class FingerprintSettings extends SubSettings { */ private PreferenceScreen createPreferenceHierarchy() { PreferenceScreen root = getPreferenceScreen(); if (root != null) { root.removeAll(); addFingerprintPreferences(root); setPreferenceScreen(root); return root; } private void addFingerprintPreferences(PreferenceGroup root) { final String fpPrefKey = addFingerprintItemPreferences(root); if (isSfps()) { scrollToPreference(fpPrefKey); addFingerprintUnlockCategory(); } addPreferencesFromResource(getPreferenceScreenResId()); mRequireScreenOnToAuthPreference = findPreference(KEY_REQUIRE_SCREEN_ON_TO_AUTH); mFingerprintUnlockCategory = findPreference(KEY_FINGERPRINT_UNLOCK_CATEGORY); for (AbstractPreferenceController controller : mControllers) { if (controller instanceof FingerprintSettingsPreferenceController) { ((FingerprintSettingsPreferenceController) controller).setUserId(mUserId); } else if (controller instanceof FingerprintUnlockCategoryController) { ((FingerprintUnlockCategoryController) controller).setUserId(mUserId); } mRequireScreenOnToAuthPreference.setChecked( mRequireScreenOnToAuthPreferenceController.isChecked()); mRequireScreenOnToAuthPreference.setOnPreferenceChangeListener( (preference, newValue) -> { boolean isChecked = ((SwitchPreference) preference).isChecked(); mRequireScreenOnToAuthPreferenceController.setChecked(!isChecked); return true; }); mFingerprintUnlockCategory.setVisible(false); if (isSfps()) { setRequireScreenOnToAuthVisibility(); } setPreferenceScreen(root); return root; createFooterPreference(root); } private void setRequireScreenOnToAuthVisibility() { int fingerprintsEnrolled = mFingerprintManager.getEnrolledFingerprints(mUserId).size(); final boolean removalInProgress = mRemovalSidecar.inProgress(); // Removing last remaining fingerprint if (fingerprintsEnrolled == 0 && removalInProgress) { mFingerprintUnlockCategory.setVisible(false); } else { mFingerprintUnlockCategory.setVisible(true); } private String addFingerprintItemPreferences(PreferenceGroup root) { mFingerprintsEnrolledCategory = findPreference(KEY_FINGERPRINTS_ENROLLED_CATEGORY); if (mFingerprintsEnrolledCategory != null) { mFingerprintsEnrolledCategory.removeAll(); } private String addFingerprintItemPreferences(PreferenceGroup root) { root.removeAll(); String keyToReturn = KEY_FINGERPRINT_ADD; final List<Fingerprint> items = mFingerprintManager.getEnrolledFingerprints(mUserId); final int fingerprintCount = items.size(); Loading @@ -576,20 +571,44 @@ public class FingerprintSettings extends SubSettings { if (mFingerprintsRenaming.containsKey(item.getBiometricId())) { pref.setTitle(mFingerprintsRenaming.get(item.getBiometricId())); } root.addPreference(pref); mFingerprintsEnrolledCategory.addPreference(pref); pref.setOnPreferenceChangeListener(this); } mAddFingerprintPreference = findPreference(KEY_FINGERPRINT_ADD); setupAddFingerprintPreference(); return keyToReturn; } Preference addPreference = new Preference(root.getContext()); addPreference.setKey(KEY_FINGERPRINT_ADD); addPreference.setTitle(R.string.fingerprint_add_title); addPreference.setIcon(R.drawable.ic_add_24dp); root.addPreference(addPreference); addPreference.setOnPreferenceChangeListener(this); private void setupAddFingerprintPreference() { mAddFingerprintPreference.setOnPreferenceChangeListener(this); updateAddPreference(); createFooterPreference(root); } return keyToReturn; private void addFingerprintUnlockCategory() { mFingerprintUnlockCategory = findPreference(KEY_FINGERPRINT_UNLOCK_CATEGORY); setupFingerprintUnlockCategoryPreferences(); updateFingerprintUnlockCategoryVisibility(); } private void updateFingerprintUnlockCategoryVisibility() { final boolean mFingerprintUnlockCategoryAvailable = mFingerprintUnlockCategoryPreferenceController.isAvailable(); if (mFingerprintUnlockCategory.isVisible() != mFingerprintUnlockCategoryAvailable) { mFingerprintUnlockCategory.setVisible( mFingerprintUnlockCategoryAvailable); } } private void setupFingerprintUnlockCategoryPreferences() { mRequireScreenOnToAuthPreference = findPreference(KEY_REQUIRE_SCREEN_ON_TO_AUTH); mRequireScreenOnToAuthPreference.setChecked( mRequireScreenOnToAuthPreferenceController.isChecked()); mRequireScreenOnToAuthPreference.setOnPreferenceChangeListener( (preference, newValue) -> { final boolean isChecked = ((SwitchPreference) preference).isChecked(); mRequireScreenOnToAuthPreferenceController.setChecked(!isChecked); return true; }); } private void updateAddPreference() { Loading @@ -612,8 +631,8 @@ public class FingerprintSettings extends SubSettings { final boolean removalInProgress = mRemovalSidecar.inProgress(); CharSequence maxSummary = tooMany ? getContext().getString(R.string.fingerprint_add_max, max) : ""; addPreference.setSummary(maxSummary); addPreference.setEnabled(!tooMany && !removalInProgress && mToken != null); mAddFingerprintPreference.setSummary(maxSummary); mAddFingerprintPreference.setEnabled(!tooMany && !removalInProgress && mToken != null); } private void createFooterPreference(PreferenceGroup root) { Loading @@ -621,6 +640,10 @@ public class FingerprintSettings extends SubSettings { if (context == null) { return; } mFingerprintUnlockFooter = findPreference(KEY_FINGERPRINT_UNLOCK_FOOTER); if (mFingerprintUnlockFooter != null) { mFingerprintUnlockFooter.removeAll(); } for (int i = 0; i < mFooterColumns.size(); ++i) { final FooterColumn column = mFooterColumns.get(i); final FooterPreference footer = new FooterPreference.Builder(context) Loading @@ -634,7 +657,7 @@ public class FingerprintSettings extends SubSettings { footer.setLearnMoreText(column.mLearnMoreOverrideText); } } root.addPreference(footer); mFingerprintUnlockFooter.addPreference(footer); } } Loading Loading @@ -815,11 +838,17 @@ public class FingerprintSettings extends SubSettings { private List<AbstractPreferenceController> buildPreferenceControllers(Context context) { final List<AbstractPreferenceController> controllers = new ArrayList<>(); mFingerprintUnlockCategoryPreferenceController = new FingerprintUnlockCategoryController( context, KEY_FINGERPRINT_UNLOCK_CATEGORY ); mRequireScreenOnToAuthPreferenceController = new FingerprintSettingsRequireScreenOnToAuthPreferenceController( context, KEY_REQUIRE_SCREEN_ON_TO_AUTH ); controllers.add(mFingerprintUnlockCategoryPreferenceController); controllers.add(mRequireScreenOnToAuthPreferenceController); return controllers; } Loading src/com/android/settings/biometrics/fingerprint/FingerprintSettingsRequireScreenOnToAuthPreferenceController.java +1 −1 Original line number Diff line number Diff line Loading @@ -94,7 +94,7 @@ public class FingerprintSettingsRequireScreenOnToAuthPreferenceController && mFingerprintManager.isHardwareDetected() && mFingerprintManager.isPowerbuttonFps()) { return mFingerprintManager.hasEnrolledTemplates(getUserId()) ? AVAILABLE : DISABLED_DEPENDENT_SETTING; ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } else { return UNSUPPORTED_ON_DEVICE; } Loading src/com/android/settings/biometrics/fingerprint/FingerprintUnlockCategoryController.java 0 → 100644 +60 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.biometrics.fingerprint; import android.content.Context; import android.hardware.fingerprint.FingerprintManager; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; /** * Preference controller that controls the fingerprint unlock features to be shown / be hidden. */ public class FingerprintUnlockCategoryController extends BasePreferenceController { private static final String TAG = "FingerprintUnlockCategoryPreferenceController"; private int mUserId; @VisibleForTesting protected FingerprintManager mFingerprintManager; public FingerprintUnlockCategoryController(Context context, String key) { super(context, key); mFingerprintManager = Utils.getFingerprintManagerOrNull(context); } @Override public int getAvailabilityStatus() { if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected() && mFingerprintManager.isPowerbuttonFps()) { return mFingerprintManager.hasEnrolledTemplates(getUserId()) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } else { return UNSUPPORTED_ON_DEVICE; } } public void setUserId(int userId) { mUserId = userId; } protected int getUserId() { return mUserId; } } src/com/android/settings/biometrics/fingerprint/FingerprintsEnrolledCategoryPreferenceController.java 0 → 100644 +59 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.biometrics.fingerprint; import android.content.Context; import android.hardware.fingerprint.FingerprintManager; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; /** * Preference controller that controls the enrolled fingerprints to be shown / be hidden. */ public class FingerprintsEnrolledCategoryPreferenceController extends BasePreferenceController { private static final String TAG = "FingerprintsEnrolledCategoryPreferenceController"; private int mUserId; @VisibleForTesting protected FingerprintManager mFingerprintManager; public FingerprintsEnrolledCategoryPreferenceController(Context context, String key) { super(context, key); mFingerprintManager = Utils.getFingerprintManagerOrNull(context); } @Override public int getAvailabilityStatus() { if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) { return mFingerprintManager.hasEnrolledTemplates(getUserId()) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } else { return UNSUPPORTED_ON_DEVICE; } } public void setUserId(int userId) { mUserId = userId; } protected int getUserId() { return mUserId; } } Loading
res/xml/security_settings_fingerprint.xml +16 −1 Original line number Diff line number Diff line Loading @@ -19,10 +19,21 @@ xmlns:settings="http://schemas.android.com/apk/res-auto" android:title="@string/security_settings_fingerprint_preference_title"> <PreferenceCategory android:key="security_settings_fingerprints_enrolled" settings:controller="com.android.settings.biometrics.fingerprint.FingerprintsEnrolledCategoryPreferenceController"> </PreferenceCategory> <androidx.preference.Preference android:key="key_fingerprint_add" android:title="@string/fingerprint_add_title" android:icon="@drawable/ic_add_24dp"/> <PreferenceCategory android:key="security_settings_fingerprint_unlock_category" android:title="@string/security_settings_fingerprint_settings_preferences_category" settings:controller="com.android.settings.biometrics.fingerprint.FingerprintUnlockCategoryPreferenceController"> settings:controller="com.android.settings.biometrics.fingerprint.FingerprintUnlockCategoryController" settings:isPreferenceVisible="false"> <com.android.settingslib.RestrictedSwitchPreference android:key="security_settings_require_screen_on_to_auth" Loading @@ -32,4 +43,8 @@ settings:controller="com.android.settings.biometrics.fingerprint.FingerprintSettingsRequireScreenOnToAuthPreferenceController" /> </PreferenceCategory> <PreferenceCategory android:key="security_settings_fingerprint_footer"> </PreferenceCategory> </PreferenceScreen>
src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java +77 −48 Original line number Diff line number Diff line Loading @@ -171,8 +171,12 @@ public class FingerprintSettings extends SubSettings { private static final String KEY_IS_ENROLLING = "is_enrolled"; private static final String KEY_REQUIRE_SCREEN_ON_TO_AUTH = "security_settings_require_screen_on_to_auth"; private static final String KEY_FINGERPRINTS_ENROLLED_CATEGORY = "security_settings_fingerprints_enrolled"; private static final String KEY_FINGERPRINT_UNLOCK_CATEGORY = "security_settings_fingerprint_unlock_category"; private static final String KEY_FINGERPRINT_UNLOCK_FOOTER = "security_settings_fingerprint_footer"; private static final int MSG_REFRESH_FINGERPRINT_TEMPLATES = 1000; private static final int MSG_FINGER_AUTH_SUCCESS = 1001; Loading @@ -189,10 +193,15 @@ public class FingerprintSettings extends SubSettings { protected static final boolean DEBUG = false; private List<AbstractPreferenceController> mControllers; private FingerprintUnlockCategoryController mFingerprintUnlockCategoryPreferenceController; private FingerprintSettingsRequireScreenOnToAuthPreferenceController mRequireScreenOnToAuthPreferenceController; private Preference mAddFingerprintPreference; private RestrictedSwitchPreference mRequireScreenOnToAuthPreference; private PreferenceCategory mFingerprintsEnrolledCategory; private PreferenceCategory mFingerprintUnlockCategory; private PreferenceCategory mFingerprintUnlockFooter; private FingerprintManager mFingerprintManager; private FingerprintUpdater mFingerprintUpdater; Loading Loading @@ -259,9 +268,6 @@ public class FingerprintSettings extends SubSettings { } private void updateDialog() { if (isSfps()) { setRequireScreenOnToAuthVisibility(); } RenameDialog renameDialog = (RenameDialog) getFragmentManager(). findFragmentByTag(RenameDialog.class.getName()); if (renameDialog != null) { Loading @@ -277,7 +283,8 @@ public class FingerprintSettings extends SubSettings { case MSG_REFRESH_FINGERPRINT_TEMPLATES: removeFingerprintPreference(msg.arg1); updateAddPreference(); retryFingerprint(); updateFingerprintUnlockCategoryVisibility(); updatePreferences(); break; case MSG_FINGER_AUTH_SUCCESS: highlightFingerprintItem(msg.arg1); Loading Loading @@ -423,6 +430,9 @@ public class FingerprintSettings extends SubSettings { addFirstFingerprint(null); } } final PreferenceScreen root = getPreferenceScreen(); root.removeAll(); addPreferencesFromResource(getPreferenceScreenResId()); updateFooterColumns(activity); } Loading Loading @@ -512,48 +522,33 @@ public class FingerprintSettings extends SubSettings { */ private PreferenceScreen createPreferenceHierarchy() { PreferenceScreen root = getPreferenceScreen(); if (root != null) { root.removeAll(); addFingerprintPreferences(root); setPreferenceScreen(root); return root; } private void addFingerprintPreferences(PreferenceGroup root) { final String fpPrefKey = addFingerprintItemPreferences(root); if (isSfps()) { scrollToPreference(fpPrefKey); addFingerprintUnlockCategory(); } addPreferencesFromResource(getPreferenceScreenResId()); mRequireScreenOnToAuthPreference = findPreference(KEY_REQUIRE_SCREEN_ON_TO_AUTH); mFingerprintUnlockCategory = findPreference(KEY_FINGERPRINT_UNLOCK_CATEGORY); for (AbstractPreferenceController controller : mControllers) { if (controller instanceof FingerprintSettingsPreferenceController) { ((FingerprintSettingsPreferenceController) controller).setUserId(mUserId); } else if (controller instanceof FingerprintUnlockCategoryController) { ((FingerprintUnlockCategoryController) controller).setUserId(mUserId); } mRequireScreenOnToAuthPreference.setChecked( mRequireScreenOnToAuthPreferenceController.isChecked()); mRequireScreenOnToAuthPreference.setOnPreferenceChangeListener( (preference, newValue) -> { boolean isChecked = ((SwitchPreference) preference).isChecked(); mRequireScreenOnToAuthPreferenceController.setChecked(!isChecked); return true; }); mFingerprintUnlockCategory.setVisible(false); if (isSfps()) { setRequireScreenOnToAuthVisibility(); } setPreferenceScreen(root); return root; createFooterPreference(root); } private void setRequireScreenOnToAuthVisibility() { int fingerprintsEnrolled = mFingerprintManager.getEnrolledFingerprints(mUserId).size(); final boolean removalInProgress = mRemovalSidecar.inProgress(); // Removing last remaining fingerprint if (fingerprintsEnrolled == 0 && removalInProgress) { mFingerprintUnlockCategory.setVisible(false); } else { mFingerprintUnlockCategory.setVisible(true); } private String addFingerprintItemPreferences(PreferenceGroup root) { mFingerprintsEnrolledCategory = findPreference(KEY_FINGERPRINTS_ENROLLED_CATEGORY); if (mFingerprintsEnrolledCategory != null) { mFingerprintsEnrolledCategory.removeAll(); } private String addFingerprintItemPreferences(PreferenceGroup root) { root.removeAll(); String keyToReturn = KEY_FINGERPRINT_ADD; final List<Fingerprint> items = mFingerprintManager.getEnrolledFingerprints(mUserId); final int fingerprintCount = items.size(); Loading @@ -576,20 +571,44 @@ public class FingerprintSettings extends SubSettings { if (mFingerprintsRenaming.containsKey(item.getBiometricId())) { pref.setTitle(mFingerprintsRenaming.get(item.getBiometricId())); } root.addPreference(pref); mFingerprintsEnrolledCategory.addPreference(pref); pref.setOnPreferenceChangeListener(this); } mAddFingerprintPreference = findPreference(KEY_FINGERPRINT_ADD); setupAddFingerprintPreference(); return keyToReturn; } Preference addPreference = new Preference(root.getContext()); addPreference.setKey(KEY_FINGERPRINT_ADD); addPreference.setTitle(R.string.fingerprint_add_title); addPreference.setIcon(R.drawable.ic_add_24dp); root.addPreference(addPreference); addPreference.setOnPreferenceChangeListener(this); private void setupAddFingerprintPreference() { mAddFingerprintPreference.setOnPreferenceChangeListener(this); updateAddPreference(); createFooterPreference(root); } return keyToReturn; private void addFingerprintUnlockCategory() { mFingerprintUnlockCategory = findPreference(KEY_FINGERPRINT_UNLOCK_CATEGORY); setupFingerprintUnlockCategoryPreferences(); updateFingerprintUnlockCategoryVisibility(); } private void updateFingerprintUnlockCategoryVisibility() { final boolean mFingerprintUnlockCategoryAvailable = mFingerprintUnlockCategoryPreferenceController.isAvailable(); if (mFingerprintUnlockCategory.isVisible() != mFingerprintUnlockCategoryAvailable) { mFingerprintUnlockCategory.setVisible( mFingerprintUnlockCategoryAvailable); } } private void setupFingerprintUnlockCategoryPreferences() { mRequireScreenOnToAuthPreference = findPreference(KEY_REQUIRE_SCREEN_ON_TO_AUTH); mRequireScreenOnToAuthPreference.setChecked( mRequireScreenOnToAuthPreferenceController.isChecked()); mRequireScreenOnToAuthPreference.setOnPreferenceChangeListener( (preference, newValue) -> { final boolean isChecked = ((SwitchPreference) preference).isChecked(); mRequireScreenOnToAuthPreferenceController.setChecked(!isChecked); return true; }); } private void updateAddPreference() { Loading @@ -612,8 +631,8 @@ public class FingerprintSettings extends SubSettings { final boolean removalInProgress = mRemovalSidecar.inProgress(); CharSequence maxSummary = tooMany ? getContext().getString(R.string.fingerprint_add_max, max) : ""; addPreference.setSummary(maxSummary); addPreference.setEnabled(!tooMany && !removalInProgress && mToken != null); mAddFingerprintPreference.setSummary(maxSummary); mAddFingerprintPreference.setEnabled(!tooMany && !removalInProgress && mToken != null); } private void createFooterPreference(PreferenceGroup root) { Loading @@ -621,6 +640,10 @@ public class FingerprintSettings extends SubSettings { if (context == null) { return; } mFingerprintUnlockFooter = findPreference(KEY_FINGERPRINT_UNLOCK_FOOTER); if (mFingerprintUnlockFooter != null) { mFingerprintUnlockFooter.removeAll(); } for (int i = 0; i < mFooterColumns.size(); ++i) { final FooterColumn column = mFooterColumns.get(i); final FooterPreference footer = new FooterPreference.Builder(context) Loading @@ -634,7 +657,7 @@ public class FingerprintSettings extends SubSettings { footer.setLearnMoreText(column.mLearnMoreOverrideText); } } root.addPreference(footer); mFingerprintUnlockFooter.addPreference(footer); } } Loading Loading @@ -815,11 +838,17 @@ public class FingerprintSettings extends SubSettings { private List<AbstractPreferenceController> buildPreferenceControllers(Context context) { final List<AbstractPreferenceController> controllers = new ArrayList<>(); mFingerprintUnlockCategoryPreferenceController = new FingerprintUnlockCategoryController( context, KEY_FINGERPRINT_UNLOCK_CATEGORY ); mRequireScreenOnToAuthPreferenceController = new FingerprintSettingsRequireScreenOnToAuthPreferenceController( context, KEY_REQUIRE_SCREEN_ON_TO_AUTH ); controllers.add(mFingerprintUnlockCategoryPreferenceController); controllers.add(mRequireScreenOnToAuthPreferenceController); return controllers; } Loading
src/com/android/settings/biometrics/fingerprint/FingerprintSettingsRequireScreenOnToAuthPreferenceController.java +1 −1 Original line number Diff line number Diff line Loading @@ -94,7 +94,7 @@ public class FingerprintSettingsRequireScreenOnToAuthPreferenceController && mFingerprintManager.isHardwareDetected() && mFingerprintManager.isPowerbuttonFps()) { return mFingerprintManager.hasEnrolledTemplates(getUserId()) ? AVAILABLE : DISABLED_DEPENDENT_SETTING; ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } else { return UNSUPPORTED_ON_DEVICE; } Loading
src/com/android/settings/biometrics/fingerprint/FingerprintUnlockCategoryController.java 0 → 100644 +60 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.biometrics.fingerprint; import android.content.Context; import android.hardware.fingerprint.FingerprintManager; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; /** * Preference controller that controls the fingerprint unlock features to be shown / be hidden. */ public class FingerprintUnlockCategoryController extends BasePreferenceController { private static final String TAG = "FingerprintUnlockCategoryPreferenceController"; private int mUserId; @VisibleForTesting protected FingerprintManager mFingerprintManager; public FingerprintUnlockCategoryController(Context context, String key) { super(context, key); mFingerprintManager = Utils.getFingerprintManagerOrNull(context); } @Override public int getAvailabilityStatus() { if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected() && mFingerprintManager.isPowerbuttonFps()) { return mFingerprintManager.hasEnrolledTemplates(getUserId()) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } else { return UNSUPPORTED_ON_DEVICE; } } public void setUserId(int userId) { mUserId = userId; } protected int getUserId() { return mUserId; } }
src/com/android/settings/biometrics/fingerprint/FingerprintsEnrolledCategoryPreferenceController.java 0 → 100644 +59 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.biometrics.fingerprint; import android.content.Context; import android.hardware.fingerprint.FingerprintManager; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; /** * Preference controller that controls the enrolled fingerprints to be shown / be hidden. */ public class FingerprintsEnrolledCategoryPreferenceController extends BasePreferenceController { private static final String TAG = "FingerprintsEnrolledCategoryPreferenceController"; private int mUserId; @VisibleForTesting protected FingerprintManager mFingerprintManager; public FingerprintsEnrolledCategoryPreferenceController(Context context, String key) { super(context, key); mFingerprintManager = Utils.getFingerprintManagerOrNull(context); } @Override public int getAvailabilityStatus() { if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) { return mFingerprintManager.hasEnrolledTemplates(getUserId()) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } else { return UNSUPPORTED_ON_DEVICE; } } public void setUserId(int userId) { mUserId = userId; } protected int getUserId() { return mUserId; } }