OSDN Git Service

Index database before getting Uri Descendants
authorMatthew Fritze <mfritze@google.com>
Tue, 24 Apr 2018 22:30:20 +0000 (15:30 -0700)
committerMatthew Fritze <mfritze@google.com>
Wed, 25 Apr 2018 22:53:16 +0000 (15:53 -0700)
onGetSliceDescendants would return empty results if
the call was made before the database was indexed.
This CL checks the index before building the list.

Change-Id: I2e0f88893138a048dbd529d465d68fa4b1a3dc12
Fixes: 78196823
Test: robotests

src/com/android/settings/slices/SlicesDatabaseAccessor.java
tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java
tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java
tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java
tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
tests/robotests/src/com/android/settings/testutils/FakeIndexProvider.java [moved from tests/robotests/src/com/android/settings/search/FakeIndexProvider.java with 92% similarity]

index b095733..b14a716 100644 (file)
@@ -89,6 +89,7 @@ public class SlicesDatabaseAccessor {
      * @return a list of keys in the Slices database matching on {@param isPlatformSlice}.
      */
     public List<String> getSliceKeys(boolean isPlatformSlice) {
+        verifyIndexing();
         final String whereClause;
 
         if (isPlatformSlice) {
index dcf68aa..eff95fe 100644 (file)
@@ -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;
 
index 0b6e4b5..c7bf043 100644 (file)
@@ -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;
index 2c87ac4..87ada36 100644 (file)
@@ -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;
index 820f45c..1788d93 100644 (file)
@@ -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<String> keys = accessor.getSliceKeys(true);
+
+        assertThat(keys).isNotEmpty();
+    }
+
     private void insertSpecialCase(String key) {
         insertSpecialCase(key, true);
     }
index 8945af9..7010621 100644 (file)
@@ -61,11 +61,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.
      */
  *
  */
 
-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;