Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d78e90d1 authored by Samuel Fufa's avatar Samuel Fufa Committed by Android (Google) Code Review
Browse files

Merge "Migrate from Plugin SearchTarget to API search Target [2/3]"

parents 278f231b a60d1f9b
Loading
Loading
Loading
Loading
+28 −6
Original line number Diff line number Diff line
@@ -18,15 +18,18 @@ package com.android.launcher3.search;

import static com.android.launcher3.allapps.AllAppsGridAdapter.VIEW_TYPE_ICON;

import android.app.search.SearchTarget;
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.AllAppsContainerView;
import com.android.launcher3.allapps.AllAppsGridAdapter;
import com.android.launcher3.allapps.search.SearchAdapterProvider;
import com.android.systemui.plugins.shared.SearchTarget;
import com.android.launcher3.config.FeatureFlags;
import com.android.systemui.plugins.shared.SearchTargetLegacy;

/**
 * Provides views for on-device search results
@@ -45,11 +48,13 @@ public class DeviceSearchAdapterProvider extends SearchAdapterProvider {
    public static final int VIEW_TYPE_SEARCH_WIDGET_LIVE = 1 << 15;
    public static final int VIEW_TYPE_SEARCH_WIDGET_PREVIEW = 1 << 16;

    private final AllAppsContainerView mAppsView;

    private final SparseIntArray mViewTypeToLayoutMap = new SparseIntArray();

    public DeviceSearchAdapterProvider(Launcher launcher) {
    public DeviceSearchAdapterProvider(Launcher launcher, AllAppsContainerView appsView) {
        super(launcher);
        mAppsView = appsView;

        mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_ICON, R.layout.search_result_icon);
        mViewTypeToLayoutMap.put(VIEW_TYPE_SEARCH_CORPUS_TITLE, R.layout.search_section_title);
@@ -68,13 +73,17 @@ public class DeviceSearchAdapterProvider extends SearchAdapterProvider {

    @Override
    public void onBindView(AllAppsGridAdapter.ViewHolder holder, int position) {
        SearchAdapterItem item = (SearchAdapterItem) Launcher.getLauncher(mLauncher)
                .getAppsView().getApps().getAdapterItems().get(position);
        SearchAdapterItem item = (SearchAdapterItem) mAppsView.getApps().getAdapterItems().get(
                position);
        SearchTargetHandler
                payloadResultView =
                (SearchTargetHandler) holder.itemView;
        if (FeatureFlags.SEARCH_TARGET_LEGACY.get()) {
            payloadResultView.applySearchTarget(item.getSearchTargetLegacy());
        } else {
            payloadResultView.applySearchTarget(item.getSearchTarget());
        }
    }

    @Override
    public boolean isSearchView(int viewType) {
@@ -101,10 +110,23 @@ public class DeviceSearchAdapterProvider extends SearchAdapterProvider {
    @Override
    public boolean onAdapterItemSelected(AllAppsGridAdapter.AdapterItem focusedItem) {
        if (focusedItem instanceof SearchTargetHandler) {
            SearchTarget searchTarget = ((SearchAdapterItem) focusedItem).getSearchTarget();
            SearchTargetLegacy searchTarget = ((SearchAdapterItem) focusedItem)
                    .getSearchTargetLegacy();
            SearchEventTracker.INSTANCE.get(mLauncher).quickSelect(searchTarget);
            return true;
        }
        return false;
    }

    /**
     * Determines what view type should be used to present search target.
     * Returns -1 if viewType is not found
     */
    public int getViewTypeForSearchTarget(SearchTarget t) {
        //TODO: Replace with values from :SearchUi
        if (t.getResultType() == 1 && t.getLayoutType().equals("icon")) {
            return VIEW_TYPE_SEARCH_ICON;
        }
        return -1;
    }
}
+14 −1
Original line number Diff line number Diff line
@@ -27,13 +27,16 @@ import static com.android.launcher3.search.DeviceSearchAdapterProvider.VIEW_TYPE
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 android.app.search.SearchTarget;

import com.android.launcher3.allapps.AllAppsGridAdapter;
import com.android.systemui.plugins.shared.SearchTarget;
import com.android.systemui.plugins.shared.SearchTargetLegacy;

/**
 * Extension of AdapterItem that contains an extra payload specific to item
 */
