Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6dfb8c64 authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Android (Google) Code Review
Browse files

Merge "Use temp-allowlist reason to identify push messages."

parents 5bf27120 4ca82409
Loading
Loading
Loading
Loading
+20 −5
Original line number Diff line number Diff line
@@ -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) {
        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.
        // 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;
        }
        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 =