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

Commit b03d2b41 authored by Hyunyoung Song's avatar Hyunyoung Song Committed by Android (Google) Code Review
Browse files

Merge "Search query method should support multiple consumers" into ub-launcher3-master

parents fb79f554 caa1e9c3
Loading
Loading
Loading
Loading
+35 −26
Original line number Diff line number Diff line
@@ -178,16 +178,46 @@ public class AlphabeticalAppsList implements AllAppsStore.OnUpdateListener {
    /**
     * Sets results list for search
     */
    public boolean setSearchResults(ArrayList<AdapterItem> f) {
        if (f == null || mSearchResults != f) {
            boolean same = mSearchResults != null && mSearchResults.equals(f);
            mSearchResults = f;
    public boolean setSearchResults(ArrayList<AdapterItem> results) {
        if (results == null || mSearchResults != results) {
            boolean same = mSearchResults != null && mSearchResults.equals(results);
            mSearchResults = results;
            onAppsUpdated();
            return !same;
        }
        return false;
    }

    public boolean appendSearchResults(ArrayList<AdapterItem> results) {
        if (mSearchResults != null && results != null && results.size() > 0) {
            updateSearchAdapterItems(results, mSearchResults.size());
            refreshRecyclerView();
            return true;
        }
        return false;
    }

    void updateSearchAdapterItems(ArrayList<AdapterItem> list, int offset) {
        SearchSectionInfo lastSection = null;
        for (int i = 0; i < list.size(); i++) {
            AdapterItem adapterItem = list.get(i);
            adapterItem.position = offset + i;
            mAdapterItems.add(adapterItem);
            if (adapterItem.searchSectionInfo != lastSection) {
                if (adapterItem.searchSectionInfo != null) {
                    adapterItem.searchSectionInfo.setPosStart(adapterItem.position);
                }
                if (lastSection != null) {
                    lastSection.setPosEnd(adapterItem.position - 1);
                }
                lastSection = adapterItem.searchSectionInfo;
            }
            if (adapterItem.isCountedForAccessibility()) {
                mAccessibilityResultsCount++;
            }
        }
    }

    /**
     * Updates internals when the set of apps are updated.
     */
@@ -294,28 +324,7 @@ public class AlphabeticalAppsList implements AllAppsStore.OnUpdateListener {
            }
            appSection.setPosEnd(mApps.isEmpty() ? appSection.getPosStart() : position - 1);
        } else {
            List<AppInfo> appInfos = new ArrayList<>();
            SearchSectionInfo lastSection = null;
            for (int i = 0; i < mSearchResults.size(); i++) {
                AdapterItem adapterItem = mSearchResults.get(i);
                adapterItem.position = i;
                mAdapterItems.add(adapterItem);
                if (adapterItem.searchSectionInfo != lastSection) {
                    if (adapterItem.searchSectionInfo != null) {
                        adapterItem.searchSectionInfo.setPosStart(i);
                    }
                    if (lastSection != null) {
                        lastSection.setPosEnd(i - 1);
                    }
                    lastSection = adapterItem.searchSectionInfo;
                }
                if (AllAppsGridAdapter.isIconViewType(adapterItem.viewType)) {
                    appInfos.add(adapterItem.appInfo);
                }
                if (adapterItem.isCountedForAccessibility()) {
                    mAccessibilityResultsCount++;
                }
            }
            updateSearchAdapterItems(mSearchResults, 0);
            if (!FeatureFlags.ENABLE_DEVICE_SEARCH.get()) {
                // Append the search market item
                if (hasNoFilteredResults()) {
+10 −3
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.ExtendedEditText;
import com.android.launcher3.Launcher;
import com.android.launcher3.Utilities;
import com.android.launcher3.allapps.AllAppsGridAdapter;
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;
@@ -194,9 +194,16 @@ public class AllAppsSearchBarController
        /**
         * Called when the search from primary source is complete.
         *
         * @param items sorted list of search result adapter items.
         * @param items sorted list of search result adapter items
         */
        void onSearchResult(String query, ArrayList<AllAppsGridAdapter.AdapterItem> items);
        void onSearchResult(String query, ArrayList<AdapterItem> items);

        /**
         * Called when the search from secondary source is complete.
         *
         * @param items sorted list of search result adapter items
         */
        void onAppendSearchResult(String query, ArrayList<AdapterItem> items);

        /**
         * Called when the search results should be cleared.
+10 −2
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ import com.android.launcher3.Insettable;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
import com.android.launcher3.allapps.AllAppsContainerView;
import com.android.launcher3.allapps.AllAppsGridAdapter;
import com.android.launcher3.allapps.AllAppsGridAdapter.AdapterItem;
import com.android.launcher3.allapps.AllAppsStore;
import com.android.launcher3.allapps.AlphabeticalAppsList;
import com.android.launcher3.allapps.SearchUiManager;
@@ -173,7 +173,7 @@ public class AppsSearchContainerLayout extends ExtendedEditText
    }

    @Override
    public void onSearchResult(String query, ArrayList<AllAppsGridAdapter.AdapterItem> items) {
    public void onSearchResult(String query, ArrayList<AdapterItem> items) {
        if (items != null) {
            mApps.setSearchResults(items);
            notifyResultChanged();
@@ -181,6 +181,14 @@ public class AppsSearchContainerLayout extends ExtendedEditText
        }
    }

    @Override
    public void onAppendSearchResult(String query, ArrayList<AdapterItem> items) {
        if (items != null) {
            mApps.appendSearchResults(items);
            notifyResultChanged();
        }
    }

    @Override
    public void clearSearchResult() {
        if (mApps.setSearchResults(null)) {
+4 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.launcher3.allapps.search;

import android.content.Context;
import android.os.CancellationSignal;

import com.android.launcher3.LauncherAppState;
import com.android.launcher3.allapps.AllAppsGridAdapter.AdapterItem;
@@ -47,11 +48,12 @@ public class AppsSearchPipeline implements SearchPipeline {
    }

    @Override
    public void performSearch(String query, Consumer<ArrayList<AdapterItem>> callback) {
    public void query(String input, Consumer<ArrayList<AdapterItem>> callback,
            CancellationSignal cancellationSignal) {
        mLauncherAppState.getModel().enqueueModelUpdateTask(new BaseModelUpdateTask() {
            @Override
            public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) {
                List<AppInfo> matchingResults = getTitleMatchResult(apps.data, query);
                List<AppInfo> matchingResults = getTitleMatchResult(apps.data, input);
                callback.accept(getAdapterItems(matchingResults));
            }
        });
+4 −2
Original line number Diff line number Diff line
@@ -46,8 +46,10 @@ public class DefaultAppSearchAlgorithm implements SearchAlgorithm {
    @Override
    public void doSearch(final String query,
            final AllAppsSearchBarController.Callbacks callback) {
        mAppsSearchPipeline.performSearch(query,
                results -> mResultHandler.post(() -> callback.onSearchResult(query, results)));
        mAppsSearchPipeline.query(query,
                results -> mResultHandler.post(
                        () -> callback.onSearchResult(query, results)),
                null);
    }

    public static boolean matches(AppInfo info, String query, StringMatcher matcher) {
Loading