diff --git a/src/com/android/settings/accounts/AccountDashboardFragment.java b/src/com/android/settings/accounts/AccountDashboardFragment.java index 53b5ea3b87e..7b50b46ae53 100644 --- a/src/com/android/settings/accounts/AccountDashboardFragment.java +++ b/src/com/android/settings/accounts/AccountDashboardFragment.java @@ -17,8 +17,13 @@ package com.android.settings.accounts; import static android.provider.Settings.EXTRA_AUTHORITIES; +import android.accounts.Account; +import android.accounts.AccountManager; import android.app.settings.SettingsEnums; import android.content.Context; +import android.content.pm.UserInfo; +import android.os.UserHandle; +import android.os.UserManager; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; @@ -97,7 +102,26 @@ public class AccountDashboardFragment extends DashboardFragment { @Override public List getDynamicRawDataToIndex(Context context, boolean enabled) { - return null; + final List indexRaws = new ArrayList<>(); + final UserManager userManager = (UserManager) context.getSystemService( + Context.USER_SERVICE); + final List profiles = userManager.getProfiles(UserHandle.myUserId()); + for (final UserInfo userInfo : profiles) { + if (userInfo.isManagedProfile()) { + return indexRaws; + } + } + + final AccountManager accountManager = AccountManager.get(context); + final Account[] accounts = accountManager.getAccounts(); + for (Account account : accounts) { + final SearchIndexableRaw raw = new SearchIndexableRaw(context); + raw.key = AccountTypePreference.buildKey(account); + raw.title = account.name; + indexRaws.add(raw); + } + + return indexRaws; } }; } diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java index 006087516cf..fe57090827d 100644 --- a/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java @@ -17,26 +17,55 @@ package com.android.settings.accounts; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.content.Context; +import android.content.pm.UserInfo; +import android.os.UserManager; import android.provider.SearchIndexableResource; import com.android.settingslib.drawer.CategoryKey; +import com.android.settingslib.search.SearchIndexableRaw; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import java.util.ArrayList; import java.util.List; @RunWith(RobolectricTestRunner.class) public class AccountDashboardFragmentTest { + private static final int PROFILE_ID = 10; + private static final String PROFILE_NAME = "User"; + private static final String ACCOUNT_TYPE = "com.android.settings"; + private static final String ACCOUNT_NAME = "test account"; + + @Mock + private UserManager mUserManager; + @Mock + private AccountManager mAccountManager; + + private Context mContext; private AccountDashboardFragment mFragment; @Before public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); mFragment = new AccountDashboardFragment(); + + doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE); } @Test @@ -45,7 +74,7 @@ public class AccountDashboardFragmentTest { } @Test - public void testSearchIndexProvider_shouldIndexResource() { + public void searchIndexProvider_shouldIndexResource() { final List indexRes = AccountDashboardFragment.SEARCH_INDEX_DATA_PROVIDER .getXmlResourcesToIndex(RuntimeEnvironment.application, true /* enabled */); @@ -53,4 +82,36 @@ public class AccountDashboardFragmentTest { assertThat(indexRes).isNotNull(); assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId()); } + + @Test + public void searchIndexProvider_hasManagedProfile_shouldNotIndex() { + final List infos = new ArrayList<>(); + infos.add(new UserInfo(PROFILE_ID, PROFILE_NAME, UserInfo.FLAG_MANAGED_PROFILE)); + doReturn(infos).when(mUserManager).getProfiles(anyInt()); + + final List indexRaws = + AccountDashboardFragment.SEARCH_INDEX_DATA_PROVIDER + .getDynamicRawDataToIndex(mContext, true /* enabled */); + + assertThat(indexRaws).isEmpty(); + } + + @Test + public void searchIndexProvider_hasAccounts_shouldIndex() { + final List infos = new ArrayList<>(); + infos.add(new UserInfo(PROFILE_ID, PROFILE_NAME, UserInfo.FLAG_PRIMARY)); + doReturn(infos).when(mUserManager).getProfiles(anyInt()); + + final Account[] accounts = { + new Account(ACCOUNT_NAME, ACCOUNT_TYPE) + }; + when(AccountManager.get(mContext)).thenReturn(mAccountManager); + doReturn(accounts).when(mAccountManager).getAccounts(); + + final List indexRaws = + AccountDashboardFragment.SEARCH_INDEX_DATA_PROVIDER + .getDynamicRawDataToIndex(mContext, true /* enabled */); + + assertThat(indexRaws).isNotEmpty(); + } }