DO NOT MERGE: Introduce DPMS shim for active DO/PO check am: bdd52cb48b am: 9e6305e3b0
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1486196 Change-Id: I467120ce7e419a75749efac109609bb30cc35eff
This commit is contained in:
@@ -87,6 +87,26 @@ public abstract class DevicePolicyManagerInternal {
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isActiveAdminWithPolicy(int uid, int reqPolicy);
|
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.
|
* Checks if an app with given uid is the active supervision admin.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import static android.net.TrafficStats.UID_TETHERING;
|
|||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.app.admin.DeviceAdminInfo;
|
|
||||||
import android.app.admin.DevicePolicyManagerInternal;
|
import android.app.admin.DevicePolicyManagerInternal;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
@@ -112,8 +111,7 @@ public final class NetworkStatsAccess {
|
|||||||
boolean hasCarrierPrivileges = tm != null &&
|
boolean hasCarrierPrivileges = tm != null &&
|
||||||
tm.checkCarrierPrivilegesForPackageAnyPhone(callingPackage) ==
|
tm.checkCarrierPrivilegesForPackageAnyPhone(callingPackage) ==
|
||||||
TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
|
TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
|
||||||
boolean isDeviceOwner = dpmi != null && dpmi.isActiveAdminWithPolicy(callingUid,
|
boolean isDeviceOwner = dpmi != null && dpmi.isActiveDeviceOwner(callingUid);
|
||||||
DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
|
|
||||||
final int appId = UserHandle.getAppId(callingUid);
|
final int appId = UserHandle.getAppId(callingUid);
|
||||||
if (hasCarrierPrivileges || isDeviceOwner
|
if (hasCarrierPrivileges || isDeviceOwner
|
||||||
|| appId == Process.SYSTEM_UID || appId == Process.NETWORK_STACK_UID) {
|
|| appId == Process.SYSTEM_UID || appId == Process.NETWORK_STACK_UID) {
|
||||||
@@ -128,8 +126,9 @@ public final class NetworkStatsAccess {
|
|||||||
return NetworkStatsAccess.Level.DEVICESUMMARY;
|
return NetworkStatsAccess.Level.DEVICESUMMARY;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isProfileOwner = dpmi != null && dpmi.isActiveAdminWithPolicy(callingUid,
|
//TODO(b/169395065) Figure out if this flow makes sense in Device Owner mode.
|
||||||
DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
|
boolean isProfileOwner = dpmi != null && (dpmi.isActiveProfileOwner(callingUid)
|
||||||
|
|| dpmi.isActiveDeviceOwner(callingUid));
|
||||||
if (isProfileOwner) {
|
if (isProfileOwner) {
|
||||||
// Apps with the AppOps permission, profile owners, and apps with the privileged
|
// Apps with the AppOps permission, profile owners, and apps with the privileged
|
||||||
// permission can access data usage for all apps in this user/profile.
|
// permission can access data usage for all apps in this user/profile.
|
||||||
|
|||||||
@@ -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
|
@Override
|
||||||
public boolean isActiveSupervisionApp(int uid) {
|
public boolean isActiveSupervisionApp(int uid) {
|
||||||
synchronized (getLockObject()) {
|
synchronized (getLockObject()) {
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import static org.mockito.Mockito.when;
|
|||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.Manifest.permission;
|
import android.Manifest.permission;
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.app.admin.DeviceAdminInfo;
|
|
||||||
import android.app.admin.DevicePolicyManagerInternal;
|
import android.app.admin.DevicePolicyManagerInternal;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
@@ -167,13 +166,11 @@ public class NetworkStatsAccessTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setIsDeviceOwner(boolean isOwner) {
|
private void setIsDeviceOwner(boolean isOwner) {
|
||||||
when(mDpmi.isActiveAdminWithPolicy(TEST_UID, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER))
|
when(mDpmi.isActiveDeviceOwner(TEST_UID)).thenReturn(isOwner);
|
||||||
.thenReturn(isOwner);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setIsProfileOwner(boolean isOwner) {
|
private void setIsProfileOwner(boolean isOwner) {
|
||||||
when(mDpmi.isActiveAdminWithPolicy(TEST_UID, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER))
|
when(mDpmi.isActiveProfileOwner(TEST_UID)).thenReturn(isOwner);
|
||||||
.thenReturn(isOwner);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setHasAppOpsPermission(int appOpsMode, boolean hasPermission) {
|
private void setHasAppOpsPermission(int appOpsMode, boolean hasPermission) {
|
||||||
|
|||||||
Reference in New Issue
Block a user