From 724b702a8627c933cef536e40d2db5918bf45ccb Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Mon, 14 Apr 2014 11:24:16 -0700 Subject: [PATCH] Search - add support for deleting all preferences for a class name - modify SQL delete query for passing any column in the DELETE statement - modify deleteIndexableData(...) for passing a SearchIndexableData Change-Id: I4c58e38422e67b1d464b0e51201520ce8717a14d --- src/com/android/settings/search/Index.java | 37 ++++++++++++++-------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/com/android/settings/search/Index.java b/src/com/android/settings/search/Index.java index 81e212ddac3..887bba015dc 100644 --- a/src/com/android/settings/search/Index.java +++ b/src/com/android/settings/search/Index.java @@ -152,14 +152,14 @@ public class Index { */ private class UpdateData { public List dataToUpdate; - public List dataToDelete; + public List dataToDelete; public Map> nonIndexableKeys; public boolean forceUpdate = false; public UpdateData() { dataToUpdate = new ArrayList(); - dataToDelete = new ArrayList(); + dataToDelete = new ArrayList(); nonIndexableKeys = new HashMap>(); } @@ -304,12 +304,9 @@ public class Index { } } - public void deleteIndexableData(String[] array) { + public void deleteIndexableData(SearchIndexableData data) { synchronized (mDataToProcess) { - final int count = array.length; - for (int n = 0; n < count; n++) { - mDataToProcess.dataToDelete.add(array[n]); - } + mDataToProcess.dataToDelete.add(data); } } @@ -1022,7 +1019,7 @@ public class Index { boolean result = false; final List dataToUpdate = params[0].dataToUpdate; - final List dataToDelete = params[0].dataToDelete; + final List dataToDelete = params[0].dataToDelete; final Map> nonIndexableKeys = params[0].nonIndexableKeys; final boolean forceUpdate = params[0].forceUpdate; @@ -1072,15 +1069,27 @@ public class Index { } private boolean processDataToDelete(SQLiteDatabase database, String localeStr, - List dataToDelete) { + List dataToDelete) { boolean result = false; final long current = System.currentTimeMillis(); final int count = dataToDelete.size(); for (int n = 0; n < count; n++) { - final String data = dataToDelete.get(n); - delete(database, data); + final SearchIndexableData data = dataToDelete.get(n); + if (data == null) { + continue; + } + if (!TextUtils.isEmpty(data.className)) { + delete(database, IndexColumns.CLASS_NAME, data.className); + } else { + if (data instanceof SearchIndexableRaw) { + final SearchIndexableRaw raw = (SearchIndexableRaw) data; + if (!TextUtils.isEmpty(raw.title)) { + delete(database, IndexColumns.DATA_TITLE, raw.title); + } + } + } } final long now = System.currentTimeMillis(); @@ -1089,9 +1098,9 @@ public class Index { return result; } - private int delete(SQLiteDatabase database, String title) { - final String whereClause = IndexColumns.DATA_TITLE + "=?"; - final String[] whereArgs = new String[] { title }; + private int delete(SQLiteDatabase database, String columName, String value) { + final String whereClause = columName + "=?"; + final String[] whereArgs = new String[] { value }; return database.delete(Tables.TABLE_PREFS_INDEX, whereClause, whereArgs); }