summaryrefslogtreecommitdiff
path: root/packages/SettingsLib
diff options
context:
space:
mode:
author Miriam Polzer <mpolzer@google.com> 2025-03-21 02:35:33 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-21 02:35:33 -0700
commit8584977e4b75e1bd44c79d2b807db628882d9cfd (patch)
treec7c1f264c487059fb70432c943095c0e48019211 /packages/SettingsLib
parent7c3a2d8cd84591c154c993c2c3f1cf4fb04c4651 (diff)
parentf74a11c7ffb7e7f89e5c6ce85006d31c78322ea5 (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.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);