Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 57f1b334 authored by Vitor Carvalho's avatar Vitor Carvalho Committed by Android (Google) Code Review
Browse files

Merge "Replace usage of DPM supervision methods in UsageStatsService with...

Merge "Replace usage of DPM supervision methods in UsageStatsService with calls to SupervisionManagerInternal." into main
parents 809aef12 3dacd4ec
Loading
Loading
Loading
Loading
+26 −4
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import android.app.IUidObserver;
import android.app.PendingIntent;
import android.app.UidObserver;
import android.app.admin.DevicePolicyManagerInternal;
import android.app.supervision.SupervisionManagerInternal;
import android.app.usage.AppLaunchEstimateInfo;
import android.app.usage.AppStandbyInfo;
import android.app.usage.BroadcastResponseStatsList;
@@ -230,6 +231,7 @@ public class UsageStatsService extends SystemService implements
    // Do not use directly. Call getDpmInternal() instead
    DevicePolicyManagerInternal mDpmInternal;
    // Do not use directly. Call getShortcutServiceInternal() instead
    SupervisionManagerInternal mSupervisionManagerInternal;
    ShortcutServiceInternal mShortcutServiceInternal;

    private final SparseArray<UserUsageStatsService> mUserState = new SparseArray<>();
@@ -439,6 +441,9 @@ public class UsageStatsService extends SystemService implements
            // initialize mDpmInternal
            getDpmInternal();
            // initialize mShortcutServiceInternal
            if (android.app.supervision.flags.Flags.deprecateDpmSupervisionApis()) {
                getSupervisionManagerInternal();
            }
            getShortcutServiceInternal();
            mResponseStatsTracker.onSystemServicesReady(getContext());

@@ -604,6 +609,15 @@ public class UsageStatsService extends SystemService implements
        return mDpmInternal;
    }

    @Nullable
    private SupervisionManagerInternal getSupervisionManagerInternal() {
        if (mSupervisionManagerInternal == null) {
            mSupervisionManagerInternal =
                    LocalServices.getService(SupervisionManagerInternal.class);
        }
        return mSupervisionManagerInternal;
    }

    private ShortcutServiceInternal getShortcutServiceInternal() {
        if (mShortcutServiceInternal == null) {
            mShortcutServiceInternal = LocalServices.getService(ShortcutServiceInternal.class);
@@ -753,6 +767,16 @@ public class UsageStatsService extends SystemService implements
                callingPid, callingUid) == PackageManager.PERMISSION_GRANTED);
    }

    private boolean isSupervisionEnabled(int callingUid) {
        if (android.app.supervision.flags.Flags.deprecateDpmSupervisionApis()) {
            SupervisionManagerInternal smInternal = getSupervisionManagerInternal();
            return smInternal != null && smInternal.isActiveSupervisionApp(callingUid);
        } else {
            DevicePolicyManagerInternal dpmInternal = getDpmInternal();
            return dpmInternal != null && dpmInternal.isActiveSupervisionApp(callingUid);
        }
    }

    private static void deleteRecursively(final File path) {
        if (path.isDirectory()) {
            final File[] files = path.listFiles();
@@ -2929,10 +2953,9 @@ public class UsageStatsService extends SystemService implements
                long timeLimitMs, long timeUsedMs, PendingIntent callbackIntent,
                String callingPackage) {
            final int callingUid = Binder.getCallingUid();
            final DevicePolicyManagerInternal dpmInternal = getDpmInternal();
            if (!hasPermissions(
                    Manifest.permission.SUSPEND_APPS, Manifest.permission.OBSERVE_APP_USAGE)
                    && (dpmInternal == null || !dpmInternal.isActiveSupervisionApp(callingUid))) {
                    && !isSupervisionEnabled(callingUid)) {
                throw new SecurityException("Caller must be the active supervision app or "
                        + "it must have both SUSPEND_APPS and OBSERVE_APP_USAGE permissions");
            }
@@ -2956,10 +2979,9 @@ public class UsageStatsService extends SystemService implements
        @Override
        public void unregisterAppUsageLimitObserver(int observerId, String callingPackage) {
            final int callingUid = Binder.getCallingUid();
            final DevicePolicyManagerInternal dpmInternal = getDpmInternal();
            if (!hasPermissions(
                    Manifest.permission.SUSPEND_APPS, Manifest.permission.OBSERVE_APP_USAGE)
                    && (dpmInternal == null || !dpmInternal.isActiveSupervisionApp(callingUid))) {
                    && !isSupervisionEnabled(callingUid)) {
                throw new SecurityException("Caller must be the active supervision app or "
                        + "it must have both SUSPEND_APPS and OBSERVE_APP_USAGE permissions");
            }