Home | History | Annotate | Download | only in search
      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  */
     17 package com.android.settings.search;
     18 
     19 import android.content.Context;
     20 import android.view.View;
     21 
     22 import com.android.settings.dashboard.SiteMapManager;
     23 import com.android.settings.search.ranking.SearchResultsRankerCallback;
     24 
     25 /**
     26  * FeatureProvider for Settings Search
     27  */
     28 public 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