Fix DPM check logic for AppUsageLimitObserver (un)registering

In the case that the DevicePolicyManagerInternal Local service does not
exist on device, the permission check for
(un)registerAppUsageLimitObserver should not be skipped.

Test: atest android.app.usage.cts.UsageStatsTest (must be on a device
with <unavailable-feature name="android.software.device_admin" /> in
it's features xml)
Fixes: 155360727

Change-Id: I8a88e03a7636956d27f531cf989bda1a32799f07
This commit is contained in:
Michael Wachenschwanz
2020-05-11 16:23:43 -07:00
parent ca08959072
commit cfe8c66a7a

View File

@@ -1847,7 +1847,7 @@ public class UsageStatsService extends SystemService implements
final DevicePolicyManagerInternal dpmInternal = getDpmInternal();
if (!hasPermissions(callingPackage,
Manifest.permission.SUSPEND_APPS, Manifest.permission.OBSERVE_APP_USAGE)
&& (dpmInternal != null && !dpmInternal.isActiveSupervisionApp(callingUid))) {
&& (dpmInternal == null || !dpmInternal.isActiveSupervisionApp(callingUid))) {
throw new SecurityException("Caller must be the active supervision app or "
+ "it must have both SUSPEND_APPS and OBSERVE_APP_USAGE permissions");
}
@@ -1874,7 +1874,7 @@ public class UsageStatsService extends SystemService implements
final DevicePolicyManagerInternal dpmInternal = getDpmInternal();
if (!hasPermissions(callingPackage,
Manifest.permission.SUSPEND_APPS, Manifest.permission.OBSERVE_APP_USAGE)
&& (dpmInternal != null && !dpmInternal.isActiveSupervisionApp(callingUid))) {
&& (dpmInternal == null || !dpmInternal.isActiveSupervisionApp(callingUid))) {
throw new SecurityException("Caller must be the active supervision app or "
+ "it must have both SUSPEND_APPS and OBSERVE_APP_USAGE permissions");
}