OSDN Git Service

Check non-indexable keys for raw data
authorMatthew Fritze <mfritze@google.com>
Thu, 6 Jul 2017 01:15:43 +0000 (18:15 -0700)
committerMatthew Fritze <mfritze@google.com>
Thu, 6 Jul 2017 15:15:42 +0000 (08:15 -0700)
Change-Id: I182f6757cae0ccdd07c2c38ea0f02bd4998f79be
Fixes: 63360455
Test: make RunSettingsRoboTests

src/com/android/settings/search/DatabaseIndexingManager.java
tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java

index 1fbe055..98b06aa 100644 (file)
@@ -617,17 +617,24 @@ public class DatabaseIndexingManager {
         if (data instanceof SearchIndexableResource) {
             indexOneResource(database, localeStr, (SearchIndexableResource) data, nonIndexableKeys);
         } else if (data instanceof SearchIndexableRaw) {
-            indexOneRaw(database, localeStr, (SearchIndexableRaw) data);
+            indexOneRaw(database, localeStr, (SearchIndexableRaw) data, nonIndexableKeys);
         }
     }
 
     private void indexOneRaw(SQLiteDatabase database, String localeStr,
-            SearchIndexableRaw raw) {
+            SearchIndexableRaw raw, Map<String, Set<String>> nonIndexableKeysFromResource) {
         // Should be the same locale as the one we are processing
         if (!raw.locale.toString().equalsIgnoreCase(localeStr)) {
             return;
         }
 
+        Set<String> packageKeys = nonIndexableKeysFromResource.get(raw.intentTargetPackage);
+        boolean enabled = raw.enabled;
+
+        if (packageKeys != null && packageKeys.contains(raw.key)) {
+            enabled = false;
+        }
+
         DatabaseRow.Builder builder = new DatabaseRow.Builder();
         builder.setLocale(localeStr)
                 .setEntries(raw.entries)
@@ -638,7 +645,7 @@ public class DatabaseIndexingManager {
                 .setIntentAction(raw.intentAction)
                 .setIntentTargetPackage(raw.intentTargetPackage)
                 .setIntentTargetClass(raw.intentTargetClass)
-                .setEnabled(raw.enabled)
+                .setEnabled(enabled)
                 .setKey(raw.key)
                 .setUserId(raw.userId);
 
index 729541c..8d7605b 100644 (file)
@@ -177,15 +177,30 @@ public class DatabaseIndexingManagerTest {
     @Test
     public void testInsertRawColumn_rowInserted() {
         SearchIndexableRaw raw = getFakeRaw();
-        mManager.indexOneSearchIndexableData(mDb, localeStr, raw, null /* Non-indexable keys */);
+        mManager.indexOneSearchIndexableData(mDb, localeStr, raw,
+                new HashMap<>()/* Non-indexable keys */);
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
         assertThat(cursor.getCount()).isEqualTo(1);
     }
 
     @Test
+    public void testInsertRawColumn_nonIndexableKey_resultIsDisabled() {
+        SearchIndexableRaw raw = getFakeRaw();
+        Map<String, Set<String>> niks = new HashMap<>();
+        Set<String> keys = new HashSet<>();
+        keys.add(raw.key);
+        niks.put(raw.intentTargetPackage, keys);
+
+        mManager.indexOneSearchIndexableData(mDb, localeStr, raw, niks);
+        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 0", null);
+        assertThat(cursor.getCount()).isEqualTo(1);
+    }
+
+    @Test
     public void testInsertRawColumn_rowMatches() {
         SearchIndexableRaw raw = getFakeRaw();
-        mManager.indexOneSearchIndexableData(mDb, localeStr, raw, null /* Non-indexable keys */);
+        mManager.indexOneSearchIndexableData(mDb, localeStr, raw,
+                new HashMap<>()/* Non-indexable keys */);
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
         cursor.moveToPosition(0);