diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 80664ed0816fb..a4ac61b1f086e 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -1769,6 +1769,7 @@ package android.os { method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createProfileForUser(@Nullable String, @NonNull String, int, int, @Nullable String[]); method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createRestrictedProfile(@Nullable String); method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createUser(@Nullable String, @NonNull String, int); + method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.Set getPreInstallableSystemPackages(@NonNull String); method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public String getUserType(); method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.List getUsers(boolean, boolean, boolean); method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean hasBaseUserRestriction(@NonNull String, @NonNull android.os.UserHandle); diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl index 9a8194240f8e4..3bee4b73dc226 100644 --- a/core/java/android/os/IUserManager.aidl +++ b/core/java/android/os/IUserManager.aidl @@ -46,6 +46,7 @@ interface IUserManager { UserInfo createProfileForUserWithThrow(in String name, in String userType, int flags, int userId, in String[] disallowedPackages); UserInfo createRestrictedProfileWithThrow(String name, int parentUserHandle); + String[] getPreInstallableSystemPackages(in String userType); void setUserEnabled(int userId); void setUserAdmin(int userId); void evictCredentialEncryptionKey(int userId); diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 7edd6e6597b28..8709f071f222d 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -26,6 +26,7 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.StringDef; import android.annotation.SuppressAutoDoc; +import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; @@ -53,6 +54,7 @@ import android.location.LocationManager; import android.provider.Settings; import android.telephony.TelephonyManager; import android.util.AndroidException; +import android.util.ArraySet; import android.view.WindowManager.LayoutParams; import com.android.internal.R; @@ -3220,6 +3222,33 @@ public class UserManager { return intent; } + /** + * Returns the list of the system packages that would be installed on this type of user upon + * its creation. + * + * Returns {@code null} if all system packages would be installed. + * + * @hide + */ + @TestApi + @SuppressLint("NullableCollection") + @RequiresPermission(anyOf = { + android.Manifest.permission.MANAGE_USERS, + android.Manifest.permission.CREATE_USERS + }) + public @Nullable Set getPreInstallableSystemPackages(@NonNull String userType) { + try { + final String[] installableSystemPackages + = mService.getPreInstallableSystemPackages(userType); + if (installableSystemPackages == null) { + return null; + } + return new ArraySet<>(installableSystemPackages); + } catch (RemoteException re) { + throw re.rethrowFromSystemServer(); + } + } + /** * @hide * diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index e8897cab14ffc..d4feb3a728c85 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -3902,6 +3902,17 @@ public class UserManagerService extends IUserManager.Stub { isFirstBoot, isUpgrade, existingPackages); } + @Override + public String[] getPreInstallableSystemPackages(@NonNull String userType) { + checkManageOrCreateUsersPermission("getPreInstallableSystemPackages"); + final Set installableSystemPackages = + mSystemPackageInstaller.getInstallablePackagesForUserType(userType); + if (installableSystemPackages == null) { + return null; + } + return installableSystemPackages.toArray(new String[installableSystemPackages.size()]); + } + private long getCreationTime() { final long now = System.currentTimeMillis(); return (now > EPOCH_PLUS_30_YEARS) ? now : 0;