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)
.setIntentAction(raw.intentAction)
.setIntentTargetPackage(raw.intentTargetPackage)
.setIntentTargetClass(raw.intentTargetClass)
- .setEnabled(raw.enabled)
+ .setEnabled(enabled)
.setKey(raw.key)
.setUserId(raw.userId);
@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);