diff --git a/core/api/test-current.txt b/core/api/test-current.txt index ff87b8309a874..5deef1af463e1 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -548,6 +548,7 @@ package android.app.admin { method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public boolean setDeviceOwnerOnly(@NonNull android.content.ComponentName, int); method public void setDeviceOwnerType(@NonNull android.content.ComponentName, int); method @RequiresPermission(android.Manifest.permission.MANAGE_DEVICE_ADMINS) public void setNextOperationSafety(int, int); + method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public void setOverrideKeepProfilesRunning(boolean); method @RequiresPermission(anyOf={android.Manifest.permission.MARK_DEVICE_ORGANIZATION_OWNED, android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS}, conditional=true) public void setProfileOwnerOnOrganizationOwnedDevice(@NonNull android.content.ComponentName, boolean); method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public boolean triggerDevicePolicyEngineMigration(boolean); field public static final String ACTION_DATA_SHARING_RESTRICTION_APPLIED = "android.app.action.DATA_SHARING_RESTRICTION_APPLIED"; diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 4016e324a50ca..f8941c06185bf 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -16433,6 +16433,23 @@ public class DevicePolicyManager { return null; } + /** + * Overrides the effective cached value of enable_keep_profiles_running for testing purposes. + * + * @hide + */ + @TestApi + @RequiresPermission(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) + public void setOverrideKeepProfilesRunning(boolean enabled) { + if (mService != null) { + try { + mService.setOverrideKeepProfilesRunning(enabled); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + } + /** * Triggers the data migration of device policies for existing DPCs to the Device Policy Engine. * If {@code forceMigration} is set to {@code true} it skips the prerequisite checks before diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 5b9e948560b52..132d616a94991 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -599,5 +599,7 @@ interface IDevicePolicyManager { DevicePolicyState getDevicePolicyState(); + void setOverrideKeepProfilesRunning(boolean enabled); + boolean triggerDevicePolicyEngineMigration(boolean forceMigration); } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 26a0d2273d9b1..dd9791b332d24 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -805,7 +805,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { * This feature flag is checked once after boot and this value us used until the next reboot to * avoid needing to handle the flag changing on the fly. */ - private final boolean mKeepProfilesRunning = isKeepProfilesRunningFlagEnabled(); + private boolean mKeepProfilesRunning = isKeepProfilesRunningFlagEnabled(); /** * For apps targeting U+ @@ -20965,6 +20965,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { DEFAULT_WORK_PROFILE_TELEPHONY_FLAG); } + @Override + public void setOverrideKeepProfilesRunning(boolean enabled) { + Preconditions.checkCallAuthorization( + hasCallingOrSelfPermission(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS)); + mKeepProfilesRunning = enabled; + Slog.i(LOG_TAG, "Keep profiles running overridden to: " + enabled); + } + @Override public void setMtePolicy(int flags) { final Set allowedModes =