From 757491fd7be66ed9983bd75975fb1039ce3954f6 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Fri, 11 Dec 2020 12:59:44 -0800 Subject: [PATCH] Added profile-owner and device-owner on cmd user and dump user. Examples: $ adb shell cmd user list --all -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) $ adb shell dumpsys user | grep '\-owner' UserInfo{0:null:813} serialNo=0 isPrimary=true UserInfo{11:HomerSimpson:410} serialNo=15 isPrimary=false Test: see above Bug: 156263735 Change-Id: Ia98d3586fcaa852943e3a900ba13add5439eaf13 --- .../admin/DevicePolicyManagerInternal.java | 8 ++++- .../android/server/pm/UserManagerService.java | 35 ++++++++++++++++++- .../DevicePolicyManagerService.java | 9 +++-- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/core/java/android/app/admin/DevicePolicyManagerInternal.java b/core/java/android/app/admin/DevicePolicyManagerInternal.java index c02fcabfcf623..b0460142c30e8 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 ccbf73ca9ab0f..225c998d4c50f 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -4760,13 +4760,31 @@ 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(); + 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 @@ -4860,6 +4878,21 @@ public class UserManagerService extends IUserManager.Stub { if (userInfo.convertedFromPreCreated) { pw.print(" "); } + final DevicePolicyManagerInternal dpm = getDevicePolicyManagerInternal(); + if (dpm != null) { + final long ident = Binder.clearCallingIdentity(); + try { + if (dpm.getDeviceOwnerUserId() == userId) { + pw.print(" "); + } + if (dpm.getProfileOwnerAsUser(userId) != null) { + pw.print(" "); + } + } finally { + Binder.restoreCallingIdentity(ident); + } + } + pw.println(); pw.print(" Type: "); pw.println(userInfo.userType); pw.print(" Flags: "); pw.print(userInfo.flags); pw.print(" ("); diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index d35d806741e65..c73f4932bf506 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -11780,8 +11780,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