diff options
| author | 2023-10-14 05:18:07 +0000 | |
|---|---|---|
| committer | 2023-10-14 05:18:07 +0000 | |
| commit | 705e7fa07d324bffafb63974725efdd7ee02b10c (patch) | |
| tree | 08dd57cc612d302f44fb08571fe5323dd3c09c6c | |
| parent | 62b214df0a0e44c189cea58a4da3ce9fd7711f12 (diff) | |
| parent | b47fc4718104382c9475037baa627cd3484c6df9 (diff) | |
Merge "Update new permission logic to use flagging." into main
| -rw-r--r-- | core/api/system-current.txt | 2 | ||||
| -rw-r--r-- | core/java/android/app/usage/flags.aconfig | 6 | ||||
| -rw-r--r-- | core/res/AndroidManifest.xml | 4 | ||||
| -rw-r--r-- | services/usage/java/com/android/server/usage/UsageStatsService.java | 16 |
4 files changed, 20 insertions, 8 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index a1da9e02f23d..1f20cb9c26f9 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -314,7 +314,7 @@ package android { field public static final String REMOVE_DRM_CERTIFICATES = "android.permission.REMOVE_DRM_CERTIFICATES"; field public static final String REMOVE_TASKS = "android.permission.REMOVE_TASKS"; field public static final String RENOUNCE_PERMISSIONS = "android.permission.RENOUNCE_PERMISSIONS"; - field public static final String REPORT_USAGE_STATS = "android.permission.REPORT_USAGE_STATS"; + field @FlaggedApi("backstage_power.report_usage_stats_permission") public static final String REPORT_USAGE_STATS = "android.permission.REPORT_USAGE_STATS"; field @Deprecated public static final String REQUEST_NETWORK_SCORES = "android.permission.REQUEST_NETWORK_SCORES"; field public static final String REQUEST_NOTIFICATION_ASSISTANT_SERVICE = "android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE"; field public static final String RESET_PASSWORD = "android.permission.RESET_PASSWORD"; diff --git a/core/java/android/app/usage/flags.aconfig b/core/java/android/app/usage/flags.aconfig index afe87de1dbf5..d1f90676a15f 100644 --- a/core/java/android/app/usage/flags.aconfig +++ b/core/java/android/app/usage/flags.aconfig @@ -7,3 +7,9 @@ flag { bug: "296061232" } +flag { + name: "report_usage_stats_permission" + namespace: "backstage_power" + description: "Feature flag for the new REPORT_USAGE_STATS permission." + bug: "296056771" +} diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index a54a563b1804..84690a7a617d 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -6122,7 +6122,9 @@ android:protectionLevel="signature|privileged|development|appop|retailDemo" /> <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" /> - <!-- @SystemApi @hide Allows trusted system components to report events to UsageStatsManager --> + <!-- @SystemApi @hide + @FlaggedApi("backstage_power.report_usage_stats_permission") + Allows trusted system components to report events to UsageStatsManager --> <permission android:name="android.permission.REPORT_USAGE_STATS" android:protectionLevel="signature|module" /> diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index f3bf026ddc6e..8b2de2fbb78a 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -53,6 +53,7 @@ import android.app.usage.AppStandbyInfo; import android.app.usage.BroadcastResponseStatsList; import android.app.usage.ConfigurationStats; import android.app.usage.EventStats; +import android.app.usage.Flags; import android.app.usage.IUsageStatsManager; import android.app.usage.UsageEvents; import android.app.usage.UsageEvents.Event; @@ -2124,12 +2125,15 @@ public class UsageStatsService extends SystemService implements } private boolean canReportUsageStats() { - if (isCallingUidSystem()) { - return true; // System UID can always report UsageStats - } - - return getContext().checkCallingPermission(Manifest.permission.REPORT_USAGE_STATS) - == PackageManager.PERMISSION_GRANTED; + final boolean isSystem = isCallingUidSystem(); + if (!Flags.reportUsageStatsPermission()) { + // If the flag is disabled, do no check for the new permission and instead return + // true only if the calling uid is system since System UID can always report stats. + return isSystem; + } + return isSystem + || getContext().checkCallingPermission(Manifest.permission.REPORT_USAGE_STATS) + == PackageManager.PERMISSION_GRANTED; } private boolean hasObserverPermission() { |