Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ecadf06e authored by arangelov's avatar arangelov
Browse files

Include adminExtras bundle in DPM provisioning APIs

Bug: 215145532
Test: atest DevicePolicyManagerTest
Change-Id: I9572137c75ca3582d0872ad113653313a4fdc75f
parent 86d5713d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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);
+37 −5
Original line number Diff line number Diff line
@@ -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
@@ -150,6 +156,15 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
        return mDeviceOwnerCanGrantSensorsPermissions;
    }

    /**
     * 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}.
     *
@@ -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
@@ -261,6 +277,17 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
            return this;
        }

        /**
         * 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}
         *
@@ -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
+34 −4
Original line number Diff line number Diff line
@@ -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;
    }

    /**
@@ -123,6 +127,15 @@ public final class ManagedProfileProvisioningParams implements Parcelable {
        return mKeepAccountOnMigration;
    }

    /**
     * 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}.
     *
@@ -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}.
@@ -234,6 +248,17 @@ public final class ManagedProfileProvisioningParams implements Parcelable {
            return this;
        }

        /**
         * 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}.
         *
@@ -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
+52 −0
Original line number Diff line number Diff line
@@ -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);