Merge "extract text conversions from composing text and send them for search" into sc-qpr1-dev am: b458541470

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/15532476

Change-Id: Ic591cf62d70eb41c1614795d798c37a88e9ca594
diff --git a/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java b/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java
index 79718fb..0137e2a 100644
--- a/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java
+++ b/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java
@@ -18,8 +18,10 @@
 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 @@
     protected SearchCallback<AdapterItem> mCallback;
     protected ExtendedEditText mInput;
     protected String mQuery;
+    private String[] mTextConversions;
 
     protected SearchAlgorithm<AdapterItem> mSearchAlgorithm;
 
@@ -78,7 +81,20 @@
 
     @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 @@
             mCallback.clearSearchResult();
         } else {
             mSearchAlgorithm.cancel(false);
-            mSearchAlgorithm.doSearch(mQuery, mCallback);
+            mSearchAlgorithm.doSearch(mQuery, mTextConversions, mCallback);
         }
     }
 
@@ -154,4 +170,4 @@
     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 a1720c7..96a15f4 100644
--- a/src/com/android/launcher3/search/SearchAlgorithm.java
+++ b/src/com/android/launcher3/search/SearchAlgorithm.java
@@ -28,6 +28,13 @@
     void doSearch(String query, SearchCallback<T> callback);
 
     /**
+     * Performs search with {@code query} and the {@code suggestedQueries}/
+     */
+    default void doSearch(String query, String[] suggestedQueries, SearchCallback<T> callback) {
+        doSearch(query, callback);
+    }
+
+    /**
      * Cancels any active request.
      */
     void cancel(boolean interruptActiveRequests);