diff options
author | 2025-03-21 02:35:33 -0700 | |
---|---|---|
committer | 2025-03-21 02:35:33 -0700 | |
commit | 8584977e4b75e1bd44c79d2b807db628882d9cfd (patch) | |
tree | c7c1f264c487059fb70432c943095c0e48019211 /packages/SettingsLib | |
parent | 7c3a2d8cd84591c154c993c2c3f1cf4fb04c4651 (diff) | |
parent | f74a11c7ffb7e7f89e5c6ce85006d31c78322ea5 (diff) |
Merge "Return null instead of crashing when user does not exists" into main
Diffstat (limited to 'packages/SettingsLib')
-rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java | 25 | ||||
-rw-r--r-- | packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java | 10 |
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); |