diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index b5b7dbdff1725..8284cdde3d061 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -13896,7 +13896,11 @@ public class DevicePolicyManager { } /** - * Returns whether USB data signaling is currently enabled by the admin. Callable by any app. + * Returns whether USB data signaling is currently enabled. + * + *

When called by a device owner or profile owner of an organization-owned managed profile, + * this API returns whether USB data signaling is currently enabled by that admin. When called + * by any other app, returns whether USB data signaling is currently enabled on the device. * * @return {@code true} if USB data signaling is enabled, {@code false} otherwise. */ diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index c5dc6b7a04269..78ad59f8c01be 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -17565,10 +17565,15 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { @Override public boolean isUsbDataSignalingEnabled(String packageName) { + final CallerIdentity caller = getCallerIdentity(packageName); synchronized (getLockObject()) { - final ActiveAdmin admin = getProfileOwnerOrDeviceOwnerLocked( - getCallerIdentity(packageName)); - return admin.mUsbDataSignalingEnabled; + // If the caller is an admin, return the policy set by itself. Otherwise + // return the device-wide policy. + if (isDeviceOwner(caller) || isProfileOwnerOfOrganizationOwnedDevice(caller)) { + return getProfileOwnerOrDeviceOwnerLocked(caller).mUsbDataSignalingEnabled; + } else { + return isUsbDataSignalingEnabledInternalLocked(); + } } } @@ -17578,12 +17583,16 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { Preconditions.checkCallAuthorization(isSystemUid(caller)); synchronized (getLockObject()) { - final ActiveAdmin admin = getDeviceOwnerOrProfileOwnerOfOrganizationOwnedDeviceLocked( - UserHandle.USER_SYSTEM); - return admin == null || admin.mUsbDataSignalingEnabled; + return isUsbDataSignalingEnabledInternalLocked(); } } + private boolean isUsbDataSignalingEnabledInternalLocked() { + final ActiveAdmin admin = getDeviceOwnerOrProfileOwnerOfOrganizationOwnedDeviceLocked( + UserHandle.USER_SYSTEM); + return admin == null || admin.mUsbDataSignalingEnabled; + } + @Override public boolean canUsbDataSignalingBeDisabled() { return mInjector.binderWithCleanCallingIdentity(() ->