Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9024b4eb authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Display a list of account types as account setting summary"

parents 499efd06 fe80fa5e
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -8318,9 +8318,6 @@
    <!-- Summary of memory screen [CHAR LIMIT=NONE] -->
    <string name="memory_summary">Avg <xliff:g id="used_memory" example="1.7GB">%1$s</xliff:g> of <xliff:g id="total_memory" example="2GB">%2$s</xliff:g> memory used</string>
    <!-- Summary of Users & accounts setting screen [CHAR LIMIT=NONE] -->
    <string name="users_and_accounts_summary">Current user: <xliff:g id="user_name" example="Jason">%1$s</xliff:g></string>
    <!-- Summary of User settings [CHAR LIMIT=NONE] -->
    <string name="users_summary">Signed in as <xliff:g id="user_name" example="Jason">%1$s</xliff:g></string>
+23 −6
Original line number Diff line number Diff line
@@ -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);
            }
        }
    }
+51 −24
Original line number Diff line number Diff line
@@ -15,42 +15,40 @@
 */
package com.android.settings.accounts;

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.pm.UserInfo;
import android.os.UserManager;
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";
        }
    }
}