New permission system APIs with persistent device Id
Create 4 system APIs in PermissionManager that take persistentDeviceId as a param:
* grantRuntimePermission
* revokeRuntimePermission
* getPermissionFlags
* updatePermissionFlags
Also change corresponding methods in .aidl to take persistentDeviceId instead of VDID
Bug: b/315356442
Test: ag/26168815, atest DevicePermissionsTest
Change-Id: I6cbc98cdd283e886248ac199724e65325a1ea9af
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index b55a39d..c3eaedf 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -11284,12 +11284,16 @@
method public void finishDataDelivery(@NonNull String, @NonNull android.content.AttributionSource);
method @NonNull @RequiresPermission(android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY) public java.util.Set<java.lang.String> getAutoRevokeExemptionGrantedPackages();
method @NonNull @RequiresPermission(android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY) public java.util.Set<java.lang.String> getAutoRevokeExemptionRequestedPackages();
+ method @FlaggedApi("android.permission.flags.device_aware_permission_apis_enabled") @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS, android.Manifest.permission.GET_RUNTIME_PERMISSIONS}) public int getPermissionFlags(@NonNull String, @NonNull String, @NonNull String);
method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public int getRuntimePermissionsVersion();
method @NonNull public java.util.List<android.permission.PermissionManager.SplitPermissionInfo> getSplitPermissions();
+ method @FlaggedApi("android.permission.flags.device_aware_permission_apis_enabled") @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public void grantRuntimePermission(@NonNull String, @NonNull String, @NonNull String);
+ method @FlaggedApi("android.permission.flags.device_aware_permission_apis_enabled") @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull String, @Nullable String);
method @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public void setRuntimePermissionsVersion(@IntRange(from=0) int);
method @Deprecated @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void startOneTimePermissionSession(@NonNull String, long, int, int);
method @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void startOneTimePermissionSession(@NonNull String, long, long, int, int);
method @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void stopOneTimePermissionSession(@NonNull String);
+ method @FlaggedApi("android.permission.flags.device_aware_permission_apis_enabled") @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS}) public void updatePermissionFlags(@NonNull String, @NonNull String, @NonNull String, int, int);
field @RequiresPermission(android.Manifest.permission.START_REVIEW_PERMISSION_DECISIONS) public static final String ACTION_REVIEW_PERMISSION_DECISIONS = "android.permission.action.REVIEW_PERMISSION_DECISIONS";
field public static final String EXTRA_PERMISSION_USAGES = "android.permission.extra.PERMISSION_USAGES";
field public static final int PERMISSION_GRANTED = 0; // 0x0
diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java
index ce1d43d..33e260f 100644
--- a/core/java/android/app/UiAutomationConnection.java
+++ b/core/java/android/app/UiAutomationConnection.java
@@ -23,6 +23,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
+import android.companion.virtual.VirtualDeviceManager;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.graphics.Rect;
@@ -363,7 +364,7 @@
final long identity = Binder.clearCallingIdentity();
try {
mPermissionManager.grantRuntimePermission(packageName, permission,
- Context.DEVICE_ID_DEFAULT, userId);
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -383,7 +384,7 @@
final long identity = Binder.clearCallingIdentity();
try {
mPermissionManager.revokeRuntimePermission(packageName, permission,
- Context.DEVICE_ID_DEFAULT, userId, null);
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId, null);
} finally {
Binder.restoreCallingIdentity(identity);
}
diff --git a/core/java/android/permission/IPermissionManager.aidl b/core/java/android/permission/IPermissionManager.aidl
index 49e0634..380962c 100644
--- a/core/java/android/permission/IPermissionManager.aidl
+++ b/core/java/android/permission/IPermissionManager.aidl
@@ -42,10 +42,12 @@
void removePermission(String permissionName);
- int getPermissionFlags(String packageName, String permissionName, int deviceId, int userId);
+ int getPermissionFlags(String packageName, String permissionName, String persistentDeviceId,
+ int userId);
void updatePermissionFlags(String packageName, String permissionName, int flagMask,
- int flagValues, boolean checkAdjustPolicyFlagPermission, int deviceId, int userId);
+ int flagValues, boolean checkAdjustPolicyFlagPermission, String persistentDeviceId,
+ int userId);
void updatePermissionFlagsForAllApps(int flagMask, int flagValues, int userId);
@@ -62,10 +64,11 @@
boolean removeAllowlistedRestrictedPermission(String packageName, String permissionName,
int flags, int userId);
- void grantRuntimePermission(String packageName, String permissionName, int deviceId, int userId);
+ void grantRuntimePermission(String packageName, String permissionName,
+ String persistentDeviceId, int userId);
- void revokeRuntimePermission(String packageName, String permissionName, int deviceId,
- int userId, String reason);
+ void revokeRuntimePermission(String packageName, String permissionName,
+ String persistentDeviceId, int userId, String reason);
void revokePostNotificationPermissionWithoutKillForTest(String packageName, int userId);
diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java
index cb71ec0..d6e8ce7 100644
--- a/core/java/android/permission/PermissionManager.java
+++ b/core/java/android/permission/PermissionManager.java
@@ -623,15 +623,50 @@
//@SystemApi
public void grantRuntimePermission(@NonNull String packageName,
@NonNull String permissionName, @NonNull UserHandle user) {
+ String persistentDeviceId = getPersistentDeviceId(mContext.getDeviceId());
+ if (persistentDeviceId == null) {
+ return;
+ }
+
+ grantRuntimePermissionInternal(packageName, permissionName, persistentDeviceId, user);
+ }
+
+ /**
+ * Grant a runtime permission to an application which the application does not already have. The
+ * permission must have been requested by the application. If the application is not allowed to
+ * hold the permission, a {@link java.lang.SecurityException} is thrown. If the package or
+ * permission is invalid, a {@link java.lang.IllegalArgumentException} is thrown.
+ *
+ * @param packageName the package to which to grant the permission
+ * @param permissionName the permission name to grant
+ * @param persistentDeviceId the device Id to which to grant the permission
+ *
+ * @see #revokeRuntimePermission(String, String, String, String)
+ *
+ * @hide
+ */
+ @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS)
+ @SystemApi
+ @FlaggedApi(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
+ public void grantRuntimePermission(@NonNull String packageName,
+ @NonNull String permissionName, @NonNull String persistentDeviceId) {
+ grantRuntimePermissionInternal(packageName, permissionName, persistentDeviceId,
+ mContext.getUser());
+ }
+
+ private void grantRuntimePermissionInternal(@NonNull String packageName,
+ @NonNull String permissionName, @NonNull String persistentDeviceId,
+ @NonNull UserHandle user) {
if (DEBUG_TRACE_GRANTS
&& shouldTraceGrant(packageName, permissionName, user.getIdentifier())) {
Log.i(LOG_TAG_TRACE_GRANTS, "App " + mContext.getPackageName() + " is granting "
+ packageName + " "
- + permissionName + " for user " + user.getIdentifier(), new RuntimeException());
+ + permissionName + " for user " + user.getIdentifier()
+ + " for persistent device " + persistentDeviceId, new RuntimeException());
}
try {
mPermissionManager.grantRuntimePermission(packageName, permissionName,
- mContext.getDeviceId(), user.getIdentifier());
+ persistentDeviceId, user.getIdentifier());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -649,7 +684,7 @@
* user {@code android.permission.INTERACT_ACROSS_USERS_FULL}.
*
* @param packageName the package from which to revoke the permission
- * @param permName the permission name to revoke
+ * @param permissionName the permission name to revoke
* @param user the user for which to revoke the permission
* @param reason the reason for the revoke, or {@code null} for unspecified
*
@@ -660,16 +695,56 @@
@RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS)
//@SystemApi
public void revokeRuntimePermission(@NonNull String packageName,
- @NonNull String permName, @NonNull UserHandle user, @Nullable String reason) {
+ @NonNull String permissionName, @NonNull UserHandle user, @Nullable String reason) {
+ String persistentDeviceId = getPersistentDeviceId(mContext.getDeviceId());
+ if (persistentDeviceId == null) {
+ return;
+ }
+
+ revokeRuntimePermissionInternal(packageName, permissionName, persistentDeviceId, user,
+ reason);
+ }
+
+ /**
+ * Revoke a runtime permission that was previously granted by
+ * {@link #grantRuntimePermission(String, String, String)}. The permission must
+ * have been requested by and granted to the application. If the application is not allowed to
+ * hold the permission, a {@link java.lang.SecurityException} is thrown. If the package or
+ * permission is invalid, a {@link java.lang.IllegalArgumentException} is thrown.
+ *
+ * @param packageName the package from which to revoke the permission
+ * @param permissionName the permission name to revoke
+ * @param persistentDeviceId the persistent device id for which to revoke the permission
+ * @param reason the reason for the revoke, or {@code null} for unspecified
+ *
+ * @see #grantRuntimePermission(String, String, String)
+ *
+ * @hide
+ */
+ @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS)
+ @SystemApi
+ @FlaggedApi(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
+ public void revokeRuntimePermission(@NonNull String packageName,
+ @NonNull String permissionName, @NonNull String persistentDeviceId,
+ @Nullable String reason) {
+ revokeRuntimePermissionInternal(packageName, permissionName, persistentDeviceId,
+ mContext.getUser(), reason);
+ }
+
+ private void revokeRuntimePermissionInternal(@NonNull String packageName,
+ @NonNull String permissionName, @NonNull String persistentDeviceId,
+ @NonNull UserHandle user, @Nullable String reason) {
if (DEBUG_TRACE_PERMISSION_UPDATES
- && shouldTraceGrant(packageName, permName, user.getIdentifier())) {
+ && shouldTraceGrant(packageName, permissionName, user.getIdentifier())) {
Log.i(LOG_TAG, "App " + mContext.getPackageName() + " is revoking " + packageName + " "
- + permName + " for user " + user.getIdentifier() + " with reason "
+ + permissionName + " for user " + user.getIdentifier()
+ + " for persistent device "
+ + persistentDeviceId + " with reason "
+ reason, new RuntimeException());
}
try {
- mPermissionManager.revokeRuntimePermission(packageName, permName,
- mContext.getDeviceId(), user.getIdentifier(), reason);
+ mPermissionManager.revokeRuntimePermission(packageName, permissionName,
+ persistentDeviceId, user.getIdentifier(), reason);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -694,9 +769,44 @@
//@SystemApi
public int getPermissionFlags(@NonNull String packageName, @NonNull String permissionName,
@NonNull UserHandle user) {
+ String persistentDeviceId = getPersistentDeviceId(mContext.getDeviceId());
+ if (persistentDeviceId == null) {
+ return 0;
+ }
+
+ return getPermissionFlagsInternal(packageName, permissionName, persistentDeviceId, user);
+ }
+
+ /**
+ * Gets the state flags associated with a permission.
+ *
+ * @param packageName the package name for which to get the flags
+ * @param permissionName the permission for which to get the flags
+ * @param persistentDeviceId the persistent device Id for which to get permission flags
+ * @return the permission flags
+ *
+ * @hide
+ */
+ @PackageManager.PermissionFlags
+ @RequiresPermission(anyOf = {
+ android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS,
+ android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS,
+ android.Manifest.permission.GET_RUNTIME_PERMISSIONS
+ })
+ @SystemApi
+ @FlaggedApi(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
+ public int getPermissionFlags(@NonNull String packageName, @NonNull String permissionName,
+ @NonNull String persistentDeviceId) {
+ return getPermissionFlagsInternal(packageName, permissionName, persistentDeviceId,
+ mContext.getUser());
+ }
+
+ private int getPermissionFlagsInternal(@NonNull String packageName,
+ @NonNull String permissionName, @NonNull String persistentDeviceId,
+ @NonNull UserHandle user) {
try {
return mPermissionManager.getPermissionFlags(packageName, permissionName,
- mContext.getDeviceId(), user.getIdentifier());
+ persistentDeviceId, user.getIdentifier());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -722,21 +832,63 @@
public void updatePermissionFlags(@NonNull String packageName, @NonNull String permissionName,
@PackageManager.PermissionFlags int flagMask,
@PackageManager.PermissionFlags int flagValues, @NonNull UserHandle user) {
+ String persistentDeviceId = getPersistentDeviceId(mContext.getDeviceId());
+ if (persistentDeviceId == null) {
+ return;
+ }
+
+ updatePermissionFlagsInternal(packageName, permissionName, flagMask, flagValues,
+ persistentDeviceId, user);
+ }
+
+ /**
+ * Updates the flags associated with a permission by replacing the flags in the specified mask
+ * with the provided flag values.
+ *
+ * @param packageName The package name for which to update the flags
+ * @param permissionName The permission for which to update the flags
+ * @param persistentDeviceId The persistent device for which to update the permission flags
+ * @param flagMask The flags which to replace
+ * @param flagValues The flags with which to replace
+ *
+ * @hide
+ */
+ @RequiresPermission(anyOf = {
+ android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS,
+ android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS
+ })
+ @SystemApi
+ @FlaggedApi(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
+ public void updatePermissionFlags(@NonNull String packageName, @NonNull String permissionName,
+ @NonNull String persistentDeviceId,
+ @PackageManager.PermissionFlags int flagMask,
+ @PackageManager.PermissionFlags int flagValues
+ ) {
+ updatePermissionFlagsInternal(packageName, permissionName, flagMask, flagValues,
+ persistentDeviceId, mContext.getUser());
+ }
+
+ private void updatePermissionFlagsInternal(@NonNull String packageName,
+ @NonNull String permissionName,
+ @PackageManager.PermissionFlags int flagMask,
+ @PackageManager.PermissionFlags int flagValues, @NonNull String persistentDeviceId,
+ @NonNull UserHandle user
+ ) {
if (DEBUG_TRACE_PERMISSION_UPDATES && shouldTraceGrant(packageName, permissionName,
user.getIdentifier())) {
Log.i(LOG_TAG, "App " + mContext.getPackageName() + " is updating flags for "
+ packageName + " " + permissionName + " for user "
- + user.getIdentifier() + ": " + DebugUtils.flagsToString(
- PackageManager.class, "FLAG_PERMISSION_", flagMask) + " := "
- + DebugUtils.flagsToString(PackageManager.class, "FLAG_PERMISSION_",
- flagValues), new RuntimeException());
+ + user.getIdentifier() + " for persistentDeviceId " + persistentDeviceId + ": "
+ + DebugUtils.flagsToString(PackageManager.class, "FLAG_PERMISSION_", flagMask)
+ + " := " + DebugUtils.flagsToString(PackageManager.class, "FLAG_PERMISSION_",
+ flagValues), new RuntimeException());
}
try {
final boolean checkAdjustPolicyFlagPermission =
mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.Q;
mPermissionManager.updatePermissionFlags(packageName, permissionName, flagMask,
flagValues, checkAdjustPolicyFlagPermission,
- mContext.getDeviceId(), user.getIdentifier());
+ persistentDeviceId, user.getIdentifier());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/services/core/java/com/android/server/notification/PermissionHelper.java b/services/core/java/com/android/server/notification/PermissionHelper.java
index e14f7c0..b6f4889 100644
--- a/services/core/java/com/android/server/notification/PermissionHelper.java
+++ b/services/core/java/com/android/server/notification/PermissionHelper.java
@@ -24,6 +24,7 @@
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.UserIdInt;
+import android.companion.virtual.VirtualDeviceManager;
import android.content.Context;
import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
@@ -196,18 +197,20 @@
boolean currentlyGranted = hasPermission(uid);
if (grant && !currentlyGranted) {
mPermManager.grantRuntimePermission(packageName, NOTIFICATION_PERMISSION,
- Context.DEVICE_ID_DEFAULT, userId);
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId);
} else if (!grant && currentlyGranted) {
mPermManager.revokeRuntimePermission(packageName, NOTIFICATION_PERMISSION,
- Context.DEVICE_ID_DEFAULT, userId, TAG);
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId, TAG);
}
int flagMask = FLAG_PERMISSION_USER_SET | FLAG_PERMISSION_USER_FIXED;
if (userSet) {
mPermManager.updatePermissionFlags(packageName, NOTIFICATION_PERMISSION, flagMask,
- FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, userId);
+ FLAG_PERMISSION_USER_SET, true,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId);
} else {
mPermManager.updatePermissionFlags(packageName, NOTIFICATION_PERMISSION,
- flagMask, 0, true, Context.DEVICE_ID_DEFAULT, userId);
+ flagMask, 0, true, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT,
+ userId);
}
} catch (RemoteException e) {
Slog.e(TAG, "Could not reach system server", e);
@@ -235,7 +238,7 @@
try {
try {
int flags = mPermManager.getPermissionFlags(packageName, NOTIFICATION_PERMISSION,
- Context.DEVICE_ID_DEFAULT, userId);
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId);
return (flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0
|| (flags & PackageManager.FLAG_PERMISSION_POLICY_FIXED) != 0;
} catch (RemoteException e) {
@@ -252,7 +255,7 @@
try {
try {
int flags = mPermManager.getPermissionFlags(packageName, NOTIFICATION_PERMISSION,
- Context.DEVICE_ID_DEFAULT, userId);
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId);
return (flags & (PackageManager.FLAG_PERMISSION_USER_SET
| PackageManager.FLAG_PERMISSION_USER_FIXED)) != 0;
} catch (RemoteException e) {
@@ -269,7 +272,7 @@
try {
try {
int flags = mPermManager.getPermissionFlags(packageName, NOTIFICATION_PERMISSION,
- Context.DEVICE_ID_DEFAULT, userId);
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId);
return (flags & (PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT
| PackageManager.FLAG_PERMISSION_GRANTED_BY_ROLE)) != 0;
} catch (RemoteException e) {
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 240e37e..f1dca77 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -527,17 +527,18 @@
}
@Override
- public int getPermissionFlags(String packageName, String permissionName, int deviceId,
- int userId) {
+ public int getPermissionFlags(String packageName, String permissionName,
+ String persistentDeviceId, int userId) {
return mPermissionManagerServiceImpl
- .getPermissionFlags(packageName, permissionName, deviceId, userId);
+ .getPermissionFlags(packageName, permissionName, persistentDeviceId, userId);
}
@Override
public void updatePermissionFlags(String packageName, String permissionName, int flagMask,
- int flagValues, boolean checkAdjustPolicyFlagPermission, int deviceId, int userId) {
+ int flagValues, boolean checkAdjustPolicyFlagPermission, String persistentDeviceId,
+ int userId) {
mPermissionManagerServiceImpl.updatePermissionFlags(packageName, permissionName, flagMask,
- flagValues, checkAdjustPolicyFlagPermission, deviceId, userId);
+ flagValues, checkAdjustPolicyFlagPermission, persistentDeviceId, userId);
}
@Override
@@ -577,17 +578,17 @@
}
@Override
- public void grantRuntimePermission(String packageName, String permissionName, int deviceId,
- int userId) {
+ public void grantRuntimePermission(String packageName, String permissionName,
+ String persistentDeviceId, int userId) {
mPermissionManagerServiceImpl.grantRuntimePermission(packageName, permissionName,
- deviceId, userId);
+ persistentDeviceId, userId);
}
@Override
- public void revokeRuntimePermission(String packageName, String permissionName, int deviceId,
- int userId, String reason) {
+ public void revokeRuntimePermission(String packageName, String permissionName,
+ String persistentDeviceId, int userId, String reason) {
mPermissionManagerServiceImpl.revokeRuntimePermission(packageName, permissionName,
- deviceId, userId, reason);
+ persistentDeviceId, userId, reason);
}
@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 c33f1eb..9afd36f 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,8 @@
}
@Override
- public int getPermissionFlags(String packageName, String permName, int deviceId, int userId) {
+ public int getPermissionFlags(String packageName, String permName, String persistentDeviceId,
+ int userId) {
final int callingUid = Binder.getCallingUid();
return getPermissionFlagsInternal(packageName, permName, callingUid, userId);
}
@@ -725,7 +726,8 @@
@Override
public void updatePermissionFlags(String packageName, String permName, int flagMask,
- int flagValues, boolean checkAdjustPolicyFlagPermission, int deviceId, int userId) {
+ int flagValues, boolean checkAdjustPolicyFlagPermission, String persistentDeviceId,
+ int userId) {
final int callingUid = Binder.getCallingUid();
boolean overridePolicy = false;
@@ -1306,8 +1308,8 @@
}
@Override
- public void grantRuntimePermission(String packageName, String permName, int deviceId,
- int userId) {
+ public void grantRuntimePermission(String packageName, String permName,
+ String persistentDeviceId, int userId) {
final int callingUid = Binder.getCallingUid();
final boolean overridePolicy =
checkUidPermission(callingUid, ADJUST_RUNTIME_PERMISSIONS_POLICY)
@@ -1480,12 +1482,12 @@
}
@Override
- public void revokeRuntimePermission(String packageName, String permName, int deviceId,
- int userId, String reason) {
+ public void revokeRuntimePermission(String packageName, String permName,
+ String persistentDeviceId, int userId, String reason) {
final int callingUid = Binder.getCallingUid();
final boolean overridePolicy =
- checkUidPermission(callingUid, ADJUST_RUNTIME_PERMISSIONS_POLICY, deviceId)
- == PackageManager.PERMISSION_GRANTED;
+ checkUidPermission(callingUid, ADJUST_RUNTIME_PERMISSIONS_POLICY,
+ Context.DEVICE_ID_DEFAULT) == PackageManager.PERMISSION_GRANTED;
revokeRuntimePermissionInternal(packageName, permName, overridePolicy, callingUid, userId,
reason, mDefaultPermissionCallback);
@@ -2072,8 +2074,8 @@
continue;
}
boolean isSystemOrPolicyFixed = (getPermissionFlags(newPackage.getPackageName(),
- permInfo.name, Context.DEVICE_ID_DEFAULT, userId) & (
- FLAG_PERMISSION_SYSTEM_FIXED | FLAG_PERMISSION_POLICY_FIXED)) != 0;
+ permInfo.name, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId)
+ & (FLAG_PERMISSION_SYSTEM_FIXED | FLAG_PERMISSION_POLICY_FIXED)) != 0;
if (isSystemOrPolicyFixed) {
continue;
}
@@ -2240,7 +2242,7 @@
final int permissionState = checkPermission(packageName, permName,
userId);
final int flags = getPermissionFlags(packageName, permName,
- Context.DEVICE_ID_DEFAULT, userId);
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId);
final int flagMask = FLAG_PERMISSION_SYSTEM_FIXED
| FLAG_PERMISSION_POLICY_FIXED
| FLAG_PERMISSION_GRANTED_BY_DEFAULT
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 d221515..b12d8ac 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java
@@ -140,11 +140,11 @@
*
* @param packageName the package name for which to get the flags
* @param permName the permission for which to get the flags
- * @param deviceId The device for which to get the flags
+ * @param persistentDeviceId 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, int deviceId,
+ int getPermissionFlags(String packageName, String permName, String persistentDeviceId,
@UserIdInt int userId);
/**
@@ -155,11 +155,12 @@
* @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 deviceId The device for which to update the permission flags
+ * @param persistentDeviceId 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, int deviceId, @UserIdInt int userId);
+ boolean checkAdjustPolicyFlagPermission, String persistentDeviceId,
+ @UserIdInt int userId);
/**
* Update the permission flags for all packages and runtime permissions of a user in order
@@ -293,17 +294,17 @@
*
* @param packageName the package to which to grant the permission
* @param permName the permission name to grant
- * @param deviceId the device for which to grant the permission
+ * @param persistentDeviceId the device for which to grant the permission
* @param userId the user for which to grant the permission
*
- * @see #revokeRuntimePermission(String, String, int, int, String)
+ * @see #revokeRuntimePermission(String, String, String, int, String)
*/
- void grantRuntimePermission(String packageName, String permName, int deviceId,
+ void grantRuntimePermission(String packageName, String permName, String persistentDeviceId,
@UserIdInt int userId);
/**
* Revoke a runtime permission that was previously granted by
- * {@link #grantRuntimePermission(String, String, android.os.UserHandle)}. The permission must
+ * {@link #grantRuntimePermission(String, String, String, int)}. The permission must
* have been requested by and granted to the application. If the application is not allowed to
* hold the permission, a {@link java.lang.SecurityException} is thrown. If the package or
* permission is invalid, a {@link java.lang.IllegalArgumentException} is thrown.
@@ -314,13 +315,13 @@
*
* @param packageName the package from which to revoke the permission
* @param permName the permission name to revoke
- * @param deviceId the device for which to revoke the permission
+ * @param persistentDeviceId 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, int, int)
+ * @see #grantRuntimePermission(String, String, String, int)
*/
- void revokeRuntimePermission(String packageName, String permName, int deviceId,
+ void revokeRuntimePermission(String packageName, String permName, String persistentDeviceId,
@UserIdInt int userId, String reason);
/**
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 e6e84f9..835ddcb 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java
@@ -120,21 +120,24 @@
}
@Override
- public int getPermissionFlags(String packageName, String permName, int deviceId, int userId) {
+ public int getPermissionFlags(String packageName, String permName, String persistentDeviceId,
+ int userId) {
Log.i(LOG_TAG, "getPermissionFlags(packageName = " + packageName + ", permName = "
- + permName + ", deviceId = " + deviceId + ", userId = " + userId + ")");
- return mService.getPermissionFlags(packageName, permName, deviceId, userId);
+ + permName + ", persistentDeviceId = " + persistentDeviceId + ", userId = " + userId
+ + ")");
+ return mService.getPermissionFlags(packageName, permName, persistentDeviceId, userId);
}
@Override
public void updatePermissionFlags(String packageName, String permName, int flagMask,
- int flagValues, boolean checkAdjustPolicyFlagPermission, int deviceId, int userId) {
+ int flagValues, boolean checkAdjustPolicyFlagPermission, String persistentDeviceId,
+ int userId) {
Log.i(LOG_TAG, "updatePermissionFlags(packageName = " + packageName + ", permName = "
+ permName + ", flagMask = " + flagMask + ", flagValues = " + flagValues
+ ", checkAdjustPolicyFlagPermission = " + checkAdjustPolicyFlagPermission
- + ", deviceId = " + deviceId + ", userId = " + userId + ")");
+ + ", persistentDeviceId = " + persistentDeviceId + ", userId = " + userId + ")");
mService.updatePermissionFlags(packageName, permName, flagMask, flagValues,
- checkAdjustPolicyFlagPermission, deviceId, userId);
+ checkAdjustPolicyFlagPermission, persistentDeviceId, userId);
}
@Override
@@ -182,20 +185,21 @@
}
@Override
- public void grantRuntimePermission(String packageName, String permName, int deviceId,
- int userId) {
+ public void grantRuntimePermission(String packageName, String permName,
+ String persistentDeviceId, int userId) {
Log.i(LOG_TAG, "grantRuntimePermission(packageName = " + packageName + ", permName = "
- + permName + ", deviceId = " + deviceId + ", userId = " + userId + ")");
- mService.grantRuntimePermission(packageName, permName, deviceId, userId);
+ + permName + ", persistentDeviceId = " + persistentDeviceId + ", userId = " + userId
+ + ")");
+ mService.grantRuntimePermission(packageName, permName, persistentDeviceId, userId);
}
@Override
- public void revokeRuntimePermission(String packageName, String permName, int deviceId,
- int userId, String reason) {
+ public void revokeRuntimePermission(String packageName, String permName,
+ String persistentDeviceId, int userId, String reason) {
Log.i(LOG_TAG, "revokeRuntimePermission(packageName = " + packageName + ", permName = "
- + permName + ", deviceId = " + deviceId + ", userId = " + userId
+ + permName + ", persistentDeviceId = " + persistentDeviceId + ", userId = " + userId
+ ", reason = " + reason + ")");
- mService.revokeRuntimePermission(packageName, permName, deviceId, userId, reason);
+ mService.revokeRuntimePermission(packageName, permName, persistentDeviceId, userId, reason);
}
@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 36b2135..66a6f3c 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java
@@ -153,10 +153,12 @@
}
@Override
- public int getPermissionFlags(String packageName, String permName, int deviceId,
+ public int getPermissionFlags(String packageName, String permName, String persistentDeviceId,
@UserIdInt int userId) {
- int oldVal = mOldImplementation.getPermissionFlags(packageName, permName, deviceId, userId);
- int newVal = mNewImplementation.getPermissionFlags(packageName, permName, deviceId, userId);
+ int oldVal = mOldImplementation.getPermissionFlags(packageName, permName,
+ persistentDeviceId, userId);
+ int newVal = mNewImplementation.getPermissionFlags(packageName, permName,
+ persistentDeviceId, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getPermissionFlags");
@@ -166,12 +168,12 @@
@Override
public void updatePermissionFlags(String packageName, String permName, int flagMask,
- int flagValues, boolean checkAdjustPolicyFlagPermission, int deviceId,
+ int flagValues, boolean checkAdjustPolicyFlagPermission, String persistentDeviceId,
@UserIdInt int userId) {
mOldImplementation.updatePermissionFlags(packageName, permName, flagMask, flagValues,
- checkAdjustPolicyFlagPermission, deviceId, userId);
+ checkAdjustPolicyFlagPermission, persistentDeviceId, userId);
mNewImplementation.updatePermissionFlags(packageName, permName, flagMask, flagValues,
- checkAdjustPolicyFlagPermission, deviceId, userId);
+ checkAdjustPolicyFlagPermission, persistentDeviceId, userId);
}
@Override
@@ -236,17 +238,21 @@
}
@Override
- public void grantRuntimePermission(String packageName, String permName, int deviceId,
- @UserIdInt int userId) {
- mOldImplementation.grantRuntimePermission(packageName, permName, deviceId, userId);
- mNewImplementation.grantRuntimePermission(packageName, permName, deviceId, userId);
+ public void grantRuntimePermission(String packageName, String permName,
+ String persistentDeviceId, @UserIdInt int userId) {
+ mOldImplementation.grantRuntimePermission(packageName, permName, persistentDeviceId,
+ userId);
+ mNewImplementation.grantRuntimePermission(packageName, permName, persistentDeviceId,
+ userId);
}
@Override
- public void revokeRuntimePermission(String packageName, String permName, int deviceId,
- @UserIdInt int userId, String reason) {
- mOldImplementation.revokeRuntimePermission(packageName, permName, deviceId, userId, reason);
- mNewImplementation.revokeRuntimePermission(packageName, permName, deviceId, userId, reason);
+ 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);
}
@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 eafd907..f21993c 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTracingDecorator.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTracingDecorator.java
@@ -158,10 +158,11 @@
}
@Override
- public int getPermissionFlags(String packageName, String permName, int deviceId, int userId) {
+ public int getPermissionFlags(String packageName, String permName, String persistentDeviceId,
+ int userId) {
Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#getPermissionFlags");
try {
- return mService.getPermissionFlags(packageName, permName, deviceId, userId);
+ return mService.getPermissionFlags(packageName, permName, persistentDeviceId, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
@@ -169,12 +170,13 @@
@Override
public void updatePermissionFlags(String packageName, String permName, int flagMask,
- int flagValues, boolean checkAdjustPolicyFlagPermission, int deviceId, int userId) {
+ int flagValues, boolean checkAdjustPolicyFlagPermission, String persistentDeviceId,
+ int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingPermissionManagerServiceImpl#updatePermissionFlags");
try {
mService.updatePermissionFlags(packageName, permName, flagMask, flagValues,
- checkAdjustPolicyFlagPermission, deviceId, userId);
+ checkAdjustPolicyFlagPermission, persistentDeviceId, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
@@ -253,24 +255,25 @@
}
@Override
- public void grantRuntimePermission(String packageName, String permName, int deviceId,
- int userId) {
+ public void grantRuntimePermission(String packageName, String permName,
+ String persistentDeviceId, int userId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingPermissionManagerServiceImpl#grantRuntimePermission");
try {
- mService.grantRuntimePermission(packageName, permName, deviceId, userId);
+ mService.grantRuntimePermission(packageName, permName, persistentDeviceId, userId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
- public void revokeRuntimePermission(String packageName, String permName, int deviceId,
- int userId, String reason) {
+ public void revokeRuntimePermission(String packageName, String permName,
+ String persistentDeviceId, int userId, String reason) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingPermissionManagerServiceImpl#revokeRuntimePermission");
try {
- mService.revokeRuntimePermission(packageName, permName, deviceId, userId, reason);
+ mService.revokeRuntimePermission(packageName, permName, persistentDeviceId, userId,
+ reason);
} 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 7d8cbe6..1241ce6 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
@@ -688,16 +688,22 @@
override fun grantRuntimePermission(
packageName: String,
permissionName: String,
- deviceId: Int,
+ persistentDeviceId: String,
userId: Int
) {
- setRuntimePermissionGranted(packageName, userId, permissionName, deviceId, isGranted = true)
+ setRuntimePermissionGranted(
+ packageName,
+ userId,
+ permissionName,
+ persistentDeviceId,
+ isGranted = true
+ )
}
override fun revokeRuntimePermission(
packageName: String,
permissionName: String,
- deviceId: Int,
+ persistentDeviceId: String,
userId: Int,
reason: String?
) {
@@ -705,7 +711,7 @@
packageName,
userId,
permissionName,
- deviceId,
+ persistentDeviceId,
isGranted = false,
revokeReason = reason
)
@@ -719,7 +725,7 @@
packageName,
userId,
Manifest.permission.POST_NOTIFICATIONS,
- Context.DEVICE_ID_DEFAULT,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT,
isGranted = false,
skipKillUid = true
)
@@ -733,7 +739,7 @@
packageName: String,
userId: Int,
permissionName: String,
- deviceId: Int,
+ persistentDeviceId: String,
isGranted: Boolean,
skipKillUid: Boolean = false,
revokeReason: String? = null
@@ -757,7 +763,8 @@
" permissionName = $permissionName" +
(if (isGranted) "" else "skipKillUid = $skipKillUid, reason = $revokeReason") +
", userId = $userId," +
- " callingUid = $callingUidName ($callingUid))",
+ " callingUid = $callingUidName ($callingUid))," +
+ " persistentDeviceId = $persistentDeviceId",
RuntimeException()
)
}
@@ -827,7 +834,7 @@
packageState,
userId,
permissionName,
- deviceId,
+ persistentDeviceId,
isGranted,
canManageRolePermission,
overridePolicyFixed,
@@ -871,7 +878,7 @@
packageState,
userId,
permissionName,
- Context.DEVICE_ID_DEFAULT,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT,
isGranted = true,
canManageRolePermission = false,
overridePolicyFixed = false,
@@ -882,7 +889,7 @@
packageState.appId,
userId,
permissionName,
- Context.DEVICE_ID_DEFAULT,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT,
PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED or
PackageManager.FLAG_PERMISSION_REVOKED_COMPAT,
0,
@@ -915,7 +922,7 @@
packageState: PackageState,
userId: Int,
permissionName: String,
- deviceId: Int,
+ persistentDeviceId: String,
isGranted: Boolean,
canManageRolePermission: Boolean,
overridePolicyFixed: Boolean,
@@ -974,13 +981,6 @@
}
val appId = packageState.appId
- val persistentDeviceId = getPersistentDeviceId(deviceId)
- if (persistentDeviceId == null) {
- if (reportError) {
- throw IllegalArgumentException("Cannot find persistent device Id for $deviceId")
- }
- return
- }
val oldFlags =
getPermissionFlagsWithPolicy(appId, userId, permissionName, persistentDeviceId)
@@ -1054,7 +1054,7 @@
return
}
- setPermissionFlagsWithPolicy(appId, userId, permissionName, deviceId, newFlags)
+ setPermissionFlagsWithPolicy(appId, userId, permissionName, persistentDeviceId, newFlags)
if (permission.isRuntime) {
val action =
@@ -1088,7 +1088,7 @@
override fun getPermissionFlags(
packageName: String,
permissionName: String,
- deviceId: Int,
+ persistentDeviceId: String,
userId: Int,
): Int {
if (!userManagerInternal.exists(userId)) {
@@ -1123,11 +1123,6 @@
return 0
}
- val persistentDeviceId = getPersistentDeviceId(deviceId)
- if (persistentDeviceId == null) {
- Slog.w(LOG_TAG, "Cannot find persistent device Id for $deviceId")
- return 0
- }
val flags =
getPermissionFlagsWithPolicy(
packageState.appId,
@@ -1282,7 +1277,7 @@
flagMask: Int,
flagValues: Int,
enforceAdjustPolicyPermission: Boolean,
- deviceId: Int,
+ persistentDeviceId: String,
userId: Int
) {
val callingUid = Binder.getCallingUid()
@@ -1308,6 +1303,7 @@
"updatePermissionFlags(packageName = $packageName," +
" permissionName = $permissionName, flagMask = $flagMaskString," +
" flagValues = $flagValuesString, userId = $userId," +
+ " persistentDeviceId = $persistentDeviceId," +
" callingUid = $callingUidName ($callingUid))",
RuntimeException()
)
@@ -1397,7 +1393,7 @@
appId,
userId,
permissionName,
- deviceId,
+ persistentDeviceId,
flagMask,
flagValues,
canUpdateSystemFlags,
@@ -1464,7 +1460,7 @@
packageState.appId,
userId,
permissionName,
- Context.DEVICE_ID_DEFAULT,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT,
flagMask,
flagValues,
canUpdateSystemFlags,
@@ -1483,7 +1479,7 @@
appId: Int,
userId: Int,
permissionName: String,
- deviceId: Int,
+ persistentDeviceId: String,
flagMask: Int,
flagValues: Int,
canUpdateSystemFlags: Boolean,
@@ -1517,11 +1513,6 @@
return
}
- val persistentDeviceId = getPersistentDeviceId(deviceId)
- if (persistentDeviceId == null) {
- Slog.e(LOG_TAG, "Cannot find persistent device Id for $deviceId")
- return
- }
val oldFlags =
getPermissionFlagsWithPolicy(appId, userId, permissionName, persistentDeviceId)
if (!isPermissionRequested && oldFlags == 0) {
@@ -1534,7 +1525,7 @@
}
val newFlags = PermissionFlags.updateFlags(permission, oldFlags, flagMask, flagValues)
- setPermissionFlagsWithPolicy(appId, userId, permissionName, deviceId, newFlags)
+ setPermissionFlagsWithPolicy(appId, userId, permissionName, persistentDeviceId, newFlags)
}
override fun getAllowlistedRestrictedPermissions(
@@ -1635,11 +1626,12 @@
appId: Int,
userId: Int,
permissionName: String,
- deviceId: Int,
+ persistentDeviceId: String,
flags: Int
): Boolean {
return if (
- !Flags.deviceAwarePermissionApisEnabled() || deviceId == Context.DEVICE_ID_DEFAULT
+ !Flags.deviceAwarePermissionApisEnabled() ||
+ persistentDeviceId == VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT
) {
with(policy) { setPermissionFlags(appId, userId, permissionName, flags) }
} else {
@@ -1652,14 +1644,8 @@
return with(policy) { setPermissionFlags(appId, userId, permissionName, flags) }
}
- val persistentDeviceId = getPersistentDeviceId(deviceId)
- if (persistentDeviceId != null) {
- with(devicePolicy) {
- setPermissionFlags(appId, persistentDeviceId, userId, permissionName, flags)
- }
- } else {
- Slog.e(LOG_TAG, "Cannot find persistent device Id for $deviceId")
- false
+ with(devicePolicy) {
+ setPermissionFlags(appId, persistentDeviceId, userId, permissionName, flags)
}
}
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java
index 3034942..2f52d5c 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java
@@ -36,6 +36,7 @@
import static org.mockito.Mockito.when;
import android.Manifest;
+import android.companion.virtual.VirtualDeviceManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
@@ -246,9 +247,11 @@
mPermissionHelper.setNotificationPermission("pkg", 10, true, true);
verify(mPermManager).grantRuntimePermission(
- "pkg", Manifest.permission.POST_NOTIFICATIONS, Context.DEVICE_ID_DEFAULT, 10);
+ "pkg", Manifest.permission.POST_NOTIFICATIONS,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, 10);
verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
- USER_FLAG_MASK, FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, 10);
+ USER_FLAG_MASK, FLAG_PERMISSION_USER_SET, true,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, 10);
}
@Test
@@ -258,15 +261,17 @@
.thenReturn(PERMISSION_DENIED);
when(mPermManager.getPermissionFlags(anyString(),
eq(Manifest.permission.POST_NOTIFICATIONS),
- anyInt(), anyInt())).thenReturn(FLAG_PERMISSION_GRANTED_BY_DEFAULT);
+ anyString(), anyInt())).thenReturn(FLAG_PERMISSION_GRANTED_BY_DEFAULT);
PermissionHelper.PackagePermission pkgPerm = new PermissionHelper.PackagePermission(
"pkg", 10, true, false);
mPermissionHelper.setNotificationPermission(pkgPerm);
verify(mPermManager).grantRuntimePermission(
- "pkg", Manifest.permission.POST_NOTIFICATIONS, Context.DEVICE_ID_DEFAULT, 10);
+ "pkg", Manifest.permission.POST_NOTIFICATIONS,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, 10);
verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
- USER_FLAG_MASK, FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, 10);
+ USER_FLAG_MASK, FLAG_PERMISSION_USER_SET, true,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, 10);
}
@Test
@@ -278,9 +283,10 @@
verify(mPermManager).revokeRuntimePermission(
eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS),
- eq(Context.DEVICE_ID_DEFAULT), eq(10), anyString());
+ eq(VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT), eq(10), anyString());
verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
- USER_FLAG_MASK, FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, 10);
+ USER_FLAG_MASK, FLAG_PERMISSION_USER_SET, true,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, 10);
}
@Test
@@ -291,9 +297,10 @@
mPermissionHelper.setNotificationPermission("pkg", 10, true, false);
verify(mPermManager).grantRuntimePermission(
- "pkg", Manifest.permission.POST_NOTIFICATIONS, Context.DEVICE_ID_DEFAULT, 10);
+ "pkg", Manifest.permission.POST_NOTIFICATIONS,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, 10);
verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
- USER_FLAG_MASK, 0, true, Context.DEVICE_ID_DEFAULT, 10);
+ USER_FLAG_MASK, 0, true, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, 10);
}
@Test
@@ -305,35 +312,35 @@
verify(mPermManager).revokeRuntimePermission(
eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS),
- eq(Context.DEVICE_ID_DEFAULT), eq(10), anyString());
+ eq(VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT), eq(10), anyString());
verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
- USER_FLAG_MASK, 0, true, Context.DEVICE_ID_DEFAULT, 10);
+ USER_FLAG_MASK, 0, true, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, 10);
}
@Test
public void testSetNotificationPermission_SystemFixedPermNotSet() throws Exception {
when(mPermManager.getPermissionFlags(anyString(),
eq(Manifest.permission.POST_NOTIFICATIONS),
- anyInt(), anyInt())).thenReturn(FLAG_PERMISSION_SYSTEM_FIXED);
+ anyString(), anyInt())).thenReturn(FLAG_PERMISSION_SYSTEM_FIXED);
mPermissionHelper.setNotificationPermission("pkg", 10, false, true);
verify(mPermManager, never()).revokeRuntimePermission(
- anyString(), anyString(), anyInt(), anyInt(), anyString());
+ anyString(), anyString(), anyString(), anyInt(), anyString());
verify(mPermManager, never()).updatePermissionFlags(
- anyString(), anyString(), anyInt(), anyInt(), anyBoolean(), anyInt(), anyInt());
+ anyString(), anyString(), anyInt(), anyInt(), anyBoolean(), anyString(), anyInt());
}
@Test
public void testSetNotificationPermission_PolicyFixedPermNotSet() throws Exception {
when(mPermManager.getPermissionFlags(anyString(),
eq(Manifest.permission.POST_NOTIFICATIONS),
- anyInt(), anyInt())).thenReturn(FLAG_PERMISSION_POLICY_FIXED);
+ anyString(), anyInt())).thenReturn(FLAG_PERMISSION_POLICY_FIXED);
mPermissionHelper.setNotificationPermission("pkg", 10, false, true);
verify(mPermManager, never()).revokeRuntimePermission(
- anyString(), anyString(), anyInt(), anyInt(), anyString());
+ anyString(), anyString(), anyString(), anyInt(), anyString());
verify(mPermManager, never()).updatePermissionFlags(
- anyString(), anyString(), anyInt(), anyInt(), anyBoolean(), anyInt(), anyInt());
+ anyString(), anyString(), anyInt(), anyInt(), anyBoolean(), anyString(), anyInt());
}
@Test
@@ -343,7 +350,8 @@
mPermissionHelper.setNotificationPermission("pkg", 10, true, false);
verify(mPermManager, never()).grantRuntimePermission(
- "pkg", Manifest.permission.POST_NOTIFICATIONS, Context.DEVICE_ID_DEFAULT, 10);
+ "pkg", Manifest.permission.POST_NOTIFICATIONS,
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, 10);
}
@Test
@@ -354,7 +362,7 @@
verify(mPermManager, never()).revokeRuntimePermission(
eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS),
- eq(Context.DEVICE_ID_DEFAULT), eq(10), anyString());
+ eq(VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT), eq(10), anyString());
}
@Test
@@ -365,7 +373,7 @@
when(mPackageManager.getPackageUid(anyString(), anyInt(), anyInt()))
.thenReturn(testUid);
PackageInfo testPkgInfo = new PackageInfo();
- testPkgInfo.requestedPermissions = new String[]{ Manifest.permission.RECORD_AUDIO };
+ testPkgInfo.requestedPermissions = new String[]{Manifest.permission.RECORD_AUDIO};
when(mPackageManager.getPackageInfo(anyString(), anyLong(), anyInt()))
.thenReturn(testPkgInfo);
mPermissionHelper.setNotificationPermission("pkg", 10, false, false);
@@ -374,26 +382,26 @@
eq(Manifest.permission.POST_NOTIFICATIONS), eq(-1), eq(testUid));
verify(mPermManager, never()).revokeRuntimePermission(
eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS),
- eq(Context.DEVICE_ID_DEFAULT), eq(10), anyString());
+ eq(VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT), eq(10), anyString());
}
@Test
public void testIsPermissionFixed() throws Exception {
when(mPermManager.getPermissionFlags(anyString(),
eq(Manifest.permission.POST_NOTIFICATIONS),
- anyInt(), anyInt())).thenReturn(FLAG_PERMISSION_USER_SET);
+ anyString(), anyInt())).thenReturn(FLAG_PERMISSION_USER_SET);
assertThat(mPermissionHelper.isPermissionFixed("pkg", 0)).isFalse();
when(mPermManager.getPermissionFlags(anyString(),
- eq(Manifest.permission.POST_NOTIFICATIONS), anyInt(),
- anyInt())).thenReturn(FLAG_PERMISSION_USER_SET|FLAG_PERMISSION_POLICY_FIXED);
+ eq(Manifest.permission.POST_NOTIFICATIONS), anyString(),
+ anyInt())).thenReturn(FLAG_PERMISSION_USER_SET | FLAG_PERMISSION_POLICY_FIXED);
assertThat(mPermissionHelper.isPermissionFixed("pkg", 0)).isTrue();
when(mPermManager.getPermissionFlags(anyString(),
eq(Manifest.permission.POST_NOTIFICATIONS),
- anyInt(), anyInt())).thenReturn(FLAG_PERMISSION_SYSTEM_FIXED);
+ anyString(), anyInt())).thenReturn(FLAG_PERMISSION_SYSTEM_FIXED);
assertThat(mPermissionHelper.isPermissionFixed("pkg", 0)).isTrue();
}
@@ -435,19 +443,19 @@
// 2 and 3 are user-set permissions
when(mPermManager.getPermissionFlags("first", Manifest.permission.POST_NOTIFICATIONS,
- Context.DEVICE_ID_DEFAULT, userId))
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId))
.thenReturn(0);
when(mPermManager.getPermissionFlags("second", Manifest.permission.POST_NOTIFICATIONS,
- Context.DEVICE_ID_DEFAULT, userId))
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId))
.thenReturn(FLAG_PERMISSION_USER_SET);
when(mPermManager.getPermissionFlags("third", Manifest.permission.POST_NOTIFICATIONS,
- Context.DEVICE_ID_DEFAULT, userId))
+ VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT, userId))
.thenReturn(FLAG_PERMISSION_USER_SET);
Map<Pair<Integer, String>, Pair<Boolean, Boolean>> expected =
ImmutableMap.of(new Pair(1, "first"), new Pair(true, false),
- new Pair(2, "second"), new Pair(true, true),
- new Pair(3, "third"), new Pair(false, true));
+ new Pair(2, "second"), new Pair(true, true),
+ new Pair(3, "third"), new Pair(false, true));
Map<Pair<Integer, String>, Pair<Boolean, Boolean>> actual =
mPermissionHelper.getNotificationPermissionValues(userId);