Merge "Change checkUidPermission and others in PermissionManagerServiceInterface to accept persistentDeviceId" into main
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index f44fcf0..21e2bf2 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -42,6 +42,7 @@
import android.app.AppOpsManager;
import android.app.AppOpsManager.AttributionFlags;
import android.app.IActivityManager;
+import android.companion.virtual.VirtualDeviceManager;
import android.content.AttributionSource;
import android.content.AttributionSourceState;
import android.content.Context;
@@ -78,6 +79,7 @@
import com.android.internal.util.function.QuadFunction;
import com.android.internal.util.function.TriFunction;
import com.android.server.LocalServices;
+import com.android.server.companion.virtual.VirtualDeviceManagerInternal;
import com.android.server.pm.UserManagerService;
import com.android.server.pm.permission.PermissionManagerServiceInternal.HotwordDetectionServiceProvider;
import com.android.server.pm.pkg.AndroidPackage;
@@ -135,6 +137,9 @@
@Nullable
private HotwordDetectionServiceProvider mHotwordDetectionServiceProvider;
+ @Nullable
+ private VirtualDeviceManagerInternal mVirtualDeviceManagerInternal;
+
PermissionManagerService(@NonNull Context context,
@NonNull ArrayMap<String, FeatureInfo> availableFeatures) {
// The package info cache is the cache for package and permission information.
@@ -146,6 +151,8 @@
mContext = context;
mPackageManagerInt = LocalServices.getService(PackageManagerInternal.class);
mAppOpsManager = context.getSystemService(AppOpsManager.class);
+ mVirtualDeviceManagerInternal =
+ LocalServices.getService(VirtualDeviceManagerInternal.class);
mAttributionSourceRegistry = new AttributionSourceRegistry(context);
@@ -246,16 +253,30 @@
return PackageManager.PERMISSION_DENIED;
}
+ String persistentDeviceId = getPersistentDeviceId(deviceId);
+
final CheckPermissionDelegate checkPermissionDelegate;
synchronized (mLock) {
checkPermissionDelegate = mCheckPermissionDelegate;
}
-
- if (checkPermissionDelegate == null) {
- return mPermissionManagerServiceImpl.checkUidPermission(uid, permissionName, deviceId);
+ if (checkPermissionDelegate == null) {
+ return mPermissionManagerServiceImpl.checkUidPermission(uid, permissionName,
+ persistentDeviceId);
}
return checkPermissionDelegate.checkUidPermission(uid, permissionName,
- deviceId, mPermissionManagerServiceImpl::checkUidPermission);
+ persistentDeviceId, mPermissionManagerServiceImpl::checkUidPermission);
+ }
+
+ private String getPersistentDeviceId(int deviceId) {
+ if (deviceId == Context.DEVICE_ID_DEFAULT) {
+ return VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT;
+ }
+
+ if (mVirtualDeviceManagerInternal == null) {
+ mVirtualDeviceManagerInternal =
+ LocalServices.getService(VirtualDeviceManagerInternal.class);
+ }
+ return mVirtualDeviceManagerInternal.getPersistentIdForDevice(deviceId);
}
@Override
@@ -608,15 +629,17 @@
@Override
public boolean shouldShowRequestPermissionRationale(String packageName, String permissionName,
int deviceId, int userId) {
+ String persistentDeviceId = getPersistentDeviceId(deviceId);
return mPermissionManagerServiceImpl.shouldShowRequestPermissionRationale(packageName,
- permissionName, deviceId, userId);
+ permissionName, persistentDeviceId, userId);
}
@Override
public boolean isPermissionRevokedByPolicy(String packageName, String permissionName,
int deviceId, int userId) {
+ String persistentDeviceId = getPersistentDeviceId(deviceId);
return mPermissionManagerServiceImpl.isPermissionRevokedByPolicy(packageName,
- permissionName, deviceId, userId);
+ permissionName, persistentDeviceId, userId);
}
@Override
@@ -914,13 +937,13 @@
*
* @param uid the UID to be checked
* @param permissionName the name of the permission to be checked
- * @param deviceId The device ID
+ * @param persistentDeviceId The persistent device ID
* @param superImpl the original implementation that can be delegated to
* @return {@link android.content.pm.PackageManager#PERMISSION_GRANTED} if the package has
* the permission, or {@link android.content.pm.PackageManager#PERMISSION_DENIED} otherwise
*/
- int checkUidPermission(int uid, @NonNull String permissionName, int deviceId,
- TriFunction<Integer, String, Integer, Integer> superImpl);
+ int checkUidPermission(int uid, @NonNull String permissionName, String persistentDeviceId,
+ TriFunction<Integer, String, String, Integer> superImpl);
/**
* @return list of delegated permissions
@@ -965,17 +988,18 @@
}
@Override
- public int checkUidPermission(int uid, @NonNull String permissionName, int deviceId,
- @NonNull TriFunction<Integer, String, Integer, Integer> superImpl) {
+ public int checkUidPermission(int uid, @NonNull String permissionName,
+ String persistentDeviceId,
+ @NonNull TriFunction<Integer, String, String, Integer> superImpl) {
if (uid == mDelegatedUid && isDelegatedPermission(permissionName)) {
final long identity = Binder.clearCallingIdentity();
try {
- return superImpl.apply(Process.SHELL_UID, permissionName, deviceId);
+ return superImpl.apply(Process.SHELL_UID, permissionName, persistentDeviceId);
} finally {
Binder.restoreCallingIdentity(identity);
}
}
- return superImpl.apply(uid, permissionName, deviceId);
+ return superImpl.apply(uid, permissionName, persistentDeviceId);
}
@Override
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
index c5b637d..70913c3 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
@@ -682,7 +682,7 @@
}
@Override
- public int getPermissionFlags(String packageName, String permName, String persistentDeviceId,
+ public int getPermissionFlags(String packageName, String permName, String deviceId,
int userId) {
final int callingUid = Binder.getCallingUid();
return getPermissionFlagsInternal(packageName, permName, callingUid, userId);
@@ -726,8 +726,7 @@
@Override
public void updatePermissionFlags(String packageName, String permName, int flagMask,
- int flagValues, boolean checkAdjustPolicyFlagPermission, String persistentDeviceId,
- int userId) {
+ int flagValues, boolean checkAdjustPolicyFlagPermission, String deviceId, int userId) {
final int callingUid = Binder.getCallingUid();
boolean overridePolicy = false;
@@ -917,8 +916,7 @@
}
@Override
- public int checkPermission(String pkgName, String permName, String persistentDeviceId,
- int userId) {
+ public int checkPermission(String pkgName, String permName, String deviceId, int userId) {
if (!mUserManagerInt.exists(userId)) {
return PackageManager.PERMISSION_DENIED;
}
@@ -985,11 +983,11 @@
}
private int checkUidPermission(int uid, String permName) {
- return checkUidPermission(uid, permName, Context.DEVICE_ID_DEFAULT);
+ return checkUidPermission(uid, permName, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT);
}
@Override
- public int checkUidPermission(int uid, String permName, int deviceId) {
+ public int checkUidPermission(int uid, String permName, String deviceId) {
final int userId = UserHandle.getUserId(uid);
if (!mUserManagerInt.exists(userId)) {
return PackageManager.PERMISSION_DENIED;
@@ -1001,7 +999,7 @@
@Override
public Map<String, PermissionManager.PermissionState> getAllPermissionStates(
- @NonNull String packageName, @NonNull String persistentDeviceId, int userId) {
+ @NonNull String packageName, @NonNull String deviceId, int userId) {
throw new UnsupportedOperationException(
"This method is supported in newer implementation only");
}
@@ -1315,8 +1313,8 @@
}
@Override
- public void grantRuntimePermission(String packageName, String permName,
- String persistentDeviceId, int userId) {
+ public void grantRuntimePermission(String packageName, String permName, String deviceId,
+ int userId) {
final int callingUid = Binder.getCallingUid();
final boolean overridePolicy =
checkUidPermission(callingUid, ADJUST_RUNTIME_PERMISSIONS_POLICY)
@@ -1489,12 +1487,13 @@
}
@Override
- public void revokeRuntimePermission(String packageName, String permName,
- String persistentDeviceId, int userId, String reason) {
+ public void revokeRuntimePermission(String packageName, String permName, String deviceId,
+ int userId, String reason) {
final int callingUid = Binder.getCallingUid();
final boolean overridePolicy =
checkUidPermission(callingUid, ADJUST_RUNTIME_PERMISSIONS_POLICY,
- Context.DEVICE_ID_DEFAULT) == PackageManager.PERMISSION_GRANTED;
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT)
+ == PackageManager.PERMISSION_GRANTED;
revokeRuntimePermissionInternal(packageName, permName, overridePolicy, callingUid, userId,
reason, mDefaultPermissionCallback);
@@ -1880,7 +1879,7 @@
@Override
public boolean shouldShowRequestPermissionRationale(String packageName, String permName,
- int deviceId, @UserIdInt int userId) {
+ String deviceId, @UserIdInt int userId) {
final int callingUid = Binder.getCallingUid();
if (UserHandle.getCallingUserId() != userId) {
mContext.enforceCallingPermission(
@@ -1943,7 +1942,7 @@
}
@Override
- public boolean isPermissionRevokedByPolicy(String packageName, String permName, int deviceId,
+ public boolean isPermissionRevokedByPolicy(String packageName, String permName, String deviceId,
int userId) {
if (UserHandle.getCallingUserId() != userId) {
mContext.enforceCallingPermission(
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java
index 7c10425..47032ea 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java
@@ -141,11 +141,11 @@
*
* @param packageName the package name for which to get the flags
* @param permName the permission for which to get the flags
- * @param persistentDeviceId The device for which to get the flags
+ * @param deviceId The device for which to get the flags
* @param userId the user for which to get permission flags
* @return the permission flags
*/
- int getPermissionFlags(String packageName, String permName, String persistentDeviceId,
+ int getPermissionFlags(String packageName, String permName, String deviceId,
@UserIdInt int userId);
/**
@@ -156,11 +156,11 @@
* @param permName The permission for which to update the flags
* @param flagMask The flags which to replace
* @param flagValues The flags with which to replace
- * @param persistentDeviceId The device for which to update the permission flags
+ * @param deviceId The device for which to update the permission flags
* @param userId The user for which to update the permission flags
*/
void updatePermissionFlags(String packageName, String permName, int flagMask, int flagValues,
- boolean checkAdjustPolicyFlagPermission, String persistentDeviceId,
+ boolean checkAdjustPolicyFlagPermission, String deviceId,
@UserIdInt int userId);
/**
@@ -295,12 +295,12 @@
*
* @param packageName the package to which to grant the permission
* @param permName the permission name to grant
- * @param persistentDeviceId the device for which to grant the permission
+ * @param deviceId the device for which to grant the permission
* @param userId the user for which to grant the permission
*
* @see #revokeRuntimePermission(String, String, String, int, String)
*/
- void grantRuntimePermission(String packageName, String permName, String persistentDeviceId,
+ void grantRuntimePermission(String packageName, String permName, String deviceId,
@UserIdInt int userId);
/**
@@ -316,13 +316,13 @@
*
* @param packageName the package from which to revoke the permission
* @param permName the permission name to revoke
- * @param persistentDeviceId the device for which to revoke the permission
+ * @param deviceId the device for which to revoke the permission
* @param userId the user for which to revoke the permission
* @param reason the reason for the revoke, or {@code null} for unspecified
*
* @see #grantRuntimePermission(String, String, String, int)
*/
- void revokeRuntimePermission(String packageName, String permName, String persistentDeviceId,
+ void revokeRuntimePermission(String packageName, String permName, String deviceId,
@UserIdInt int userId, String reason);
/**
@@ -347,7 +347,7 @@
* @return whether you can show permission rationale UI
*/
boolean shouldShowRequestPermissionRationale(String packageName, String permName,
- int deviceId, @UserIdInt int userId);
+ String deviceId, @UserIdInt int userId);
/**
* Checks whether a particular permission has been revoked for a package by policy. Typically,
@@ -361,8 +361,8 @@
* @param userId the device for which you are checking the permission
* @return whether the permission is restricted by policy
*/
- boolean isPermissionRevokedByPolicy(String packageName, String permName, int deviceId,
- @UserIdInt int userId);
+ boolean isPermissionRevokedByPolicy(String packageName, String permName,
+ String deviceId, @UserIdInt int userId);
/**
* Get set of permissions that have been split into more granular or dependent permissions.
@@ -389,11 +389,11 @@
*
* @param pkgName package name
* @param permName permission name
- * @param persistentDeviceId persistent device ID
+ * @param deviceId persistent device ID
* @param userId user ID
* @return permission result {@link PackageManager.PermissionResult}
*/
- int checkPermission(String pkgName, String permName, String persistentDeviceId,
+ int checkPermission(String pkgName, String permName, String deviceId,
@UserIdInt int userId);
/**
@@ -401,23 +401,23 @@
*
* @param uid UID
* @param permName permission name
- * @param deviceId device ID
+ * @param deviceId persistent device ID
* @return permission result {@link PackageManager.PermissionResult}
*/
- int checkUidPermission(int uid, String permName, int deviceId);
+ int checkUidPermission(int uid, String permName, String deviceId);
/**
* Gets the permission states for requested package, persistent device and user.
*
* @param packageName name of the package you are checking against
- * @param persistentDeviceId id of the persistent device you are checking against
+ * @param deviceId id of the persistent device you are checking against
* @param userId id of the user for which to get permission flags
* @return mapping of all permission states keyed by their permission names
*
* @hide
*/
Map<String, PermissionState> getAllPermissionStates(@NonNull String packageName,
- @NonNull String persistentDeviceId, @UserIdInt int userId);
+ @NonNull String deviceId, @UserIdInt int userId);
/**
* Get all the package names requesting app op permissions.
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java
index 91a778d..c18f856 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java
@@ -121,24 +121,22 @@
}
@Override
- public int getPermissionFlags(String packageName, String permName, String persistentDeviceId,
+ public int getPermissionFlags(String packageName, String permName, String deviceId,
int userId) {
Log.i(LOG_TAG, "getPermissionFlags(packageName = " + packageName + ", permName = "
- + permName + ", persistentDeviceId = " + persistentDeviceId + ", userId = " + userId
- + ")");
- return mService.getPermissionFlags(packageName, permName, persistentDeviceId, userId);
+ + permName + ", deviceId = " + deviceId + ", userId = " + userId + ")");
+ return mService.getPermissionFlags(packageName, permName, deviceId, userId);
}
@Override
public void updatePermissionFlags(String packageName, String permName, int flagMask,
- int flagValues, boolean checkAdjustPolicyFlagPermission, String persistentDeviceId,
- int userId) {
+ int flagValues, boolean checkAdjustPolicyFlagPermission, String deviceId, int userId) {
Log.i(LOG_TAG, "updatePermissionFlags(packageName = " + packageName + ", permName = "
+ permName + ", flagMask = " + flagMask + ", flagValues = " + flagValues
+ ", checkAdjustPolicyFlagPermission = " + checkAdjustPolicyFlagPermission
- + ", persistentDeviceId = " + persistentDeviceId + ", userId = " + userId + ")");
+ + ", deviceId = " + deviceId + ", userId = " + userId + ")");
mService.updatePermissionFlags(packageName, permName, flagMask, flagValues,
- checkAdjustPolicyFlagPermission, persistentDeviceId, userId);
+ checkAdjustPolicyFlagPermission, deviceId, userId);
}
@Override
@@ -186,21 +184,20 @@
}
@Override
- public void grantRuntimePermission(String packageName, String permName,
- String persistentDeviceId, int userId) {
+ public void grantRuntimePermission(String packageName, String permName, String deviceId,
+ int userId) {
Log.i(LOG_TAG, "grantRuntimePermission(packageName = " + packageName + ", permName = "
- + permName + ", persistentDeviceId = " + persistentDeviceId + ", userId = " + userId
- + ")");
- mService.grantRuntimePermission(packageName, permName, persistentDeviceId, userId);
+ + permName + ", deviceId = " + deviceId + ", userId = " + userId + ")");
+ mService.grantRuntimePermission(packageName, permName, deviceId, userId);
}
@Override
- public void revokeRuntimePermission(String packageName, String permName,
- String persistentDeviceId, int userId, String reason) {
+ public void revokeRuntimePermission(String packageName, String permName, String deviceId,
+ int userId, String reason) {
Log.i(LOG_TAG, "revokeRuntimePermission(packageName = " + packageName + ", permName = "
- + permName + ", persistentDeviceId = " + persistentDeviceId + ", userId = " + userId
- + ", reason = " + reason + ")");
- mService.revokeRuntimePermission(packageName, permName, persistentDeviceId, userId, reason);
+ + permName + ", deviceId = " + deviceId + ", userId = " + userId + ", reason = "
+ + reason + ")");
+ mService.revokeRuntimePermission(packageName, permName, deviceId, userId, reason);
}
@Override
@@ -212,16 +209,16 @@
@Override
public boolean shouldShowRequestPermissionRationale(String packageName, String permName,
- int deviceId, int userId) {
+ String deviceId, int userId) {
Log.i(LOG_TAG, "shouldShowRequestPermissionRationale(packageName = " + packageName
- + ", permName = " + permName + ", deviceId = " + deviceId
- + ", userId = " + userId + ")");
+ + ", permName = " + permName + ", deviceId = " + deviceId + ", userId = "
+ + userId + ")");
return mService.shouldShowRequestPermissionRationale(packageName, permName, deviceId,
userId);
}
@Override
- public boolean isPermissionRevokedByPolicy(String packageName, String permName, int deviceId,
+ public boolean isPermissionRevokedByPolicy(String packageName, String permName, String deviceId,
int userId) {
Log.i(LOG_TAG, "isPermissionRevokedByPolicy(packageName = " + packageName + ", permName = "
+ permName + ", deviceId = " + deviceId + ", userId = " + userId + ")");
@@ -235,26 +232,27 @@
}
@Override
- public int checkPermission(String pkgName, String permName, String persistentDeviceId,
+ public int checkPermission(String pkgName, String permName, String deviceId,
int userId) {
Log.i(LOG_TAG, "checkPermission(pkgName = " + pkgName + ", permName = " + permName
- + ", persistentDeviceId = " + persistentDeviceId + ", userId = " + userId + ")");
- return mService.checkPermission(pkgName, permName, persistentDeviceId, userId);
+ + ", deviceId = " + deviceId + ", userId = " + userId + ")");
+ return mService.checkPermission(pkgName, permName, deviceId, userId);
}
@Override
- public int checkUidPermission(int uid, String permName, int deviceId) {
- Log.i(LOG_TAG, "checkUidPermission(uid = " + uid + ", permName = "
- + permName + ", deviceId = " + deviceId + ")");
+ public int checkUidPermission(int uid, String permName, String deviceId) {
+ Log.i(LOG_TAG, "checkUidPermission(uid = " + uid + ", permName = " + permName
+ + ", deviceId = " + deviceId + ")");
return mService.checkUidPermission(uid, permName, deviceId);
}
@Override
public Map<String, PermissionState> getAllPermissionStates(@NonNull String packageName,
- @NonNull String persistentDeviceId, int userId) {
- Log.i(LOG_TAG, "getAllPermissionStates(packageName = " + packageName
- + ", persistentDeviceId = " + persistentDeviceId + ", userId = " + userId + ")");
- return mService.getAllPermissionStates(packageName, persistentDeviceId, userId);
+ @NonNull String deviceId, int userId) {
+ Log.i(LOG_TAG,
+ "getAllPermissionStates(packageName = " + packageName + ", deviceId = " + deviceId
+ + ", userId = " + userId + ")");
+ return mService.getAllPermissionStates(packageName, deviceId, userId);
}
@Override
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java
index 0a4ff07..40139ba 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java
@@ -154,12 +154,10 @@
}
@Override
- public int getPermissionFlags(String packageName, String permName, String persistentDeviceId,
+ public int getPermissionFlags(String packageName, String permName, String deviceId,
@UserIdInt int userId) {
- int oldVal = mOldImplementation.getPermissionFlags(packageName, permName,
- persistentDeviceId, userId);
- int newVal = mNewImplementation.getPermissionFlags(packageName, permName,
- persistentDeviceId, userId);
+ int oldVal = mOldImplementation.getPermissionFlags(packageName, permName, deviceId, userId);
+ int newVal = mNewImplementation.getPermissionFlags(packageName, permName, deviceId, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getPermissionFlags");
@@ -169,12 +167,12 @@
@Override
public void updatePermissionFlags(String packageName, String permName, int flagMask,
- int flagValues, boolean checkAdjustPolicyFlagPermission, String persistentDeviceId,
+ int flagValues, boolean checkAdjustPolicyFlagPermission, String deviceId,
@UserIdInt int userId) {
mOldImplementation.updatePermissionFlags(packageName, permName, flagMask, flagValues,
- checkAdjustPolicyFlagPermission, persistentDeviceId, userId);
+ checkAdjustPolicyFlagPermission, deviceId, userId);
mNewImplementation.updatePermissionFlags(packageName, permName, flagMask, flagValues,
- checkAdjustPolicyFlagPermission, persistentDeviceId, userId);
+ checkAdjustPolicyFlagPermission, deviceId, userId);
}
@Override
@@ -239,21 +237,17 @@
}
@Override
- public void grantRuntimePermission(String packageName, String permName,
- String persistentDeviceId, @UserIdInt int userId) {
- mOldImplementation.grantRuntimePermission(packageName, permName, persistentDeviceId,
- userId);
- mNewImplementation.grantRuntimePermission(packageName, permName, persistentDeviceId,
- userId);
+ public void grantRuntimePermission(String packageName, String permName, String deviceId,
+ @UserIdInt int userId) {
+ mOldImplementation.grantRuntimePermission(packageName, permName, deviceId, userId);
+ mNewImplementation.grantRuntimePermission(packageName, permName, deviceId, userId);
}
@Override
- public void revokeRuntimePermission(String packageName, String permName,
- String persistentDeviceId, @UserIdInt int userId, String reason) {
- mOldImplementation.revokeRuntimePermission(packageName, permName, persistentDeviceId,
- userId, reason);
- mNewImplementation.revokeRuntimePermission(packageName, permName, persistentDeviceId,
- userId, reason);
+ public void revokeRuntimePermission(String packageName, String permName, String deviceId,
+ @UserIdInt int userId, String reason) {
+ mOldImplementation.revokeRuntimePermission(packageName, permName, deviceId, userId, reason);
+ mNewImplementation.revokeRuntimePermission(packageName, permName, deviceId, userId, reason);
}
@Override
@@ -265,7 +259,7 @@
@Override
public boolean shouldShowRequestPermissionRationale(String packageName, String permName,
- int deviceId, @UserIdInt int userId) {
+ String deviceId, @UserIdInt int userId) {
boolean oldVal = mOldImplementation.shouldShowRequestPermissionRationale(packageName,
permName, deviceId, userId);
boolean newVal = mNewImplementation.shouldShowRequestPermissionRationale(packageName,
@@ -278,7 +272,7 @@
}
@Override
- public boolean isPermissionRevokedByPolicy(String packageName, String permName, int deviceId,
+ public boolean isPermissionRevokedByPolicy(String packageName, String permName, String deviceId,
@UserIdInt int userId) {
boolean oldVal = mOldImplementation.isPermissionRevokedByPolicy(packageName, permName,
deviceId, userId);
@@ -303,12 +297,9 @@
}
@Override
- public int checkPermission(String pkgName, String permName, String persistentDeviceId,
- int userId) {
- int oldVal = mOldImplementation.checkPermission(pkgName, permName, persistentDeviceId,
- userId);
- int newVal = mNewImplementation.checkPermission(pkgName, permName, persistentDeviceId,
- userId);
+ public int checkPermission(String pkgName, String permName, String deviceId, int userId) {
+ int oldVal = mOldImplementation.checkPermission(pkgName, permName, deviceId, userId);
+ int newVal = mNewImplementation.checkPermission(pkgName, permName, deviceId, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("checkPermission");
@@ -317,7 +308,7 @@
}
@Override
- public int checkUidPermission(int uid, String permName, int deviceId) {
+ public int checkUidPermission(int uid, String permName, String deviceId) {
int oldVal = mOldImplementation.checkUidPermission(uid, permName, deviceId);
int newVal = mNewImplementation.checkUidPermission(uid, permName, deviceId);
@@ -329,8 +320,8 @@
@Override
public Map<String, PermissionState> getAllPermissionStates(@NonNull String packageName,
- @NonNull String persistentDeviceId, int userId) {
- return mNewImplementation.getAllPermissionStates(packageName, persistentDeviceId, userId);
+ @NonNull String deviceId, int userId) {
+ return mNewImplementation.getAllPermissionStates(packageName, deviceId, userId);
}
@Override
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTracingDecorator.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTracingDecorator.java
index bc29e67..981d3d9 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTracingDecorator.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTracingDecorator.java
@@ -159,11 +159,11 @@
}
@Override
- public int getPermissionFlags(String packageName, String permName, String persistentDeviceId,
+ public int getPermissionFlags(String packageName, String permName, String deviceId,
int userId) {
Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#getPermissionFlags");
try {
- return mService.getPermissionFlags(packageName, permName, persistentDeviceId, userId);
+ return mService.getPermissionFlags(packageName, permName, deviceId, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
@@ -171,13 +171,12 @@
@Override
public void updatePermissionFlags(String packageName, String permName, int flagMask,
- int flagValues, boolean checkAdjustPolicyFlagPermission, String persistentDeviceId,
- int userId) {
+ int flagValues, boolean checkAdjustPolicyFlagPermission, String deviceId, int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingPermissionManagerServiceImpl#updatePermissionFlags");
try {
mService.updatePermissionFlags(packageName, permName, flagMask, flagValues,
- checkAdjustPolicyFlagPermission, persistentDeviceId, userId);
+ checkAdjustPolicyFlagPermission, deviceId, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
@@ -256,25 +255,24 @@
}
@Override
- public void grantRuntimePermission(String packageName, String permName,
- String persistentDeviceId, int userId) {
+ public void grantRuntimePermission(String packageName, String permName, String deviceId,
+ int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingPermissionManagerServiceImpl#grantRuntimePermission");
try {
- mService.grantRuntimePermission(packageName, permName, persistentDeviceId, userId);
+ mService.grantRuntimePermission(packageName, permName, deviceId, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
- public void revokeRuntimePermission(String packageName, String permName,
- String persistentDeviceId, int userId, String reason) {
+ public void revokeRuntimePermission(String packageName, String permName, String deviceId,
+ int userId, String reason) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingPermissionManagerServiceImpl#revokeRuntimePermission");
try {
- mService.revokeRuntimePermission(packageName, permName, persistentDeviceId, userId,
- reason);
+ mService.revokeRuntimePermission(packageName, permName, deviceId, userId, reason);
} finally {
Trace.traceEnd(TRACE_TAG);
}
@@ -293,19 +291,19 @@
@Override
public boolean shouldShowRequestPermissionRationale(String packageName, String permName,
- int deviceId, int userId) {
+ String deviceId, int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingPermissionManagerServiceImpl#shouldShowRequestPermissionRationale");
try {
- return mService.shouldShowRequestPermissionRationale(
- packageName, permName, deviceId, userId);
+ return mService.shouldShowRequestPermissionRationale(packageName, permName, deviceId,
+ userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
- public boolean isPermissionRevokedByPolicy(String packageName, String permName, int deviceId,
+ public boolean isPermissionRevokedByPolicy(String packageName, String permName, String deviceId,
int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingPermissionManagerServiceImpl#isPermissionRevokedByPolicy");
@@ -328,18 +326,17 @@
}
@Override
- public int checkPermission(String pkgName, String permName, String persistentDeviceId,
- int userId) {
+ public int checkPermission(String pkgName, String permName, String deviceId, int userId) {
Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#checkPermission");
try {
- return mService.checkPermission(pkgName, permName, persistentDeviceId, userId);
+ return mService.checkPermission(pkgName, permName, deviceId, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
- public int checkUidPermission(int uid, String permName, int deviceId) {
+ public int checkUidPermission(int uid, String permName, String deviceId) {
Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#checkUidPermission");
try {
return mService.checkUidPermission(uid, permName, deviceId);
@@ -350,11 +347,11 @@
@Override
public Map<String, PermissionState> getAllPermissionStates(@NonNull String packageName,
- @NonNull String persistentDeviceId, int userId) {
+ @NonNull String deviceId, int userId) {
Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl"
+ "#getAllPermissionStates");
try {
- return mService.getAllPermissionStates(packageName, persistentDeviceId, userId);
+ return mService.getAllPermissionStates(packageName, deviceId, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
diff --git a/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt b/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt
index 67f66de..0704c8f 100644
--- a/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt
+++ b/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt
@@ -466,7 +466,7 @@
return size
}
- override fun checkUidPermission(uid: Int, permissionName: String, deviceId: Int): Int {
+ override fun checkUidPermission(uid: Int, permissionName: String, deviceId: String): Int {
val userId = UserHandle.getUserId(uid)
if (!userManagerInternal.exists(userId)) {
return PackageManager.PERMISSION_DENIED
@@ -489,15 +489,9 @@
return PackageManager.PERMISSION_DENIED
}
- val persistentDeviceId = getPersistentDeviceId(deviceId)
- if (persistentDeviceId == null) {
- Slog.e(LOG_TAG, "Cannot find persistent device id for $deviceId.")
- return PackageManager.PERMISSION_DENIED
- }
-
val isPermissionGranted =
service.getState {
- isPermissionGranted(packageState, userId, permissionName, persistentDeviceId)
+ isPermissionGranted(packageState, userId, permissionName, deviceId)
}
return if (isPermissionGranted) {
PackageManager.PERMISSION_GRANTED
@@ -531,7 +525,7 @@
override fun checkPermission(
packageName: String,
permissionName: String,
- persistentDeviceId: String,
+ deviceId: String,
userId: Int
): Int {
if (!userManagerInternal.exists(userId)) {
@@ -545,9 +539,7 @@
?: return PackageManager.PERMISSION_DENIED
val isPermissionGranted =
- service.getState {
- isPermissionGranted(packageState, userId, permissionName, persistentDeviceId)
- }
+ service.getState { isPermissionGranted(packageState, userId, permissionName, deviceId) }
return if (isPermissionGranted) {
PackageManager.PERMISSION_GRANTED
} else {
@@ -565,21 +557,13 @@
packageState: PackageState,
userId: Int,
permissionName: String,
- persistentDeviceId: String
+ deviceId: String
): Boolean {
val appId = packageState.appId
// Note that instant apps can't have shared UIDs, so we only need to check the current
// package state.
val isInstantApp = packageState.getUserStateOrDefault(userId).isInstantApp
- if (
- isSinglePermissionGranted(
- appId,
- userId,
- isInstantApp,
- permissionName,
- persistentDeviceId
- )
- ) {
+ if (isSinglePermissionGranted(appId, userId, isInstantApp, permissionName, deviceId)) {
return true
}
@@ -591,7 +575,7 @@
userId,
isInstantApp,
fullerPermissionName,
- persistentDeviceId
+ deviceId
)
) {
return true
@@ -606,9 +590,9 @@
userId: Int,
isInstantApp: Boolean,
permissionName: String,
- persistentDeviceId: String,
+ deviceId: String,
): Boolean {
- val flags = getPermissionFlagsWithPolicy(appId, userId, permissionName, persistentDeviceId)
+ val flags = getPermissionFlagsWithPolicy(appId, userId, permissionName, deviceId)
if (!PermissionFlags.isPermissionGranted(flags)) {
return false
}
@@ -689,22 +673,16 @@
override fun grantRuntimePermission(
packageName: String,
permissionName: String,
- persistentDeviceId: String,
+ deviceId: String,
userId: Int
) {
- setRuntimePermissionGranted(
- packageName,
- userId,
- permissionName,
- persistentDeviceId,
- isGranted = true
- )
+ setRuntimePermissionGranted(packageName, userId, permissionName, deviceId, isGranted = true)
}
override fun revokeRuntimePermission(
packageName: String,
permissionName: String,
- persistentDeviceId: String,
+ deviceId: String,
userId: Int,
reason: String?
) {
@@ -712,7 +690,7 @@
packageName,
userId,
permissionName,
- persistentDeviceId,
+ deviceId,
isGranted = false,
revokeReason = reason
)
@@ -740,7 +718,7 @@
packageName: String,
userId: Int,
permissionName: String,
- persistentDeviceId: String,
+ deviceId: String,
isGranted: Boolean,
skipKillUid: Boolean = false,
revokeReason: String? = null
@@ -765,7 +743,7 @@
(if (isGranted) "" else "skipKillUid = $skipKillUid, reason = $revokeReason") +
", userId = $userId," +
" callingUid = $callingUidName ($callingUid))," +
- " persistentDeviceId = $persistentDeviceId",
+ " deviceId = $deviceId",
RuntimeException()
)
}
@@ -835,7 +813,7 @@
packageState,
userId,
permissionName,
- persistentDeviceId,
+ deviceId,
isGranted,
canManageRolePermission,
overridePolicyFixed,
@@ -923,7 +901,7 @@
packageState: PackageState,
userId: Int,
permissionName: String,
- persistentDeviceId: String,
+ deviceId: String,
isGranted: Boolean,
canManageRolePermission: Boolean,
overridePolicyFixed: Boolean,
@@ -982,8 +960,7 @@
}
val appId = packageState.appId
- val oldFlags =
- getPermissionFlagsWithPolicy(appId, userId, permissionName, persistentDeviceId)
+ val oldFlags = getPermissionFlagsWithPolicy(appId, userId, permissionName, deviceId)
if (permissionName !in androidPackage.requestedPermissions && oldFlags == 0) {
if (reportError) {
@@ -1055,7 +1032,7 @@
return
}
- setPermissionFlagsWithPolicy(appId, userId, permissionName, persistentDeviceId, newFlags)
+ setPermissionFlagsWithPolicy(appId, userId, permissionName, deviceId, newFlags)
if (permission.isRuntime) {
val action =
@@ -1089,7 +1066,7 @@
override fun getPermissionFlags(
packageName: String,
permissionName: String,
- persistentDeviceId: String,
+ deviceId: String,
userId: Int,
): Int {
if (!userManagerInternal.exists(userId)) {
@@ -1125,12 +1102,7 @@
}
val flags =
- getPermissionFlagsWithPolicy(
- packageState.appId,
- userId,
- permissionName,
- persistentDeviceId
- )
+ getPermissionFlagsWithPolicy(packageState.appId, userId, permissionName, deviceId)
return PermissionFlags.toApiFlags(flags)
}
@@ -1138,7 +1110,7 @@
override fun getAllPermissionStates(
packageName: String,
- persistentDeviceId: String,
+ deviceId: String,
userId: Int
): Map<String, PermissionState> {
if (!userManagerInternal.exists(userId)) {
@@ -1165,14 +1137,15 @@
val permissionFlagsMap =
service.getState {
- if (persistentDeviceId == VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT) {
+ if (deviceId == VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT) {
with(policy) { getAllPermissionFlags(packageState.appId, userId) }
} else {
with(devicePolicy) {
- getAllPermissionFlags(packageState.appId, persistentDeviceId, userId)
+ getAllPermissionFlags(packageState.appId, deviceId, userId)
}
}
- } ?: return emptyMap()
+ }
+ ?: return emptyMap()
val permissionStates = ArrayMap<String, PermissionState>()
permissionFlagsMap.forEachIndexed { _, permissionName, flags ->
@@ -1186,7 +1159,7 @@
override fun isPermissionRevokedByPolicy(
packageName: String,
permissionName: String,
- deviceId: Int,
+ deviceId: String,
userId: Int
): Boolean {
if (!userManagerInternal.exists(userId)) {
@@ -1207,24 +1180,13 @@
}
?: return false
- val persistentDeviceId = getPersistentDeviceId(deviceId)
- if (persistentDeviceId == null) {
- Slog.w(LOG_TAG, "Cannot find persistent device Id for $deviceId")
- return false
- }
-
service.getState {
- if (isPermissionGranted(packageState, userId, permissionName, persistentDeviceId)) {
+ if (isPermissionGranted(packageState, userId, permissionName, deviceId)) {
return false
}
val flags =
- getPermissionFlagsWithPolicy(
- packageState.appId,
- userId,
- permissionName,
- persistentDeviceId
- )
+ getPermissionFlagsWithPolicy(packageState.appId, userId, permissionName, deviceId)
return flags.hasBits(PermissionFlags.POLICY_FIXED)
}
@@ -1248,7 +1210,7 @@
override fun shouldShowRequestPermissionRationale(
packageName: String,
permissionName: String,
- deviceId: Int,
+ deviceId: String,
userId: Int,
): Boolean {
if (!userManagerInternal.exists(userId)) {
@@ -1274,19 +1236,13 @@
return false
}
- val persistentDeviceId = getPersistentDeviceId(deviceId)
- if (persistentDeviceId == null) {
- Slog.w(LOG_TAG, "Cannot find persistent device Id for $deviceId")
- return false
- }
-
val flags: Int
service.getState {
- if (isPermissionGranted(packageState, userId, permissionName, persistentDeviceId)) {
+ if (isPermissionGranted(packageState, userId, permissionName, deviceId)) {
return false
}
- flags = getPermissionFlagsWithPolicy(appId, userId, permissionName, persistentDeviceId)
+ flags = getPermissionFlagsWithPolicy(appId, userId, permissionName, deviceId)
}
if (flags.hasAnyBit(UNREQUESTABLE_MASK)) {
return false
@@ -1325,7 +1281,7 @@
flagMask: Int,
flagValues: Int,
enforceAdjustPolicyPermission: Boolean,
- persistentDeviceId: String,
+ deviceId: String,
userId: Int
) {
val callingUid = Binder.getCallingUid()
@@ -1351,7 +1307,7 @@
"updatePermissionFlags(packageName = $packageName," +
" permissionName = $permissionName, flagMask = $flagMaskString," +
" flagValues = $flagValuesString, userId = $userId," +
- " persistentDeviceId = $persistentDeviceId," +
+ " deviceId = $deviceId," +
" callingUid = $callingUidName ($callingUid))",
RuntimeException()
)
@@ -1441,7 +1397,7 @@
appId,
userId,
permissionName,
- persistentDeviceId,
+ deviceId,
flagMask,
flagValues,
canUpdateSystemFlags,
@@ -1527,7 +1483,7 @@
appId: Int,
userId: Int,
permissionName: String,
- persistentDeviceId: String,
+ deviceId: String,
flagMask: Int,
flagValues: Int,
canUpdateSystemFlags: Boolean,
@@ -1561,8 +1517,7 @@
return
}
- val oldFlags =
- getPermissionFlagsWithPolicy(appId, userId, permissionName, persistentDeviceId)
+ val oldFlags = getPermissionFlagsWithPolicy(appId, userId, permissionName, deviceId)
if (!isPermissionRequested && oldFlags == 0) {
Slog.w(
LOG_TAG,
@@ -1573,7 +1528,7 @@
}
val newFlags = PermissionFlags.updateFlags(permission, oldFlags, flagMask, flagValues)
- setPermissionFlagsWithPolicy(appId, userId, permissionName, persistentDeviceId, newFlags)
+ setPermissionFlagsWithPolicy(appId, userId, permissionName, deviceId, newFlags)
}
override fun getAllowlistedRestrictedPermissions(
@@ -1648,11 +1603,11 @@
appId: Int,
userId: Int,
permissionName: String,
- persistentDeviceId: String,
+ deviceId: String,
): Int {
return if (
!Flags.deviceAwarePermissionApisEnabled() ||
- persistentDeviceId == VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT
+ deviceId == VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT
) {
with(policy) { getPermissionFlags(appId, userId, permissionName) }
} else {
@@ -1664,9 +1619,7 @@
)
return with(policy) { getPermissionFlags(appId, userId, permissionName) }
}
- with(devicePolicy) {
- getPermissionFlags(appId, persistentDeviceId, userId, permissionName)
- }
+ with(devicePolicy) { getPermissionFlags(appId, deviceId, userId, permissionName) }
}
}
@@ -1674,12 +1627,12 @@
appId: Int,
userId: Int,
permissionName: String,
- persistentDeviceId: String,
+ deviceId: String,
flags: Int
): Boolean {
return if (
!Flags.deviceAwarePermissionApisEnabled() ||
- persistentDeviceId == VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT
+ deviceId == VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT
) {
with(policy) { setPermissionFlags(appId, userId, permissionName, flags) }
} else {
@@ -1693,23 +1646,11 @@
}
with(devicePolicy) {
- setPermissionFlags(appId, persistentDeviceId, userId, permissionName, flags)
+ setPermissionFlags(appId, deviceId, userId, permissionName, flags)
}
}
}
- private fun getPersistentDeviceId(deviceId: Int): String? {
- if (deviceId == Context.DEVICE_ID_DEFAULT) {
- return VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT
- }
-
- if (virtualDeviceManagerInternal == null) {
- virtualDeviceManagerInternal =
- LocalServices.getService(VirtualDeviceManagerInternal::class.java)
- }
- return virtualDeviceManagerInternal?.getPersistentIdForDevice(deviceId)
- }
-
/**
* This method does not enforce checks on the caller, should only be called after required
* checks.
@@ -2270,9 +2211,9 @@
userState.appIdDevicePermissionFlags[appId]?.forEachIndexed {
_,
- persistentDeviceId,
+ deviceId,
devicePermissionFlags ->
- println("Permissions (Device $persistentDeviceId):")
+ println("Permissions (Device $deviceId):")
withIndent {
devicePermissionFlags.forEachIndexed { _, permissionName, flags ->
val isGranted = PermissionFlags.isPermissionGranted(flags)
@@ -2415,9 +2356,8 @@
with(devicePolicy) { trimDevicePermissionStates(persistentDeviceIds) }
}
}
- virtualDeviceManagerInternal?.registerPersistentDeviceIdRemovedListener { persistentDeviceId
- ->
- service.mutateState { with(devicePolicy) { onDeviceIdRemoved(persistentDeviceId) } }
+ virtualDeviceManagerInternal?.registerPersistentDeviceIdRemovedListener { deviceId ->
+ service.mutateState { with(devicePolicy) { onDeviceIdRemoved(deviceId) } }
}
permissionControllerManager =
@@ -2764,7 +2704,7 @@
override fun onDevicePermissionFlagsChanged(
appId: Int,
userId: Int,
- persistentDeviceId: String,
+ deviceId: String,
permissionName: String,
oldFlags: Int,
newFlags: Int
@@ -2787,8 +2727,7 @@
permissionName in NOTIFICATIONS_PERMISSIONS &&
runtimePermissionRevokedUids.get(uid, true)
}
- runtimePermissionChangedUidDevices.getOrPut(uid) { mutableSetOf() } +=
- persistentDeviceId
+ runtimePermissionChangedUidDevices.getOrPut(uid) { mutableSetOf() } += deviceId
}
if (permission.hasGids && !wasPermissionGranted && isPermissionGranted) {
@@ -2803,8 +2742,8 @@
}
runtimePermissionChangedUidDevices.forEachIndexed { _, uid, persistentDeviceIds ->
- persistentDeviceIds.forEach { persistentDeviceId ->
- onPermissionsChangeListeners.onPermissionsChanged(uid, persistentDeviceId)
+ persistentDeviceIds.forEach { deviceId ->
+ onPermissionsChangeListeners.onPermissionsChanged(uid, deviceId)
}
}
runtimePermissionChangedUidDevices.clear()
@@ -2844,8 +2783,11 @@
private fun isAppBackupAndRestoreRunning(uid: Int): Boolean {
if (
- checkUidPermission(uid, Manifest.permission.BACKUP, Context.DEVICE_ID_DEFAULT) !=
- PackageManager.PERMISSION_GRANTED
+ checkUidPermission(
+ uid,
+ Manifest.permission.BACKUP,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT
+ ) != PackageManager.PERMISSION_GRANTED
) {
return false
}
@@ -2879,16 +2821,16 @@
when (msg.what) {
MSG_ON_PERMISSIONS_CHANGED -> {
val uid = msg.arg1
- val persistentDeviceId = msg.obj as String
- handleOnPermissionsChanged(uid, persistentDeviceId)
+ val deviceId = msg.obj as String
+ handleOnPermissionsChanged(uid, deviceId)
}
}
}
- private fun handleOnPermissionsChanged(uid: Int, persistentDeviceId: String) {
+ private fun handleOnPermissionsChanged(uid: Int, deviceId: String) {
listeners.broadcast { listener ->
try {
- listener.onPermissionsChanged(uid, persistentDeviceId)
+ listener.onPermissionsChanged(uid, deviceId)
} catch (e: RemoteException) {
Slog.e(LOG_TAG, "Error when calling OnPermissionsChangeListener", e)
}
@@ -2903,9 +2845,9 @@
listeners.unregister(listener)
}
- fun onPermissionsChanged(uid: Int, persistentDeviceId: String) {
+ fun onPermissionsChanged(uid: Int, deviceId: String) {
if (listeners.registeredCallbackCount > 0) {
- obtainMessage(MSG_ON_PERMISSIONS_CHANGED, uid, 0, persistentDeviceId).sendToTarget()
+ obtainMessage(MSG_ON_PERMISSIONS_CHANGED, uid, 0, deviceId).sendToTarget()
}
}