diff options
| author | 2022-03-16 09:45:21 +0000 | |
|---|---|---|
| committer | 2022-03-16 09:45:21 +0000 | |
| commit | caf50b5f9d20096f4396c8957c9f23ca6092507d (patch) | |
| tree | 3469c67e48f83a1b7da71d8ebab6949d4df37b30 | |
| parent | 83addbff50c03a3ebe0a22f52b43b4f89b9a3499 (diff) | |
| parent | 47020d16c324bb3b5cfcecd01c38ab28ed9ad353 (diff) | |
Merge "Add API to check if device policy role qualification is bypassable" into tm-dev
5 files changed, 41 insertions, 0 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 9f41f05534e5..5df988153752 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -1114,6 +1114,7 @@ package android.app.admin { method public void setSecondaryLockscreenEnabled(@NonNull android.content.ComponentName, boolean); method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void setStrings(@NonNull java.util.Set<android.app.admin.DevicePolicyStringResource>); method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public void setUserProvisioningState(int, @NonNull android.os.UserHandle); + method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public boolean shouldAllowBypassingDevicePolicyManagementRoleQualification(); field public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED = "android.account.DEVICE_OR_PROFILE_OWNER_ALLOWED"; field public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_DISALLOWED = "android.account.DEVICE_OR_PROFILE_OWNER_DISALLOWED"; field public static final String ACTION_BIND_SECONDARY_LOCKSCREEN_SERVICE = "android.app.action.BIND_SECONDARY_LOCKSCREEN_SERVICE"; diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 27fe312706ff..7269b0d91d02 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -15765,4 +15765,23 @@ public class DevicePolicyManager { } return deviceManagerConfig; } + + /** + * @return {@code true} if bypassing the device policy management role qualification is allowed + * with the current state of the device. + * + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) + public boolean shouldAllowBypassingDevicePolicyManagementRoleQualification() { + if (mService != null) { + try { + return mService.shouldAllowBypassingDevicePolicyManagementRoleQualification(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + return false; + } } diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 77db14654592..fb1ca41ccc56 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -558,4 +558,6 @@ interface IDevicePolicyManager { void setStrings(in List<DevicePolicyStringResource> strings); void resetStrings(in String[] stringIds); ParcelableResource getString(String stringId); + + boolean shouldAllowBypassingDevicePolicyManagementRoleQualification(); } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java index 200b120843cc..ba00beea47cc 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java @@ -189,4 +189,9 @@ abstract class BaseIDevicePolicyManager extends IDevicePolicyManager.Stub { public ParcelableResource getString(String stringId) { return null; } + + @Override + public boolean shouldAllowBypassingDevicePolicyManagementRoleQualification() { + return false; + } } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 3d40f48f244d..3a98e4e0babf 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -18790,4 +18790,18 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { mInjector.binderWithCleanCallingIdentity(() -> Settings.Secure.putInt( mContext.getContentResolver(), MANAGED_PROVISIONING_DPC_DOWNLOADED, setTo)); } + + @Override + public boolean shouldAllowBypassingDevicePolicyManagementRoleQualification() { + Preconditions.checkCallAuthorization(hasCallingOrSelfPermission( + android.Manifest.permission.MANAGE_ROLE_HOLDERS)); + return mInjector.binderWithCleanCallingIdentity(() -> { + if (mUserManager.getUserCount() > 1) { + return false; + } + AccountManager am = AccountManager.get(mContext); + Account[] accounts = am.getAccounts(); + return accounts.length == 0; + }); + } } |