From 4ca82409330be2e870feef9beac1fa5fe7e6abdc Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Wed, 2 Feb 2022 13:38:18 -0800 Subject: [PATCH] Use temp-allowlist reason to identify push messages. This change is temporary for testing purpose, until the new API recordResponseEventWhileInBackground() is used for push messages related broadcasts. Bug: 217251579 Test: manual Change-Id: Iaa0a7c589f08d51b82f55057084c79f4b1a5d7d9 --- .../com/android/server/am/BroadcastQueue.java | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java index e2921e9f5e71d..e7d0ed8255497 100644 --- a/services/core/java/com/android/server/am/BroadcastQueue.java +++ b/services/core/java/com/android/server/am/BroadcastQueue.java @@ -56,6 +56,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.os.PowerExemptionManager; import android.os.PowerExemptionManager.ReasonCode; import android.os.PowerExemptionManager.TempAllowListType; import android.os.Process; @@ -1857,22 +1858,36 @@ public final class BroadcastQueue { } private void maybeReportBroadcastDispatchedEventLocked(BroadcastRecord r, int targetUid) { + // TODO (206518114): Only allow apps with ACCESS_PACKAGE_USAGE_STATS to set + // getIdForResponseEvent. + // TODO (217251579): Temporarily use temp-allowlist reason to identify + // push messages and record response events. + useTemporaryAllowlistReasonAsSignal(r); + if (r.options == null || r.options.getIdForResponseEvent() <= 0) { + return; + } final String targetPackage = getTargetPackage(r); // Ignore non-explicit broadcasts if (targetPackage == null) { return; } - // TODO (206518114): Only allow apps with ACCESS_PACKAGE_USAGE_STATS to set - // getIdForResponseEvent. - if (r.options == null || r.options.getIdForResponseEvent() <= 0) { - return; - } getUsageStatsManagerInternal().reportBroadcastDispatched( r.callingUid, targetPackage, UserHandle.of(r.userId), r.options.getIdForResponseEvent(), SystemClock.elapsedRealtime(), mService.getUidStateLocked(targetUid)); } + private void useTemporaryAllowlistReasonAsSignal(BroadcastRecord r) { + if (r.options == null || r.options.getIdForResponseEvent() > 0) { + return; + } + final int reasonCode = r.options.getTemporaryAppAllowlistReasonCode(); + if (reasonCode == PowerExemptionManager.REASON_PUSH_MESSAGING + || reasonCode == PowerExemptionManager.REASON_PUSH_MESSAGING_OVER_QUOTA) { + r.options.recordResponseEventWhileInBackground(reasonCode); + } + } + @NonNull private UsageStatsManagerInternal getUsageStatsManagerInternal() { final UsageStatsManagerInternal usageStatsManagerInternal =