diff options
author | Fabrice Di Meglio <fdimeglio@google.com> | 2014-03-05 16:24:35 -0800 |
---|---|---|
committer | Fabrice Di Meglio <fdimeglio@google.com> | 2014-03-05 16:24:35 -0800 |
commit | 3ec129b1b50d8de3232009a1a032694c6fdb048d (patch) | |
tree | 341365cf362cff9bfab94c4975add2b46794e2ce /src/com/android/settings/dashboard | |
parent | 6f0739a3d9a9eca1591ae6bada1dd4d1d92c0def (diff) | |
download | packages_apps_Settings-3ec129b1b50d8de3232009a1a032694c6fdb048d.zip packages_apps_Settings-3ec129b1b50d8de3232009a1a032694c6fdb048d.tar.gz packages_apps_Settings-3ec129b1b50d8de3232009a1a032694c6fdb048d.tar.bz2 |
Fix bug #13322036 stability-sys: Java crash in com.android.settings:
android.database.sqlite.SQLiteException: malformed MATCH expression: [ avs- /y@ggmd"*] (code 1)
- the real issue was linked to the double quote
- add an InputFilter to the query EditText so that we allow only
Letters / Digits / Spaces (and this should works for all Locales)
Change-Id: I6016cc25d154b386870379dfa4c79a40c5505530
Diffstat (limited to 'src/com/android/settings/dashboard')
-rw-r--r-- | src/com/android/settings/dashboard/DashboardSummary.java | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java index ce3b0c0..40eccbc 100644 --- a/src/com/android/settings/dashboard/DashboardSummary.java +++ b/src/com/android/settings/dashboard/DashboardSummary.java @@ -22,6 +22,9 @@ import android.database.Cursor; 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; @@ -68,6 +71,32 @@ public class DashboardSummary extends Fragment { } } + /** + * 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); @@ -140,6 +169,9 @@ public class DashboardSummary extends Fragment { } }); + 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() { |