public class SearchAdapterItem extends AllAppsGridAdapter.AdapterItem {
    private SearchTargetLegacy mSearchTargetLegacy;
    private SearchTarget mSearchTarget;


@@ -43,11 +46,21 @@ public class SearchAdapterItem extends AllAppsGridAdapter.AdapterItem {
            | VIEW_TYPE_SEARCH_WIDGET_PREVIEW | VIEW_TYPE_SEARCH_WIDGET_LIVE
            | VIEW_TYPE_SEARCH_SUGGEST;

    public SearchAdapterItem(SearchTargetLegacy searchTargetLegacy, int type) {
        mSearchTargetLegacy = searchTargetLegacy;
        viewType = type;
    }


    public SearchAdapterItem(SearchTarget searchTarget, int type) {
        mSearchTarget = searchTarget;
        viewType = type;
    }

    public SearchTargetLegacy getSearchTargetLegacy() {
        return mSearchTargetLegacy;
    }

    public SearchTarget getSearchTarget() {
        return mSearchTarget;
    }
+9 −8
Original line number Diff line number Diff line
@@ -23,8 +23,8 @@ import androidx.annotation.Nullable;

import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.systemui.plugins.AllAppsSearchPlugin;
import com.android.systemui.plugins.shared.SearchTarget;
import com.android.systemui.plugins.shared.SearchTargetEvent;
import com.android.systemui.plugins.shared.SearchTargetEventLegacy;
import com.android.systemui.plugins.shared.SearchTargetLegacy;

import java.util.WeakHashMap;

@@ -34,7 +34,7 @@ import java.util.WeakHashMap;
public class SearchEventTracker {
    @Nullable
    private AllAppsSearchPlugin mPlugin;
    private final WeakHashMap<SearchTarget, SearchTargetHandler>
    private final WeakHashMap<SearchTargetLegacy, SearchTargetHandler>
            mCallbacks = new WeakHashMap<>();

    public static final MainThreadInitializedObject<SearchEventTracker> INSTANCE =
@@ -60,26 +60,27 @@ public class SearchEventTracker {
    /**
     * Sends SearchTargetEvent to search provider
     */
    public void notifySearchTargetEvent(SearchTargetEvent searchTargetEvent) {
    public void notifySearchTargetEvent(SearchTargetEventLegacy searchTargetEvent) {
        if (mPlugin != null) {
            UI_HELPER_EXECUTOR.post(() -> mPlugin.notifySearchTargetEvent(searchTargetEvent));
            UI_HELPER_EXECUTOR.post(() -> mPlugin.notifySearchTargetEventLegacy(searchTargetEvent));
        }
    }

    /**
     * Registers a {@link SearchTargetHandler} to handle quick launch for specified SearchTarget.
     */
    public void registerWeakHandler(SearchTarget searchTarget, SearchTargetHandler targetHandler) {
    public void registerWeakHandler(SearchTargetLegacy searchTarget,
            SearchTargetHandler targetHandler) {
        mCallbacks.put(searchTarget, targetHandler);
    }

    /**
     * Handles quick select for SearchTarget
     */
    public void quickSelect(SearchTarget searchTarget) {
    public void quickSelect(SearchTargetLegacy searchTarget) {
        SearchTargetHandler searchTargetHandler = mCallbacks.get(searchTarget);
        if (searchTargetHandler != null) {
            searchTargetHandler.handleSelection(SearchTargetEvent.QUICK_SELECT);
            searchTargetHandler.handleSelection(SearchTargetEventLegacy.QUICK_SELECT);
        }
    }

+17 −8
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;

import android.app.RemoteAction;
import android.app.search.SearchTarget;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ShortcutInfo;
@@ -42,8 +43,8 @@ import com.android.launcher3.model.data.RemoteActionItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.touch.ItemLongClickListener;
import com.android.launcher3.util.ComponentKey;
import com.android.systemui.plugins.shared.SearchTarget;
import com.android.systemui.plugins.shared.SearchTargetEvent;
import com.android.systemui.plugins.shared.SearchTargetEventLegacy;
import com.android.systemui.plugins.shared.SearchTargetLegacy;

import java.util.function.Consumer;

@@ -69,7 +70,7 @@ public class SearchResultIcon extends BubbleTextView implements

    private final Launcher mLauncher;

    private SearchTarget mSearchTarget;
    private SearchTargetLegacy mSearchTarget;
    private Consumer<ItemInfoWithIcon> mOnItemInfoChanged;

    public SearchResultIcon(Context context) {
@@ -100,13 +101,13 @@ public class SearchResultIcon extends BubbleTextView implements
     * Applies search target with a ItemInfoWithIcon consumer to be called after itemInfo is
     * constructed
     */
    public void applySearchTarget(SearchTarget searchTarget, Consumer<ItemInfoWithIcon> cb) {
    public void applySearchTarget(SearchTargetLegacy searchTarget, Consumer<ItemInfoWithIcon> cb) {
        mOnItemInfoChanged = cb;
        applySearchTarget(searchTarget);
    }

    @Override
    public void applySearchTarget(SearchTarget searchTarget) {
    public void applySearchTarget(SearchTargetLegacy searchTarget) {
        mSearchTarget = searchTarget;
        SearchEventTracker.getInstance(getContext()).registerWeakHandler(mSearchTarget, this);
        setVisibility(VISIBLE);
@@ -127,9 +128,16 @@ public class SearchResultIcon extends BubbleTextView implements
        }
    }

    @Override
    public void applySearchTarget(SearchTarget searchTarget) {
        prepareUsingApp(new ComponentName(searchTarget.getPackageName(),
                searchTarget.getExtras().getString("class")), searchTarget.getUserHandle());
    }

    private void prepareUsingApp(ComponentName componentName, UserHandle userHandle) {
        AllAppsStore appsStore = mLauncher.getAppsView().getAppsStore();
        AppInfo appInfo = appsStore.getApp(new ComponentKey(componentName, userHandle));

        if (appInfo == null) {
            setVisibility(GONE);
            return;
@@ -181,7 +189,8 @@ public class SearchResultIcon extends BubbleTextView implements
    }

    private void reportEvent(int eventType) {
        SearchTargetEvent.Builder b = new SearchTargetEvent.Builder(mSearchTarget, eventType);
        SearchTargetEventLegacy.Builder b = new SearchTargetEventLegacy.Builder(mSearchTarget,
                eventType);
        if (mSearchTarget.getItemType().equals(TARGET_TYPE_SHORTCUT)) {
            b.setShortcutPosition(0);
        }
@@ -191,7 +200,7 @@ public class SearchResultIcon extends BubbleTextView implements

    @Override
    public void onClick(View view) {
        handleSelection(SearchTargetEvent.SELECT);
        handleSelection(SearchTargetEventLegacy.SELECT);
    }

    @Override
@@ -199,7 +208,7 @@ public class SearchResultIcon extends BubbleTextView implements
        if (!supportsLongPress(mSearchTarget.getItemType())) {
            return false;
        }
        reportEvent(SearchTargetEvent.LONG_PRESS);
        reportEvent(SearchTargetEventLegacy.LONG_PRESS);
        return ItemLongClickListener.INSTANCE_ALL_APPS.onLongClick(view);

    }
+7 −6
Original line number Diff line number Diff line
@@ -39,8 +39,8 @@ import com.android.launcher3.R;
import com.android.launcher3.model.data.ItemInfoWithIcon;
import com.android.launcher3.model.data.PackageItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.systemui.plugins.shared.SearchTarget;
import com.android.systemui.plugins.shared.SearchTargetEvent;
import com.android.systemui.plugins.shared.SearchTargetEventLegacy;
import com.android.systemui.plugins.shared.SearchTargetLegacy;

import java.util.ArrayList;
import java.util.List;
@@ -63,7 +63,7 @@ public class SearchResultIconRow extends LinearLayout implements
    private TextView mDescriptionView;
    private BubbleTextView[] mShortcutViews = new BubbleTextView[2];

    private SearchTarget mSearchTarget;
    private SearchTargetLegacy mSearchTarget;
    private PackageItemInfo mProviderInfo;


@@ -100,8 +100,9 @@ public class SearchResultIconRow extends LinearLayout implements
            lp.width = iconSize;
            bubbleTextView.setOnClickListener(view -> {
                WorkspaceItemInfo itemInfo = (WorkspaceItemInfo) bubbleTextView.getTag();
                SearchTargetEvent event = new SearchTargetEvent.Builder(mSearchTarget,
                        SearchTargetEvent.CHILD_SELECT).setShortcutPosition(itemInfo.rank).build();
                SearchTargetEventLegacy event = new SearchTargetEventLegacy.Builder(mSearchTarget,
                        SearchTargetEventLegacy.CHILD_SELECT).setShortcutPosition(
                        itemInfo.rank).build();
                SearchEventTracker.getInstance(getContext()).notifySearchTargetEvent(event);
                mLauncher.getItemOnClickListener().onClick(view);
            });
@@ -111,7 +112,7 @@ public class SearchResultIconRow extends LinearLayout implements
    }

    @Override
    public void applySearchTarget(SearchTarget searchTarget) {
    public void applySearchTarget(SearchTargetLegacy searchTarget) {
        mSearchTarget = searchTarget;
        mResultIcon.applySearchTarget(searchTarget, this);
        String itemType = searchTarget.getItemType();
Loading