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
diff --git a/src/com/android/settings/search/Index.java b/src/com/android/settings/search/Index.java
index 81e212d..887bba0 100644
--- a/src/com/android/settings/search/Index.java
+++ b/src/com/android/settings/search/Index.java
@@ -152,14 +152,14 @@
      */
     private class UpdateData {
         public List<SearchIndexableData> dataToUpdate;
-        public List<String> dataToDelete;
+        public List<SearchIndexableData> dataToDelete;
         public Map<String, List<String>> nonIndexableKeys;
 
         public boolean forceUpdate = false;
 
         public UpdateData() {
             dataToUpdate = new ArrayList<SearchIndexableData>();
-            dataToDelete = new ArrayList<String>();
+            dataToDelete = new ArrayList<SearchIndexableData>();
             nonIndexableKeys = new HashMap<String, List<String>>();
         }
 
@@ -304,12 +304,9 @@
         }
     }
 
-    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 @@
             boolean result = false;
 
             final List<SearchIndexableData> dataToUpdate = params[0].dataToUpdate;
-            final List<String> dataToDelete = params[0].dataToDelete;
+            final List<SearchIndexableData> dataToDelete = params[0].dataToDelete;
             final Map<String, List<String>> nonIndexableKeys = params[0].nonIndexableKeys;
 
             final boolean forceUpdate = params[0].forceUpdate;
@@ -1072,15 +1069,27 @@
         }
 
         private boolean processDataToDelete(SQLiteDatabase database, String localeStr,
-                                            List<String> dataToDelete) {
+                List<SearchIndexableData> 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 @@
             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);
         }