Fix new account not shown for work profile.
When refreshing the Accounts settings UI, we uses the cached user info for checking user status. However, when the work profile is being updated, the UserInfo obejct for the user might be updated even the user id is the same. Using the cached data causes stale info to be returned for the user and results in the latest account data not being shown properly for the user. Update the cache to the latest user info retrieved from user manager. Change-Id: Ic0127842203f0288f2fdea6c6346cd11e42a8bf0 Fix: 38302246 Test: make RunSettingsRoboTests
This commit is contained in:
@@ -192,7 +192,6 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
||||
data.screenTitle = screenTitle;
|
||||
rawData.add(data);
|
||||
}
|
||||
{
|
||||
SearchIndexableRaw data = new SearchIndexableRaw(mContext);
|
||||
data.title = res.getString(R.string.managed_profile_settings_title);
|
||||
data.screenTitle = screenTitle;
|
||||
@@ -201,7 +200,6 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
@@ -300,6 +298,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
||||
final ProfileData data = mProfiles.get(userInfo.id);
|
||||
if (data != null) {
|
||||
data.pendingRemoval = false;
|
||||
data.userInfo = userInfo;
|
||||
if (userInfo.isEnabled()) {
|
||||
// recreate the authentication helper to refresh the list of enabled accounts
|
||||
data.authenticatorHelper =
|
||||
|
@@ -563,6 +563,45 @@ public class AccountPreferenceControllerTest {
|
||||
verify(preferenceGroup, times(1)).removePreference(argThat(titleMatches("Acct12")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onResume_userReEnabled_shouldAddOneAccountPreference() {
|
||||
final List<UserInfo> infos = new ArrayList<>();
|
||||
infos.add(new UserInfo(1, "user 1", UserInfo.FLAG_DISABLED));
|
||||
when(mUserManager.isManagedProfile()).thenReturn(false);
|
||||
when(mUserManager.isRestrictedProfile()).thenReturn(false);
|
||||
when(mUserManager.getProfiles(anyInt())).thenReturn(infos);
|
||||
|
||||
Account[] accounts = {new Account("Acct1", "com.acct1")};
|
||||
when(mAccountManager.getAccountsAsUser(1)).thenReturn(accounts);
|
||||
when(mAccountManager.getAccountsByTypeAsUser(eq("com.acct1"), any(UserHandle.class)))
|
||||
.thenReturn(accounts);
|
||||
|
||||
AuthenticatorDescription[] authDescs = {
|
||||
new AuthenticatorDescription("com.acct1", "com.android.settings",
|
||||
R.string.account_settings_title, 0 /* iconId */, 0 /* smallIconId */,
|
||||
0 /* prefId */, false /* customTokens */)
|
||||
};
|
||||
when(mAccountManager.getAuthenticatorTypesAsUser(anyInt())).thenReturn(authDescs);
|
||||
|
||||
AccessiblePreferenceCategory preferenceGroup = mock(AccessiblePreferenceCategory.class);
|
||||
when(preferenceGroup.getPreferenceManager()).thenReturn(mock(PreferenceManager.class));
|
||||
when(mAccountHelper.createAccessiblePreferenceCategory(any(Context.class)))
|
||||
.thenReturn(preferenceGroup);
|
||||
|
||||
// First time resume will build the UI with no account
|
||||
mController.onResume();
|
||||
verify(preferenceGroup, never()).addPreference(argThat(titleMatches("Acct1")));
|
||||
|
||||
// Enable the user
|
||||
infos.remove(0 /* index */);
|
||||
infos.add(new UserInfo(1, "user 1", 0 /* flags */));
|
||||
|
||||
// Resume should show the account for the user
|
||||
mController.onResume();
|
||||
|
||||
verify(preferenceGroup).addPreference(argThat(titleMatches("Acct1")));
|
||||
}
|
||||
|
||||
private static ArgumentMatcher<Preference> titleMatches(String expected) {
|
||||
return preference -> TextUtils.equals(expected, preference.getTitle());
|
||||
}
|
||||
|
Reference in New Issue
Block a user