Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03f5624c authored by Fabrice Di Meglio's avatar Fabrice Di Meglio Committed by Android (Google) Code Review
Browse files

Merge "Improve query filtering for Search"

parents 1488c124 0b63458c
Loading
Loading
Loading
Loading
+14 −33
Original line number Diff line number Diff line
@@ -22,9 +22,6 @@ 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;
@@ -69,32 +66,6 @@ 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);
@@ -147,9 +118,6 @@ 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() {
@@ -191,12 +159,25 @@ public class DashboardSummary extends Fragment {
        }
    }

    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 {