diff options
| author | 2024-12-17 09:34:21 +0000 | |
|---|---|---|
| committer | 2025-01-07 20:54:37 +0000 | |
| commit | 55319db9308080f151d5377aa5d54e65e88a98bb (patch) | |
| tree | 0a43b9760bedb3e5a399f81493d8ee8f6b2fe504 | |
| parent | 8bd6ab3a84e4db6cdb8429759be8c57a11ea9a80 (diff) | |
Add hidden broadcast to inform system apps about changes in user info.
Due to new feature of freezing apps including system widgets, there is
no updates on system ui when user change profile picture or name.
Because some profile pictures are synced in in background we need to
make sure we update system ui when it happens.
This broadcast is protected by special permission and can be only used
by preinstalled system apps. The broadcast will not slow down the system
as it is fired on rare occasions.
Bug: 383071252
Flag: EXEMPT bugfix
Test: manual
Change-Id: I97c63d27040c6a313164e657d9bbb62f66cb4a3f
| -rw-r--r-- | core/java/android/content/Intent.java | 11 | ||||
| -rw-r--r-- | data/etc/preinstalled-packages-platform.xml | 5 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/UserManagerService.java | 9 |
3 files changed, 23 insertions, 2 deletions
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 3d75423edfa9..b4f9f7488b19 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -4215,6 +4215,17 @@ public class Intent implements Parcelable, Cloneable { public static final String ACTION_USER_INFO_CHANGED = "android.intent.action.USER_INFO_CHANGED"; + + /** + * Broadcast sent to the system when a user's information changes. Carries an extra + * {@link #EXTRA_USER_HANDLE} to indicate which user's information changed. + * This is only sent to permission protected manifest receivers. It is sent to all users. + * @hide + */ + @BroadcastBehavior(includeBackground = true) + public static final String ACTION_USER_INFO_CHANGED_BACKGROUND = + "android.intent.action.USER_INFO_CHANGED_BACKGROUND"; + /** * Broadcast sent to the primary user when an associated managed profile is added (the profile * was created and is ready to be used). Carries an extra {@link #EXTRA_USER} that specifies diff --git a/data/etc/preinstalled-packages-platform.xml b/data/etc/preinstalled-packages-platform.xml index 782327713fdc..3403bbfa2384 100644 --- a/data/etc/preinstalled-packages-platform.xml +++ b/data/etc/preinstalled-packages-platform.xml @@ -134,4 +134,9 @@ to pre-existing users, but cannot uninstall pre-existing system packages from pr <install-in-user-type package="com.android.avatarpicker"> <install-in user-type="FULL" /> </install-in-user-type> + + <!-- Users Widget (Users widget)--> + <install-in-user-type package="com.android.multiuser"> + <install-in user-type="FULL" /> + </install-in-user-type> </config> diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 8249d65868cd..4bd4b50d4166 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -3312,13 +3312,18 @@ public class UserManagerService extends IUserManager.Stub { } } - - private void sendUserInfoChangedBroadcast(@UserIdInt int userId) { Intent changedIntent = new Intent(Intent.ACTION_USER_INFO_CHANGED); changedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId); changedIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); mContext.sendBroadcastAsUser(changedIntent, UserHandle.ALL); + + // This intent allow system UI apps to refresh the content even if process was freezed. + Intent bgIntent = new Intent(Intent.ACTION_USER_INFO_CHANGED_BACKGROUND); + bgIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId); + bgIntent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND); + mContext.sendBroadcastAsUser(bgIntent, UserHandle.ALL, + Manifest.permission.MANAGE_USERS); } @Override |