From f70a8af0c801b0363773f446b9d08c9392af6c78 Mon Sep 17 00:00:00 2001 From: Pavel Grafov Date: Mon, 13 Mar 2023 18:13:12 +0000 Subject: [PATCH] Use fg broadcast for pkg suspension and quiet mode When quiet mode is enabled or disabled via QS tile, launcher must refresh whether the icons are grayed out. Conversely, QS tile must be updated when quiet mode is toggled via Launcher. This depends on a background broadcast and can be very unresponsive especially after a reboot. This CL makes this broadcast into a foreground one so that the UI is updated immediately. When quiet mode is disabled, work packages get unsuspended, but launcher won't update the icons until it receives ACTION_PACKAGES_UNSUSPENDED. To make this resposive too that broadcast is also made foreground. Strictly speaking there is no necessity to make ACTION_PACKAGES_SUSPENSION_CHANGED into a foreground broadcast for these issues but it is delivered to an activity which shows the suspension dialog and is quite useless if delayed, so I made it foreground to keep code simpler. These broadcasts are only delivered to registered receivers and are not of iterest to any apps except very few (Launcher, SysUI, DWB). Bug: 271818888 Bug: 269595559 Test: manual, device_config put device_policy_manager enable_keep_profiles_running true Change-Id: I9c1271020dff3775f78b2f0db305f4c3f7d2d068 --- .../java/com/android/server/pm/SuspendPackageHelper.java | 6 +++--- .../core/java/com/android/server/pm/UserManagerService.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/pm/SuspendPackageHelper.java b/services/core/java/com/android/server/pm/SuspendPackageHelper.java index 18eebe45a7599..b4b8cb2a370d8 100644 --- a/services/core/java/com/android/server/pm/SuspendPackageHelper.java +++ b/services/core/java/com/android/server/pm/SuspendPackageHelper.java @@ -619,10 +619,10 @@ public final class SuspendPackageHelper { final Bundle extras = new Bundle(3); extras.putStringArray(Intent.EXTRA_CHANGED_PACKAGE_LIST, pkgList); extras.putIntArray(Intent.EXTRA_CHANGED_UID_LIST, uidList); + final int flags = Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND; handler.post(() -> mBroadcastHelper.sendPackageBroadcast(intent, null /* pkg */, - extras, Intent.FLAG_RECEIVER_REGISTERED_ONLY, null /* targetPkg */, - null /* finishedReceiver */, new int[]{userId}, null /* instantUserIds */, - null /* broadcastAllowList */, + extras, flags, null /* targetPkg */, null /* finishedReceiver */, + new int[]{userId}, null /* instantUserIds */, null /* broadcastAllowList */, (callingUid, intentExtras) -> BroadcastHelper.filterExtrasChangedPackageList( mPm.snapshotComputer(), callingUid, intentExtras), null /* bOptions */)); diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 741464072fd87..b066cad29e9a2 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -1275,7 +1275,7 @@ public class UserManagerService extends IUserManager.Stub { intent.putExtra(Intent.EXTRA_USER_HANDLE, profileHandle.getIdentifier()); getDevicePolicyManagerInternal().broadcastIntentToManifestReceivers( intent, parentHandle, /* requiresPermission= */ true); - intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); + intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND); mContext.sendBroadcastAsUser(intent, parentHandle); }