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

Commit 0a5d96c9 authored by Kholoud Mohamed's avatar Kholoud Mohamed Committed by Automerger Merge Worker
Browse files

Merge changes from topic "retailDemo" into tm-dev am: ae758aa7

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17071466

Change-Id: Ic5cde60a6f5fa9b40e8d2ad165239b41c0c51ab6
parents 48efc85d ae758aa7
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1102,7 +1102,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 @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS, android.Manifest.permission.PROVISION_DEMO_DEVICE}) public void provisionFullyManagedDevice(@NonNull android.app.admin.FullyManagedDeviceProvisioningParams) throws android.app.admin.ProvisioningException;
    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void resetDrawables(@NonNull String[]);
    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void resetStrings(@NonNull String[]);
    method @RequiresPermission(android.Manifest.permission.SEND_LOST_MODE_LOCATION_UPDATES) public void sendLostModeLocationUpdate(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
@@ -1255,6 +1255,7 @@ package android.app.admin {
    method @Nullable public java.util.Locale getLocale();
    method @NonNull public String getOwnerName();
    method @Nullable public String getTimeZone();
    method public boolean isDemoDevice();
    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;
@@ -1265,6 +1266,7 @@ package android.app.admin {
    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 setDemoDevice(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);
+6 −3
Original line number Diff line number Diff line
@@ -14776,17 +14776,20 @@ public class DevicePolicyManager {
     * <p>The method {@link #checkProvisioningPrecondition} must be returning {@link #STATUS_OK}
     * before calling this method.
     *
     * <p>Holders of {@link android.Manifest.permission#PROVISION_DEMO_DEVICE} can call this API
     * only if {@link FullyManagedDeviceProvisioningParams#isDemoDevice()} is {@code true}.</p>
     *
     * @param provisioningParams Params required to provision a fully managed device,
     * see {@link FullyManagedDeviceProvisioningParams}.
     *
     * @throws SecurityException if the caller does not hold
     * {@link android.Manifest.permission#MANAGE_PROFILE_AND_DEVICE_OWNERS}.
     * @throws ProvisioningException if an error occurred during provisioning.
     *
     * @hide
     */
    @SystemApi
    @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS)
    @RequiresPermission(anyOf = {
            android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS,
            android.Manifest.permission.PROVISION_DEMO_DEVICE})
    public void provisionFullyManagedDevice(
            @NonNull FullyManagedDeviceProvisioningParams provisioningParams)
            throws ProvisioningException {
+40 −5
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.content.ComponentName;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.PersistableBundle;
import android.provider.Settings;
import android.stats.devicepolicy.DevicePolicyEnums;

import java.util.Locale;
@@ -44,6 +45,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
            "CAN_DEVICE_OWNER_GRANT_SENSOR_PERMISSIONS";
    private static final String TIME_ZONE_PROVIDED_PARAM = "TIME_ZONE_PROVIDED";
    private static final String LOCALE_PROVIDED_PARAM = "LOCALE_PROVIDED";
    private static final String DEMO_DEVICE = "DEMO_DEVICE";

    @NonNull private final ComponentName mDeviceAdminComponentName;
    @NonNull private final String mOwnerName;
@@ -54,6 +56,8 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
    @Nullable private final Locale mLocale;
    private final boolean mDeviceOwnerCanGrantSensorsPermissions;
    @NonNull private final PersistableBundle mAdminExtras;
    private final boolean mDemoDevice;


    private FullyManagedDeviceProvisioningParams(
            @NonNull ComponentName deviceAdminComponentName,
@@ -63,7 +67,8 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
            long localTime,
            @Nullable @SuppressLint("UseIcu") Locale locale,
            boolean deviceOwnerCanGrantSensorsPermissions,
            @NonNull PersistableBundle adminExtras) {
            @NonNull PersistableBundle adminExtras,
            boolean demoDevice) {
        this.mDeviceAdminComponentName = requireNonNull(deviceAdminComponentName);
        this.mOwnerName = requireNonNull(ownerName);
        this.mLeaveAllSystemAppsEnabled = leaveAllSystemAppsEnabled;
@@ -73,6 +78,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
        this.mDeviceOwnerCanGrantSensorsPermissions =
                deviceOwnerCanGrantSensorsPermissions;
        this.mAdminExtras = adminExtras;
        this.mDemoDevice = demoDevice;
    }

    private FullyManagedDeviceProvisioningParams(
@@ -83,7 +89,8 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
            long localTime,
            @Nullable String localeStr,
            boolean deviceOwnerCanGrantSensorsPermissions,
            @Nullable PersistableBundle adminExtras) {
            @Nullable PersistableBundle adminExtras,
            boolean demoDevice) {
        this(deviceAdminComponentName,
                ownerName,
                leaveAllSystemAppsEnabled,
@@ -91,7 +98,8 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
                localTime,
                getLocale(localeStr),
                deviceOwnerCanGrantSensorsPermissions,
                adminExtras);
                adminExtras,
                demoDevice);
    }

    @Nullable
@@ -165,6 +173,14 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
        return new PersistableBundle(mAdminExtras);
    }

    /**
     * @return true if this device is being setup as a retail demo device, see
     * {@link Settings.Global#DEVICE_DEMO_MODE}.
     */
    public boolean isDemoDevice() {
        return mDemoDevice;
    }

    /**
     * Logs the provisioning params using {@link DevicePolicyEventLogger}.
     *
@@ -178,6 +194,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
                mDeviceOwnerCanGrantSensorsPermissions);
        logParam(callerPackage, TIME_ZONE_PROVIDED_PARAM, /* value= */ mTimeZone != null);
        logParam(callerPackage, LOCALE_PROVIDED_PARAM, /* value= */ mLocale != null);
        logParam(callerPackage, DEMO_DEVICE, mDemoDevice);
    }

    private void logParam(String callerPackage, String param, boolean value) {
@@ -204,6 +221,9 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
        // Default to allowing control over sensor permission grants.
        boolean mDeviceOwnerCanGrantSensorsPermissions = true;
        @NonNull private PersistableBundle mAdminExtras;
        // Default is normal user devices
        boolean mDemoDevice = false;


        /**
         * Initialize a new {@link Builder} to construct a
@@ -288,6 +308,16 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
            return this;
        }

        /**
         * Marks the device as a demo device, see {@link Settings.Global#DEVICE_DEMO_MODE}. The
         * default value if unset is {@code false}.
         */
        @NonNull
        public Builder setDemoDevice(boolean demoDevice) {
            this.mDemoDevice = demoDevice;
            return this;
        }

        /**
         * Combines all of the attributes that have been set on this {@code Builder}
         *
@@ -303,7 +333,8 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
                    mLocalTime,
                    mLocale,
                    mDeviceOwnerCanGrantSensorsPermissions,
                    mAdminExtras);
                    mAdminExtras,
                    mDemoDevice);
        }
    }

@@ -327,6 +358,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
                + ", mDeviceOwnerCanGrantSensorsPermissions="
                + mDeviceOwnerCanGrantSensorsPermissions
                + ", mAdminExtras=" + mAdminExtras
                + ", mDemoDevice=" + mDemoDevice
                + '}';
    }

@@ -340,6 +372,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
        dest.writeString(mLocale == null ? null : mLocale.toLanguageTag());
        dest.writeBoolean(mDeviceOwnerCanGrantSensorsPermissions);
        dest.writePersistableBundle(mAdminExtras);
        dest.writeBoolean(mDemoDevice);
    }

    @NonNull
@@ -355,6 +388,7 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
                    String locale = in.readString();
                    boolean deviceOwnerCanGrantSensorsPermissions = in.readBoolean();
                    PersistableBundle adminExtras = in.readPersistableBundle();
                    boolean demoDevice = in.readBoolean();

                    return new FullyManagedDeviceProvisioningParams(
                            componentName,
@@ -364,7 +398,8 @@ public final class FullyManagedDeviceProvisioningParams implements Parcelable {
                            localtime,
                            locale,
                            deviceOwnerCanGrantSensorsPermissions,
                            adminExtras);
                            adminExtras,
                            demoDevice);
                }

                @Override
+23 −6
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@ import static android.app.admin.DevicePolicyManager.PRIVATE_DNS_MODE_UNKNOWN;
import static android.app.admin.DevicePolicyManager.PRIVATE_DNS_SET_ERROR_FAILURE_SETTING;
import static android.app.admin.DevicePolicyManager.PRIVATE_DNS_SET_NO_ERROR;
import static android.app.admin.DevicePolicyManager.PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER;
import static android.app.admin.DevicePolicyManager.STATE_USER_SETUP_FINALIZED;
import static android.app.admin.DevicePolicyManager.STATE_USER_UNMANAGED;
import static android.app.admin.DevicePolicyManager.STATUS_ACCOUNTS_NOT_EMPTY;
import static android.app.admin.DevicePolicyManager.STATUS_CANNOT_ADD_MANAGED_PROFILE;
@@ -9225,7 +9226,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
                    // directly setting profile-owner or device-owner.
                    if (getUserProvisioningState(userId)
                            != DevicePolicyManager.STATE_USER_UNMANAGED
                            || newState != DevicePolicyManager.STATE_USER_SETUP_FINALIZED) {
                            || newState != STATE_USER_SETUP_FINALIZED) {
                        throw new IllegalStateException("Not allowed to change provisioning state "
                                + "unless current provisioning state is unmanaged, and new state"
                                + "is finalized.");
@@ -9259,7 +9260,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            case DevicePolicyManager.STATE_USER_SETUP_INCOMPLETE:
            case DevicePolicyManager.STATE_USER_SETUP_COMPLETE:
                // Can only move to finalized from these states.
                if (newState == DevicePolicyManager.STATE_USER_SETUP_FINALIZED) {
                if (newState == STATE_USER_SETUP_FINALIZED) {
                    return;
                }
                break;
@@ -9271,7 +9272,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
                    return;
                }
                break;
            case DevicePolicyManager.STATE_USER_SETUP_FINALIZED:
            case STATE_USER_SETUP_FINALIZED:
                // Cannot transition out of finalized.
                break;
            case DevicePolicyManager.STATE_USER_PROFILE_FINALIZED:
@@ -18092,7 +18093,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
        final CallerIdentity caller = getCallerIdentity();
        Preconditions.checkCallAuthorization(
                hasCallingOrSelfPermission(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS));
                hasCallingOrSelfPermission(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS)
                        || (hasCallingOrSelfPermission(permission.PROVISION_DEMO_DEVICE)
                        && provisioningParams.isDemoDevice()));
        provisioningParams.logParams(callerPackage);
@@ -18129,8 +18132,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            }
            disallowAddUser();
            setAdminCanGrantSensorsPermissionForUserUnchecked(deviceOwnerUserId,
                    provisioningParams.canDeviceOwnerGrantSensorsPermissions());
            setAdminCanGrantSensorsPermissionForUserUnchecked(
                    deviceOwnerUserId, provisioningParams.canDeviceOwnerGrantSensorsPermissions());
            setDemoDeviceStateUnchecked(deviceOwnerUserId, provisioningParams.isDemoDevice());
            onProvisionFullyManagedDeviceCompleted(provisioningParams);
            sendProvisioningCompletedBroadcast(
                    deviceOwnerUserId,
@@ -18329,6 +18333,19 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
        }
    }
    private void setDemoDeviceStateUnchecked(@UserIdInt int userId, boolean isDemoDevice) {
        Slogf.d(LOG_TAG, "setDemoDeviceStateUnchecked(%d, %b)",
                userId, isDemoDevice);
        if (!isDemoDevice) {
            return;
        }
        synchronized (getLockObject()) {
            mInjector.settingsGlobalPutStringForUser(
                    Settings.Global.DEVICE_DEMO_MODE, Integer.toString(/* value= */ 1), userId);
        }
        setUserProvisioningState(STATE_USER_SETUP_FINALIZED, userId);
    }
    private void updateAdminCanGrantSensorsPermissionCache(@UserIdInt int userId) {
        synchronized (getLockObject()) {