AllAppsSearchBarController.java revision 4919827990b16ae22595d0b7cb123a875961d9be
1ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung/*
2ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung * Copyright (C) 2015 The Android Open Source Project
3ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung *
4ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung * Licensed under the Apache License, Version 2.0 (the "License");
5ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung * you may not use this file except in compliance with the License.
6ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung * You may obtain a copy of the License at
7ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung *
8ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung *      http://www.apache.org/licenses/LICENSE-2.0
9ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung *
10ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung * Unless required by applicable law or agreed to in writing, software
11ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung * distributed under the License is distributed on an "AS IS" BASIS,
12ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung * See the License for the specific language governing permissions and
14ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung * limitations under the License.
15ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung */
16ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chungpackage com.android.launcher3.allapps;
17ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
184919827990b16ae22595d0b7cb123a875961d9beSunny Goyalimport android.content.ComponentName;
19ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chungimport android.graphics.Rect;
20ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chungimport android.view.View;
21ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chungimport android.view.ViewGroup;
22ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
235183285847816cee9d0db6a8a7ab1a5929163e4eSunny Goyalimport com.android.launcher3.util.ComponentKey;
245183285847816cee9d0db6a8a7ab1a5929163e4eSunny Goyal
25ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chungimport java.util.ArrayList;
26ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
27ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung/**
28ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung * An interface to a search box that AllApps can command.
29ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung */
30ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chungpublic abstract class AllAppsSearchBarController {
31ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
32ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    protected AlphabeticalAppsList mApps;
33ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    protected Callbacks mCb;
34ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
35ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    /**
36ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     * Sets the references to the apps model and the search result callback.
37ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     */
384919827990b16ae22595d0b7cb123a875961d9beSunny Goyal    public final void initialize(AlphabeticalAppsList apps, Callbacks cb) {
39ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung        mApps = apps;
40ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung        mCb = cb;
414919827990b16ae22595d0b7cb123a875961d9beSunny Goyal        onInitialize();
42ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    }
43ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
444919827990b16ae22595d0b7cb123a875961d9beSunny Goyal    /**
454919827990b16ae22595d0b7cb123a875961d9beSunny Goyal     * To be overridden by subclasses.  This method will get called when the controller is set,
464919827990b16ae22595d0b7cb123a875961d9beSunny Goyal     * before getView().
474919827990b16ae22595d0b7cb123a875961d9beSunny Goyal     */
484919827990b16ae22595d0b7cb123a875961d9beSunny Goyal    protected abstract void onInitialize();
49ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
50ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    /**
51ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     * Returns the search bar view.
52ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     * @param parent the parent to attach the search bar view to.
53ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     */
54ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    public abstract View getView(ViewGroup parent);
55ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
56ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    /**
57ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     * Focuses the search field to handle key events.
58ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     */
59ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    public abstract void focusSearchField();
60ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
61ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    /**
62ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     * Returns whether the search field is focused.
63ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     */
64ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    public abstract boolean isSearchFieldFocused();
65ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
66ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    /**
67ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     * Resets the search bar state.
68ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     */
69ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    public abstract void reset();
70ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
71ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    /**
72ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     * Returns whether the prediction bar should currently be visible depending on the state of
73ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     * the search bar.
74ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     */
75ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    public abstract boolean shouldShowPredictionBar();
76ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
77ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    /**
78ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     * Callback for getting search results.
79ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung     */
80ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    public interface Callbacks {
81ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
82ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung        /**
83ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung         * Called when the bounds of the search bar has changed.
84ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung         */
85ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung        void onBoundsChanged(Rect newBounds);
86ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
87ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung        /**
88ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung         * Called when the search is complete.
89ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung         *
90ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung         * @param apps sorted list of matching components or null if in case of failure.
91ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung         */
925183285847816cee9d0db6a8a7ab1a5929163e4eSunny Goyal        void onSearchResult(String query, ArrayList<ComponentKey> apps);
93ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung
94ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung        /**
95ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung         * Called when the search results should be cleared.
96ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung         */
97ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung        void clearSearchResult();
98ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung    }
99ef7f874a889b609bd34e692b9c9a1f8cefd1ea95Winson Chung}