Loading services/core/java/com/android/server/am/ActivityManagerService.java +35 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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) { services/core/java/com/android/server/am/ActivityManagerShellCommand.java +20 −1 Original line number Diff line number Diff line Loading @@ -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": Loading Loading @@ -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; Loading Loading @@ -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, ""); } } Loading services/core/java/com/android/server/am/BroadcastQueueModernImpl.java +9 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading Loading
services/core/java/com/android/server/am/ActivityManagerService.java +35 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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) {
services/core/java/com/android/server/am/ActivityManagerShellCommand.java +20 −1 Original line number Diff line number Diff line Loading @@ -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": Loading Loading @@ -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; Loading Loading @@ -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, ""); } } Loading
services/core/java/com/android/server/am/BroadcastQueueModernImpl.java +9 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading