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 <device-owner>
  UserInfo{11:HomerSimpson:410} serialNo=15 isPrimary=false <converted> <profile-owner>

Test: see above
Bug: 156263735

Change-Id: Ia98d3586fcaa852943e3a900ba13add5439eaf13
This commit is contained in:
Felipe Leme
2020-12-11 12:59:44 -08:00
parent 786d279f6c
commit 757491fd7b
3 changed files with 48 additions and 4 deletions

View File

@@ -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.

View File

@@ -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(" <converted>");
}
final DevicePolicyManagerInternal dpm = getDevicePolicyManagerInternal();
if (dpm != null) {
final long ident = Binder.clearCallingIdentity();
try {
if (dpm.getDeviceOwnerUserId() == userId) {
pw.print(" <device-owner>");
}
if (dpm.getProfileOwnerAsUser(userId) != null) {
pw.print(" <profile-owner>");
}
} finally {
Binder.restoreCallingIdentity(ident);
}
}
pw.println();
pw.print(" Type: "); pw.println(userInfo.userType);
pw.print(" Flags: "); pw.print(userInfo.flags); pw.print(" (");

View File

@@ -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