From 112bf90c9e420168f2745ee6180447d157e1603f Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Fri, 11 Dec 2020 12:59:44 -0800 Subject: Added profile-owner and device-owner on cmd user list. Examples: $ adb shell cmd user list -v 3 users: 0: id=0, name=Driver, flags=ADMIN|INITIALIZED|PRIMARY|SYSTEM (running) (device-owner) 1: id=10, name=Driver, flags=ADMIN|FULL|INITIALIZED 2: id=11, name=HomerSimpson, flags=FULL|INITIALIZED (running) (converted) (profile-owner) (current) Test: see above Bug: 156263735 Bug: 175860401 Change-Id: I68a3394eb48ef11d6a4d71ad90df3df137af3874 --- .../app/admin/DevicePolicyManagerInternal.java | 8 +++++++- .../com/android/server/pm/UserManagerService.java | 21 ++++++++++++++++++++- .../devicepolicy/DevicePolicyManagerService.java | 9 +++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/core/java/android/app/admin/DevicePolicyManagerInternal.java b/core/java/android/app/admin/DevicePolicyManagerInternal.java index ce2fd4fb60b2..a0d2977cf09a 100644 --- a/core/java/android/app/admin/DevicePolicyManagerInternal.java +++ b/core/java/android/app/admin/DevicePolicyManagerInternal.java @@ -231,7 +231,13 @@ public abstract class DevicePolicyManagerInternal { * Returns the profile owner component for the given user, or {@code null} if there is not one. */ @Nullable - public abstract ComponentName getProfileOwnerAsUser(int userHandle); + public abstract ComponentName getProfileOwnerAsUser(@UserIdInt int userId); + + /** + * Returns the user id of the device owner, or {@link UserHandle#USER_NULL} if there is not one. + */ + @UserIdInt + public abstract int getDeviceOwnerUserId(); /** * Returns whether the given package is a device owner or a profile owner in the calling user. diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index ccbf73ca9ab0..ad1912348b67 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -4760,13 +4760,32 @@ public class UserManagerService extends IUserManager.Stub { final boolean hasParent = user.profileGroupId != user.id && user.profileGroupId != UserInfo.NO_PROFILE_GROUP_ID; if (verbose) { - pw.printf("%d: id=%d, name=%s, flags=%s%s%s%s%s%s%s\n", i, user.id, user.name, + final DevicePolicyManagerInternal dpm = getDevicePolicyManagerInternal(); + String deviceOwner = ""; + String profileOwner = ""; + if (dpm != null) { + final long ident = Binder.clearCallingIdentity(); + // NOTE: dpm methods below CANNOT be called while holding the mUsersLock + try { + if (dpm.getDeviceOwnerUserId() == user.id) { + deviceOwner = " (device-owner)"; + } + if (dpm.getProfileOwnerAsUser(user.id) != null) { + profileOwner = " (profile-owner)"; + } + } finally { + Binder.restoreCallingIdentity(ident); + } + } + pw.printf("%d: id=%d, name=%s, flags=%s%s%s%s%s%s%s%s%s\n", i, user.id, + user.name, UserInfo.flagsToString(user.flags), hasParent ? " (parentId=" + user.profileGroupId + ")" : "", running ? " (running)" : "", user.partial ? " (partial)" : "", user.preCreated ? " (pre-created)" : "", user.convertedFromPreCreated ? " (converted)" : "", + deviceOwner, profileOwner, current ? " (current)" : ""); } else { // NOTE: the standard "list users" command is used by integration tests and diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 0ee2770755ec..174cc6449895 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -11763,8 +11763,13 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } @Override - public ComponentName getProfileOwnerAsUser(int userHandle) { - return DevicePolicyManagerService.this.getProfileOwnerAsUser(userHandle); + public ComponentName getProfileOwnerAsUser(@UserIdInt int userId) { + return DevicePolicyManagerService.this.getProfileOwnerAsUser(userId); + } + + @Override + public int getDeviceOwnerUserId() { + return DevicePolicyManagerService.this.getDeviceOwnerUserId(); } @Override -- cgit v1.2.3-59-g8ed1b