1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 */
17package com.android.settings.search;
18
19import android.content.Context;
20import android.view.View;
21
22import com.android.settings.dashboard.SiteMapManager;
23import com.android.settings.search.ranking.SearchResultsRankerCallback;
24
25/**
26 * FeatureProvider for Settings Search
27 */
28public interface SearchFeatureProvider {
29
30    /**
31     * @return true to use the new version of search
32     */
33    boolean isEnabled(Context context);
34
35    /**
36     * Returns a new loader to search in index database.
37     */
38    DatabaseResultLoader getDatabaseSearchLoader(Context context, String query);
39
40    /**
41     * Returns a new loader to search installed apps.
42     */
43    InstalledAppResultLoader getInstalledAppSearchLoader(Context context, String query);
44
45    /**
46     * Returns a new loader to search accessibility services.
47     */
48    AccessibilityServiceResultLoader getAccessibilityServiceResultLoader(Context context,
49            String query);
50
51    /**
52     * Returns a new loader to search input devices.
53     */
54    InputDeviceResultLoader getInputDeviceResultLoader(Context context, String query);
55
56    /**
57     * Returns a new loader to get all recently saved queries search terms.
58     */
59    SavedQueryLoader getSavedQueryLoader(Context context);
60
61    /**
62     * Returns the manager for indexing Settings data.
63     */
64    DatabaseIndexingManager getIndexingManager(Context context);
65
66    /**
67     * Returns the manager for looking up breadcrumbs.
68     */
69    SiteMapManager getSiteMapManager();
70
71    /**
72     * Updates the Settings indexes and calls {@link IndexingCallback#onIndexingFinished()} on
73     * {@param callback} when indexing is complete.
74     */
75    void updateIndexAsync(Context context, IndexingCallback callback);
76
77    /**
78     * Synchronously updates the Settings database.
79     */
80    void updateIndex(Context context);
81
82    /**
83     * @returns true when indexing is complete.
84     */
85    boolean isIndexingComplete(Context context);
86
87    /**
88     * Initializes the feedback button in case it was dismissed.
89     */
90    default void initFeedbackButton() {
91    }
92
93    /**
94     * Show a button users can click to submit feedback on the quality of the search results.
95     */
96    default void showFeedbackButton(SearchFragment fragment, View view) {
97    }
98
99    /**
100     * Hide the feedback button shown by
101     * {@link #showFeedbackButton(SearchFragment fragment, View view) showFeedbackButton}
102     */
103    default void hideFeedbackButton() {
104    }
105
106    /**
107     * Query search results based on the input query.
108     *
109     * @param context                     application context
110     * @param query                       input user query
111     * @param searchResultsRankerCallback {@link SearchResultsRankerCallback}
112     */
113    default void querySearchResults(Context context, String query,
114            SearchResultsRankerCallback searchResultsRankerCallback) {
115    }
116
117    /**
118     * Cancel pending search query
119     */
120    default void cancelPendingSearchQuery(Context context) {
121    }
122
123    /**
124     * Notify that a search result is clicked.
125     *
126     * @param context      application context
127     * @param query        input user query
128     * @param searchResult clicked result
129     */
130    default void searchResultClicked(Context context, String query, SearchResult searchResult) {
131    }
132
133    /**
134     * @return true to enable search ranking.
135     */
136    default boolean isSmartSearchRankingEnabled(Context context) {
137        return false;
138    }
139
140    /**
141     * @return smart ranking timeout in milliseconds.
142     */
143    default long smartSearchRankingTimeoutMs(Context context) {
144        return 300L;
145    }
146
147    /**
148     * Prepare for search ranking predictions to avoid latency on the first prediction call.
149     */
150    default void searchRankingWarmup(Context context) {
151    }
152
153}
154