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
This commit is contained in:
@@ -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" />
|
||||
+3
-3
@@ -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>
|
||||
</com.android.launcher3.search.SearchResultIconRow>
|
||||
+2
-2
@@ -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>
|
||||
</com.android.launcher3.search.SearchResultPeopleView>
|
||||
+2
-2
@@ -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>
|
||||
+2
-2
@@ -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>
|
||||
</com.android.launcher3.search.SearchSettingsRowView>
|
||||
@@ -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>
|
||||
|
||||
+2
-2
@@ -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>
|
||||
</com.android.launcher3.search.SearchResultSuggestion>
|
||||
+1
-1
@@ -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"/>
|
||||
+1
-1
@@ -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" />
|
||||
+2
-2
@@ -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>
|
||||
</com.android.launcher3.search.SearchResultWidgetPreview>
|
||||
@@ -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"
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
+1
-2
@@ -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 android.content.Context;
|
||||
|
||||
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;
|
||||
+2
-4
@@ -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.BubbleTextView;
|
||||
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 @@ import java.util.function.Consumer;
|
||||
* 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 {
|
||||
|
||||
|
||||
+2
-4
@@ -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.BubbleTextView;
|
||||
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 @@ import java.util.function.Consumer;
|
||||
* 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;
|
||||
|
||||
+2
-4
@@ -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 androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
|
||||
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 @@ import java.util.ArrayList;
|
||||
* 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";
|
||||
|
||||
+2
-4
@@ -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 androidx.annotation.Nullable;
|
||||
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 @@ import java.net.URLConnection;
|
||||
* A View representing a PlayStore item.
|
||||
*/
|
||||
public class SearchResultPlayItem extends LinearLayout implements
|
||||
AllAppsSearchBarController.SearchTargetHandler {
|
||||
SearchTargetHandler {
|
||||
|
||||
public static final String TARGET_TYPE_PLAY = "play";
|
||||
|
||||
+2
-4
@@ -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 androidx.slice.widget.SliceView;
|
||||
|
||||
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 @@ import com.android.systemui.plugins.shared.SearchTargetEvent;
|
||||
* 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";
|
||||
+2
-1
@@ -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.util.AttributeSet;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.views.BaseDragLayer;
|
||||
|
||||
/**
|
||||
* {@link SearchResultIconRow} with custom drawable resource
|
||||
+2
-4
@@ -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.AppWidgetResizeFrame;
|
||||
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 @@ import com.android.systemui.plugins.shared.SearchTargetEvent;
|
||||
* provider
|
||||
*/
|
||||
public class SearchResultWidget extends RelativeLayout implements
|
||||
AllAppsSearchBarController.SearchTargetHandler, DraggableView, View.OnLongClickListener {
|
||||
SearchTargetHandler, DraggableView, View.OnLongClickListener {
|
||||
|
||||
private static final String TAG = "SearchResultWidget";
|
||||
|
||||
+2
-4
@@ -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.Launcher;
|
||||
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 @@ import com.android.systemui.plugins.shared.SearchTargetEvent;
|
||||
* 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";
|
||||
+2
-3
@@ -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 android.widget.TextView;
|
||||
|
||||
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) {
|
||||
+2
-4
@@ -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.FastBitmapDrawable;
|
||||
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 @@ import java.util.List;
|
||||
* 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";
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
|
||||
}
|
||||
+4
-6
@@ -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.RoundedBitmapDrawable;
|
||||
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 @@ import com.android.systemui.plugins.shared.SearchTargetEvent;
|
||||
* 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";
|
||||
@@ -42,6 +42,7 @@ import com.android.launcher3.Launcher;
|
||||
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.logging.StatsLogManager.StatsLogger;
|
||||
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;
|
||||
@@ -263,6 +265,11 @@ public class QuickstepLauncher extends BaseQuickstepLauncher {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchAdapterProvider createSearchAdapterProvider() {
|
||||
return new DeviceSearchAdapterProvider(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TouchController[] createTouchControllers() {
|
||||
Mode mode = SysUINavigationMode.getMode(this);
|
||||
|
||||
@@ -45,6 +45,7 @@ import com.android.launcher3.LauncherAnimationRunner.AnimationResult;
|
||||
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 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
|
||||
|
||||
// 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.
|
||||
|
||||
@@ -43,6 +43,8 @@ import android.widget.Toast;
|
||||
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 @@ public abstract class BaseDraggingActivity extends BaseActivity
|
||||
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 @@ public abstract class BaseDraggingActivity extends BaseActivity
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.Insettable;
|
||||
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.MultiValueAlpha.AlphaProperty;
|
||||
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 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo
|
||||
|
||||
private Rect mInsets = new Rect();
|
||||
|
||||
SearchAdapterProvider mSearchAdapterProvider;
|
||||
|
||||
public AllAppsContainerView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
@@ -124,6 +124,7 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo
|
||||
mLauncher = BaseDraggingActivity.fromContext(context);
|
||||
mLauncher.addOnDeviceProfileChangeListener(this);
|
||||
|
||||
mSearchAdapterProvider = mLauncher.createSearchAdapterProvider();
|
||||
mSearchQueryBuilder = new SpannableStringBuilder();
|
||||
Selection.setSelection(mSearchQueryBuilder, 0);
|
||||
|
||||
@@ -141,6 +142,7 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo
|
||||
addSpringView(R.id.all_apps_tabs_view_pager);
|
||||
|
||||
mMultiValueAlpha = new MultiValueAlpha(this, ALPHA_CHANNEL_COUNT);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -545,9 +547,7 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo
|
||||
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 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -41,13 +41,11 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
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 @@ public class AllAppsGridAdapter extends
|
||||
// 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 @@ public class AllAppsGridAdapter extends
|
||||
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 @@ public class AllAppsGridAdapter extends
|
||||
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 @@ public class AllAppsGridAdapter extends
|
||||
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 @@ public class AllAppsGridAdapter extends
|
||||
mOnIconClickListener = launcher.getItemOnClickListener();
|
||||
|
||||
setAppsPerRow(mLauncher.getDeviceProfile().inv.numAllAppsColumns);
|
||||
|
||||
mSearchAdapterProvider = searchAdapterProvider;
|
||||
}
|
||||
|
||||
public void setAppsPerRow(int appsPerRow) {
|
||||
@@ -406,40 +361,11 @@ public class AllAppsGridAdapter extends
|
||||
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 @@ public class AllAppsGridAdapter extends
|
||||
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 @@ public class AllAppsGridAdapter extends
|
||||
if (holder.itemView instanceof AllAppsSectionDecorator.SelfDecoratingView) {
|
||||
((AllAppsSectionDecorator.SelfDecoratingView) holder.itemView).removeDecoration();
|
||||
}
|
||||
if (holder.itemView instanceof SearchResultWidget) {
|
||||
((SearchResultWidget) holder.itemView).removeListener();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -104,7 +104,6 @@ public class AllAppsRecyclerView extends BaseRecyclerView {
|
||||
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);
|
||||
|
||||
@@ -34,7 +34,6 @@ import com.android.launcher3.allapps.AllAppsGridAdapter.AdapterItem;
|
||||
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 @@ public class AllAppsSearchBarController
|
||||
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) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user