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
This commit is contained in:
Curtis Belmonte
2021-07-24 09:20:08 -07:00
parent d7753f4c23
commit 43f2be2059
2 changed files with 13 additions and 12 deletions

View File

@@ -162,6 +162,11 @@ public class FaceSettings extends DashboardFragment {
R.string.security_settings_face_profile_preference_title)); 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 keyguardPref = findPreference(FaceSettingsKeyguardPreferenceController.KEY);
Preference appPref = findPreference(FaceSettingsAppPreferenceController.KEY); Preference appPref = findPreference(FaceSettingsAppPreferenceController.KEY);
Preference attentionPref = findPreference(FaceSettingsAttentionPreferenceController.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 @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();

View File

@@ -56,13 +56,13 @@ public class FaceSettingsLockscreenBypassPreferenceController
int defaultValue = mContext.getResources().getBoolean( int defaultValue = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_faceAuthDismissesKeyguard) ? 1 : 0; com.android.internal.R.bool.config_faceAuthDismissesKeyguard) ? 1 : 0;
return Settings.Secure.getIntForUser(mContext.getContentResolver(), 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 @Override
public boolean setChecked(boolean isChecked) { public boolean setChecked(boolean isChecked) {
Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.putIntForUser(mContext.getContentResolver(),
Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, isChecked ? 1 : 0); Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, isChecked ? 1 : 0, getUserHandle());
return true; return true;
} }
@@ -88,7 +88,7 @@ public class FaceSettingsLockscreenBypassPreferenceController
if (Utils.isMultipleBiometricsSupported(mContext)) { if (Utils.isMultipleBiometricsSupported(mContext)) {
return UNSUPPORTED_ON_DEVICE; return UNSUPPORTED_ON_DEVICE;
} }
if (mUserManager.isManagedProfile(UserHandle.myUserId())) { if (mUserManager.isManagedProfile(getUserId())) {
return UNSUPPORTED_ON_DEVICE; return UNSUPPORTED_ON_DEVICE;
} }
@@ -99,4 +99,8 @@ public class FaceSettingsLockscreenBypassPreferenceController
return UNSUPPORTED_ON_DEVICE; return UNSUPPORTED_ON_DEVICE;
} }
} }
private int getUserHandle() {
return UserHandle.of(getUserId()).getIdentifier();
}
} }