Merge "Add config_defaultRoleHolders for specifying default role holders."
diff --git a/api/system-current.txt b/api/system-current.txt
index 7ea7afb..ed53fcf 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -197,6 +197,7 @@
}
public static final class R.array {
+ field public static final int config_defaultRoleHolders = 17235974; // 0x1070006
field public static final int config_keySystemUuidMapping = 17235973; // 0x1070005
}
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index aa1364f..d777b02 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -1892,6 +1892,8 @@
cell broadcasting sms, and MMS. -->
<bool name="config_sms_capable">true</bool>
+ <!-- TODO: STOPSHIP(b/110557011): Remove this from framework and overlays as we use
+ config_defaultRoleHolders now. -->
<!-- Default SMS Application. This will be the default SMS application when
the phone first boots. The user can then change the default app to one
of their choosing.
@@ -1910,6 +1912,12 @@
the behavior will be as though no app was named as an explicit default. -->
<string name="default_browser" translatable="false"></string>
+ <!-- Default role holders. This will be an array of roles and package names of their default
+ holders, with each item in the format of "ROLE_NAME: PACKAGE_NAME_1, PACKAGE_NAME_2". -->
+ <string-array name="config_defaultRoleHolders" translatable="false">
+ <item>android.app.role.SMS: com.android.messaging</item>
+ </string-array>
+
<!-- Enable/disable default bluetooth profiles:
HSP_AG, ObexObjectPush, Audio, NAP -->
<bool name="config_bluetooth_default_profiles">true</bool>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index b3b30e9..777886a 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2985,6 +2985,11 @@
<public name="system_notification_accent_color" />
</public-group>
+ <public-group type="array" first-id="0x01070006">
+ <!-- @hide @SystemApi -->
+ <public name="config_defaultRoleHolders" />
+ </public-group>
+
<!-- ===============================================================
DO NOT ADD UN-GROUPED ITEMS HERE
diff --git a/services/core/java/com/android/server/policy/role/LegacyRoleResolutionPolicy.java b/services/core/java/com/android/server/policy/role/LegacyRoleResolutionPolicy.java
index 45c975b..055c941 100644
--- a/services/core/java/com/android/server/policy/role/LegacyRoleResolutionPolicy.java
+++ b/services/core/java/com/android/server/policy/role/LegacyRoleResolutionPolicy.java
@@ -62,6 +62,8 @@
mContext.getContentResolver(),
Settings.Secure.SMS_DEFAULT_APPLICATION, userId);
+ // TODO: STOPSHIP: Remove the following code once we remove default_sms_application
+ // and use the new config_defaultRoleHolders.
if (result == null) {
Collection<SmsApplication.SmsApplicationData> applications =
SmsApplication.getApplicationCollectionAsUser(mContext, userId);
diff --git a/services/core/java/com/android/server/role/RoleManagerService.java b/services/core/java/com/android/server/role/RoleManagerService.java
index c0ec367..5516b23 100644
--- a/services/core/java/com/android/server/role/RoleManagerService.java
+++ b/services/core/java/com/android/server/role/RoleManagerService.java
@@ -229,9 +229,12 @@
// Any role for which we have a record are already migrated
RoleUserState userState = getOrCreateUserState(userId);
if (!userState.isRoleAvailable(role)) {
- userState.addRoleName(role);
List<String> roleHolders = mLegacyRoleResolver.getRoleHolders(role, userId);
+ if (roleHolders.isEmpty()) {
+ return;
+ }
Slog.i(LOG_TAG, "Migrating " + role + ", legacy holders: " + roleHolders);
+ userState.addRoleName(role);
int size = roleHolders.size();
for (int i = 0; i < size; i++) {
userState.addRoleHolder(role, roleHolders.get(i));