Merge "Improve query filtering for Search"
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 077da78..0e034ff 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -22,9 +22,6 @@
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.text.Editable;
-import android.text.InputFilter;
-import android.text.SpannableStringBuilder;
-import android.text.Spanned;
 import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.view.LayoutInflater;
@@ -69,32 +66,6 @@
         }
     }
 
-    /**
-     * A basic InputFilter for filtering query input (mainly because we are issuing SQL queries
-     * that need to be valid ones. So just accept Letters, Digits and Spaces.
-     */
-    private class QueryInputFilter implements InputFilter {
-
-        public QueryInputFilter() {
-        }
-
-        @Override
-        public CharSequence filter(CharSequence source, int start, int end, Spanned dest,
-                                   int dstart, int dend) {
-            SpannableStringBuilder sb = null;
-            for (int i = start; i < end; i++) {
-                char c = source.charAt(i);
-                if (!Character.isLetterOrDigit(c) && !Character.isSpaceChar(c)) {
-                    if (sb == null) {
-                        sb = new SpannableStringBuilder(source, start, end);
-                    }
-                    sb.delete(i, i + 1);
-                }
-            }
-            return sb;
-        }
-    }
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -147,9 +118,6 @@
             }
         });
 
-        final InputFilter queryFilter = new QueryInputFilter();
-        mEditText.setFilters(new InputFilter[] { queryFilter });
-
         mListView = (ListView) view.findViewById(R.id.list_results);
         mListView.setAdapter(mAdapter);
         mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@@ -191,12 +159,25 @@
         }
     }
 
+    private String getFilteredQueryString() {
+        final CharSequence query = mEditText.getText().toString();
+        final StringBuilder filtered = new StringBuilder();
+        for (int n = 0; n < query.length(); n++) {
+            char c = query.charAt(n);
+            if (!Character.isLetterOrDigit(c) && !Character.isSpaceChar(c)) {
+                continue;
+            }
+            filtered.append(c);
+        }
+        return filtered.toString();
+    }
+
     private void updateSearchResults() {
         if (mUpdateSearchResultsTask != null) {
             mUpdateSearchResultsTask.cancel(false);
             mUpdateSearchResultsTask = null;
         }
-        final String query = mEditText.getText().toString();
+        final String query = getFilteredQueryString();
         if (TextUtils.isEmpty(query)) {
             setCursor(null);
         } else {