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

Commit c0966c7d authored by Xiqi Ruan's avatar Xiqi Ruan
Browse files

Allowlist provision for retail demo even `device_admin` is disabled

Enable provisioning API for retail demo mode even the device_admin and managed_users features are disabled.

Bug: 419238296, 422879516
Test: atest android.devicepolicy.cts.DevicePolicyManagerTest and manual test with device_admin disabled on device
Flag: android.app.admin.flags.remove_device_admin_feature_checks
Change-Id: I7a924510cf61fdea9681076bf4c14ac03f8223b1
parent 2dfc4d6d
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -1497,6 +1497,16 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                SystemMessage.NOTE_PROFILE_WIPED, notification, UserHandle.of(parentUserId));
    }
    private boolean shouldEnableForRetailDemoPackage(String packageName) {
        if (!Flags.removeDeviceAdminFeatureChecks() || TextUtils.isEmpty(packageName)) {
            return false;
        }
        final String predefinedPkgName = mContext.getString(R.string.config_retailDemoPackage);
        return packageName.equals(predefinedPkgName);
    }
    private final class UserLifecycleListener implements UserManagerInternal.UserLifecycleListener {
        @Override
@@ -4164,7 +4174,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            int userHandle,
            @Nullable String provisioningContext
    ) {
        if (!mHasFeature) {
        if (!mHasFeature && !shouldEnableForRetailDemoPackage(adminReceiver.getPackageName())) {
            return;
        }
        Preconditions.checkArgumentNonnegative(userHandle, "Invalid userId");
@@ -9941,7 +9951,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
    @Override
    public boolean setDeviceOwner(ComponentName admin, int userId,
            boolean setProfileOwnerOnCurrentUserIfNecessary) {
        if (!mHasFeature) {
        if (!mHasFeature && !shouldEnableForRetailDemoPackage(admin.getPackageName())) {
            logMissingFeatureAction("Cannot set " + ComponentName.flattenToShortString(admin)
                    + " as device owner for user " + userId);
            return false;
@@ -10515,7 +10525,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
    @Override
    public boolean setProfileOwner(ComponentName who, int userHandle) {
        if (!mHasFeature) {
        if (!mHasFeature && !shouldEnableForRetailDemoPackage(who.getPackageName())) {
            logMissingFeatureAction("Cannot set " + ComponentName.flattenToShortString(who)
                    + " as profile owner for user " + userHandle);
            return false;
@@ -17727,7 +17737,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
    private int checkProvisioningPreconditionSkipPermission(
            String action, String packageName, @Nullable ComponentName componentName, int userId) {
        if (!mHasFeature) {
        if (!mHasFeature && !shouldEnableForRetailDemoPackage(packageName)) {
            logMissingFeatureAction("Cannot check provisioning for action " + action);
            return STATUS_DEVICE_ADMIN_NOT_SUPPORTED;
        }
+16 −0
Original line number Diff line number Diff line
@@ -3651,6 +3651,22 @@ public class DevicePolicyManagerTest extends DpmTestBase {
                DevicePolicyManager.STATUS_DEVICE_ADMIN_NOT_SUPPORTED);
    }

    @Test
    public void testCheckProvisioningPreCondition_DeviceAdminFeatureOff_RetailDemo()
            throws Exception {
        setup_DeviceAdminFeatureOff();
        when(mServiceContext.resources
                .getString(R.string.config_retailDemoPackage)).thenReturn(admin1.getPackageName());
        mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
        assertCheckProvisioningPreCondition(DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE,
                DevicePolicyManager.STATUS_OK);
        assertCheckProvisioningPreCondition(DevicePolicyManager.ACTION_PROVISION_FINANCED_DEVICE,
                DevicePolicyManager.STATUS_OK);
        // `managed_user` feature is not enabled.
        assertCheckProvisioningPreCondition(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE,
                DevicePolicyManager.STATUS_MANAGED_USERS_NOT_SUPPORTED);
    }

    private void setup_ManagedProfileFeatureOff() throws Exception {
        when(getServices().ipackageManager
                .hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS, 0)).thenReturn(false);