diff --git a/src/com/android/settings/search/DatabaseIndexingManager.java b/src/com/android/settings/search/DatabaseIndexingManager.java index 4da0c7caea1..3d1d6d696a8 100644 --- a/src/com/android/settings/search/DatabaseIndexingManager.java +++ b/src/com/android/settings/search/DatabaseIndexingManager.java @@ -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> nonIndexableKeysFromResource) { // Should be the same locale as the one we are processing if (!raw.locale.toString().equalsIgnoreCase(localeStr)) { return; } + Set 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); diff --git a/tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java b/tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java index 729541c5f13..8d7605bbebd 100644 --- a/tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java +++ b/tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java @@ -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> niks = new HashMap<>(); + Set 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);