From 410e811ad63dd4e97dce44da30dd735f2a0baa7d Mon Sep 17 00:00:00 2001 From: Himanshu Gupta Date: Thu, 14 Mar 2024 00:24:07 +0000 Subject: Allowing Private Space unlock without device lock. Currently, Private profile unlock is disabled if device lock is not present. However, private space is still allowed to be created without device lock via adb commands. In this change we allow the unlock if the space was created via adb (by checking user setup complete), when device lock is not present. As user setup is always marked complete when PS is created via Settings entry-point, this change does not effect regular flows. Bug: 322882655 Test: Manual build and flash Change-Id: I7e1a3ecd63d78fb3dcca04a78923f98289eb8bf3 --- .../com/android/server/pm/UserManagerService.java | 32 +++++++++++++--------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 88e75966b12e..f5ac8306cfa9 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -1717,20 +1717,26 @@ public class UserManagerService extends IUserManager.Stub { return false; } - if (android.multiuser.Flags.showSetScreenLockDialog()) { - // Show the prompt to set a new screen lock if the device does not have one - final KeyguardManager km = mContext.getSystemService(KeyguardManager.class); - if (km != null && !km.isDeviceSecure()) { - Intent setScreenLockPromptIntent = - SetScreenLockDialogActivity - .createBaseIntent(LAUNCH_REASON_DISABLE_QUIET_MODE); - setScreenLockPromptIntent.putExtra(EXTRA_ORIGIN_USER_ID, userId); - mContext.startActivity(setScreenLockPromptIntent); - return false; - } + final KeyguardManager km = mContext.getSystemService(KeyguardManager.class); + if (km != null && km.isDeviceSecure()) { + showConfirmCredentialToDisableQuietMode(userId, target, callingPackage); + return false; + } else if (km != null && !km.isDeviceSecure() + && android.multiuser.Flags.showSetScreenLockDialog() + // TODO(b/330720545): Add a better way to accomplish this, also use it + // to block profile creation w/o device credentials present. + && Settings.Secure.getIntForUser(mContext.getContentResolver(), + Settings.Secure.USER_SETUP_COMPLETE, 0, userId) == 1) { + Intent setScreenLockPromptIntent = + SetScreenLockDialogActivity + .createBaseIntent(LAUNCH_REASON_DISABLE_QUIET_MODE); + setScreenLockPromptIntent.putExtra(EXTRA_ORIGIN_USER_ID, userId); + mContext.startActivity(setScreenLockPromptIntent); + return false; + } else { + Slog.w(LOG_TAG, "Allowing profile unlock even when device credentials " + + "are not set for user " + userId); } - showConfirmCredentialToDisableQuietMode(userId, target, callingPackage); - return false; } } final boolean hasUnifiedChallenge = -- cgit v1.2.3-59-g8ed1b