Fix issue for new account not being shown in work profile.
When refreshing the UI, we tried to only create profile data for new profile, and skip the initialization for existing profiles. However, the authentication helper will not get the updated account list, since the account update listener is being paused. Re-create the authentication helper to get the latest list of enabled accounts. Change-Id: Ie29699456e5b32747e8158d51382afaa2c0c5908 Fix: 38302246 Test: make RunSettingsRoboTests
This commit is contained in:
@@ -299,6 +299,11 @@ public class AccountPreferenceController extends PreferenceController
|
|||||||
final ProfileData data = mProfiles.get(userInfo.id);
|
final ProfileData data = mProfiles.get(userInfo.id);
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
data.pendingRemoval = false;
|
data.pendingRemoval = false;
|
||||||
|
if (userInfo.isEnabled()) {
|
||||||
|
// recreate the authentication helper to refresh the list of enabled accounts
|
||||||
|
data.authenticatorHelper =
|
||||||
|
new AuthenticatorHelper(mContext, userInfo.getUserHandle(), this);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Context context = mContext;
|
final Context context = mContext;
|
||||||
|
@@ -446,6 +446,42 @@ public class AccountPreferenceControllerTest {
|
|||||||
verify(preferenceGroup, times(1)).addPreference(argThat(new PreferenceMatcher("Acct13")));
|
verify(preferenceGroup, times(1)).addPreference(argThat(new PreferenceMatcher("Acct13")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Config(shadows = {ShadowAccountManager.class, ShadowContentResolver.class})
|
||||||
|
public void onResume_oneNewAccountType_shouldAddOneAccountPreference() {
|
||||||
|
final List<UserInfo> infos = new ArrayList<>();
|
||||||
|
infos.add(new UserInfo(1, "user 1", 0));
|
||||||
|
infos.add(new UserInfo(2, "user 2", UserInfo.FLAG_MANAGED_PROFILE));
|
||||||
|
when(mUserManager.isManagedProfile()).thenReturn(false);
|
||||||
|
when(mUserManager.isLinkedUser()).thenReturn(false);
|
||||||
|
when(mUserManager.getProfiles(anyInt())).thenReturn(infos);
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
// Add new account
|
||||||
|
Account[] accounts = {new Account("Acct1", "com.acct1")};
|
||||||
|
when(mAccountManager.getAccountsAsUser(2)).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, 0, 0, false)
|
||||||
|
};
|
||||||
|
when(mAccountManager.getAuthenticatorTypesAsUser(anyInt())).thenReturn(authDescs);
|
||||||
|
|
||||||
|
// Resume should show the newly added account
|
||||||
|
mController.onResume();
|
||||||
|
|
||||||
|
verify(preferenceGroup).addPreference(argThat(new PreferenceMatcher("Acct1")));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Config(shadows = {ShadowAccountManager.class, ShadowContentResolver.class})
|
@Config(shadows = {ShadowAccountManager.class, ShadowContentResolver.class})
|
||||||
public void onResume_oneAccountRemoved_shouldRemoveOneAccountPreference() {
|
public void onResume_oneAccountRemoved_shouldRemoveOneAccountPreference() {
|
||||||
|
Reference in New Issue
Block a user