diff --git a/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java b/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java index 79718fb6df..0137e2a2c0 100644 --- a/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java +++ b/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java @@ -18,8 +18,10 @@ package com.android.launcher3.allapps.search; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_FOCUSED_ITEM_SELECTED_WITH_IME; import android.text.Editable; +import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.TextWatcher; +import android.text.style.SuggestionSpan; import android.view.KeyEvent; import android.view.View; import android.view.View.OnFocusChangeListener; @@ -47,6 +49,7 @@ public class AllAppsSearchBarController protected SearchCallback mCallback; protected ExtendedEditText mInput; protected String mQuery; + private String[] mTextConversions; protected SearchAlgorithm mSearchAlgorithm; @@ -78,7 +81,20 @@ public class AllAppsSearchBarController @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - // Do nothing + mTextConversions = extractTextConversions(s); + } + + private static String[] extractTextConversions(CharSequence text) { + if (text instanceof SpannableStringBuilder) { + SpannableStringBuilder spanned = (SpannableStringBuilder) text; + SuggestionSpan[] suggestionSpans = + spanned.getSpans(0, text.length(), SuggestionSpan.class); + if (suggestionSpans != null && suggestionSpans.length > 0) { + spanned.removeSpan(suggestionSpans[0]); + return suggestionSpans[0].getSuggestions(); + } + } + return null; } @Override @@ -89,7 +105,7 @@ public class AllAppsSearchBarController mCallback.clearSearchResult(); } else { mSearchAlgorithm.cancel(false); - mSearchAlgorithm.doSearch(mQuery, mCallback); + mSearchAlgorithm.doSearch(mQuery, mTextConversions, mCallback); } } @@ -154,4 +170,4 @@ public class AllAppsSearchBarController public boolean isSearchFieldFocused() { return mInput.isFocused(); } -} \ No newline at end of file +} diff --git a/src/com/android/launcher3/search/SearchAlgorithm.java b/src/com/android/launcher3/search/SearchAlgorithm.java index a1720c733b..96a15f4912 100644 --- a/src/com/android/launcher3/search/SearchAlgorithm.java +++ b/src/com/android/launcher3/search/SearchAlgorithm.java @@ -27,6 +27,13 @@ public interface SearchAlgorithm { */ void doSearch(String query, SearchCallback callback); + /** + * Performs search with {@code query} and the {@code suggestedQueries}/ + */ + default void doSearch(String query, String[] suggestedQueries, SearchCallback callback) { + doSearch(query, callback); + } + /** * Cancels any active request. */