diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index 2a1c055b7313e..55128be38ba03 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -4502,8 +4502,12 @@ public class AppOpsService extends IAppOpsService.Stub { Slog.i("AppOpsDebug", "tag " + attributionTag + " found in " + packageName); } else { + ArrayList tagList = new ArrayList<>(); + for (int i = 0; i < pkg.getAttributions().size(); i++) { + tagList.add(pkg.getAttributions().get(i).tag); + } Slog.i("AppOpsDebug", "tag " + attributionTag + " missing from " - + packageName); + + packageName + ", tags: " + tagList); } } diff --git a/services/core/java/com/android/server/policy/AppOpsPolicy.java b/services/core/java/com/android/server/policy/AppOpsPolicy.java index a6c93deb2d4de..70b5c62a49739 100644 --- a/services/core/java/com/android/server/policy/AppOpsPolicy.java +++ b/services/core/java/com/android/server/policy/AppOpsPolicy.java @@ -64,6 +64,11 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat "android:activity_recognition_allow_listed_tags"; private static final String ACTIVITY_RECOGNITION_TAGS_SEPARATOR = ";"; + private static ArraySet sExpectedTags = new ArraySet<>(new String[] { + "awareness_provider", "activity_recognition_provider", "network_location_provider", + "network_location_calibration", "fused_location_provider", "geofencer_provider"}); + + @NonNull private final Object mLock = new Object(); @@ -222,8 +227,14 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat if (resolvedCode != code) { if (isDatasourceAttributionTag(uid, packageName, attributionTag, mLocationTags)) { + if (packageName.equals("com.google.android.gms") + && !sExpectedTags.contains(attributionTag)) { + Log.i("AppOpsDebugRemapping", "remapping " + packageName + " location " + + "for tag " + attributionTag); + } return resolvedCode; - } else if (packageName.equals("com.google.android.gms")) { + } else if (packageName.equals("com.google.android.gms") + && sExpectedTags.contains(attributionTag)) { Log.i("AppOpsDebugRemapping", "NOT remapping " + packageName + " code " + code + " for tag " + attributionTag); } @@ -232,10 +243,14 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat if (resolvedCode != code) { if (isDatasourceAttributionTag(uid, packageName, attributionTag, mActivityRecognitionTags)) { - Log.i("AppOpsDebugRemapping", "remapping " + packageName + " code " - + code + " to " + resolvedCode + " for tag " + attributionTag); + if (packageName.equals("com.google.android.gms") + && !sExpectedTags.contains(attributionTag)) { + Log.i("AppOpsDebugRemapping", "remapping " + packageName + " " + + "activity recognition for tag " + attributionTag); + } return resolvedCode; - } else if (packageName.equals("com.google.android.gms")) { + } else if (packageName.equals("com.google.android.gms") + && sExpectedTags.contains(attributionTag)) { Log.i("AppOpsDebugRemapping", "NOT remapping " + packageName + " code " + code + " for tag " + attributionTag); } @@ -351,13 +366,15 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat if (appIdTags != null) { final ArraySet packageTags = appIdTags.get(packageName); if (packageTags != null && packageTags.contains(attributionTag)) { - if (packageName.equals("com.google.android.gms")) { + if (packageName.equals("com.google.android.gms") + && !sExpectedTags.contains(attributionTag)) { Log.i("AppOpsDebugRemapping", packageName + " tag " + attributionTag + " in " + packageTags); } return true; } - if (packageName.equals("com.google.android.gms")) { + if (packageName.equals("com.google.android.gms") + && sExpectedTags.contains(attributionTag)) { Log.i("AppOpsDebugRemapping", packageName + " tag " + attributionTag + " NOT in " + packageTags); }