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

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

Merge "Add a shell commd to ignore delivery group policies."

parents 8f733bee 07797135
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -328,6 +328,7 @@ import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.EventLog;
import android.util.FeatureFlagUtils;
import android.util.IndentingPrintWriter;
import android.util.IntArray;
import android.util.Log;
import android.util.Pair;
@@ -759,6 +760,9 @@ public class ActivityManagerService extends IActivityManager.Stub
    final AppErrors mAppErrors;
    final PackageWatchdog mPackageWatchdog;
    @GuardedBy("mDeliveryGroupPolicyIgnoredActions")
    private final ArraySet<String> mDeliveryGroupPolicyIgnoredActions = new ArraySet();
    /**
     * Uids of apps with current active camera sessions.  Access synchronized on
     * the IntArray instance itself, and no other locks must be acquired while that
@@ -18339,6 +18343,37 @@ public class ActivityManagerService extends IActivityManager.Stub
        }
    }
    void setIgnoreDeliveryGroupPolicy(@NonNull String broadcastAction) {
        Objects.requireNonNull(broadcastAction);
        enforceCallingPermission(permission.DUMP, "waitForBroadcastBarrier()");
        synchronized (mDeliveryGroupPolicyIgnoredActions) {
            mDeliveryGroupPolicyIgnoredActions.add(broadcastAction);
        }
    }
    void clearIgnoreDeliveryGroupPolicy(@NonNull String broadcastAction) {
        Objects.requireNonNull(broadcastAction);
        enforceCallingPermission(permission.DUMP, "waitForBroadcastBarrier()");
        synchronized (mDeliveryGroupPolicyIgnoredActions) {
            mDeliveryGroupPolicyIgnoredActions.remove(broadcastAction);
        }
    }
    boolean shouldIgnoreDeliveryGroupPolicy(@Nullable String broadcastAction) {
        if (broadcastAction == null) {
            return false;
        }
        synchronized (mDeliveryGroupPolicyIgnoredActions) {
            return mDeliveryGroupPolicyIgnoredActions.contains(broadcastAction);
        }
    }
    void dumpDeliveryGroupPolicyIgnoredActions(IndentingPrintWriter ipw) {
        synchronized (mDeliveryGroupPolicyIgnoredActions) {
            ipw.println(mDeliveryGroupPolicyIgnoredActions);
        }
    }
    @Override
    @ReasonCode
    public int getBackgroundRestrictionExemptionReason(int uid) {
+20 −1
Original line number Diff line number Diff line
@@ -345,6 +345,10 @@ final class ActivityManagerShellCommand extends ShellCommand {
                    return runWaitForBroadcastIdle(pw);
                case "wait-for-broadcast-barrier":
                    return runWaitForBroadcastBarrier(pw);
                case "set-ignore-delivery-group-policy":
                    return runSetIgnoreDeliveryGroupPolicy(pw);
                case "clear-ignore-delivery-group-policy":
                    return runClearIgnoreDeliveryGroupPolicy(pw);
                case "compat":
                    return runCompat(pw);
                case "refresh-settings-cache":
@@ -3147,6 +3151,18 @@ final class ActivityManagerShellCommand extends ShellCommand {
        return 0;
    }

    int runSetIgnoreDeliveryGroupPolicy(PrintWriter pw) throws RemoteException {
        final String broadcastAction = getNextArgRequired();
        mInternal.setIgnoreDeliveryGroupPolicy(broadcastAction);
        return 0;
    }

    int runClearIgnoreDeliveryGroupPolicy(PrintWriter pw) throws RemoteException {
        final String broadcastAction = getNextArgRequired();
        mInternal.clearIgnoreDeliveryGroupPolicy(broadcastAction);
        return 0;
    }

    int runRefreshSettingsCache() throws RemoteException {
        mInternal.refreshSettingsCache();
        return 0;
@@ -4031,7 +4047,10 @@ final class ActivityManagerShellCommand extends ShellCommand {
                    + "background.");
            pw.println("  set-foreground-service-delegate [--user <USER_ID>] <PACKAGE> start|stop");
            pw.println("         Start/stop an app's foreground service delegate.");
            pw.println();
            pw.println("  set-ignore-delivery-group-policy <ACTION>");
            pw.println("         Start ignoring delivery group policy set for a broadcast action");
            pw.println("  clear-ignore-delivery-group-policy <ACTION>");
            pw.println("         Stop ignoring delivery group policy set for a broadcast action");
            Intent.printIntentArgsHelp(pw, "");
        }
    }
+9 −0
Original line number Diff line number Diff line
@@ -648,6 +648,9 @@ class BroadcastQueueModernImpl extends BroadcastQueue {
    }

    private void applyDeliveryGroupPolicy(@NonNull BroadcastRecord r) {
        if (mService.shouldIgnoreDeliveryGroupPolicy(r.intent.getAction())) {
            return;
        }
        final int policy = (r.options != null)
                ? r.options.getDeliveryGroupPolicy() : BroadcastOptions.DELIVERY_GROUP_POLICY_ALL;
        final BroadcastConsumer broadcastConsumer;
@@ -1685,6 +1688,12 @@ class BroadcastQueueModernImpl extends BroadcastQueue {
        ipw.decreaseIndent();
        ipw.println();

        ipw.println(" Broadcasts with ignored delivery group policies:");
        ipw.increaseIndent();
        mService.dumpDeliveryGroupPolicyIgnoredActions(ipw);
        ipw.decreaseIndent();
        ipw.println();

        if (dumpConstants) {
            mConstants.dump(ipw);
        }