Merge "Check non-indexable keys for raw data" into oc-dr1-dev am: 24ba2fbdb9

am: dc2005eb6a

Change-Id: Ibcefe758e9524ae810234212ac83d385bd03d09e
This commit is contained in:
Matthew Fritze
2017-07-06 17:39:25 +00:00
committed by android-build-merger
2 changed files with 27 additions and 5 deletions

View File

@@ -617,17 +617,24 @@ public class DatabaseIndexingManager {
if (data instanceof SearchIndexableResource) { if (data instanceof SearchIndexableResource) {
indexOneResource(database, localeStr, (SearchIndexableResource) data, nonIndexableKeys); indexOneResource(database, localeStr, (SearchIndexableResource) data, nonIndexableKeys);
} else if (data instanceof SearchIndexableRaw) { } else if (data instanceof SearchIndexableRaw) {
indexOneRaw(database, localeStr, (SearchIndexableRaw) data); indexOneRaw(database, localeStr, (SearchIndexableRaw) data, nonIndexableKeys);
} }
} }
private void indexOneRaw(SQLiteDatabase database, String localeStr, 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 // Should be the same locale as the one we are processing
if (!raw.locale.toString().equalsIgnoreCase(localeStr)) { if (!raw.locale.toString().equalsIgnoreCase(localeStr)) {
return; 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(); DatabaseRow.Builder builder = new DatabaseRow.Builder();
builder.setLocale(localeStr) builder.setLocale(localeStr)
.setEntries(raw.entries) .setEntries(raw.entries)
@@ -638,7 +645,7 @@ public class DatabaseIndexingManager {
.setIntentAction(raw.intentAction) .setIntentAction(raw.intentAction)
.setIntentTargetPackage(raw.intentTargetPackage) .setIntentTargetPackage(raw.intentTargetPackage)
.setIntentTargetClass(raw.intentTargetClass) .setIntentTargetClass(raw.intentTargetClass)
.setEnabled(raw.enabled) .setEnabled(enabled)
.setKey(raw.key) .setKey(raw.key)
.setUserId(raw.userId); .setUserId(raw.userId);

View File

@@ -177,15 +177,30 @@ public class DatabaseIndexingManagerTest {
@Test @Test
public void testInsertRawColumn_rowInserted() { public void testInsertRawColumn_rowInserted() {
SearchIndexableRaw raw = getFakeRaw(); 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 cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
assertThat(cursor.getCount()).isEqualTo(1); 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 @Test
public void testInsertRawColumn_rowMatches() { public void testInsertRawColumn_rowMatches() {
SearchIndexableRaw raw = getFakeRaw(); 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 cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
cursor.moveToPosition(0); cursor.moveToPosition(0);