From 43f2be20594f6232e4e250dc464f64ac0d0e2ba1 Mon Sep 17 00:00:00 2001 From: Curtis Belmonte Date: Sat, 24 Jul 2021 09:20:08 -0700 Subject: [PATCH] Use correct user ID for face bypass pref controller Ensures that the lockscreen bypass preference toggle shown on the face unlock settings screen always uses the correct user ID. This fixes an issue where the preference toggle for a guest user would use the primary user's setting when multiple biometrics are supported. Test: Manual: 1. Turn on Settings > System > Multiple users > Use multiple users 2. Add a guest account and switch to it 3. Enroll a face for Face Unlock on the guest account 4. From the Face Unlock settings screen, toggle "Skip lock screen" 5. Ensure that face bypasses lock screen iff this toggle is on 6. Switch back to the owner account and repeat steps 3-5 Fixes: 193488905 Change-Id: I2da4ce466fe0446cccc9119c90bd322daf627339 --- .../settings/biometrics/face/FaceSettings.java | 13 +++++-------- ...ettingsLockscreenBypassPreferenceController.java | 12 ++++++++---- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/com/android/settings/biometrics/face/FaceSettings.java b/src/com/android/settings/biometrics/face/FaceSettings.java index 1a4dc41f77d..140a3fc469e 100644 --- a/src/com/android/settings/biometrics/face/FaceSettings.java +++ b/src/com/android/settings/biometrics/face/FaceSettings.java @@ -162,6 +162,11 @@ public class FaceSettings extends DashboardFragment { R.string.security_settings_face_profile_preference_title)); } + mLockscreenController = Utils.isMultipleBiometricsSupported(context) + ? use(BiometricLockscreenBypassPreferenceController.class) + : use(FaceSettingsLockscreenBypassPreferenceController.class); + mLockscreenController.setUserId(mUserId); + Preference keyguardPref = findPreference(FaceSettingsKeyguardPreferenceController.KEY); Preference appPref = findPreference(FaceSettingsAppPreferenceController.KEY); Preference attentionPref = findPreference(FaceSettingsAttentionPreferenceController.KEY); @@ -195,14 +200,6 @@ public class FaceSettings extends DashboardFragment { } } - @Override - public void onAttach(Context context) { - super.onAttach(context); - - mLockscreenController = use(FaceSettingsLockscreenBypassPreferenceController.class); - mLockscreenController.setUserId(mUserId); - } - @Override public void onResume() { super.onResume(); diff --git a/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java index c6ef87f92c2..c0cb64ec6b1 100644 --- a/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java +++ b/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java @@ -56,13 +56,13 @@ public class FaceSettingsLockscreenBypassPreferenceController int defaultValue = mContext.getResources().getBoolean( com.android.internal.R.bool.config_faceAuthDismissesKeyguard) ? 1 : 0; return Settings.Secure.getIntForUser(mContext.getContentResolver(), - Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, defaultValue, getUserId()) != 0; + Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, defaultValue, getUserHandle()) != 0; } @Override public boolean setChecked(boolean isChecked) { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, isChecked ? 1 : 0); + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, isChecked ? 1 : 0, getUserHandle()); return true; } @@ -88,7 +88,7 @@ public class FaceSettingsLockscreenBypassPreferenceController if (Utils.isMultipleBiometricsSupported(mContext)) { return UNSUPPORTED_ON_DEVICE; } - if (mUserManager.isManagedProfile(UserHandle.myUserId())) { + if (mUserManager.isManagedProfile(getUserId())) { return UNSUPPORTED_ON_DEVICE; } @@ -99,4 +99,8 @@ public class FaceSettingsLockscreenBypassPreferenceController return UNSUPPORTED_ON_DEVICE; } } + + private int getUserHandle() { + return UserHandle.of(getUserId()).getIdentifier(); + } }