diff options
4 files changed, 127 insertions, 9 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 171ee9a0a95b..15dced2df6e4 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -1194,6 +1194,7 @@ package android.app.admin { public final class FullyManagedDeviceProvisioningParams implements android.os.Parcelable { method public boolean canDeviceOwnerGrantSensorsPermissions(); method public int describeContents(); + method @NonNull public android.os.PersistableBundle getAdminExtras(); method @NonNull public android.content.ComponentName getDeviceAdminComponentName(); method public long getLocalTime(); method @Nullable public java.util.Locale getLocale(); @@ -1207,6 +1208,7 @@ package android.app.admin { public static final class FullyManagedDeviceProvisioningParams.Builder { ctor public FullyManagedDeviceProvisioningParams.Builder(@NonNull android.content.ComponentName, @NonNull String); method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams build(); + method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setAdminExtras(@NonNull android.os.PersistableBundle); method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setCanDeviceOwnerGrantSensorsPermissions(boolean); method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLeaveAllSystemAppsEnabled(boolean); method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLocalTime(long); @@ -1217,6 +1219,7 @@ package android.app.admin { public final class ManagedProfileProvisioningParams implements android.os.Parcelable { method public int describeContents(); method @Nullable public android.accounts.Account getAccountToMigrate(); + method @NonNull public android.os.PersistableBundle getAdminExtras(); method @NonNull public String getOwnerName(); method @NonNull public android.content.ComponentName getProfileAdminComponentName(); method @Nullable public String getProfileName(); @@ -1231,6 +1234,7 @@ package android.app.admin { ctor public ManagedProfileProvisioningParams.Builder(@NonNull android.content.ComponentName, @NonNull String); method @NonNull public android.app.admin.ManagedProfileProvisioningParams build(); method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setAccountToMigrate(@Nullable android.accounts.Account); + method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setAdminExtras(@NonNull android.os.PersistableBundle); method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setKeepingAccountOnMigration(boolean); method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setLeaveAllSystemAppsEnabled(boolean); method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setOrganizationOwnedProvisioning(boolean); diff --git a/core/java/android/app/admin/FullyManagedDeviceProvisioningParams.java b/core/java/android/app/admin/FullyManagedDeviceProvisioningParams.java index 8c232c012f50..1f7ae4ad35de 100644 --- a/core/java/android/app/admin/FullyManagedDeviceProvisioningParams.java +++ b/core/java/android/app/admin/FullyManagedDeviceProvisioningParams.java @@ -25,6 +25,7 @@ import android.annotation.SystemApi; import android.content.ComponentName; import android.os.Parcel; import android.os.Parcelable; +import android.os.PersistableBundle; import android.stats.devicepolicy.DevicePolicyEnums; import java.util.Locale; @@ -52,6 +53,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable { @SuppressLint("UseIcu") @Nullable private final Locale mLocale; private final boolean mDeviceOwnerCanGrantSensorsPermissions; + @NonNull private final PersistableBundle mAdminExtras; private FullyManagedDeviceProvisioningParams( @NonNull ComponentName deviceAdminComponentName, @@ -60,7 +62,8 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable { @Nullable String timeZone, long localTime, @Nullable @SuppressLint("UseIcu") Locale locale, - boolean deviceOwnerCanGrantSensorsPermissions) { + boolean deviceOwnerCanGrantSensorsPermissions, + @NonNull PersistableBundle adminExtras) { this.mDeviceAdminComponentName = requireNonNull(deviceAdminComponentName); this.mOwnerName = requireNonNull(ownerName); this.mLeaveAllSystemAppsEnabled = leaveAllSystemAppsEnabled; @@ -69,6 +72,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable { this.mLocale = locale; this.mDeviceOwnerCanGrantSensorsPermissions = deviceOwnerCanGrantSensorsPermissions; + this.mAdminExtras = adminExtras; } private FullyManagedDeviceProvisioningParams( @@ -78,14 +82,16 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable { @Nullable String timeZone, long localTime, @Nullable String localeStr, - boolean deviceOwnerCanGrantSensorsPermissions) { + boolean deviceOwnerCanGrantSensorsPermissions, + @Nullable PersistableBundle adminExtras) { this(deviceAdminComponentName, ownerName, leaveAllSystemAppsEnabled, timeZone, localTime, getLocale(localeStr), - deviceOwnerCanGrantSensorsPermissions); + deviceOwnerCanGrantSensorsPermissions, + adminExtras); } @Nullable @@ -151,6 +157,15 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable { } /** + * Returns a copy of the admin extras bundle. + * + * @see DevicePolicyManager#EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE + */ + public @NonNull PersistableBundle getAdminExtras() { + return new PersistableBundle(mAdminExtras); + } + + /** * Logs the provisioning params using {@link DevicePolicyEventLogger}. * * @hide @@ -188,6 +203,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable { @Nullable private Locale mLocale; // Default to allowing control over sensor permission grants. boolean mDeviceOwnerCanGrantSensorsPermissions = true; + @NonNull private PersistableBundle mAdminExtras; /** * Initialize a new {@link Builder} to construct a @@ -262,6 +278,17 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable { } /** + * Sets a {@link PersistableBundle} that contains admin-specific extras. + */ + @NonNull + public Builder setAdminExtras(@NonNull PersistableBundle adminExtras) { + mAdminExtras = adminExtras != null + ? new PersistableBundle(adminExtras) + : new PersistableBundle(); + return this; + } + + /** * Combines all of the attributes that have been set on this {@code Builder} * * @return a new {@link FullyManagedDeviceProvisioningParams} object. @@ -275,7 +302,8 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable { mTimeZone, mLocalTime, mLocale, - mDeviceOwnerCanGrantSensorsPermissions); + mDeviceOwnerCanGrantSensorsPermissions, + mAdminExtras); } } @@ -298,6 +326,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable { + ", mLocale=" + (mLocale == null ? "null" : mLocale) + ", mDeviceOwnerCanGrantSensorsPermissions=" + mDeviceOwnerCanGrantSensorsPermissions + + ", mAdminExtras=" + mAdminExtras + '}'; } @@ -310,6 +339,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable { dest.writeLong(mLocalTime); dest.writeString(mLocale == null ? null : mLocale.toLanguageTag()); dest.writeBoolean(mDeviceOwnerCanGrantSensorsPermissions); + dest.writePersistableBundle(mAdminExtras); } @NonNull @@ -324,6 +354,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable { long localtime = in.readLong(); String locale = in.readString(); boolean deviceOwnerCanGrantSensorsPermissions = in.readBoolean(); + PersistableBundle adminExtras = in.readPersistableBundle(); return new FullyManagedDeviceProvisioningParams( componentName, @@ -332,7 +363,8 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable { timeZone, localtime, locale, - deviceOwnerCanGrantSensorsPermissions); + deviceOwnerCanGrantSensorsPermissions, + adminExtras); } @Override diff --git a/core/java/android/app/admin/ManagedProfileProvisioningParams.java b/core/java/android/app/admin/ManagedProfileProvisioningParams.java index ccbef7321be6..f91d60a6a9fa 100644 --- a/core/java/android/app/admin/ManagedProfileProvisioningParams.java +++ b/core/java/android/app/admin/ManagedProfileProvisioningParams.java @@ -23,8 +23,10 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.content.ComponentName; +import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; +import android.os.PersistableBundle; import android.stats.devicepolicy.DevicePolicyEnums; /** @@ -49,7 +51,7 @@ public final class ManagedProfileProvisioningParams implements Parcelable { private final boolean mLeaveAllSystemAppsEnabled; private final boolean mOrganizationOwnedProvisioning; private final boolean mKeepAccountOnMigration; - + @NonNull private final PersistableBundle mAdminExtras; private ManagedProfileProvisioningParams( @NonNull ComponentName profileAdminComponentName, @@ -58,7 +60,8 @@ public final class ManagedProfileProvisioningParams implements Parcelable { @Nullable Account accountToMigrate, boolean leaveAllSystemAppsEnabled, boolean organizationOwnedProvisioning, - boolean keepAccountOnMigration) { + boolean keepAccountOnMigration, + @NonNull PersistableBundle adminExtras) { this.mProfileAdminComponentName = requireNonNull(profileAdminComponentName); this.mOwnerName = requireNonNull(ownerName); this.mProfileName = profileName; @@ -66,6 +69,7 @@ public final class ManagedProfileProvisioningParams implements Parcelable { this.mLeaveAllSystemAppsEnabled = leaveAllSystemAppsEnabled; this.mOrganizationOwnedProvisioning = organizationOwnedProvisioning; this.mKeepAccountOnMigration = keepAccountOnMigration; + this.mAdminExtras = adminExtras; } /** @@ -124,6 +128,15 @@ public final class ManagedProfileProvisioningParams implements Parcelable { } /** + * Returns a copy of the admin extras bundle. + * + * @see DevicePolicyManager#EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE + */ + public @NonNull PersistableBundle getAdminExtras() { + return new PersistableBundle(mAdminExtras); + } + + /** * Logs the provisioning params using {@link DevicePolicyEventLogger}. * * @hide @@ -160,6 +173,7 @@ public final class ManagedProfileProvisioningParams implements Parcelable { private boolean mLeaveAllSystemAppsEnabled; private boolean mOrganizationOwnedProvisioning; private boolean mKeepingAccountOnMigration; + @Nullable private PersistableBundle mAdminExtras; /** * Initialize a new {@link Builder) to construct a {@link ManagedProfileProvisioningParams}. @@ -235,6 +249,17 @@ public final class ManagedProfileProvisioningParams implements Parcelable { } /** + * Sets a {@link Bundle} that contains admin-specific extras. + */ + @NonNull + public Builder setAdminExtras(@NonNull PersistableBundle adminExtras) { + mAdminExtras = adminExtras != null + ? new PersistableBundle(adminExtras) + : new PersistableBundle(); + return this; + } + + /** * Combines all of the attributes that have been set on this {@code Builder}. * * @return a new {@link ManagedProfileProvisioningParams} object. @@ -248,7 +273,8 @@ public final class ManagedProfileProvisioningParams implements Parcelable { mAccountToMigrate, mLeaveAllSystemAppsEnabled, mOrganizationOwnedProvisioning, - mKeepingAccountOnMigration); + mKeepingAccountOnMigration, + mAdminExtras); } } @@ -270,6 +296,7 @@ public final class ManagedProfileProvisioningParams implements Parcelable { + ", mLeaveAllSystemAppsEnabled=" + mLeaveAllSystemAppsEnabled + ", mOrganizationOwnedProvisioning=" + mOrganizationOwnedProvisioning + ", mKeepAccountOnMigration=" + mKeepAccountOnMigration + + ", mAdminExtras=" + mAdminExtras + '}'; } @@ -282,6 +309,7 @@ public final class ManagedProfileProvisioningParams implements Parcelable { dest.writeBoolean(mLeaveAllSystemAppsEnabled); dest.writeBoolean(mOrganizationOwnedProvisioning); dest.writeBoolean(mKeepAccountOnMigration); + dest.writePersistableBundle(mAdminExtras); } public static final @NonNull Creator<ManagedProfileProvisioningParams> CREATOR = @@ -295,6 +323,7 @@ public final class ManagedProfileProvisioningParams implements Parcelable { boolean leaveAllSystemAppsEnabled = in.readBoolean(); boolean organizationOwnedProvisioning = in.readBoolean(); boolean keepAccountMigrated = in.readBoolean(); + PersistableBundle adminExtras = in.readPersistableBundle(); return new ManagedProfileProvisioningParams( componentName, @@ -303,7 +332,8 @@ public final class ManagedProfileProvisioningParams implements Parcelable { account, leaveAllSystemAppsEnabled, organizationOwnedProvisioning, - keepAccountMigrated); + keepAccountMigrated, + adminExtras); } @Override diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 733cfcdfaea5..d8a771756f13 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -17577,6 +17577,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { startTime, callerPackage); + onCreateAndProvisionManagedProfileStarted(provisioningParams); + installExistingAdminPackage(userInfo.id, admin.getPackageName()); if (!enableAdminAndSetProfileOwner( userInfo.id, caller.getUserId(), admin, provisioningParams.getOwnerName())) { @@ -17597,6 +17599,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } } + onCreateAndProvisionManagedProfileCompleted(provisioningParams); + sendProvisioningCompletedBroadcast( userInfo.id, ACTION_PROVISION_MANAGED_PROFILE, @@ -17618,6 +17622,29 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } } + /** + * Callback called at the beginning of {@link #createAndProvisionManagedProfile( + * ManagedProfileProvisioningParams, String)} after the relevant prechecks have passed. + * + * <p>The logic in this method blocks provisioning. + * + * <p>This method is meant to be overridden by OEMs. + */ + private void onCreateAndProvisionManagedProfileStarted( + ManagedProfileProvisioningParams provisioningParams) {} + + /** + * Callback called at the end of {@link #createAndProvisionManagedProfile( + * ManagedProfileProvisioningParams, String)} after all the other provisioning tasks + * have completed successfully. + * + * <p>The logic in this method blocks provisioning. + * + * <p>This method is meant to be overridden by OEMs. + */ + private void onCreateAndProvisionManagedProfileCompleted( + ManagedProfileProvisioningParams provisioningParams) {} + private void resetInteractAcrossProfilesAppOps() { mInjector.getCrossProfileApps().clearInteractAcrossProfilesAppOps(); pregrantDefaultInteractAcrossProfilesAppOps(); @@ -17857,6 +17884,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { ERROR_PRE_CONDITION_FAILED, "Provisioning preconditions failed with result: " + result); } + onProvisionFullyManagedDeviceStarted(provisioningParams); setTimeAndTimezone(provisioningParams.getTimeZone(), provisioningParams.getLocalTime()); setLocale(provisioningParams.getLocale()); @@ -17882,6 +17910,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { disallowAddUser(); setAdminCanGrantSensorsPermissionForUserUnchecked(deviceOwnerUserId, provisioningParams.canDeviceOwnerGrantSensorsPermissions()); + onProvisionFullyManagedDeviceCompleted(provisioningParams); sendProvisioningCompletedBroadcast( deviceOwnerUserId, ACTION_PROVISION_MANAGED_DEVICE, @@ -17897,6 +17926,29 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } } + /** + * Callback called at the beginning of {@link #provisionFullyManagedDevice( + * FullyManagedDeviceProvisioningParams, String)} after the relevant prechecks have passed. + * + * <p>The logic in this method blocks provisioning. + * + * <p>This method is meant to be overridden by OEMs. + */ + private void onProvisionFullyManagedDeviceStarted( + FullyManagedDeviceProvisioningParams provisioningParams) {} + + /** + * Callback called at the end of {@link #provisionFullyManagedDevice( + * FullyManagedDeviceProvisioningParams, String)} after all the other provisioning tasks + * have completed successfully. + * + * <p>The logic in this method blocks provisioning. + * + * <p>This method is meant to be overridden by OEMs. + */ + private void onProvisionFullyManagedDeviceCompleted( + FullyManagedDeviceProvisioningParams provisioningParams) {} + private void setTimeAndTimezone(String timeZone, long localTime) { try { final AlarmManager alarmManager = mContext.getSystemService(AlarmManager.class); |