diff --git a/res/values/strings.xml b/res/values/strings.xml index fe05e6f7683..40decc53a6a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8337,9 +8337,6 @@ Avg %1$s of %2$s memory used - - Current user: %1$s - Signed in as %1$s diff --git a/src/com/android/settings/accounts/AccountDashboardFragment.java b/src/com/android/settings/accounts/AccountDashboardFragment.java index fe967b852d0..65a5ff09e6f 100644 --- a/src/com/android/settings/accounts/AccountDashboardFragment.java +++ b/src/com/android/settings/accounts/AccountDashboardFragment.java @@ -19,16 +19,16 @@ import static android.provider.Settings.EXTRA_AUTHORITIES; import android.app.Activity; import android.content.Context; -import android.content.pm.UserInfo; import android.os.UserHandle; -import android.os.UserManager; import android.provider.SearchIndexableResource; +import android.text.BidiFormatter; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settingslib.accounts.AuthenticatorHelper; import com.android.settingslib.core.AbstractPreferenceController; import java.util.ArrayList; @@ -84,10 +84,27 @@ public class AccountDashboardFragment extends DashboardFragment { @Override public void setListening(boolean listening) { if (listening) { - UserInfo info = mContext.getSystemService(UserManager.class).getUserInfo( - UserHandle.myUserId()); - mSummaryLoader.setSummary(this, - mContext.getString(R.string.users_and_accounts_summary, info.name)); + final AuthenticatorHelper authHelper = new AuthenticatorHelper(mContext, + UserHandle.of(UserHandle.myUserId()), null /* OnAccountsUpdateListener */); + final String[] types = authHelper.getEnabledAccountTypes(); + + final BidiFormatter bidiFormatter = BidiFormatter.getInstance(); + + CharSequence summary = null; + + // Show up to 3 account types + final int size = Math.min(3, types.length); + + for (int i = 0; i < size; i++) { + final CharSequence label = authHelper.getLabelForType(mContext, types[i]); + if (summary == null) { + summary = bidiFormatter.unicodeWrap(label); + } else { + summary = mContext.getString(R.string.join_many_items_middle, summary, + bidiFormatter.unicodeWrap(label)); + } + } + mSummaryLoader.setSummary(this, summary); } } } diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java index dff82aa184e..aeffd20d005 100644 --- a/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java @@ -15,42 +15,40 @@ */ package com.android.settings.accounts; -import android.app.Activity; -import android.content.pm.UserInfo; -import android.os.UserManager; -import android.provider.SearchIndexableResource; +import static com.android.settings.accounts.AccountDashboardFragmentTest + .ShadowAuthenticationHelper.LABELS; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import android.app.Activity; +import android.content.Context; +import android.os.UserHandle; +import android.provider.SearchIndexableResource; +import android.text.TextUtils; -import com.android.settings.R; import com.android.settings.TestConfig; import com.android.settings.dashboard.SummaryLoader; +import com.android.settingslib.accounts.AuthenticatorHelper; import com.android.settingslib.drawer.CategoryKey; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; import org.robolectric.shadows.ShadowApplication; import java.util.List; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @RunWith(RobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class AccountDashboardFragmentTest { - private static final String METADATA_CATEGORY = "com.android.settings.category"; - private static final String METADATA_ACCOUNT_TYPE = "com.android.settings.ia.account"; - - @Mock - private UserManager mUserManager; private AccountDashboardFragment mFragment; @Before @@ -65,21 +63,18 @@ public class AccountDashboardFragmentTest { } @Test - public void updateSummary_shouldDisplaySignedInUser() { - final Activity activity = mock(Activity.class); + @Config(shadows = { + ShadowAuthenticationHelper.class + }) + public void updateSummary_shouldDisplayUpTo3AccountTypes() { final SummaryLoader loader = mock(SummaryLoader.class); - final UserInfo userInfo = new UserInfo(); - userInfo.name = "test_name"; - - when(activity.getSystemService(UserManager.class)).thenReturn(mUserManager); - when(mUserManager.getUserInfo(anyInt())).thenReturn(userInfo); + final Activity activity = Robolectric.buildActivity(Activity.class).setup().get(); final SummaryLoader.SummaryProvider provider = mFragment.SUMMARY_PROVIDER_FACTORY .createSummaryProvider(activity, loader); provider.setListening(true); - verify(activity).getString(R.string.users_and_accounts_summary, - userInfo.name); + verify(loader).setSummary(provider, LABELS[0] + ", " + LABELS[1] + ", " + LABELS[2]); } @Test @@ -92,4 +87,36 @@ public class AccountDashboardFragmentTest { assertThat(indexRes).isNotNull(); assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId()); } + + @Implements(AuthenticatorHelper.class) + public static class ShadowAuthenticationHelper { + + static final String[] TYPES = new String[] {"type1", "type2", "type3", "type4"}; + static final String[] LABELS = new String[] {"LABEL1", "LABEL2", + "LABEL3", "LABEL4"}; + + public void __constructor__(Context context, UserHandle userHandle, + AuthenticatorHelper.OnAccountsUpdateListener listener) { + + } + + @Implementation + public String[] getEnabledAccountTypes() { + return TYPES; + } + + @Implementation + public CharSequence getLabelForType(Context context, final String accountType) { + if (TextUtils.equals(accountType, TYPES[0])) { + return LABELS[0]; + } else if (TextUtils.equals(accountType, TYPES[1])) { + return LABELS[1]; + } else if (TextUtils.equals(accountType, TYPES[2])) { + return LABELS[2]; + } else if (TextUtils.equals(accountType, TYPES[3])) { + return LABELS[3]; + } + return "no_label"; + } + } }