Migrate from Plugin SearchTarget to API search Target [1/3]
Setup architecture for separation between aosp and quickstep search as setup for switch to android.app.SearchTarget
Bug: 177223401
Test: manual
Change-Id: Iefd069a34d5e5551bf731e9171958e93377774aa
diff --git a/res/layout/search_result_icon.xml b/quickstep/res/layout/search_result_icon.xml
similarity index 88%
rename from res/layout/search_result_icon.xml
rename to quickstep/res/layout/search_result_icon.xml
index 3c1dd49..e1b6dfd 100644
--- a/res/layout/search_result_icon.xml
+++ b/quickstep/res/layout/search_result_icon.xml
@@ -13,7 +13,7 @@
limitations under the License.
-->
-<com.android.launcher3.views.SearchResultIcon xmlns:launcher="http://schemas.android.com/apk/res-auto"
+<com.android.launcher3.search.SearchResultIcon xmlns:launcher="http://schemas.android.com/apk/res-auto"
style="@style/BaseIcon.AllApps"
launcher:iconDisplay="all_apps"
launcher:centerVertically="true" />
diff --git a/res/layout/search_result_icon_row.xml b/quickstep/res/layout/search_result_icon_row.xml
similarity index 93%
rename from res/layout/search_result_icon_row.xml
rename to quickstep/res/layout/search_result_icon_row.xml
index 81c23e4..1393b87 100644
--- a/res/layout/search_result_icon_row.xml
+++ b/quickstep/res/layout/search_result_icon_row.xml
@@ -12,14 +12,14 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<com.android.launcher3.views.SearchResultIconRow xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.launcher3.search.SearchResultIconRow xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/dynamic_grid_edge_margin">
- <com.android.launcher3.views.SearchResultIcon
+ <com.android.launcher3.search.SearchResultIcon
android:layout_width="wrap_content"
android:id="@+id/icon"
launcher:iconDisplay="hero_app"
@@ -73,4 +73,4 @@
launcher:iconSizeOverride="@dimen/deep_shortcut_icon_size"
launcher:layoutHorizontal="false" />
-</com.android.launcher3.views.SearchResultIconRow>
\ No newline at end of file
+</com.android.launcher3.search.SearchResultIconRow>
\ No newline at end of file
diff --git a/res/layout/search_result_people_item.xml b/quickstep/res/layout/search_result_people_item.xml
similarity index 93%
rename from res/layout/search_result_people_item.xml
rename to quickstep/res/layout/search_result_people_item.xml
index 7526f6f..964300d 100644
--- a/res/layout/search_result_people_item.xml
+++ b/quickstep/res/layout/search_result_people_item.xml
@@ -12,7 +12,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<com.android.launcher3.views.SearchResultPeopleView xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.launcher3.search.SearchResultPeopleView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:gravity="center_vertical"
android:layout_height="wrap_content"
@@ -60,4 +60,4 @@
android:layout_width="@dimen/deep_shortcut_icon_size"
android:layout_height="@dimen/deep_shortcut_icon_size" />
-</com.android.launcher3.views.SearchResultPeopleView>
\ No newline at end of file
+</com.android.launcher3.search.SearchResultPeopleView>
\ No newline at end of file
diff --git a/res/layout/search_result_play_item.xml b/quickstep/res/layout/search_result_play_item.xml
similarity index 94%
rename from res/layout/search_result_play_item.xml
rename to quickstep/res/layout/search_result_play_item.xml
index d70c56a..ecd67b1 100644
--- a/res/layout/search_result_play_item.xml
+++ b/quickstep/res/layout/search_result_play_item.xml
@@ -13,7 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<com.android.launcher3.views.SearchResultPlayItem xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.launcher3.search.SearchResultPlayItem xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="4dp"
@@ -76,4 +76,4 @@
</Button>
-</com.android.launcher3.views.SearchResultPlayItem>
+</com.android.launcher3.search.SearchResultPlayItem>
diff --git a/res/layout/search_result_settings_row.xml b/quickstep/res/layout/search_result_settings_row.xml
similarity index 93%
rename from res/layout/search_result_settings_row.xml
rename to quickstep/res/layout/search_result_settings_row.xml
index 22c08bf..33c9592 100644
--- a/res/layout/search_result_settings_row.xml
+++ b/quickstep/res/layout/search_result_settings_row.xml
@@ -12,7 +12,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<com.android.launcher3.views.SearchSettingsRowView xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.launcher3.search.SearchSettingsRowView xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/TextHeadline"
android:id="@+id/section_title"
android:background="?android:attr/selectableItemBackground"
@@ -57,4 +57,4 @@
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/search_hero_subtitle_size" />
</LinearLayout>
-</com.android.launcher3.views.SearchSettingsRowView>
\ No newline at end of file
+</com.android.launcher3.search.SearchSettingsRowView>
\ No newline at end of file
diff --git a/res/layout/search_result_slice.xml b/quickstep/res/layout/search_result_slice.xml
similarity index 89%
rename from res/layout/search_result_slice.xml
rename to quickstep/res/layout/search_result_slice.xml
index 24d75e9..f7dcfce 100644
--- a/res/layout/search_result_slice.xml
+++ b/quickstep/res/layout/search_result_slice.xml
@@ -12,7 +12,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<com.android.launcher3.views.SearchResultSettingsSlice xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.launcher3.search.SearchResultSettingsSlice xmlns:android="http://schemas.android.com/apk/res/android"
android:paddingHorizontal="@dimen/dynamic_grid_cell_padding_x"
android:layout_width="match_parent"
android:layout_height="wrap_content">
@@ -36,5 +36,5 @@
android:layout_marginStart="@dimen/dynamic_grid_cell_padding_x"
android:layout_width="0dp" />
-</com.android.launcher3.views.SearchResultSettingsSlice>
+</com.android.launcher3.search.SearchResultSettingsSlice>
diff --git a/res/layout/search_result_suggest.xml b/quickstep/res/layout/search_result_suggest.xml
similarity index 89%
rename from res/layout/search_result_suggest.xml
rename to quickstep/res/layout/search_result_suggest.xml
index 01e25d5..eb5313c 100644
--- a/res/layout/search_result_suggest.xml
+++ b/quickstep/res/layout/search_result_suggest.xml
@@ -12,7 +12,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<com.android.launcher3.views.SearchResultSuggestion xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.launcher3.search.SearchResultSuggestion xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res-auto"
style="@style/BaseIcon"
android:layout_width="match_parent"
@@ -31,4 +31,4 @@
launcher:layoutHorizontal="true"
android:drawablePadding="@dimen/dynamic_grid_icon_drawable_padding">
-</com.android.launcher3.views.SearchResultSuggestion>
\ No newline at end of file
+</com.android.launcher3.search.SearchResultSuggestion>
\ No newline at end of file
diff --git a/res/layout/search_result_thumbnail.xml b/quickstep/res/layout/search_result_thumbnail.xml
similarity index 93%
rename from res/layout/search_result_thumbnail.xml
rename to quickstep/res/layout/search_result_thumbnail.xml
index 0cc5a29..0f25336 100644
--- a/res/layout/search_result_thumbnail.xml
+++ b/quickstep/res/layout/search_result_thumbnail.xml
@@ -13,7 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<com.android.launcher3.views.ThumbnailSearchResultView
+<com.android.launcher3.search.ThumbnailSearchResultView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="125dp"
android:layout_height="125dp"/>
\ No newline at end of file
diff --git a/res/layout/search_result_widget_live.xml b/quickstep/res/layout/search_result_widget_live.xml
similarity index 66%
rename from res/layout/search_result_widget_live.xml
rename to quickstep/res/layout/search_result_widget_live.xml
index 0dd8a06..ffbad55 100644
--- a/res/layout/search_result_widget_live.xml
+++ b/quickstep/res/layout/search_result_widget_live.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<com.android.launcher3.views.SearchResultWidget android:layout_height="wrap_content"
+<com.android.launcher3.search.SearchResultWidget android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center"
android:layout_width="match_parent" />
\ No newline at end of file
diff --git a/res/layout/search_result_widget_preview.xml b/quickstep/res/layout/search_result_widget_preview.xml
similarity index 64%
rename from res/layout/search_result_widget_preview.xml
rename to quickstep/res/layout/search_result_widget_preview.xml
index 942b199..7af24a1 100644
--- a/res/layout/search_result_widget_preview.xml
+++ b/quickstep/res/layout/search_result_widget_preview.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
-<com.android.launcher3.views.SearchResultWidgetPreview xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.launcher3.search.SearchResultWidgetPreview xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:padding="@dimen/dynamic_grid_cell_padding_x"
android:layout_height="wrap_content">
<include layout="@layout/widget_cell" android:id="@+id/widget_cell"/>
<!-- <include layout="@layout/widget_cell_content" />-->
-</com.android.launcher3.views.SearchResultWidgetPreview>
\ No newline at end of file
+</com.android.launcher3.search.SearchResultWidgetPreview>
\ No newline at end of file
diff --git a/res/layout/search_section_title.xml b/quickstep/res/layout/search_section_title.xml
similarity index 89%
rename from res/layout/search_section_title.xml
rename to quickstep/res/layout/search_section_title.xml
index b7ba83e..5842e57 100644
--- a/res/layout/search_section_title.xml
+++ b/quickstep/res/layout/search_section_title.xml
@@ -13,7 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<com.android.launcher3.views.SearchSectionHeaderView xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.launcher3.search.SearchSectionHeaderView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/section_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/quickstep/src/com/android/launcher3/search/DeviceSearchAdapterProvider.java b/quickstep/src/com/android/launcher3/search/DeviceSearchAdapterProvider.java
new file mode 100644
index 0000000..da325c7
--- /dev/null
+++ b/quickstep/src/com/android/launcher3/search/DeviceSearchAdapterProvider.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3.search;
+
+import static com.android.launcher3.allapps.AllAppsGridAdapter.VIEW_TYPE_ICON;
+
+import android.util.SparseIntArray;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import com.android.launcher3.Launcher;
+import com.android.launcher3.R;
+import com.android.launcher3.allapps.AllAppsGridAdapter;
+import com.android.launcher3.allapps.search.SearchAdapterProvider;
+import com.android.systemui.plugins.shared.SearchTarget;
+
+/**
+ * Provides views for on-device search results
+ */
+public class DeviceSearchAdapterProvider extends SearchAdapterProvider {
+
+ public static final int VIEW_TYPE_SEARCH_CORPUS_TITLE = 1 << 5;
+ public static final int VIEW_TYPE_SEARCH_ROW_WITH_BUTTON = 1 << 7;
+ public static final int VIEW_TYPE_SEARCH_ROW = 1 << 8;
+ public static final int VIEW_TYPE_SEARCH_SLICE = 1 << 9;
+ public static final int VIEW_TYPE_SEARCH_ICON_ROW = 1 << 10;
+ public static final int VIEW_TYPE_SEARCH_PEOPLE = 1 << 11;
+ public static final int VIEW_TYPE_SEARCH_THUMBNAIL = 1 << 12;
+ public static final int VIEW_TYPE_SEARCH_SUGGEST = 1 << 13;
+ public static final int VIEW_TYPE_SEARCH_ICON = (1 << 14) | VIEW_TYPE_ICON;
+ public static final int VIEW_TYPE_SEARCH_WIDGET_LIVE = 1 << 15;
+ public static final int VIEW_TYPE_SEARCH_WIDGET_PREVIEW = 1 << 16;
+
+
+ private final SparseIntArray mViewTypeToLayoutMap = new SparseIntArray();
+
+ public DeviceSearchAdapterProvider(Launcher launcher) {
+ super(launcher);
+
+ mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_ICON, R.layout.search_result_icon);
+ mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_CORPUS_TITLE, R.layout.search_section_title);
+ mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_ROW_WITH_BUTTON,
+ R.layout.search_result_play_item);
+ mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_ROW, R.layout.search_result_settings_row);
+ mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_SLICE, R.layout.search_result_slice);
+ mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_ICON_ROW, R.layout.search_result_icon_row);
+ mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_PEOPLE, R.layout.search_result_people_item);
+ mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_THUMBNAIL, R.layout.search_result_thumbnail);
+ mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_SUGGEST, R.layout.search_result_suggest);
+ mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_WIDGET_LIVE, R.layout.search_result_widget_live);
+ mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_WIDGET_PREVIEW,
+ R.layout.search_result_widget_preview);
+ }
+
+ @Override
+ public void onBindView(AllAppsGridAdapter.ViewHolder holder, int position) {
+ SearchAdapterItem item = (SearchAdapterItem) Launcher.getLauncher(mLauncher)
+ .getAppsView().getApps().getAdapterItems().get(position);
+ SearchTargetHandler
+ payloadResultView =
+ (SearchTargetHandler) holder.itemView;
+ payloadResultView.applySearchTarget(item.getSearchTarget());
+ }
+
+ @Override
+ public boolean isSearchView(int viewType) {
+ return mViewTypeToLayoutMap.get(viewType, -1) != -1;
+ }
+
+ @Override
+ public AllAppsGridAdapter.ViewHolder onCreateViewHolder(LayoutInflater inflater,
+ ViewGroup parent, int viewType) {
+ return new AllAppsGridAdapter.ViewHolder(inflater.inflate(
+ mViewTypeToLayoutMap.get(viewType), parent, false));
+ }
+
+ @Override
+ public int getGridSpanSize(int viewType, int appsPerRow) {
+ if (viewType == VIEW_TYPE_SEARCH_THUMBNAIL
+ || viewType == VIEW_TYPE_SEARCH_WIDGET_PREVIEW) {
+ return appsPerRow;
+ }
+ return super.getGridSpanSize(viewType, appsPerRow);
+ }
+
+
+ @Override
+ public boolean onAdapterItemSelected(AllAppsGridAdapter.AdapterItem focusedItem) {
+ if (focusedItem instanceof SearchTargetHandler) {
+ SearchTarget searchTarget = ((SearchAdapterItem) focusedItem).getSearchTarget();
+ SearchEventTracker.INSTANCE.get(mLauncher).quickSelect(searchTarget);
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/quickstep/src/com/android/launcher3/search/SearchAdapterItem.java b/quickstep/src/com/android/launcher3/search/SearchAdapterItem.java
new file mode 100644
index 0000000..b79e073
--- /dev/null
+++ b/quickstep/src/com/android/launcher3/search/SearchAdapterItem.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3.search;
+
+import static com.android.launcher3.search.DeviceSearchAdapterProvider.VIEW_TYPE_SEARCH_ICON;
+import static com.android.launcher3.search.DeviceSearchAdapterProvider.VIEW_TYPE_SEARCH_ICON_ROW;
+import static com.android.launcher3.search.DeviceSearchAdapterProvider.VIEW_TYPE_SEARCH_PEOPLE;
+import static com.android.launcher3.search.DeviceSearchAdapterProvider.VIEW_TYPE_SEARCH_ROW;
+import static com.android.launcher3.search.DeviceSearchAdapterProvider.VIEW_TYPE_SEARCH_ROW_WITH_BUTTON;
+import static com.android.launcher3.search.DeviceSearchAdapterProvider.VIEW_TYPE_SEARCH_SLICE;
+import static com.android.launcher3.search.DeviceSearchAdapterProvider.VIEW_TYPE_SEARCH_SUGGEST;
+import static com.android.launcher3.search.DeviceSearchAdapterProvider.VIEW_TYPE_SEARCH_THUMBNAIL;
+import static com.android.launcher3.search.DeviceSearchAdapterProvider.VIEW_TYPE_SEARCH_WIDGET_LIVE;
+import static com.android.launcher3.search.DeviceSearchAdapterProvider.VIEW_TYPE_SEARCH_WIDGET_PREVIEW;
+
+import com.android.launcher3.allapps.AllAppsGridAdapter;
+import com.android.systemui.plugins.shared.SearchTarget;
+
+/**
+ * Extension of AdapterItem that contains an extra payload specific to item
+ */
+public class SearchAdapterItem extends AllAppsGridAdapter.AdapterItem {
+ private SearchTarget mSearchTarget;
+
+
+ private static final int AVAILABLE_FOR_ACCESSIBILITY = VIEW_TYPE_SEARCH_ROW_WITH_BUTTON
+ | VIEW_TYPE_SEARCH_SLICE | VIEW_TYPE_SEARCH_ROW | VIEW_TYPE_SEARCH_PEOPLE
+ | VIEW_TYPE_SEARCH_THUMBNAIL | VIEW_TYPE_SEARCH_ICON_ROW | VIEW_TYPE_SEARCH_ICON
+ | VIEW_TYPE_SEARCH_WIDGET_PREVIEW | VIEW_TYPE_SEARCH_WIDGET_LIVE
+ | VIEW_TYPE_SEARCH_SUGGEST;
+
+ public SearchAdapterItem(SearchTarget searchTarget, int type) {
+ mSearchTarget = searchTarget;
+ viewType = type;
+ }
+
+ public SearchTarget getSearchTarget() {
+ return mSearchTarget;
+ }
+
+ @Override
+ protected boolean isCountedForAccessibility() {
+ return (AVAILABLE_FOR_ACCESSIBILITY & viewType) == viewType;
+ }
+}
diff --git a/src/com/android/launcher3/allapps/search/SearchEventTracker.java b/quickstep/src/com/android/launcher3/search/SearchEventTracker.java
similarity index 95%
rename from src/com/android/launcher3/allapps/search/SearchEventTracker.java
rename to quickstep/src/com/android/launcher3/search/SearchEventTracker.java
index c276434..efb7b19 100644
--- a/src/com/android/launcher3/allapps/search/SearchEventTracker.java
+++ b/quickstep/src/com/android/launcher3/search/SearchEventTracker.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.allapps.search;
+package com.android.launcher3.search;
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
@@ -21,7 +21,6 @@
import androidx.annotation.Nullable;
-import com.android.launcher3.allapps.search.AllAppsSearchBarController.SearchTargetHandler;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.systemui.plugins.AllAppsSearchPlugin;
import com.android.systemui.plugins.shared.SearchTarget;
diff --git a/src/com/android/launcher3/views/SearchResultIcon.java b/quickstep/src/com/android/launcher3/search/SearchResultIcon.java
similarity index 96%
rename from src/com/android/launcher3/views/SearchResultIcon.java
rename to quickstep/src/com/android/launcher3/search/SearchResultIcon.java
index 9bcfb8c..1aa89ee 100644
--- a/src/com/android/launcher3/views/SearchResultIcon.java
+++ b/quickstep/src/com/android/launcher3/search/SearchResultIcon.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.views;
+package com.android.launcher3.search;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
@@ -34,8 +34,6 @@
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.allapps.AllAppsStore;
-import com.android.launcher3.allapps.search.AllAppsSearchBarController;
-import com.android.launcher3.allapps.search.SearchEventTracker;
import com.android.launcher3.icons.BitmapInfo;
import com.android.launcher3.icons.LauncherIcons;
import com.android.launcher3.model.data.AppInfo;
@@ -53,7 +51,7 @@
* A {@link BubbleTextView} representing a single cell result in AllApps
*/
public class SearchResultIcon extends BubbleTextView implements
- AllAppsSearchBarController.SearchTargetHandler, View.OnClickListener,
+ SearchTargetHandler, View.OnClickListener,
View.OnLongClickListener {
diff --git a/src/com/android/launcher3/views/SearchResultIconRow.java b/quickstep/src/com/android/launcher3/search/SearchResultIconRow.java
similarity index 96%
rename from src/com/android/launcher3/views/SearchResultIconRow.java
rename to quickstep/src/com/android/launcher3/search/SearchResultIconRow.java
index e3c7661..b3dfbe2 100644
--- a/src/com/android/launcher3/views/SearchResultIconRow.java
+++ b/quickstep/src/com/android/launcher3/search/SearchResultIconRow.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.views;
+package com.android.launcher3.search;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
@@ -36,8 +36,6 @@
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
-import com.android.launcher3.allapps.search.AllAppsSearchBarController;
-import com.android.launcher3.allapps.search.SearchEventTracker;
import com.android.launcher3.model.data.ItemInfoWithIcon;
import com.android.launcher3.model.data.PackageItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
@@ -53,7 +51,7 @@
* shortcuts
*/
public class SearchResultIconRow extends LinearLayout implements
- AllAppsSearchBarController.SearchTargetHandler, View.OnClickListener,
+ SearchTargetHandler, View.OnClickListener,
View.OnLongClickListener, Consumer<ItemInfoWithIcon> {
public static final int MAX_SHORTCUTS_COUNT = 2;
diff --git a/src/com/android/launcher3/views/SearchResultPeopleView.java b/quickstep/src/com/android/launcher3/search/SearchResultPeopleView.java
similarity index 96%
rename from src/com/android/launcher3/views/SearchResultPeopleView.java
rename to quickstep/src/com/android/launcher3/search/SearchResultPeopleView.java
index e499bd5..e856531 100644
--- a/src/com/android/launcher3/views/SearchResultPeopleView.java
+++ b/quickstep/src/com/android/launcher3/search/SearchResultPeopleView.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.views;
+package com.android.launcher3.search;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
@@ -42,8 +42,6 @@
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
-import com.android.launcher3.allapps.search.AllAppsSearchBarController;
-import com.android.launcher3.allapps.search.SearchEventTracker;
import com.android.launcher3.icons.BitmapInfo;
import com.android.launcher3.icons.LauncherIcons;
import com.android.systemui.plugins.shared.SearchTarget;
@@ -55,7 +53,7 @@
* A view representing a single people search result in all apps
*/
public class SearchResultPeopleView extends LinearLayout implements
- AllAppsSearchBarController.SearchTargetHandler {
+ SearchTargetHandler {
public static final String TARGET_TYPE_PEOPLE = "people";
diff --git a/src/com/android/launcher3/views/SearchResultPlayItem.java b/quickstep/src/com/android/launcher3/search/SearchResultPlayItem.java
similarity index 96%
rename from src/com/android/launcher3/views/SearchResultPlayItem.java
rename to quickstep/src/com/android/launcher3/search/SearchResultPlayItem.java
index 86ed436..33c9330 100644
--- a/src/com/android/launcher3/views/SearchResultPlayItem.java
+++ b/quickstep/src/com/android/launcher3/search/SearchResultPlayItem.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.views;
+package com.android.launcher3.search;
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
@@ -41,8 +41,6 @@
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
-import com.android.launcher3.allapps.search.AllAppsSearchBarController;
-import com.android.launcher3.allapps.search.SearchEventTracker;
import com.android.launcher3.icons.BitmapRenderer;
import com.android.launcher3.util.Themes;
import com.android.systemui.plugins.shared.SearchTarget;
@@ -56,7 +54,7 @@
* A View representing a PlayStore item.
*/
public class SearchResultPlayItem extends LinearLayout implements
- AllAppsSearchBarController.SearchTargetHandler {
+ SearchTargetHandler {
public static final String TARGET_TYPE_PLAY = "play";
diff --git a/src/com/android/launcher3/views/SearchResultSettingsSlice.java b/quickstep/src/com/android/launcher3/search/SearchResultSettingsSlice.java
similarity index 93%
rename from src/com/android/launcher3/views/SearchResultSettingsSlice.java
rename to quickstep/src/com/android/launcher3/search/SearchResultSettingsSlice.java
index 29e6c1b..826b653 100644
--- a/src/com/android/launcher3/views/SearchResultSettingsSlice.java
+++ b/quickstep/src/com/android/launcher3/search/SearchResultSettingsSlice.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.views;
+package com.android.launcher3.search;
import android.content.Context;
import android.net.Uri;
@@ -32,8 +32,6 @@
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
-import com.android.launcher3.allapps.search.AllAppsSearchBarController;
-import com.android.launcher3.allapps.search.SearchEventTracker;
import com.android.systemui.plugins.shared.SearchTarget;
import com.android.systemui.plugins.shared.SearchTargetEvent;
@@ -41,7 +39,7 @@
* A slice view wrapper with settings app icon at start
*/
public class SearchResultSettingsSlice extends LinearLayout implements
- AllAppsSearchBarController.SearchTargetHandler, SliceView.OnSliceActionListener {
+ SearchTargetHandler, SliceView.OnSliceActionListener {
public static final String TARGET_TYPE_SLICE = "settings_slice";
diff --git a/src/com/android/launcher3/views/SearchResultSuggestion.java b/quickstep/src/com/android/launcher3/search/SearchResultSuggestion.java
similarity index 95%
rename from src/com/android/launcher3/views/SearchResultSuggestion.java
rename to quickstep/src/com/android/launcher3/search/SearchResultSuggestion.java
index c67b1cf..6a6bd1b 100644
--- a/src/com/android/launcher3/views/SearchResultSuggestion.java
+++ b/quickstep/src/com/android/launcher3/search/SearchResultSuggestion.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.views;
+package com.android.launcher3.search;
import android.content.Context;
import android.content.res.TypedArray;
@@ -22,6 +22,7 @@
import android.view.ViewGroup;
import com.android.launcher3.R;
+import com.android.launcher3.views.BaseDragLayer;
/**
* {@link SearchResultIconRow} with custom drawable resource
diff --git a/src/com/android/launcher3/views/SearchResultWidget.java b/quickstep/src/com/android/launcher3/search/SearchResultWidget.java
similarity index 95%
rename from src/com/android/launcher3/views/SearchResultWidget.java
rename to quickstep/src/com/android/launcher3/search/SearchResultWidget.java
index f76de3d..ba26d85 100644
--- a/src/com/android/launcher3/views/SearchResultWidget.java
+++ b/quickstep/src/com/android/launcher3/search/SearchResultWidget.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.views;
+package com.android.launcher3.search;
import android.appwidget.AppWidgetHostView;
import android.appwidget.AppWidgetProviderInfo;
@@ -32,8 +32,6 @@
import com.android.launcher3.CheckLongPressHelper;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
-import com.android.launcher3.allapps.search.AllAppsSearchBarController;
-import com.android.launcher3.allapps.search.SearchEventTracker;
import com.android.launcher3.allapps.search.SearchWidgetInfoContainer;
import com.android.launcher3.dragndrop.DraggableView;
import com.android.launcher3.touch.ItemLongClickListener;
@@ -46,7 +44,7 @@
* provider
*/
public class SearchResultWidget extends RelativeLayout implements
- AllAppsSearchBarController.SearchTargetHandler, DraggableView, View.OnLongClickListener {
+ SearchTargetHandler, DraggableView, View.OnLongClickListener {
private static final String TAG = "SearchResultWidget";
diff --git a/src/com/android/launcher3/views/SearchResultWidgetPreview.java b/quickstep/src/com/android/launcher3/search/SearchResultWidgetPreview.java
similarity index 94%
rename from src/com/android/launcher3/views/SearchResultWidgetPreview.java
rename to quickstep/src/com/android/launcher3/search/SearchResultWidgetPreview.java
index c11c232..0d79025 100644
--- a/src/com/android/launcher3/views/SearchResultWidgetPreview.java
+++ b/quickstep/src/com/android/launcher3/search/SearchResultWidgetPreview.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.views;
+package com.android.launcher3.search;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
@@ -32,8 +32,6 @@
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
import com.android.launcher3.R;
-import com.android.launcher3.allapps.search.AllAppsSearchBarController;
-import com.android.launcher3.allapps.search.SearchEventTracker;
import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.model.WidgetItem;
import com.android.launcher3.touch.ItemLongClickListener;
@@ -48,7 +46,7 @@
* displays preview of a widget upon receiving {@link AppWidgetProviderInfo} from Search provider
*/
public class SearchResultWidgetPreview extends LinearLayout implements
- AllAppsSearchBarController.SearchTargetHandler, View.OnLongClickListener,
+ SearchTargetHandler, View.OnLongClickListener,
View.OnClickListener {
public static final String TARGET_TYPE_WIDGET_PREVIEW = "widget_preview";
diff --git a/src/com/android/launcher3/views/SearchSectionHeaderView.java b/quickstep/src/com/android/launcher3/search/SearchSectionHeaderView.java
similarity index 90%
rename from src/com/android/launcher3/views/SearchSectionHeaderView.java
rename to quickstep/src/com/android/launcher3/search/SearchSectionHeaderView.java
index 326c23d..a552366 100644
--- a/src/com/android/launcher3/views/SearchSectionHeaderView.java
+++ b/quickstep/src/com/android/launcher3/search/SearchSectionHeaderView.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.views;
+package com.android.launcher3.search;
import android.content.Context;
import android.util.AttributeSet;
@@ -21,14 +21,13 @@
import androidx.annotation.Nullable;
-import com.android.launcher3.allapps.search.AllAppsSearchBarController;
import com.android.systemui.plugins.shared.SearchTarget;
/**
* Header text view that shows a title for a given section in All apps search
*/
public class SearchSectionHeaderView extends TextView implements
- AllAppsSearchBarController.SearchTargetHandler {
+ SearchTargetHandler {
public static final String TARGET_TYPE_SECTION_HEADER = "section_header";
public SearchSectionHeaderView(Context context) {
diff --git a/src/com/android/launcher3/views/SearchSettingsRowView.java b/quickstep/src/com/android/launcher3/search/SearchSettingsRowView.java
similarity index 95%
rename from src/com/android/launcher3/views/SearchSettingsRowView.java
rename to quickstep/src/com/android/launcher3/search/SearchSettingsRowView.java
index 160ee65..dc5c2f1 100644
--- a/src/com/android/launcher3/views/SearchSettingsRowView.java
+++ b/quickstep/src/com/android/launcher3/search/SearchSettingsRowView.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.views;
+package com.android.launcher3.search;
import static com.android.launcher3.FastBitmapDrawable.newIcon;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
@@ -37,8 +37,6 @@
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
-import com.android.launcher3.allapps.search.AllAppsSearchBarController;
-import com.android.launcher3.allapps.search.SearchEventTracker;
import com.android.launcher3.model.data.PackageItemInfo;
import com.android.systemui.plugins.shared.SearchTarget;
import com.android.systemui.plugins.shared.SearchTargetEvent;
@@ -50,7 +48,7 @@
* A row of clickable TextViews with a breadcrumb for settings search.
*/
public class SearchSettingsRowView extends LinearLayout implements
- View.OnClickListener, AllAppsSearchBarController.SearchTargetHandler {
+ View.OnClickListener, SearchTargetHandler {
public static final String TARGET_TYPE_SETTINGS_ROW = "settings_row";
diff --git a/quickstep/src/com/android/launcher3/search/SearchTargetHandler.java b/quickstep/src/com/android/launcher3/search/SearchTargetHandler.java
new file mode 100644
index 0000000..347c7d4
--- /dev/null
+++ b/quickstep/src/com/android/launcher3/search/SearchTargetHandler.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3.search;
+
+import com.android.systemui.plugins.shared.SearchTarget;
+
+/**
+ * An interface for supporting dynamic search results
+ */
+public interface SearchTargetHandler {
+
+ /**
+ * Update view using values from {@link SearchTarget}
+ */
+ void applySearchTarget(SearchTarget searchTarget);
+
+ /**
+ * Handles selection of SearchTarget
+ */
+ default void handleSelection(int eventType) {
+ }
+
+}
diff --git a/src/com/android/launcher3/views/ThumbnailSearchResultView.java b/quickstep/src/com/android/launcher3/search/ThumbnailSearchResultView.java
similarity index 91%
rename from src/com/android/launcher3/views/ThumbnailSearchResultView.java
rename to quickstep/src/com/android/launcher3/search/ThumbnailSearchResultView.java
index 573d48f..c100d6a 100644
--- a/src/com/android/launcher3/views/ThumbnailSearchResultView.java
+++ b/quickstep/src/com/android/launcher3/search/ThumbnailSearchResultView.java
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.views;
+package com.android.launcher3.search;
-import static com.android.launcher3.views.SearchResultIcon.REMOTE_ACTION_SHOULD_START;
-import static com.android.launcher3.views.SearchResultIcon.REMOTE_ACTION_TOKEN;
+import static com.android.launcher3.search.SearchResultIcon.REMOTE_ACTION_SHOULD_START;
+import static com.android.launcher3.search.SearchResultIcon.REMOTE_ACTION_TOKEN;
import android.content.Context;
import android.content.Intent;
@@ -30,8 +30,6 @@
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
import com.android.launcher3.Launcher;
-import com.android.launcher3.allapps.search.AllAppsSearchBarController;
-import com.android.launcher3.allapps.search.SearchEventTracker;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.RemoteActionItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
@@ -44,7 +42,7 @@
* A view representing a high confidence app search result that includes shortcuts
*/
public class ThumbnailSearchResultView extends androidx.appcompat.widget.AppCompatImageView
- implements AllAppsSearchBarController.SearchTargetHandler {
+ implements SearchTargetHandler {
public static final String TARGET_TYPE_SCREENSHOT = "screenshot";
public static final String TARGET_TYPE_SCREENSHOT_LEGACY = "screenshot_legacy";
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
index 8c3b57a..d345165 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
@@ -42,6 +42,7 @@
import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.LauncherState;
import com.android.launcher3.Workspace;
+import com.android.launcher3.allapps.search.SearchAdapterProvider;
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.appprediction.PredictionRowView;
import com.android.launcher3.config.FeatureFlags;
@@ -51,6 +52,7 @@
import com.android.launcher3.model.BgDataModel.FixedContainerItems;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.popup.SystemShortcut;
+import com.android.launcher3.search.DeviceSearchAdapterProvider;
import com.android.launcher3.statemanager.StateManager.AtomicAnimationFactory;
import com.android.launcher3.uioverrides.states.QuickstepAtomicAnimationFactory;
import com.android.launcher3.uioverrides.touchcontrollers.NavBarToHomeTouchController;
@@ -264,6 +266,11 @@
}
@Override
+ public SearchAdapterProvider createSearchAdapterProvider() {
+ return new DeviceSearchAdapterProvider(this);
+ }
+
+ @Override
public TouchController[] createTouchControllers() {
Mode mode = SysUINavigationMode.getMode(this);
diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java
index d050030..c37fd84 100644
--- a/quickstep/src/com/android/quickstep/RecentsActivity.java
+++ b/quickstep/src/com/android/quickstep/RecentsActivity.java
@@ -45,6 +45,7 @@
import com.android.launcher3.R;
import com.android.launcher3.WrappedAnimationRunnerImpl;
import com.android.launcher3.WrappedLauncherAnimationRunner;
+import com.android.launcher3.allapps.search.SearchAdapterProvider;
import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.compat.AccessibilityManagerCompat;
@@ -91,6 +92,7 @@
// Strong refs to runners which are cleared when the activity is destroyed
private WrappedAnimationRunnerImpl mActivityLaunchAnimationRunner;
+ private SearchAdapterProvider mSearchAdapterProvider;
/**
* Init drag layer and overview panel views.
diff --git a/src/com/android/launcher3/BaseDraggingActivity.java b/src/com/android/launcher3/BaseDraggingActivity.java
index 52f0a4a..33af4d7 100644
--- a/src/com/android/launcher3/BaseDraggingActivity.java
+++ b/src/com/android/launcher3/BaseDraggingActivity.java
@@ -43,6 +43,8 @@
import androidx.annotation.Nullable;
import com.android.launcher3.LauncherSettings.Favorites;
+import com.android.launcher3.allapps.search.DefaultSearchAdapterProvider;
+import com.android.launcher3.allapps.search.SearchAdapterProvider;
import com.android.launcher3.logging.InstanceId;
import com.android.launcher3.logging.InstanceIdSequence;
import com.android.launcher3.model.data.ItemInfo;
@@ -187,7 +189,7 @@
logAppLaunch(item, instanceId);
}
return true;
- } catch (NullPointerException|ActivityNotFoundException|SecurityException e) {
+ } catch (NullPointerException | ActivityNotFoundException | SecurityException e) {
Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
Log.e(TAG, "Unable to launch. tag=" + item + " intent=" + intent, e);
}
@@ -290,4 +292,12 @@
display.getSize(mwSize);
return new WindowBounds(new Rect(0, 0, mwSize.x, mwSize.y), new Rect());
}
+
+ /**
+ * Creates and returns {@link SearchAdapterProvider} for build variant specific search result
+ * views
+ */
+ public SearchAdapterProvider createSearchAdapterProvider() {
+ return new DefaultSearchAdapterProvider(this);
+ }
}
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
index 558c6a8..b016df1 100644
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
@@ -16,7 +16,6 @@
package com.android.launcher3.allapps;
import static com.android.launcher3.allapps.AllAppsGridAdapter.AdapterItem;
-import static com.android.launcher3.allapps.AllAppsGridAdapter.SearchAdapterItem;
import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_HAS_SHORTCUT_PERMISSION;
import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_QUIET_MODE_CHANGE_PERMISSION;
import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_QUIET_MODE_ENABLED;
@@ -57,7 +56,7 @@
import com.android.launcher3.InsettableFrameLayout;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
-import com.android.launcher3.allapps.search.SearchEventTracker;
+import com.android.launcher3.allapps.search.SearchAdapterProvider;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.keyboard.FocusedItemDecorator;
import com.android.launcher3.model.data.AppInfo;
@@ -68,7 +67,6 @@
import com.android.launcher3.util.Themes;
import com.android.launcher3.views.RecyclerViewFastScroller;
import com.android.launcher3.views.SpringRelativeLayout;
-import com.android.systemui.plugins.shared.SearchTarget;
/**
* The all apps view container.
@@ -110,6 +108,8 @@
private Rect mInsets = new Rect();
+ SearchAdapterProvider mSearchAdapterProvider;
+
public AllAppsContainerView(Context context) {
this(context, null);
}
@@ -124,6 +124,7 @@
mLauncher = BaseDraggingActivity.fromContext(context);
mLauncher.addOnDeviceProfileChangeListener(this);
+ mSearchAdapterProvider = mLauncher.createSearchAdapterProvider();
mSearchQueryBuilder = new SpannableStringBuilder();
Selection.setSelection(mSearchQueryBuilder, 0);
@@ -141,6 +142,7 @@
addSpringView(R.id.all_apps_tabs_view_pager);
mMultiValueAlpha = new MultiValueAlpha(this, ALPHA_CHANNEL_COUNT);
+
}
/**
@@ -545,9 +547,7 @@
return mLauncher.startActivitySafely(v, headerItem.getIntent(), headerItem);
}
AdapterItem focusedItem = getActiveRecyclerView().getApps().getFocusedChild();
- if (focusedItem instanceof SearchAdapterItem) {
- SearchTarget searchTarget = ((SearchAdapterItem) focusedItem).getSearchTarget();
- SearchEventTracker.INSTANCE.get(getContext()).quickSelect(searchTarget);
+ if (mSearchAdapterProvider.onAdapterItemSelected(focusedItem)) {
return true;
}
if (focusedItem.appInfo != null) {
@@ -677,7 +677,8 @@
AdapterHolder(boolean isWork) {
mIsWork = isWork;
appsList = new AlphabeticalAppsList(mLauncher, mAllAppsStore, isWork);
- adapter = new AllAppsGridAdapter(mLauncher, getLayoutInflater(), appsList);
+ adapter = new AllAppsGridAdapter(mLauncher, getLayoutInflater(), appsList,
+ mSearchAdapterProvider);
appsList.setAdapter(adapter);
layoutManager = adapter.getLayoutManager();
}
diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
index 3c88288..715c142 100644
--- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
+++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
@@ -41,13 +41,11 @@
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.R;
-import com.android.launcher3.allapps.search.AllAppsSearchBarController.SearchTargetHandler;
+import com.android.launcher3.allapps.search.SearchAdapterProvider;
import com.android.launcher3.allapps.search.SearchSectionInfo;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.util.PackageManagerHelper;
-import com.android.launcher3.views.SearchResultWidget;
-import com.android.systemui.plugins.shared.SearchTarget;
import java.util.List;
@@ -72,31 +70,11 @@
// A divider that separates the apps list and the search market button
public static final int VIEW_TYPE_ALL_APPS_DIVIDER = 1 << 4;
- public static final int VIEW_TYPE_SEARCH_CORPUS_TITLE = 1 << 5;
-
- public static final int VIEW_TYPE_SEARCH_ROW_WITH_BUTTON = 1 << 7;
-
- public static final int VIEW_TYPE_SEARCH_ROW = 1 << 8;
-
- public static final int VIEW_TYPE_SEARCH_SLICE = 1 << 9;
-
- public static final int VIEW_TYPE_SEARCH_ICON_ROW = 1 << 10;
-
- public static final int VIEW_TYPE_SEARCH_PEOPLE = 1 << 11;
-
- public static final int VIEW_TYPE_SEARCH_THUMBNAIL = 1 << 12;
-
- public static final int VIEW_TYPE_SEARCH_SUGGEST = 1 << 13;
-
- public static final int VIEW_TYPE_SEARCH_ICON = 1 << 14;
-
- public static final int VIEW_TYPE_SEARCH_WIDGET_LIVE = 1 << 15;
-
- public static final int VIEW_TYPE_SEARCH_WIDGET_PREVIEW = 1 << 16;
-
// Common view type masks
public static final int VIEW_TYPE_MASK_DIVIDER = VIEW_TYPE_ALL_APPS_DIVIDER;
- public static final int VIEW_TYPE_MASK_ICON = VIEW_TYPE_ICON | VIEW_TYPE_SEARCH_ICON;
+ public static final int VIEW_TYPE_MASK_ICON = VIEW_TYPE_ICON;
+
+ private final SearchAdapterProvider mSearchAdapterProvider;
/**
* ViewHolder for each icon.
@@ -177,32 +155,8 @@
return item;
}
- boolean isCountedForAccessibility() {
- return viewType == VIEW_TYPE_ICON
- || viewType == VIEW_TYPE_SEARCH_ROW_WITH_BUTTON
- || viewType == VIEW_TYPE_SEARCH_SLICE
- || viewType == VIEW_TYPE_SEARCH_ROW
- || viewType == VIEW_TYPE_SEARCH_PEOPLE
- || viewType == VIEW_TYPE_SEARCH_THUMBNAIL
- || viewType == VIEW_TYPE_SEARCH_ICON_ROW
- || viewType == VIEW_TYPE_SEARCH_ICON
- || viewType == VIEW_TYPE_SEARCH_SUGGEST;
- }
- }
-
- /**
- * Extension of AdapterItem that contains an extra payload specific to item
- */
- public static class SearchAdapterItem extends AdapterItem {
- private SearchTarget mSearchTarget;
-
- public SearchAdapterItem(SearchTarget searchTarget, int type) {
- mSearchTarget = searchTarget;
- viewType = type;
- }
-
- public SearchTarget getSearchTarget() {
- return mSearchTarget;
+ protected boolean isCountedForAccessibility() {
+ return viewType == VIEW_TYPE_ICON || viewType == VIEW_TYPE_SEARCH_MARKET;
}
}
@@ -289,9 +243,8 @@
int viewType = mApps.getAdapterItems().get(position).viewType;
if (isIconViewType(viewType)) {
return 1 * SPAN_MULTIPLIER;
- } else if (viewType == VIEW_TYPE_SEARCH_THUMBNAIL
- || viewType == VIEW_TYPE_SEARCH_WIDGET_PREVIEW) {
- return mAppsPerRow;
+ } else if (mSearchAdapterProvider.isSearchView(viewType)) {
+ return mSearchAdapterProvider.getGridSpanSize(viewType, mAppsPerRow);
} else {
// Section breaks span the full width
return mAppsPerRow * SPAN_MULTIPLIER;
@@ -321,7 +274,7 @@
private Intent mMarketSearchIntent;
public AllAppsGridAdapter(BaseDraggingActivity launcher, LayoutInflater inflater,
- AlphabeticalAppsList apps) {
+ AlphabeticalAppsList apps, SearchAdapterProvider searchAdapterProvider) {
Resources res = launcher.getResources();
mLauncher = launcher;
mApps = apps;
@@ -334,6 +287,8 @@
mOnIconClickListener = launcher.getItemOnClickListener();
setAppsPerRow(mLauncher.getDeviceProfile().inv.numAllAppsColumns);
+
+ mSearchAdapterProvider = searchAdapterProvider;
}
public void setAppsPerRow(int appsPerRow) {
@@ -406,40 +361,11 @@
case VIEW_TYPE_ALL_APPS_DIVIDER:
return new ViewHolder(mLayoutInflater.inflate(
R.layout.all_apps_divider, parent, false));
- case VIEW_TYPE_SEARCH_ICON:
- return new ViewHolder(mLayoutInflater.inflate(
- R.layout.search_result_icon, parent, false));
- case VIEW_TYPE_SEARCH_CORPUS_TITLE:
- return new ViewHolder(
- mLayoutInflater.inflate(R.layout.search_section_title, parent, false));
- case VIEW_TYPE_SEARCH_ROW_WITH_BUTTON:
- return new ViewHolder(mLayoutInflater.inflate(
- R.layout.search_result_play_item, parent, false));
- case VIEW_TYPE_SEARCH_ROW:
- return new ViewHolder(mLayoutInflater.inflate(
- R.layout.search_result_settings_row, parent, false));
- case VIEW_TYPE_SEARCH_SLICE:
- return new ViewHolder(mLayoutInflater.inflate(
- R.layout.search_result_slice, parent, false));
- case VIEW_TYPE_SEARCH_ICON_ROW:
- return new ViewHolder(mLayoutInflater.inflate(
- R.layout.search_result_icon_row, parent, false));
- case VIEW_TYPE_SEARCH_PEOPLE:
- return new ViewHolder(mLayoutInflater.inflate(
- R.layout.search_result_people_item, parent, false));
- case VIEW_TYPE_SEARCH_THUMBNAIL:
- return new ViewHolder(mLayoutInflater.inflate(
- R.layout.search_result_thumbnail, parent, false));
- case VIEW_TYPE_SEARCH_SUGGEST:
- return new ViewHolder(mLayoutInflater.inflate(
- R.layout.search_result_suggest, parent, false));
- case VIEW_TYPE_SEARCH_WIDGET_LIVE:
- return new ViewHolder(mLayoutInflater.inflate(
- R.layout.search_result_widget_live, parent, false));
- case VIEW_TYPE_SEARCH_WIDGET_PREVIEW:
- return new ViewHolder(mLayoutInflater.inflate(
- R.layout.search_result_widget_preview, parent, false));
default:
+ if (mSearchAdapterProvider.isSearchView(viewType)) {
+ return mSearchAdapterProvider.onCreateViewHolder(mLayoutInflater, parent,
+ viewType);
+ }
throw new RuntimeException("Unexpected view type");
}
}
@@ -472,25 +398,11 @@
searchView.setVisibility(View.GONE);
}
break;
- case VIEW_TYPE_SEARCH_CORPUS_TITLE:
- case VIEW_TYPE_SEARCH_ROW_WITH_BUTTON:
- case VIEW_TYPE_SEARCH_SLICE:
- case VIEW_TYPE_SEARCH_ROW:
- case VIEW_TYPE_SEARCH_ICON:
- case VIEW_TYPE_SEARCH_ICON_ROW:
- case VIEW_TYPE_SEARCH_PEOPLE:
- case VIEW_TYPE_SEARCH_THUMBNAIL:
- case VIEW_TYPE_SEARCH_SUGGEST:
- case VIEW_TYPE_SEARCH_WIDGET_LIVE:
- case VIEW_TYPE_SEARCH_WIDGET_PREVIEW:
- SearchAdapterItem item =
- (SearchAdapterItem) mApps.getAdapterItems().get(position);
- SearchTargetHandler payloadResultView = (SearchTargetHandler) holder.itemView;
- payloadResultView.applySearchTarget(item.getSearchTarget());
- break;
case VIEW_TYPE_ALL_APPS_DIVIDER:
// nothing to do
break;
+ default:
+ mSearchAdapterProvider.onBindView(holder, position);
}
}
@@ -501,9 +413,6 @@
if (holder.itemView instanceof AllAppsSectionDecorator.SelfDecoratingView) {
((AllAppsSectionDecorator.SelfDecoratingView) holder.itemView).removeDecoration();
}
- if (holder.itemView instanceof SearchResultWidget) {
- ((SearchResultWidget) holder.itemView).removeListener();
- }
}
@Override
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
index 1fa43d0..e61b95d 100644
--- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
@@ -104,7 +104,6 @@
pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_ALL_APPS_DIVIDER, 1);
pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_SEARCH_MARKET, 1);
pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_ICON, approxRows * mNumAppsPerRow);
- pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_SEARCH_CORPUS_TITLE, 1);
mViewHeights.clear();
mViewHeights.put(AllAppsGridAdapter.VIEW_TYPE_ICON, grid.allAppsCellHeightPx);
diff --git a/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java b/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java
index bc5a5f2..f09f1ca 100644
--- a/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java
+++ b/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java
@@ -34,7 +34,6 @@
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.systemui.plugins.AllAppsSearchPlugin;
-import com.android.systemui.plugins.shared.SearchTarget;
import java.util.ArrayList;
import java.util.List;
@@ -211,23 +210,5 @@
void clearSearchResult();
}
- /**
- * An interface for supporting dynamic search results
- */
- public interface SearchTargetHandler {
-
- /**
- * Update view using values from {@link SearchTarget}
- */
- void applySearchTarget(SearchTarget searchTarget);
-
- /**
- * Handles selection of SearchTarget
- */
- default void handleSelection(int eventType) {
- }
-
- }
-
}
\ No newline at end of file
diff --git a/src/com/android/launcher3/allapps/search/DefaultSearchAdapterProvider.java b/src/com/android/launcher3/allapps/search/DefaultSearchAdapterProvider.java
new file mode 100644
index 0000000..e3c178b
--- /dev/null
+++ b/src/com/android/launcher3/allapps/search/DefaultSearchAdapterProvider.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.launcher3.allapps.search;
+
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import com.android.launcher3.BaseDraggingActivity;
+import com.android.launcher3.allapps.AllAppsGridAdapter;
+
+/**
+ * Provides views for local search results
+ */
+public class DefaultSearchAdapterProvider extends SearchAdapterProvider {
+
+ public DefaultSearchAdapterProvider(BaseDraggingActivity launcher) {
+ super(launcher);
+ }
+
+ @Override
+ public void onBindView(AllAppsGridAdapter.ViewHolder holder, int position) {
+
+ }
+
+ @Override
+ public boolean isSearchView(int viewType) {
+ return false;
+ }
+
+ @Override
+ public AllAppsGridAdapter.ViewHolder onCreateViewHolder(LayoutInflater layoutInflater,
+ ViewGroup parent, int viewType) {
+ return null;
+ }
+
+ @Override
+ public boolean onAdapterItemSelected(AllAppsGridAdapter.AdapterItem focusedItem) {
+ return false;
+ }
+}
diff --git a/src/com/android/launcher3/allapps/search/SearchAdapterProvider.java b/src/com/android/launcher3/allapps/search/SearchAdapterProvider.java
new file mode 100644
index 0000000..1c7247a
--- /dev/null
+++ b/src/com/android/launcher3/allapps/search/SearchAdapterProvider.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3.allapps.search;
+
+
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import com.android.launcher3.BaseDraggingActivity;
+import com.android.launcher3.allapps.AllAppsGridAdapter;
+
+/**
+ * A UI expansion wrapper providing for search results
+ */
+public abstract class SearchAdapterProvider {
+
+ protected final BaseDraggingActivity mLauncher;
+
+ public SearchAdapterProvider(BaseDraggingActivity launcher) {
+ mLauncher = launcher;
+ }
+
+ /**
+ * Called from RecyclerView.Adapter#onBindViewHolder
+ */
+ public abstract void onBindView(AllAppsGridAdapter.ViewHolder holder, int position);
+
+ /**
+ * Returns whether or not viewType can be handled by searchProvider
+ */
+ public abstract boolean isSearchView(int viewType);
+
+ /**
+ * Called from RecyclerView.Adapter#onCreateViewHolder
+ */
+ public abstract AllAppsGridAdapter.ViewHolder onCreateViewHolder(LayoutInflater layoutInflater,
+ ViewGroup parent, int viewType);
+
+ /**
+ * Returns how many cells a view should span
+ */
+ public int getGridSpanSize(int viewType, int appsPerRow) {
+ return appsPerRow * AllAppsGridAdapter.SPAN_MULTIPLIER;
+ }
+
+ /**
+ * handles selection event on search adapter item. Returns false if provider can not handle
+ * event
+ */
+ public abstract boolean onAdapterItemSelected(AllAppsGridAdapter.AdapterItem focusedItem);
+}