diff options
| author | 2019-10-02 16:27:46 -0700 | |
|---|---|---|
| committer | 2019-10-18 11:05:09 -0700 | |
| commit | 0b3863f4ac2a34e488ad38d078927852728537a9 (patch) | |
| tree | 2f56fe80ba77ffa610e56376abeb30ddb164a3ce | |
| parent | 7ad2f6bdad6f789ed7d1b32ab9e2dcf006026201 (diff) | |
Added new (hidden) UserManager API to get all users, including pre-created ones.
Bug: 140750212
Test: manual verification
Merged-In: Iaef9db6216a7b18bf6f1f3e19f4a7428ec99f1da
Change-Id: Iaef9db6216a7b18bf6f1f3e19f4a7428ec99f1da
(cherry picked from commit 09a7f2df68192b9aa77577de14a6a7018e992caf)
| -rw-r--r-- | core/java/android/os/IUserManager.aidl | 2 | ||||
| -rw-r--r-- | core/java/android/os/UserManager.java | 38 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/UserManagerService.java | 6 | 
3 files changed, 26 insertions, 20 deletions
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl index ed76077e5c79..c30491a3965c 100644 --- a/core/java/android/os/IUserManager.aidl +++ b/core/java/android/os/IUserManager.aidl @@ -54,7 +54,7 @@ interface IUserManager {      void setUserIcon(int userHandle, in Bitmap icon);      ParcelFileDescriptor getUserIcon(int userHandle);      UserInfo getPrimaryUser(); -    List<UserInfo> getUsers(boolean excludeDying); +    List<UserInfo> getUsers(boolean excludePartial, boolean excludeDying, boolean excludePreCreated);      List<UserInfo> getProfiles(int userHandle, boolean enabledOnly);      int[] getProfileIds(int userId, boolean enabledOnly);      boolean canAddMoreManagedProfiles(int userHandle, boolean allowedToRemoveOne); diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index eb1927ebd83a..af9e592f9036 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -2379,15 +2379,26 @@ public class UserManager {      /**       * Returns information for all users on this device, including ones marked for deletion.       * To retrieve only users that are alive, use {@link #getUsers(boolean)}. -     * <p> -     * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. +     *       * @return the list of users that exist on the device.       * @hide       */      @UnsupportedAppUsage +    @RequiresPermission(android.Manifest.permission.MANAGE_USERS)      public List<UserInfo> getUsers() { +        return getUsers(/* excludeDying= */ false); +    } + +    /** +     * Returns information for all users on this device, based on the filtering parameters. +     * +     * @hide +     */ +    @RequiresPermission(android.Manifest.permission.MANAGE_USERS) +    public List<UserInfo> getUsers(boolean excludePartial, boolean excludeDying, +            boolean excludePreCreated) {          try { -            return mService.getUsers(false); +            return mService.getUsers(excludePartial, excludeDying, excludePreCreated);          } catch (RemoteException re) {              throw re.rethrowFromSystemServer();          } @@ -2403,16 +2414,12 @@ public class UserManager {      @SystemApi      @RequiresPermission(android.Manifest.permission.MANAGE_USERS)      public long[] getSerialNumbersOfUsers(boolean excludeDying) { -        try { -            List<UserInfo> users = mService.getUsers(excludeDying); -            long[] result = new long[users.size()]; -            for (int i = 0; i < result.length; i++) { -                result[i] = users.get(i).serialNumber; -            } -            return result; -        } catch (RemoteException re) { -            throw re.rethrowFromSystemServer(); +        List<UserInfo> users = getUsers(excludeDying); +        long[] result = new long[users.size()]; +        for (int i = 0; i < result.length; i++) { +            result[i] = users.get(i).serialNumber;          } +        return result;      }      /** @@ -2798,11 +2805,8 @@ public class UserManager {       */      @UnsupportedAppUsage      public @NonNull List<UserInfo> getUsers(boolean excludeDying) { -        try { -            return mService.getUsers(excludeDying); -        } catch (RemoteException re) { -            throw re.rethrowFromSystemServer(); -        } +        return getUsers(/*excludePartial= */ true, excludeDying, +                /* excludePreCreated= */ true);      }      /** diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index ed60aa54212f..338811efd4ea 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -650,12 +650,12 @@ public class UserManagerService extends IUserManager.Stub {          return null;      } -    @Override      public @NonNull List<UserInfo> getUsers(boolean excludeDying) {          return getUsers(/*excludePartial= */ true, excludeDying, /* excludePreCreated= */ true);      } -    private @NonNull List<UserInfo> getUsers(boolean excludePartial, boolean excludeDying, +    @Override +    public @NonNull List<UserInfo> getUsers(boolean excludePartial, boolean excludeDying,              boolean excludePreCreated) {          checkManageOrCreateUsersPermission("query users");          synchronized (mUsersLock) { @@ -2700,6 +2700,8 @@ public class UserManagerService extends IUserManager.Stub {          Preconditions.checkArgument(!UserInfo.isManagedProfile(flags),                  "cannot pre-create managed profiles"); +        Slog.i(LOG_TAG, "Pre-creating user with flags " + UserInfo.flagsToString(flags)); +          return createUserInternalUnchecked(/* name= */ null, flags,                  /* parentId= */ UserHandle.USER_NULL, /* preCreate= */ true,                  /* disallowedPackages= */ null);  |