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

Commit 4d001dfc authored by Aleks Todorov's avatar Aleks Todorov Committed by kholoud mohamed
Browse files

Expose DevicePolicyManager provisioning APIs as SystemAPIs

Exposed provisionFullyManagedDevice and createAndProvisionManagedProfile
as SystemAPIs

Bug: 188410712
Bug: 206083853
CTS-Coverage-Bug: 175380793
Test: N/A
Change-Id: I3a035e4d0e20028cbb7a5f175e64395682b1f3b6
parent 8b100eb3
Loading
Loading
Loading
Loading
+62 −1
Original line number Diff line number Diff line
@@ -965,7 +965,8 @@ package android.app.admin {
  }
  public class DevicePolicyManager {
    method public int checkProvisioningPreCondition(@NonNull String, @NonNull String);
    method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public int checkProvisioningPreCondition(@NonNull String, @NonNull String);
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public android.os.UserHandle createAndProvisionManagedProfile(@NonNull android.app.admin.ManagedProfileProvisioningParams) throws android.app.admin.ProvisioningException;
    method @Nullable public android.content.Intent createProvisioningIntentFromNfcIntent(@NonNull android.content.Intent);
    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public boolean getBluetoothContactSharingDisabled(@NonNull android.os.UserHandle);
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getDeviceOwner();
@@ -987,6 +988,7 @@ package android.app.admin {
    method @RequiresPermission("android.permission.NOTIFY_PENDING_SYSTEM_UPDATE") public void notifyPendingSystemUpdate(long);
    method @RequiresPermission("android.permission.NOTIFY_PENDING_SYSTEM_UPDATE") public void notifyPendingSystemUpdate(long, boolean);
    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public boolean packageHasActiveAdmins(String);
    method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public void provisionFullyManagedDevice(@NonNull android.app.admin.FullyManagedDeviceProvisioningParams) throws android.app.admin.ProvisioningException;
    method @Deprecated @RequiresPermission(android.Manifest.permission.MANAGE_DEVICE_ADMINS) public boolean setActiveProfileOwner(@NonNull android.content.ComponentName, String) throws java.lang.IllegalArgumentException;
    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void setDeviceProvisioningConfigApplied();
    method @Deprecated @RequiresPermission(value=android.Manifest.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS, conditional=true) public void setProfileOwnerCanAccessDeviceIds(@NonNull android.content.ComponentName);
@@ -1054,6 +1056,65 @@ package android.app.admin {
    field public static final int STATE_USER_UNMANAGED = 0; // 0x0
  }
  public final class FullyManagedDeviceProvisioningParams implements android.os.Parcelable {
    method public boolean canDeviceOwnerGrantSensorsPermissions();
    method public int describeContents();
    method @NonNull public android.content.ComponentName getDeviceAdminComponentName();
    method public long getLocalTime();
    method @Nullable public java.util.Locale getLocale();
    method @NonNull public String getOwnerName();
    method @Nullable public String getTimeZone();
    method public boolean isLeaveAllSystemAppsEnabled();
    method public void writeToParcel(@NonNull android.os.Parcel, @Nullable int);
    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.FullyManagedDeviceProvisioningParams> CREATOR;
  }
  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 setCanDeviceOwnerGrantSensorsPermissions(boolean);
    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLeaveAllSystemAppsEnabled(boolean);
    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLocalTime(long);
    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLocale(@Nullable java.util.Locale);
    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setTimeZone(@Nullable String);
  }
  public final class ManagedProfileProvisioningParams implements android.os.Parcelable {
    method public int describeContents();
    method @Nullable public android.accounts.Account getAccountToMigrate();
    method @NonNull public String getOwnerName();
    method @NonNull public android.content.ComponentName getProfileAdminComponentName();
    method @Nullable public String getProfileName();
    method public boolean isKeepingAccountOnMigration();
    method public boolean isLeaveAllSystemAppsEnabled();
    method public boolean isOrganizationOwnedProvisioning();
    method public void writeToParcel(@NonNull android.os.Parcel, @Nullable int);
    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.ManagedProfileProvisioningParams> CREATOR;
  }
  public static final class ManagedProfileProvisioningParams.Builder {
    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 setKeepingAccountOnMigration(boolean);
    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setLeaveAllSystemAppsEnabled(boolean);
    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setOrganizationOwnedProvisioning(boolean);
    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setProfileName(@Nullable String);
  }
  public class ProvisioningException extends android.util.AndroidException {
    ctor public ProvisioningException(@NonNull Exception, int);
    method public int getProvisioningError();
    field public static final int ERROR_ADMIN_PACKAGE_INSTALLATION_FAILED = 3; // 0x3
    field public static final int ERROR_PRE_CONDITION_FAILED = 1; // 0x1
    field public static final int ERROR_PROFILE_CREATION_FAILED = 2; // 0x2
    field public static final int ERROR_REMOVE_NON_REQUIRED_APPS_FAILED = 6; // 0x6
    field public static final int ERROR_SETTING_PROFILE_OWNER_FAILED = 4; // 0x4
    field public static final int ERROR_SET_DEVICE_OWNER_FAILED = 7; // 0x7
    field public static final int ERROR_STARTING_PROFILE_FAILED = 5; // 0x5
    field public static final int ERROR_UNKNOWN = 0; // 0x0
  }
  public final class SystemUpdatePolicy implements android.os.Parcelable {
    method public android.app.admin.SystemUpdatePolicy.InstallationOption getInstallationOptionAt(long);
    field public static final int TYPE_PAUSE = 4; // 0x4
+0 −62
Original line number Diff line number Diff line
@@ -439,7 +439,6 @@ package android.app.admin {
  public class DevicePolicyManager {
    method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public void clearOrganizationId();
    method @RequiresPermission(android.Manifest.permission.CLEAR_FREEZE_PERIOD) public void clearSystemUpdatePolicyFreezePeriodRecord();
    method @Nullable public android.os.UserHandle createAndProvisionManagedProfile(@NonNull android.app.admin.ManagedProfileProvisioningParams) throws android.app.admin.ProvisioningException;
    method @RequiresPermission(android.Manifest.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS) public long forceNetworkLogs();
    method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public void forceRemoveActiveAdmin(@NonNull android.content.ComponentName, int);
    method @RequiresPermission(android.Manifest.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS) public long forceSecurityLogs();
@@ -456,7 +455,6 @@ package android.app.admin {
    method @RequiresPermission(anyOf={android.Manifest.permission.MARK_DEVICE_ORGANIZATION_OWNED, android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS}, conditional=true) public void markProfileOwnerOnOrganizationOwnedDevice(@NonNull android.content.ComponentName);
    method @NonNull public static String operationSafetyReasonToString(int);
    method @NonNull public static String operationToString(int);
    method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public void provisionFullyManagedDevice(@NonNull android.app.admin.FullyManagedDeviceProvisioningParams) throws android.app.admin.ProvisioningException;
    method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public void resetDefaultCrossProfileIntentFilters(int);
    method @RequiresPermission(allOf={android.Manifest.permission.MANAGE_DEVICE_ADMINS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public void setActiveAdmin(@NonNull android.content.ComponentName, boolean, int);
    method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public boolean setDeviceOwner(@NonNull android.content.ComponentName, @Nullable String, int);
@@ -506,66 +504,6 @@ package android.app.admin {
    field public static final int OPERATION_SWITCH_USER = 2; // 0x2
    field public static final int OPERATION_UNINSTALL_CA_CERT = 40; // 0x28
    field public static final int OPERATION_WIPE_DATA = 8; // 0x8
    field public static final int PROVISIONING_RESULT_ADMIN_PACKAGE_INSTALLATION_FAILED = 3; // 0x3
    field public static final int PROVISIONING_RESULT_PRE_CONDITION_FAILED = 1; // 0x1
    field public static final int PROVISIONING_RESULT_PROFILE_CREATION_FAILED = 2; // 0x2
    field public static final int PROVISIONING_RESULT_REMOVE_NON_REQUIRED_APPS_FAILED = 6; // 0x6
    field public static final int PROVISIONING_RESULT_SETTING_PROFILE_OWNER_FAILED = 4; // 0x4
    field public static final int PROVISIONING_RESULT_SET_DEVICE_OWNER_FAILED = 7; // 0x7
    field public static final int PROVISIONING_RESULT_STARTING_PROFILE_FAILED = 5; // 0x5
  }

  public final class FullyManagedDeviceProvisioningParams implements android.os.Parcelable {
    method public boolean canDeviceOwnerGrantSensorsPermissions();
    method public int describeContents();
    method @NonNull public android.content.ComponentName getDeviceAdminComponentName();
    method public long getLocalTime();
    method @Nullable public java.util.Locale getLocale();
    method @NonNull public String getOwnerName();
    method @Nullable public String getTimeZone();
    method public boolean isLeaveAllSystemAppsEnabled();
    method public void logParams(@NonNull String);
    method public void writeToParcel(@NonNull android.os.Parcel, @Nullable int);
    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.FullyManagedDeviceProvisioningParams> CREATOR;
  }

  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 setDeviceOwnerCanGrantSensorsPermissions(boolean);
    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLeaveAllSystemAppsEnabled(boolean);
    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLocalTime(long);
    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLocale(@Nullable java.util.Locale);
    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setTimeZone(@Nullable String);
  }

  public final class ManagedProfileProvisioningParams implements android.os.Parcelable {
    method public int describeContents();
    method @Nullable public android.accounts.Account getAccountToMigrate();
    method @NonNull public String getOwnerName();
    method @NonNull public android.content.ComponentName getProfileAdminComponentName();
    method @Nullable public String getProfileName();
    method public boolean isKeepAccountMigrated();
    method public boolean isLeaveAllSystemAppsEnabled();
    method public boolean isOrganizationOwnedProvisioning();
    method public void logParams(@NonNull String);
    method public void writeToParcel(@NonNull android.os.Parcel, @Nullable int);
    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.ManagedProfileProvisioningParams> CREATOR;
  }

  public static final class ManagedProfileProvisioningParams.Builder {
    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 setKeepAccountMigrated(boolean);
    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setLeaveAllSystemAppsEnabled(boolean);
    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setOrganizationOwnedProvisioning(boolean);
    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setProfileName(@Nullable String);
  }

  public class ProvisioningException extends android.util.AndroidException {
    ctor public ProvisioningException(@NonNull Exception, int);
    method public int getProvisioningResult();
  }

  public static final class SecurityLog.SecurityEvent implements android.os.Parcelable {
+4 −84
Original line number Diff line number Diff line
@@ -2353,88 +2353,6 @@ public class DevicePolicyManager {
    })
    public @interface ProvisioningPreCondition {}
    /**
     * Service-specific error code for {@link #provisionFullyManagedDevice} and
     * {@link #createAndProvisionManagedProfile}:
     * Indicates the call to {@link #checkProvisioningPreCondition} returned an error code.
     *
     * @hide
     */
    @TestApi
    public static final int PROVISIONING_RESULT_PRE_CONDITION_FAILED = 1;
    /**
     * Service-specific error code for {@link #createAndProvisionManagedProfile}:
     * Indicates the call to {@link UserManager#createProfileForUserEvenWhenDisallowed}
     * returned {@code null}.
     *
     * @hide
     */
    @TestApi
    public static final int PROVISIONING_RESULT_PROFILE_CREATION_FAILED = 2;
    /**
     * Service-specific error code for {@link #createAndProvisionManagedProfile}:
     * Indicates the call to {@link PackageManager#installExistingPackageAsUser} has failed.
     *
     * @hide
     */
    @TestApi
    public static final int PROVISIONING_RESULT_ADMIN_PACKAGE_INSTALLATION_FAILED = 3;
    /**
     * Service-specific error code for {@link #createAndProvisionManagedProfile}:
     * Indicates the call to {@link #setProfileOwner} returned {@code false}.
     *
     * @hide
     */
    @TestApi
    public static final int PROVISIONING_RESULT_SETTING_PROFILE_OWNER_FAILED = 4;
    /**
     * Service-specific error code for {@link #createAndProvisionManagedProfile}:
     * Indicates that starting the newly created profile has failed.
     *
     * @hide
     */
    @TestApi
    public static final int PROVISIONING_RESULT_STARTING_PROFILE_FAILED = 5;
    /**
     * Service-specific error code for {@link #provisionFullyManagedDevice}:
     * Indicates that removing the non required apps have failed.
     *
     * @hide
     */
    @TestApi
    public static final int PROVISIONING_RESULT_REMOVE_NON_REQUIRED_APPS_FAILED = 6;
    /**
     * Service-specific error code for {@link #provisionFullyManagedDevice}:
     * Indicates the call to {@link #setDeviceOwner} returned {@code false}.
     *
     * @hide
     */
    @TestApi
    public static final int PROVISIONING_RESULT_SET_DEVICE_OWNER_FAILED = 7;
    /**
     * Service-specific error codes for {@link #createAndProvisionManagedProfile} and
     * {@link #provisionFullyManagedDevice} indicating all the errors during provisioning.
     *
     * @hide
     */
    @Retention(RetentionPolicy.SOURCE)
    @IntDef(prefix = { "PROVISIONING_RESULT_" }, value = {
            PROVISIONING_RESULT_PRE_CONDITION_FAILED, PROVISIONING_RESULT_PROFILE_CREATION_FAILED,
            PROVISIONING_RESULT_ADMIN_PACKAGE_INSTALLATION_FAILED,
            PROVISIONING_RESULT_SETTING_PROFILE_OWNER_FAILED,
            PROVISIONING_RESULT_STARTING_PROFILE_FAILED,
            PROVISIONING_RESULT_REMOVE_NON_REQUIRED_APPS_FAILED,
            PROVISIONING_RESULT_SET_DEVICE_OWNER_FAILED
    })
    public @interface ProvisioningResult {}
    /**
     * Disable all configurable SystemUI features during LockTask mode. This includes,
     * <ul>
@@ -11424,6 +11342,7 @@ public class DevicePolicyManager {
     * @hide
     */
    @SystemApi
    @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS)
    public @ProvisioningPreCondition int checkProvisioningPreCondition(
            @NonNull String action, @NonNull String packageName) {
        try {
@@ -14125,7 +14044,8 @@ public class DevicePolicyManager {
     * @hide
     */
    @Nullable
    @TestApi
    @SystemApi
    @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS)
    public UserHandle createAndProvisionManagedProfile(
            @NonNull ManagedProfileProvisioningParams provisioningParams)
            throws ProvisioningException {
@@ -14158,7 +14078,7 @@ public class DevicePolicyManager {
     *
     * @hide
     */
    @TestApi
    @SystemApi
    @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS)
    public void provisionFullyManagedDevice(
            @NonNull FullyManagedDeviceProvisioningParams provisioningParams)
+30 −4
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ import static java.util.Objects.requireNonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.annotation.TestApi;
import android.annotation.SystemApi;
import android.content.ComponentName;
import android.os.Parcel;
import android.os.Parcelable;
@@ -32,9 +32,10 @@ import java.util.Locale;
/**
 * Params required to provision a fully managed device, see
 * {@link DevicePolicyManager#provisionFullyManagedDevice}.
 *
 * @hide
 */
@TestApi
@SystemApi
public final class FullyManagedDeviceProvisioningParams implements Parcelable {
    private static final String LEAVE_ALL_SYSTEM_APPS_ENABLED_PARAM =
            "LEAVE_ALL_SYSTEM_APPS_ENABLED";
@@ -92,29 +93,50 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
        return localeStr == null ? null : Locale.forLanguageTag(localeStr);
    }

    /**
     * Returns the device owner's {@link ComponentName}.
     */
    @NonNull
    public ComponentName getDeviceAdminComponentName() {
        return mDeviceAdminComponentName;
    }

    /**
     * Returns the device owner's name.
     */
    @NonNull
    public String getOwnerName() {
        return mOwnerName;
    }

    /**
     * Returns {@code true} if system apps should be left enabled after provisioning.
     */
    public boolean isLeaveAllSystemAppsEnabled() {
        return mLeaveAllSystemAppsEnabled;
    }

    /**
     * If set, it returns the time zone to set for the device after provisioning, otherwise returns
     * {@code null};
     */
    @Nullable
    public String getTimeZone() {
        return mTimeZone;
    }

    /**
     * If set, it returns the local time to set for the device after provisioning, otherwise returns
     * 0.
     */
    public long getLocalTime() {
        return mLocalTime;
    }

    /**
     * If set, it returns the {@link Locale} to set for the device after provisioning, otherwise
     * returns {@code null}.
     */
    @Nullable
    public @SuppressLint("UseIcu") Locale getLocale() {
        return mLocale;
@@ -130,6 +152,8 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {

    /**
     * Logs the provisioning params using {@link DevicePolicyEventLogger}.
     *
     * @hide
     */
    public void logParams(@NonNull String callerPackage) {
        requireNonNull(callerPackage);
@@ -232,8 +256,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
         * See {@link DevicePolicyManager#EXTRA_PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT}.
         */
        @NonNull
        @SuppressLint("MissingGetterMatchingBuilder")
        public Builder setDeviceOwnerCanGrantSensorsPermissions(boolean mayGrant) {
        public Builder setCanDeviceOwnerGrantSensorsPermissions(boolean mayGrant) {
            mDeviceOwnerCanGrantSensorsPermissions = mayGrant;
            return this;
        }
@@ -261,6 +284,9 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
        return 0;
    }

    /**
     * @hide
     */
    @Override
    public String toString() {
        return "FullyManagedDeviceProvisioningParams{"
+42 −14

File changed.

Preview size limit exceeded, changes collapsed.

Loading