summaryrefslogtreecommitdiff
path: root/packages/SettingsLib
diff options
context:
space:
mode:
Diffstat (limited to 'packages/SettingsLib')
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java25
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java10
2 files changed, 27 insertions, 8 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java
index 4de64769b425..d5cf8331345c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java
+++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java
@@ -244,14 +244,23 @@ public class RestrictedLockUtilsInternal extends RestrictedLockUtils {
*/
public static EnforcedAdmin checkIfKeyguardFeaturesDisabled(Context context,
int keyguardFeatures, final @UserIdInt int userId) {
- final LockSettingCheck check = (dpm, admin, checkUser) -> {
- int effectiveFeatures = dpm.getKeyguardDisabledFeatures(admin, checkUser);
- if (checkUser != userId) {
- effectiveFeatures &= PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER;
- }
- return (effectiveFeatures & keyguardFeatures) != KEYGUARD_DISABLE_FEATURES_NONE;
- };
- if (UserManager.get(context).getUserInfo(userId).isManagedProfile()) {
+ UserInfo userInfo = UserManager.get(context).getUserInfo(userId);
+ if (userInfo == null) {
+ Log.w(LOG_TAG, "User " + userId + " does not exist");
+ return null;
+ }
+
+ final LockSettingCheck check =
+ (dpm, admin, checkUser) -> {
+ int effectiveFeatures = dpm.getKeyguardDisabledFeatures(admin, checkUser);
+ if (checkUser != userId) {
+ // This case is reached when {@code checkUser} is a managed profile and
+ // {@code userId} is the parent user.
+ effectiveFeatures &= PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER;
+ }
+ return (effectiveFeatures & keyguardFeatures) != KEYGUARD_DISABLE_FEATURES_NONE;
+ };
+ if (userInfo.isManagedProfile()) {
DevicePolicyManager dpm =
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
return findEnforcedAdmin(dpm.getActiveAdminsAsUser(userId), dpm, userId, check);
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java
index 785bcbf5a91c..71e11ba55850 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java
@@ -458,6 +458,16 @@ public class RestrictedLockUtilsTest {
assertThat(intentCaptor.getValue().getExtra(EXTRA_RESTRICTION)).isNull();
}
+ /** See b/386971405. Ensure that the code does not crash when the user is not found. */
+ @Test
+ public void checkIfKeyguardFeaturesDisabled_returnsNull_whenUserDoesNotExist() {
+ when(mUserManager.getUserInfo(mUserId)).thenReturn(null);
+ assertThat(
+ RestrictedLockUtilsInternal.checkIfKeyguardFeaturesDisabled(
+ mContext, KEYGUARD_DISABLE_FINGERPRINT, mUserId))
+ .isNull();
+ }
+
private UserInfo setUpUser(int userId, ComponentName[] admins) {
UserInfo userInfo = new UserInfo(userId, "primary", 0);
when(mUserManager.getUserInfo(userId)).thenReturn(userInfo);