diff --git a/src/com/android/settings/slices/SlicesDatabaseAccessor.java b/src/com/android/settings/slices/SlicesDatabaseAccessor.java index b09573383d8..b14a716acab 100644 --- a/src/com/android/settings/slices/SlicesDatabaseAccessor.java +++ b/src/com/android/settings/slices/SlicesDatabaseAccessor.java @@ -89,6 +89,7 @@ public class SlicesDatabaseAccessor { * @return a list of keys in the Slices database matching on {@param isPlatformSlice}. */ public List getSliceKeys(boolean isPlatformSlice) { + verifyIndexing(); final String whereClause; if (isPlatformSlice) { diff --git a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java index dcf68aa8491..eff95fe327f 100644 --- a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java +++ b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java @@ -27,6 +27,7 @@ import android.database.Cursor; import android.text.TextUtils; import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.FakeIndexProvider; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.wifi.WifiSettings; diff --git a/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java b/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java index 0b6e4b5bb32..c7bf0437e9a 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java @@ -31,7 +31,6 @@ import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.Intent; -import android.database.ContentObserver; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.provider.Settings; @@ -40,14 +39,13 @@ import android.util.Pair; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.core.BasePreferenceController; -import com.android.settings.search.FakeIndexProvider; +import com.android.settings.testutils.FakeIndexProvider; import com.android.settings.search.SearchFeatureProvider; import com.android.settings.search.SearchFeatureProviderImpl; import com.android.settings.testutils.DatabaseTestUtils; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeSliderController; import com.android.settings.testutils.FakeToggleController; -import com.android.settings.testutils.FakeUnavailablePreferenceController; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.After; diff --git a/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java b/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java index 2c87ac4f33c..87ada3697e3 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java @@ -33,7 +33,7 @@ import android.text.TextUtils; import com.android.settings.R; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.accessibility.AccessibilitySlicePreferenceController; -import com.android.settings.search.FakeIndexProvider; +import com.android.settings.testutils.FakeIndexProvider; import com.android.settings.search.SearchFeatureProvider; import com.android.settings.search.SearchFeatureProviderImpl; import com.android.settings.testutils.FakeFeatureFactory; diff --git a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java index 820f45c836f..1788d930757 100644 --- a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java +++ b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java @@ -25,9 +25,13 @@ import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; +import android.view.accessibility.AccessibilityManager; -import com.android.settings.search.FakeIndexProvider; +import com.android.settings.testutils.FakeIndexProvider; +import com.android.settings.search.SearchFeatureProvider; +import com.android.settings.search.SearchFeatureProviderImpl; import com.android.settings.testutils.DatabaseTestUtils; +import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.After; @@ -35,8 +39,15 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowAccessibilityManager; +import java.util.ArrayList; import java.util.List; +import java.util.Locale; + +import org.robolectric.shadow.api.Shadow; + @RunWith(SettingsRobolectricTestRunner.class) public class SlicesDatabaseAccessorTest { @@ -157,6 +168,31 @@ public class SlicesDatabaseAccessorTest { assertThat(keys).containsExactly(key); } + @Test + @Config(qualifiers = "mcc999") + public void getSliceKeys_indexesDatabase() { + // Force new indexing + Locale.setDefault(new Locale("ca")); + // Register the fake a11y Service + ShadowAccessibilityManager shadowAccessibilityManager = Shadow.extract( + RuntimeEnvironment.application.getSystemService(AccessibilityManager.class)); + shadowAccessibilityManager.setInstalledAccessibilityServiceList(new ArrayList<>()); + final SearchFeatureProvider provider = new SearchFeatureProviderImpl(); + final SlicesFeatureProvider sliceProvider = spy(new SlicesFeatureProviderImpl()); + final FakeFeatureFactory factory = FakeFeatureFactory.setupForTest(); + factory.searchFeatureProvider = provider; + factory.slicesFeatureProvider = sliceProvider; + // Fake the indexable list. + provider.getSearchIndexableResources().getProviderValues().clear(); + provider.getSearchIndexableResources().getProviderValues().add( + FakeIndexProvider.class); + + final SlicesDatabaseAccessor accessor = new SlicesDatabaseAccessor(mContext); + final List keys = accessor.getSliceKeys(true); + + assertThat(keys).isNotEmpty(); + } + private void insertSpecialCase(String key) { insertSpecialCase(key, true); } diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java index 6e607fe7521..56df664637d 100644 --- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java +++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java @@ -63,11 +63,12 @@ public class FakeFeatureFactory extends FeatureFactory { public final UserFeatureProvider userFeatureProvider; public final AssistGestureFeatureProvider assistGestureFeatureProvider; public final BluetoothFeatureProvider bluetoothFeatureProvider; - public final SlicesFeatureProvider slicesFeatureProvider; - public SearchFeatureProvider searchFeatureProvider; public final AccountFeatureProvider mAccountFeatureProvider; public final DeviceIndexFeatureProvider deviceIndexFeatureProvider; + public SlicesFeatureProvider slicesFeatureProvider; + public SearchFeatureProvider searchFeatureProvider; + /** * Call this in {@code @Before} method of the test class to use fake factory. */ diff --git a/tests/robotests/src/com/android/settings/search/FakeIndexProvider.java b/tests/robotests/src/com/android/settings/testutils/FakeIndexProvider.java similarity index 92% rename from tests/robotests/src/com/android/settings/search/FakeIndexProvider.java rename to tests/robotests/src/com/android/settings/testutils/FakeIndexProvider.java index e5f1631b01c..c9177e1c5dd 100644 --- a/tests/robotests/src/com/android/settings/search/FakeIndexProvider.java +++ b/tests/robotests/src/com/android/settings/testutils/FakeIndexProvider.java @@ -15,12 +15,14 @@ * */ -package com.android.settings.search; +package com.android.settings.testutils; import android.content.Context; import android.provider.SearchIndexableResource; import com.android.settings.R; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.search.Indexable; import java.util.ArrayList; import java.util.List;