summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Anna Bauza <annabauza@google.com> 2024-12-17 09:34:21 +0000
committer Anna Bauza <annabauza@google.com> 2025-01-07 20:54:37 +0000
commit55319db9308080f151d5377aa5d54e65e88a98bb (patch)
tree0a43b9760bedb3e5a399f81493d8ee8f6b2fe504
parent8bd6ab3a84e4db6cdb8429759be8c57a11ea9a80 (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.java11
-rw-r--r--data/etc/preinstalled-packages-platform.xml5
-rw-r--r--services/core/java/com/android/server/pm/UserManagerService.java9
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