diff options
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; } |