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

Commit 9e6305e3 authored by Eran Messeri's avatar Eran Messeri Committed by Automerger Merge Worker
Browse files

DO NOT MERGE: Introduce DPMS shim for active DO/PO check am: bdd52cb4

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1486196

Change-Id: I79e090d92c5bf17993f8e4f710581675eb72f2a9
parents e9fd3958 bdd52cb4
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -87,6 +87,26 @@ public abstract class DevicePolicyManagerInternal {
     */
    public abstract boolean isActiveAdminWithPolicy(int uid, int reqPolicy);

    /**
     * Checks if an app with given uid is an active device owner of its user.
     *
     * <p>This takes the DPMS lock.  DO NOT call from PM/UM/AM with their lock held.
     *
     * @param uid App uid.
     * @return true if the uid is an active device owner.
     */
    public abstract boolean isActiveDeviceOwner(int uid);

    /**
     * Checks if an app with given uid is an active profile owner of its user.
     *
     * <p>This takes the DPMS lock.  DO NOT call from PM/UM/AM with their lock held.
     *
     * @param uid App uid.
     * @return true if the uid is an active profile owner.
     */
    public abstract boolean isActiveProfileOwner(int uid);

    /**
     * Checks if an app with given uid is the active supervision admin.
     *
+4 −5
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import static android.net.TrafficStats.UID_TETHERING;
import android.Manifest;
import android.annotation.IntDef;
import android.app.AppOpsManager;
import android.app.admin.DeviceAdminInfo;
import android.app.admin.DevicePolicyManagerInternal;
import android.content.Context;
import android.content.pm.PackageManager;
@@ -112,8 +111,7 @@ public final class NetworkStatsAccess {
        boolean hasCarrierPrivileges = tm != null &&
                tm.checkCarrierPrivilegesForPackageAnyPhone(callingPackage) ==
                        TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
        boolean isDeviceOwner = dpmi != null && dpmi.isActiveAdminWithPolicy(callingUid,
                DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        boolean isDeviceOwner = dpmi != null && dpmi.isActiveDeviceOwner(callingUid);
        final int appId = UserHandle.getAppId(callingUid);
        if (hasCarrierPrivileges || isDeviceOwner
                || appId == Process.SYSTEM_UID || appId == Process.NETWORK_STACK_UID) {
@@ -128,8 +126,9 @@ public final class NetworkStatsAccess {
            return NetworkStatsAccess.Level.DEVICESUMMARY;
        }

        boolean isProfileOwner = dpmi != null && dpmi.isActiveAdminWithPolicy(callingUid,
                DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
        //TODO(b/169395065) Figure out if this flow makes sense in Device Owner mode.
        boolean isProfileOwner = dpmi != null && (dpmi.isActiveProfileOwner(callingUid)
                || dpmi.isActiveDeviceOwner(callingUid));
        if (isProfileOwner) {
            // Apps with the AppOps permission, profile owners, and apps with the privileged
            // permission can access data usage for all apps in this user/profile.
+16 −0
Original line number Diff line number Diff line
@@ -12473,6 +12473,22 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            }
        }
        @Override
        public boolean isActiveDeviceOwner(int uid) {
            synchronized (getLockObject()) {
                return getActiveAdminWithPolicyForUidLocked(
                        null, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER, uid) != null;
            }
        }
        @Override
        public boolean isActiveProfileOwner(int uid) {
            synchronized (getLockObject()) {
                return getActiveAdminWithPolicyForUidLocked(
                        null, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER, uid) != null;
            }
        }
        @Override
        public boolean isActiveSupervisionApp(int uid) {
            synchronized (getLockObject()) {
+2 −5
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import static org.mockito.Mockito.when;
import android.Manifest;
import android.Manifest.permission;
import android.app.AppOpsManager;
import android.app.admin.DeviceAdminInfo;
import android.app.admin.DevicePolicyManagerInternal;
import android.content.Context;
import android.content.pm.PackageManager;
@@ -167,13 +166,11 @@ public class NetworkStatsAccessTest {
    }

    private void setIsDeviceOwner(boolean isOwner) {
        when(mDpmi.isActiveAdminWithPolicy(TEST_UID, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER))
                .thenReturn(isOwner);
        when(mDpmi.isActiveDeviceOwner(TEST_UID)).thenReturn(isOwner);
    }

    private void setIsProfileOwner(boolean isOwner) {
        when(mDpmi.isActiveAdminWithPolicy(TEST_UID, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER))
                .thenReturn(isOwner);
        when(mDpmi.isActiveProfileOwner(TEST_UID)).thenReturn(isOwner);
    }

    private void setHasAppOpsPermission(int appOpsMode, boolean hasPermission) {