From f9718b4eb700e8c34d75e6066af3006bac838124 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Fri, 4 Dec 2020 12:00:43 -0800 Subject: [PATCH] Exposed some DPM members as @TestApi. Test: m update-api devicepolicy-deviceside-common Test: atest \ CtsDevicePolicyManagerTestCases:DeviceOwnerTest#testDevicePolicySafetyCheckerIntegration \ CtsDevicePolicyManagerTestCases:ProfileOwnerTest#testDevicePolicySafetyCheckerIntegration Bug: 172376923 Change-Id: I7dbcf357404dcfe030f3206d3a222315c7c164af --- core/api/test-current.txt | 7 +++++ .../app/admin/DevicePolicyManager.java | 30 +++++++++++++++---- .../app/admin/IDevicePolicyManager.aidl | 4 ++- .../DevicePolicyManagerService.java | 6 ++-- 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/core/api/test-current.txt b/core/api/test-current.txt index e392ed7b6e2d9..2394919d4e1a6 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -371,8 +371,15 @@ package android.app.admin { method public java.util.List getOwnerInstalledCaCerts(@NonNull android.os.UserHandle); method public boolean isCurrentInputMethodSetByOwner(); method public boolean isFactoryResetProtectionPolicySupported(); + method @NonNull public static String operationToString(int); + method @RequiresPermission("android.permission.MANAGE_DEVICE_ADMINS") public void setNextOperationSafety(int, boolean); field public static final String ACTION_DATA_SHARING_RESTRICTION_APPLIED = "android.app.action.DATA_SHARING_RESTRICTION_APPLIED"; + field public static final int OPERATION_CREATE_AND_MANAGE_USER = 5; // 0x5 field public static final int OPERATION_LOCK_NOW = 1; // 0x1 + field public static final int OPERATION_REMOVE_USER = 6; // 0x6 + field public static final int OPERATION_START_USER_IN_BACKGROUND = 3; // 0x3 + field public static final int OPERATION_STOP_USER = 4; // 0x4 + field public static final int OPERATION_SWITCH_USER = 2; // 0x2 } public static final class SecurityLog.SecurityEvent implements android.os.Parcelable { diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 5eb1922a163c6..2cda017bbd1ad 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -39,6 +39,7 @@ import android.annotation.WorkerThread; import android.app.Activity; import android.app.IServiceConnection; import android.app.KeyguardManager; +import android.app.admin.DevicePolicyManager.DevicePolicyOperation; import android.app.admin.SecurityLog.SecurityEvent; import android.compat.annotation.UnsupportedAppUsage; import android.content.ComponentName; @@ -2454,27 +2455,27 @@ public class DevicePolicyManager { @Retention(RetentionPolicy.SOURCE) public @interface PersonalAppsSuspensionReason {} - // TODO(b/172376923) - make all (or none) @TestApi - /** @hide */ @TestApi public static final int OPERATION_LOCK_NOW = 1; - /** @hide */ + @TestApi public static final int OPERATION_SWITCH_USER = 2; /** @hide */ + @TestApi public static final int OPERATION_START_USER_IN_BACKGROUND = 3; /** @hide */ + @TestApi public static final int OPERATION_STOP_USER = 4; /** @hide */ + @TestApi public static final int OPERATION_CREATE_AND_MANAGE_USER = 5; /** @hide */ + @TestApi public static final int OPERATION_REMOVE_USER = 6; private static final String PREFIX_OPERATION = "OPERATION_"; - - // TODO(b/172376923) - add all operations /** @hide */ @IntDef(prefix = PREFIX_OPERATION, value = { OPERATION_LOCK_NOW, @@ -2489,6 +2490,8 @@ public class DevicePolicyManager { } /** @hide */ + @TestApi + @NonNull public static String operationToString(@DevicePolicyOperation int operation) { return DebugUtils.constantToString(DevicePolicyManager.class, PREFIX_OPERATION, operation); } @@ -12397,4 +12400,21 @@ public class DevicePolicyManager { } return false; } + + /** + * Used by CTS to set the result of the next safety operation check. + * + * @hide + */ + @TestApi + @RequiresPermission(android.Manifest.permission.MANAGE_DEVICE_ADMINS) + public void setNextOperationSafety(@DevicePolicyOperation int operation, boolean safe) { + if (mService != null) { + try { + mService.setNextOperationSafety(operation, safe); + } catch (RemoteException re) { + throw re.rethrowFromSystemServer(); + } + } + } } diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 8be3cdc1296aa..e21fee2c54259 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -484,5 +484,7 @@ interface IDevicePolicyManager { long getManagedProfileMaximumTimeOff(in ComponentName admin); void setManagedProfileMaximumTimeOff(in ComponentName admin, long timeoutMs); - boolean canProfileOwnerResetPasswordWhenLocked(in int userId); + boolean canProfileOwnerResetPasswordWhenLocked(int userId); + + void setNextOperationSafety(int operation, boolean safe); } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 5f08a0c529c57..bed450a196d91 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -1017,10 +1017,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { return mSafetyChecker == null || mSafetyChecker.isDevicePolicyOperationSafe(operation); } - /** - * Used by {@code cmd device_policy} to set the result of the next safety operation check. - */ - void setNextOperationSafety(@DevicePolicyOperation int operation, boolean safe) { + @Override + public void setNextOperationSafety(@DevicePolicyOperation int operation, boolean safe) { Preconditions.checkCallAuthorization( hasCallingOrSelfPermission(permission.MANAGE_DEVICE_ADMINS)); Slog.i(LOG_TAG, "setNextOperationSafety(" + DevicePolicyManager.operationToString(operation)