diff --git a/res/xml/app_and_notification.xml b/res/xml/app_and_notification.xml index 10d81dfde99..b172e2aea66 100644 --- a/res/xml/app_and_notification.xml +++ b/res/xml/app_and_notification.xml @@ -17,7 +17,8 @@ + xmlns:settings="http://schemas.android.com/apk/res/com.android.settings" + android:title="@string/app_and_notification_dashboard_title"> + xmlns:settings="http://schemas.android.com/apk/res/com.android.settings" + android:title="@string/network_dashboard_title"> - + + android:order="102"/> + android:key="dashboard_tile_placeholder" + android:order="200"/> diff --git a/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java b/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java index 480883780c4..4113152248a 100644 --- a/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java +++ b/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java @@ -16,19 +16,20 @@ package com.android.settings.accounts; import android.content.Context; - import android.os.Bundle; -import android.support.v7.preference.Preference; -import android.util.ArraySet; +import android.provider.SearchIndexableResource; + import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.core.PreferenceController; import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.overlay.FeatureFactory; +import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.drawer.CategoryKey; - import com.android.settingslib.drawer.Tile; + import java.util.ArrayList; -import java.util.HashMap; +import java.util.Arrays; import java.util.List; import static android.provider.Settings.EXTRA_AUTHORITIES; @@ -37,7 +38,6 @@ public class UserAndAccountDashboardFragment extends DashboardFragment { private static final String TAG = "UserAndAccountDashboard"; private static final String METADATA_IA_ACCOUNT = "com.android.settings.ia.account"; - private HashMap> mAccountTiles = new HashMap<>(); @Override public int getMetricsCategory() { @@ -72,7 +72,7 @@ public class UserAndAccountDashboardFragment extends DashboardFragment { controllers.add(new AutoSyncWorkDataPreferenceController(context, this)); String[] authorities = getIntent().getStringArrayExtra(EXTRA_AUTHORITIES); final AccountPreferenceController accountPrefController = - new AccountPreferenceController(context, this, authorities); + new AccountPreferenceController(context, this, authorities); getLifecycle().addObserver(accountPrefController); controllers.add(accountPrefController); return controllers; @@ -87,4 +87,18 @@ public class UserAndAccountDashboardFragment extends DashboardFragment { return true; } + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex( + Context context, boolean enabled) { + if (!FeatureFactory.getFactory(context).getDashboardFeatureProvider(context) + .isEnabled()) { + return null; + } + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.user_and_accounts_settings; + return Arrays.asList(sir); + } + }; } \ No newline at end of file diff --git a/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java b/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java index 8630541f86e..45b472a4194 100644 --- a/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java +++ b/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java @@ -17,12 +17,16 @@ package com.android.settings.applications; import android.content.Context; +import android.provider.SearchIndexableResource; import com.android.settings.R; import com.android.settings.core.PreferenceController; import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.overlay.FeatureFactory; +import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.drawer.CategoryKey; +import java.util.Arrays; import java.util.List; public class AppAndNotificationDashboardFragment extends DashboardFragment { @@ -53,4 +57,19 @@ public class AppAndNotificationDashboardFragment extends DashboardFragment { protected List getPreferenceControllers(Context context) { return null; } + + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex( + Context context, boolean enabled) { + if (!FeatureFactory.getFactory(context).getDashboardFeatureProvider(context) + .isEnabled()) { + return null; + } + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.app_and_notification; + return Arrays.asList(sir); + } + }; } diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java index cb75f0edf2d..a58a879f0b0 100644 --- a/src/com/android/settings/network/NetworkDashboardFragment.java +++ b/src/com/android/settings/network/NetworkDashboardFragment.java @@ -18,15 +18,19 @@ package com.android.settings.network; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; +import android.provider.SearchIndexableResource; import android.util.Log; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.core.PreferenceController; import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.overlay.FeatureFactory; +import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.drawer.CategoryKey; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import static com.android.settings.network.MobilePlanPreferenceController @@ -107,4 +111,19 @@ public class NetworkDashboardFragment extends DashboardFragment implements } return 0; } + + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex( + Context context, boolean enabled) { + if (!FeatureFactory.getFactory(context).getDashboardFeatureProvider(context) + .isEnabled()) { + return null; + } + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.network_and_internet; + return Arrays.asList(sir); + } + }; } diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java index 72aee1620d4..7fa302c4405 100644 --- a/src/com/android/settings/search/SearchIndexableResources.java +++ b/src/com/android/settings/search/SearchIndexableResources.java @@ -34,7 +34,9 @@ import com.android.settings.WallpaperTypeSettings; import com.android.settings.WirelessSettings; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.accounts.AccountSettings; +import com.android.settings.accounts.UserAndAccountDashboardFragment; import com.android.settings.applications.AdvancedAppSettings; +import com.android.settings.applications.AppAndNotificationDashboardFragment; import com.android.settings.applications.SpecialAccessSettings; import com.android.settings.bluetooth.BluetoothSettings; import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment; @@ -55,6 +57,7 @@ import com.android.settings.gestures.SwipeToNotificationSettings; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; import com.android.settings.location.LocationSettings; import com.android.settings.location.ScanningSettings; +import com.android.settings.network.NetworkDashboardFragment; import com.android.settings.notification.ConfigureNotificationSettings; import com.android.settings.notification.OtherSoundSettings; import com.android.settings.notification.SoundSettings; @@ -89,6 +92,7 @@ public final class SearchIndexableResources { static { addIndex(WifiSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_wireless); + addIndex(NetworkDashboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_wireless); addIndex(AdvancedWifiSettings.class, R.xml.wifi_advanced_settings, R.drawable.ic_settings_wireless); addIndex(SavedAccessPointsWifiSettings.class, @@ -103,6 +107,8 @@ public final class SearchIndexableResources { addIndex(WallpaperTypeSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display); addIndex(ConfigureNotificationSettings.class, R.xml.configure_notification_settings, R.drawable.ic_settings_notifications); + addIndex(AppAndNotificationDashboardFragment.class, NO_DATA_RES_ID, + R.drawable.ic_settings_applications); addIndex(SoundSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_sound); addIndex(OtherSoundSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_sound); addIndex(ZenModeSettings.class, @@ -130,6 +136,8 @@ public final class SearchIndexableResources { addIndex(SecuritySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_security); addIndex(ScreenPinningSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_security); addIndex(AccountSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_accounts); + addIndex(UserAndAccountDashboardFragment.class, NO_DATA_RES_ID, + R.drawable.ic_settings_accounts); addIndex(InputMethodAndLanguageSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_language); addIndex(PrivacySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_backup); diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider index 2b3ca09f5ff..05cd93b9dd5 100644 --- a/tests/robotests/assets/grandfather_not_implementing_index_provider +++ b/tests/robotests/assets/grandfather_not_implementing_index_provider @@ -1,8 +1,5 @@ com.android.settings.notification.ConfigureNotificationSettings com.android.settings.language.LanguageAndRegionSettings -com.android.settings.accounts.UserAndAccountDashboardFragment -com.android.settings.network.NetworkDashboardFragment -com.android.settings.applications.AppAndNotificationDashboardFragment com.android.settings.notification.ZenModePrioritySettings com.android.settings.inputmethod.InputAndGestureSettings com.android.settings.accounts.AccountDetailDashboardFragment \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/accounts/UserAndAccountDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/UserAndAccountDashboardFragmentTest.java index 2df7e2b35e7..90761a01a77 100644 --- a/tests/robotests/src/com/android/settings/accounts/UserAndAccountDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accounts/UserAndAccountDashboardFragmentTest.java @@ -15,19 +15,29 @@ */ package com.android.settings.accounts; +import android.content.Context; import android.os.Bundle; +import android.provider.SearchIndexableResource; import com.android.settings.TestConfig; +import com.android.settings.testutils.FakeFeatureFactory; import com.android.settingslib.drawer.CategoryKey; import com.android.settingslib.drawer.Tile; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowApplication; + +import java.util.List; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.when; @RunWith(RobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @@ -36,10 +46,17 @@ public class UserAndAccountDashboardFragmentTest { private static final String METADATA_CATEGORY = "com.android.settings.category"; private static final String METADATA_ACCOUNT_TYPE = "com.android.settings.ia.account"; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private Context mContext; private UserAndAccountDashboardFragment mFragment; @Before public void setUp() { + MockitoAnnotations.initMocks(this); + FakeFeatureFactory.setupForTest(mContext); + final FakeFeatureFactory factory = + (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); + when(factory.dashboardFeatureProvider.isEnabled()).thenReturn(true); mFragment = new UserAndAccountDashboardFragment(); } @@ -68,4 +85,15 @@ public class UserAndAccountDashboardFragmentTest { assertThat(mFragment.displayTile(tile)).isTrue(); } + + @Test + public void testSearchIndexProvider_shouldIndexResource() { + final List indexRes = + UserAndAccountDashboardFragment.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex( + ShadowApplication.getInstance().getApplicationContext(), + true /* enabled */); + + assertThat(indexRes).isNotNull(); + assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId()); + } } diff --git a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java index 6dd9c75fd97..b30e3ff7233 100644 --- a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java @@ -16,8 +16,11 @@ package com.android.settings.network; import android.content.Context; +import android.provider.SearchIndexableResource; + import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import com.android.settings.accounts.UserAndAccountDashboardFragment; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settingslib.drawer.CategoryKey; import org.junit.Before; @@ -27,8 +30,12 @@ import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowApplication; + +import java.util.List; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @@ -43,6 +50,9 @@ public class NetworkDashboardFragmentTest { public void setUp() { MockitoAnnotations.initMocks(this); FakeFeatureFactory.setupForTest(mContext); + final FakeFeatureFactory factory = + (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); + when(factory.dashboardFeatureProvider.isEnabled()).thenReturn(true); mFragment = new NetworkDashboardFragment(); } @@ -50,4 +60,15 @@ public class NetworkDashboardFragmentTest { public void testCategory_isNetwork() { assertThat(mFragment.getCategoryKey()).isEqualTo(CategoryKey.CATEGORY_NETWORK); } + + @Test + public void testSearchIndexProvider_shouldIndexResource() { + final List indexRes = + NetworkDashboardFragment.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex( + ShadowApplication.getInstance().getApplicationContext(), + true /* enabled */); + + assertThat(indexRes).isNotNull(); + assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId()); + } } diff --git a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java index 06f43221aeb..67189d09072 100644 --- a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java @@ -19,16 +19,16 @@ package com.android.settings.search; import android.app.Activity; import android.view.Menu; + import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; -import com.android.settings.overlay.FeatureFactory; import com.android.settings.search2.SearchFeatureProviderImpl; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; - import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.annotation.Config; @@ -50,19 +50,18 @@ public class SearchFeatureProviderImplTest { public void setUp() { MockitoAnnotations.initMocks(this); mActivity = Robolectric.buildActivity(Activity.class).create().visible().get(); - mProvider = (SearchFeatureProviderImpl) FeatureFactory.getFactory(mActivity) - .getSearchFeatureProvider(mActivity); + mProvider = new SearchFeatureProviderImpl(mActivity); } @Test public void testPassNull_NoError() { - mProvider.setUpSearchMenu(null,null); + mProvider.setUpSearchMenu(null, null); } @Test public void testSetUpMenu_HasItemAdded() { mProvider.setUpSearchMenu(menu, mActivity); - verify(menu).add(anyInt(),anyInt(), anyInt(), anyString()); + verify(menu).add(anyInt(), anyInt(), anyInt(), anyString()); } }