[AA+] Add QueryLength to DeviceSearchResultContainer.

Bug: 178562918
Change-Id: I4891433bcd8848edd92f103448f5c00c5f9619e4
diff --git a/quickstep/protos_overrides/launcher_atom_extension.proto b/quickstep/protos_overrides/launcher_atom_extension.proto
index 2766acf..6253b41 100644
--- a/quickstep/protos_overrides/launcher_atom_extension.proto
+++ b/quickstep/protos_overrides/launcher_atom_extension.proto
@@ -31,4 +31,5 @@
 
 // Represents on-device search result container.
 message DeviceSearchResultContainer{
+  optional int32 query_length = 1;
 }
diff --git a/quickstep/src/com/android/launcher3/search/SearchResultIcon.java b/quickstep/src/com/android/launcher3/search/SearchResultIcon.java
index f7d5f45..3dd4146 100644
--- a/quickstep/src/com/android/launcher3/search/SearchResultIcon.java
+++ b/quickstep/src/com/android/launcher3/search/SearchResultIcon.java
@@ -81,7 +81,7 @@
     private static final int BITMAP_CROP_MASK_COLOR = 0xff424242;
 
     private final Launcher mLauncher;
-
+    private final SearchSessionTracker mSearchSessionTracker;
     private String mTargetId;
     private Consumer<ItemInfoWithIcon> mOnItemInfoChanged;
 
@@ -97,6 +97,7 @@
     public SearchResultIcon(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
         mLauncher = Launcher.getLauncher(getContext());
+        mSearchSessionTracker = SearchSessionTracker.getInstance(getContext());
     }
 
     private boolean mLongPressSupported;
@@ -113,8 +114,8 @@
     }
 
     /**
-     * Applies {@link SearchTarget} to view. registers a consumer after a corresponding
-     * {@link ItemInfoWithIcon} is created
+     * Applies {@link SearchTarget} to view. registers a consumer after a corresponding {@link
+     * ItemInfoWithIcon} is created
      */
     public void apply(SearchTarget searchTarget, List<SearchTarget> inlineItems,
             Consumer<ItemInfoWithIcon> cb) {
@@ -317,13 +318,15 @@
         }
     }
 
-    private static ContainerInfo buildDeviceSearchResultContainer() {
+    private ContainerInfo buildDeviceSearchResultContainer() {
         return ContainerInfo.newBuilder().setExtendedContainers(
                 ExtendedContainers
                         .newBuilder()
                         .setDeviceSearchResultContainer(
-                                DeviceSearchResultContainer
-                                        .newBuilder()))
+                                mSearchSessionTracker.getQueryLength()
+                                        .map(queryLength -> DeviceSearchResultContainer.newBuilder()
+                                                .setQueryLength(queryLength))
+                                        .orElse(DeviceSearchResultContainer.newBuilder())))
                 .build();
     }
 }
diff --git a/quickstep/src/com/android/launcher3/search/SearchSessionTracker.java b/quickstep/src/com/android/launcher3/search/SearchSessionTracker.java
index 3079965..97a72bb 100644
--- a/quickstep/src/com/android/launcher3/search/SearchSessionTracker.java
+++ b/quickstep/src/com/android/launcher3/search/SearchSessionTracker.java
@@ -15,9 +15,10 @@
  */
 package com.android.launcher3.search;
 
+import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
+
 import android.app.search.Query;
 import android.app.search.SearchSession;
-import android.app.search.SearchTarget;
 import android.app.search.SearchTargetEvent;
 import android.content.Context;
 import android.util.Log;
@@ -27,7 +28,7 @@
 
 import com.android.launcher3.util.MainThreadInitializedObject;
 
-import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
+import java.util.Optional;
 
 /**
  * A singleton class to track and report search events back to SearchSession
@@ -63,6 +64,10 @@
         mQuery = query;
     }
 
+    public Optional<Integer> getQueryLength() {
+        return Optional.ofNullable(mQuery).map(Query::getInput).map(String::length);
+    }
+
     /**
      * Send the user event handling back to the {@link SearchSession} object.
      */