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

Commit f6eb7890 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Extracting search algorithm in an interface to make it easier to change the search behavior

Change-Id: I0b1d1387c78d13ef749aac39d5c8167c2909716a
parent 7847d10f
Loading
Loading
Loading
Loading
+3 −21
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ import android.widget.TextView.OnEditorActionListener;
import com.android.launcher3.ExtendedEditText;
import com.android.launcher3.Launcher;
import com.android.launcher3.Utilities;
import com.android.launcher3.allapps.AlphabeticalAppsList;
import com.android.launcher3.discovery.AppDiscoveryItem;
import com.android.launcher3.discovery.AppDiscoveryUpdateState;
import com.android.launcher3.util.ComponentKey;
@@ -46,12 +45,11 @@ public class AllAppsSearchBarController
        implements TextWatcher, OnEditorActionListener, ExtendedEditText.OnBackKeyListener {

    protected Launcher mLauncher;
    protected AlphabeticalAppsList mApps;
    protected Callbacks mCb;
    protected ExtendedEditText mInput;
    protected String mQuery;

    protected DefaultAppSearchAlgorithm mSearchAlgorithm;
    protected SearchAlgorithm mSearchAlgorithm;
    protected InputMethodManager mInputMethodManager;

    public void setVisibility(int visibility) {
@@ -61,9 +59,8 @@ public class AllAppsSearchBarController
     * Sets the references to the apps model and the search result callback.
     */
    public final void initialize(
            AlphabeticalAppsList apps, ExtendedEditText input,
            SearchAlgorithm searchAlgorithm, ExtendedEditText input,
            Launcher launcher, Callbacks cb) {
        mApps = apps;
        mCb = cb;
        mLauncher = launcher;

@@ -75,22 +72,7 @@ public class AllAppsSearchBarController
        mInputMethodManager = (InputMethodManager)
                mInput.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);

        mSearchAlgorithm = onInitializeSearch();

        onInitialized();
    }

    /**
     * You can override this method to perform custom initialization.
     */
    protected void onInitialized() {
    }

    /**
     * This method will get called when the controller is set.
     */
    public DefaultAppSearchAlgorithm onInitializeSearch() {
        return new DefaultAppSearchAlgorithm(mApps.getApps());
        mSearchAlgorithm = searchAlgorithm;
    }

    @Override
+2 −2
Original line number Diff line number Diff line
@@ -118,8 +118,8 @@ public class AppsSearchContainerLayout extends FrameLayout
        mAppsRecyclerView = recyclerView;
        mAppsRecyclerView.addOnScrollListener(mElevationController);
        mAdapter = (AllAppsGridAdapter) mAppsRecyclerView.getAdapter();

        mSearchBarController.initialize(appsList, mSearchInput, mLauncher, this);
        mSearchBarController.initialize(
                new DefaultAppSearchAlgorithm(appsList.getApps()), mSearchInput, mLauncher, this);
    }

    @Override
+6 −4
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ import java.util.List;
/**
 * The default search implementation.
 */
public class DefaultAppSearchAlgorithm {
public class DefaultAppSearchAlgorithm implements SearchAlgorithm {

    private final List<AppInfo> mApps;
    protected final Handler mResultHandler;
@@ -36,12 +36,14 @@ public class DefaultAppSearchAlgorithm {
        mResultHandler = new Handler();
    }

    @Override
    public void cancel(boolean interruptActiveRequests) {
        if (interruptActiveRequests) {
            mResultHandler.removeCallbacksAndMessages(null);
        }
    }

    @Override
    public void doSearch(final String query,
            final AllAppsSearchBarController.Callbacks callback) {
        final ArrayList<ComponentKey> result = getTitleMatchResult(query);
@@ -54,7 +56,7 @@ public class DefaultAppSearchAlgorithm {
        });
    }

    public ArrayList<ComponentKey> getTitleMatchResult(String query) {
    private ArrayList<ComponentKey> getTitleMatchResult(String query) {
        // Do an intersection of the words in the query and each title, and filter out all the
        // apps that don't match all of the words in the query.
        final String queryTextLower = query.toLowerCase();
@@ -67,7 +69,7 @@ public class DefaultAppSearchAlgorithm {
        return result;
    }

    public boolean matches(AppInfo info, String query) {
    public static boolean matches(AppInfo info, String query) {
        int queryLength = query.length();

        String title = info.title.toString();
@@ -103,7 +105,7 @@ public class DefaultAppSearchAlgorithm {
     *      3) Any capital character after a digit or small character
     *      4) Any capital character before a small character
     */
    protected boolean isBreak(int thisType, int prevType, int nextType) {
    private static boolean isBreak(int thisType, int prevType, int nextType) {
        switch (thisType) {
            case Character.UPPERCASE_LETTER:
                if (nextType == Character.UPPERCASE_LETTER) {
+32 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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;

/**
 * An interface for handling search.
 */
public interface SearchAlgorithm {

    /**
     * Performs search and sends the result to the callback.
     */
    void doSearch(String query, AllAppsSearchBarController.Callbacks callback);

    /**
     * Cancels any active request.
     */
    void cancel(boolean interruptActiveRequests);
}