From 0a1f866c4eb098b23a7c5c2c7d46631834df0a33 Mon Sep 17 00:00:00 2001 From: Rubin Xu Date: Mon, 6 Sep 2021 11:45:21 +0100 Subject: [PATCH] Add TestApi to clear organization Id Needed in CTS tests to reset the organization ID and enrollment specific ID. Bug: 197760250 Test: atest android.devicepolicy.cts.EnrollmentSpecificIdTest Change-Id: Ice1123744957ab57636ec1d9b0ca60a16c5a93cf Merged-In: Ice1123744957ab57636ec1d9b0ca60a16c5a93cf --- core/api/test-current.txt | 1 + .../android/app/admin/DevicePolicyManager.java | 17 +++++++++++++++++ .../android/app/admin/IDevicePolicyManager.aidl | 1 + .../DevicePolicyManagerService.java | 13 +++++++++++++ 4 files changed, 32 insertions(+) diff --git a/core/api/test-current.txt b/core/api/test-current.txt index f7164cf3761e7..60f0ad44c8f10 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -425,6 +425,7 @@ package android.app.admin { public class DevicePolicyManager { method public int checkProvisioningPreCondition(@Nullable String, @NonNull String); + method @RequiresPermission("android.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(); diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 0e04ad3768c7c..12444ab9ab091 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -13739,6 +13739,23 @@ public class DevicePolicyManager { } } + /** + * Clears organization ID set by the DPC and resets the precomputed enrollment specific ID. + * @hide + */ + @TestApi + @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) + public void clearOrganizationId() { + if (mService == null) { + return; + } + try { + mService.clearOrganizationIdForUser(myUserId()); + } catch (RemoteException re) { + throw re.rethrowFromSystemServer(); + } + } + /** * Creates and provisions a managed profile and sets the * {@link ManagedProfileProvisioningParams#getProfileAdminComponentName()} as the profile diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index b6c48a1c057b5..b1364b500d4ae 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -377,6 +377,7 @@ interface IDevicePolicyManager { void setOrganizationColor(in ComponentName admin, in int color); void setOrganizationColorForUser(in int color, in int userId); + void clearOrganizationIdForUser(int userHandle); int getOrganizationColor(in ComponentName admin); int getOrganizationColorForUser(int userHandle); diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 70219d2503a38..590f3c86ab669 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -16967,6 +16967,19 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { .write(); } + @Override + public void clearOrganizationIdForUser(int userHandle) { + Preconditions.checkCallAuthorization( + hasCallingOrSelfPermission(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS)); + + synchronized (getLockObject()) { + final ActiveAdmin owner = getDeviceOrProfileOwnerAdminLocked(userHandle); + owner.mOrganizationId = null; + owner.mEnrollmentSpecificId = null; + saveSettingsLocked(userHandle); + } + } + @Override public UserHandle createAndProvisionManagedProfile( @NonNull ManagedProfileProvisioningParams provisioningParams,