From 1da65db12fba724942fcdff8bf803a7620191c06 Mon Sep 17 00:00:00 2001 From: Tetiana Meronyk Date: Thu, 3 Oct 2024 11:20:52 +0000 Subject: [PATCH] Update search index in UserSettings based on allowed user types If USER_TYPE_FULL_RESTRICTED is disallowed, addUserPreference is renamed to only mention user. But search results still state default name "Add user or profile". This change updates this entry in the search index. Bug: 365899560 Test: atest UserSettingsTest#testGetRawDataToIndex_returnAllIndexablePreferences && atest UserSettingsTest#testGetRawDataToIndex_addRestrictedProfileAllowed_addUserTitleIsCorrect && atest UserSettingsTest#testGetRawDataToIndex_addRestrictedProfileDisallowed_addUserTitleIsCorrect Flag: EXEMPT bugfix_only Change-Id: I3c26180225491e4916141a3fca9d2e7ab36e8cfc --- .../android/settings/users/UserSettings.java | 18 +++++++ .../settings/users/UserSettingsTest.java | 54 ++++++++++++++++++- 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index a0137df728f..31882408fd7 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -1834,6 +1834,24 @@ public class UserSettings extends SettingsPreferenceFragment MultiUserSwitchBarController.class.getName(); rawData.add(allowMultipleUsersResult); + + SearchIndexableRaw addUserData = new SearchIndexableRaw(context); + addUserData.key = KEY_ADD_USER; + + // Dynamically set the title of addUser preference + final UserCapabilities userCaps = UserCapabilities.create(context); + if (!userCaps.mCanAddRestrictedProfile) { + addUserData.title = context.getString( + com.android.settingslib.R.string.user_add_user); + } else { + addUserData.title = context.getString( + R.string.user_add_user_or_profile_menu); + } + addUserData.screenTitle = context.getString(R.string.user_settings_title); + addUserData.iconResId = R.drawable.ic_add_40dp; + + rawData.add(addUserData); + return rawData; } diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java index 85db0bd88b9..754c429df06 100644 --- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java +++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java @@ -37,6 +37,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.robolectric.Shadows.shadowOf; +import android.app.admin.DevicePolicyManager; import android.app.settings.SettingsEnums; import android.content.ComponentName; import android.content.Context; @@ -112,6 +113,7 @@ public class UserSettingsTest { private static final String KEY_USER_GUEST = "user_guest"; private static final String KEY_ALLOW_MULTIPLE_USERS = "allow_multiple_users"; private static final String KEY_USER_SETTINGS_SCREEN = "user_settings_screen"; + private static final String KEY_ADD_USER = "user_add"; private static final int ACTIVE_USER_ID = 0; private static final int INACTIVE_ADMIN_USER_ID = 1; private static final int INACTIVE_SECONDARY_USER_ID = 14; @@ -130,6 +132,8 @@ public class UserSettingsTest { @Mock private PreferenceManager mMockPreferenceManager; @Mock + private DevicePolicyManager mDevicePolicyManager; + @Mock private UserPreference mMePreference; @Mock private RestrictedPreference mAddUserPreference; @@ -222,7 +226,7 @@ public class UserSettingsTest { @Test public void testGetRawDataToIndex_returnAllIndexablePreferences() { - String[] expectedKeys = {KEY_ALLOW_MULTIPLE_USERS, KEY_USER_SETTINGS_SCREEN}; + String[] expectedKeys = {KEY_ALLOW_MULTIPLE_USERS, KEY_USER_SETTINGS_SCREEN, KEY_ADD_USER}; List keysResultList = new ArrayList<>(); ShadowUserManager.getShadow().setSupportsMultipleUsers(true); List rawData = @@ -235,6 +239,54 @@ public class UserSettingsTest { assertThat(keysResultList).containsExactly(expectedKeys); } + @Test + public void testGetRawDataToIndex_addRestrictedProfileAllowed_addUserTitleIsCorrect() { + ShadowUserManager.getShadow().setSupportsMultipleUsers(true); + SettingsShadowResources.overrideResource( + com.android.settings.R.bool.config_offer_restricted_profiles, + Boolean.TRUE); + when(mUserManager.hasBaseUserRestriction(UserManager.DISALLOW_ADD_USER, mContext.getUser())) + .thenReturn(false); + ShadowUserManager.getShadow().setUserTypeEnabled(UserManager.USER_TYPE_FULL_RESTRICTED, + true); + when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)) + .thenReturn(mDevicePolicyManager); + when(mDevicePolicyManager.isDeviceManaged()).thenReturn(false); + + List rawData = + UserSettings.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, true); + + String title = null; + for (SearchIndexableRaw rawDataItem : rawData) { + if (rawDataItem.key.equals(KEY_ADD_USER)) { + title = rawDataItem.title; + } + } + + assertThat(title).isEqualTo(mContext.getString( + com.android.settings.R.string.user_add_user_or_profile_menu)); + } + + @Test + public void testGetRawDataToIndex_addRestrictedProfileDisallowed_addUserTitleIsCorrect() { + ShadowUserManager.getShadow().setSupportsMultipleUsers(true); + SettingsShadowResources.overrideResource( + com.android.settings.R.bool.config_offer_restricted_profiles, + Boolean.FALSE); + List rawData = + UserSettings.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, true); + + String title = null; + for (SearchIndexableRaw rawDataItem : rawData) { + if (rawDataItem.key.equals(KEY_ADD_USER)) { + title = rawDataItem.title; + } + } + + assertThat(title).isEqualTo(mContext.getString( + com.android.settingslib.R.string.user_add_user)); + } + @Test public void testAssignDefaultPhoto_hasDefaultUserIconSize() { doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);