summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/test-current.txt1
-rw-r--r--core/java/android/app/AppOpsManager.java30
-rw-r--r--core/java/android/permission/PermissionUsageHelper.java3
-rw-r--r--services/core/java/com/android/server/appop/AppOpsService.java12
-rw-r--r--services/core/java/com/android/server/policy/PermissionPolicyService.java2
5 files changed, 34 insertions, 14 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index cdf232cd71ee..d1c4df3cebb4 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -251,6 +251,7 @@ package android.app {
method @RequiresPermission("android.permission.MANAGE_APPOPS") public void getHistoricalOpsFromDiskRaw(@NonNull android.app.AppOpsManager.HistoricalOpsRequest, @Nullable java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.AppOpsManager.HistoricalOps>);
method public static int getNumOps();
method public boolean isOperationActive(int, int, String);
+ method public int noteOpNoThrow(int, @NonNull android.content.AttributionSource, @Nullable String);
method @RequiresPermission("android.permission.MANAGE_APPOPS") public void offsetHistory(long);
method public static String opToPermission(int);
method public static int permissionToOpCode(String);
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 39900a03e560..2afc78cb90e6 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -7800,7 +7800,7 @@ public class AppOpsManager {
}
final List<AppOpsManager.PackageOps> result;
try {
- result = mService.getPackagesForOpsForDevice(opCodes, persistentDeviceId);
+ result = mService.getPackagesForOpsForDevice(opCodes, persistentDeviceId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -8272,14 +8272,24 @@ public class AppOpsManager {
cb = new IAppOpsCallback.Stub() {
public void opChanged(int op, int uid, String packageName,
String persistentDeviceId) {
- if (callback instanceof OnOpChangedInternalListener) {
- ((OnOpChangedInternalListener)callback).onOpChanged(op, packageName,
- persistentDeviceId);
- }
- if (sAppOpInfos[op].name != null) {
-
- callback.onOpChanged(sAppOpInfos[op].name, packageName,
- UserHandle.getUserId(uid), persistentDeviceId);
+ if (Flags.deviceAwarePermissionApisEnabled()) {
+ if (callback instanceof OnOpChangedInternalListener) {
+ ((OnOpChangedInternalListener)callback).onOpChanged(op, packageName,
+ persistentDeviceId);
+ }
+ if (sAppOpInfos[op].name != null) {
+ callback.onOpChanged(sAppOpInfos[op].name, packageName,
+ UserHandle.getUserId(uid), persistentDeviceId);
+ }
+ } else {
+ if (callback instanceof OnOpChangedInternalListener) {
+ ((OnOpChangedInternalListener) callback).onOpChanged(op,
+ packageName);
+ }
+ if (sAppOpInfos[op].name != null) {
+ callback.onOpChanged(sAppOpInfos[op].name, packageName,
+ UserHandle.getUserId(uid));
+ }
}
}
};
@@ -8940,6 +8950,8 @@ public class AppOpsManager {
*
* @hide
*/
+ @TestApi
+ @SuppressLint("UnflaggedApi")
public int noteOpNoThrow(int op, @NonNull AttributionSource attributionSource,
@Nullable String message) {
return noteOpNoThrow(op, attributionSource.getUid(), attributionSource.getPackageName(),
diff --git a/core/java/android/permission/PermissionUsageHelper.java b/core/java/android/permission/PermissionUsageHelper.java
index 460b4dd9b86c..141ffc9a491a 100644
--- a/core/java/android/permission/PermissionUsageHelper.java
+++ b/core/java/android/permission/PermissionUsageHelper.java
@@ -359,8 +359,7 @@ public class PermissionUsageHelper implements AppOpsManager.OnOpActiveChangedLis
new PermissionGroupUsage(usage.packageName, usage.uid, usage.lastAccessTime,
permGroup,
usage.isRunning, isPhone, usage.attributionTag, attributionLabel,
- usagesWithLabels.valueAt(usageNum),
- VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT));
+ usagesWithLabels.valueAt(usageNum), deviceId));
}
}
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index 0cc64941cfe6..fb627854209d 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -661,8 +661,12 @@ public class AppOpsService extends IAppOpsService.Stub {
@NonNull OpEntry createEntryLocked(String persistentDeviceId) {
// TODO(b/308201969): Update this method when we introduce disk persistence of events
// for accesses on external devices.
- final ArrayMap<String, AttributedOp> attributedOps = mDeviceAttributedOps.get(
+ ArrayMap<String, AttributedOp> attributedOps = mDeviceAttributedOps.get(
persistentDeviceId);
+ if (attributedOps == null) {
+ attributedOps = new ArrayMap<>();
+ }
+
final ArrayMap<String, AppOpsManager.AttributedOpEntry> attributionEntries =
new ArrayMap<>(attributedOps.size());
for (int i = 0; i < attributedOps.size(); i++) {
@@ -680,8 +684,12 @@ public class AppOpsService extends IAppOpsService.Stub {
@NonNull OpEntry createSingleAttributionEntryLocked(@Nullable String attributionTag) {
// TODO(b/308201969): Update this method when we introduce disk persistence of events
// for accesses on external devices.
- final ArrayMap<String, AttributedOp> attributedOps = mDeviceAttributedOps.get(
+ ArrayMap<String, AttributedOp> attributedOps = mDeviceAttributedOps.get(
PERSISTENT_DEVICE_ID_DEFAULT);
+ if (attributedOps == null) {
+ attributedOps = new ArrayMap<>();
+ }
+
final ArrayMap<String, AttributedOpEntry> attributionEntries = new ArrayMap<>(1);
if (attributedOps.get(attributionTag) != null) {
attributionEntries.put(attributionTag,
diff --git a/services/core/java/com/android/server/policy/PermissionPolicyService.java b/services/core/java/com/android/server/policy/PermissionPolicyService.java
index f15646f634c2..984994170876 100644
--- a/services/core/java/com/android/server/policy/PermissionPolicyService.java
+++ b/services/core/java/com/android/server/policy/PermissionPolicyService.java
@@ -237,7 +237,7 @@ public final class PermissionPolicyService extends SystemService {
mAppOpsCallback = new IAppOpsCallback.Stub() {
public void opChanged(int op, int uid, @Nullable String packageName,
String persistentDeviceId) {
- if (Objects.equals(persistentDeviceId,
+ if (!Objects.equals(persistentDeviceId,
VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT)) {
return;
}