1/*
2 * Copyright (C) 2010 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 */
16package com.android.quicksearchbox.ui;
17
18import com.android.quicksearchbox.Promoter;
19import com.android.quicksearchbox.SuggestionCursor;
20import com.android.quicksearchbox.SuggestionPosition;
21import com.android.quicksearchbox.Suggestions;
22
23import android.view.View.OnFocusChangeListener;
24import android.widget.ExpandableListAdapter;
25import android.widget.ListAdapter;
26
27/**
28 * Interface for suggestions adapters.
29 *
30 * @param <A> the adapter class used by the UI, probably either {@link ListAdapter} or
31 *      {@link ExpandableListAdapter}.
32 */
33public interface SuggestionsAdapter<A> {
34
35    /**
36     * Sets the maximum number of promoted suggestions to be provided by this adapter.
37     */
38    void setMaxPromoted(int maxPromoted);
39
40    /**
41     * Sets the suggestion promoter.
42     */
43    void setPromoter(Promoter promoter);
44
45    /**
46     * Sets the listener to be notified of clicks on suggestions.
47     */
48    void setSuggestionClickListener(SuggestionClickListener listener);
49
50    /**
51     * Sets the listener to be notified of focus change events on suggestion views.
52     */
53    void setOnFocusChangeListener(OnFocusChangeListener l);
54
55    /**
56     * Sets the current suggestions.
57     */
58    void setSuggestions(Suggestions suggestions);
59
60    /**
61     * Indicates if there's any suggestions in this adapter.
62     */
63    boolean isEmpty();
64
65    /**
66     * Gets the current suggestions.
67     */
68    Suggestions getSuggestions();
69
70    /**
71     * Gets the cursor and position corresponding to the given suggestion ID.
72     * @param suggestionId Suggestion ID.
73     */
74    SuggestionPosition getSuggestion(long suggestionId);
75
76    /**
77     * Gets the current list of promoted suggestions.
78     */
79    SuggestionCursor getCurrentPromotedSuggestions();
80
81    /**
82     * Handles a regular click on a suggestion.
83     *
84     * @param suggestionId The ID of the suggestion clicked. If the suggestion list is flat, this
85     *      will be the position within the list.
86     */
87    void onSuggestionClicked(long suggestionId);
88
89    /**
90     * Handles a click on a quick contact badge.
91     *
92     * @param suggestionId The ID of the suggestion clicked. If the suggestion list is flat, this
93     *      will be the position within the list.
94     */
95    void onSuggestionQuickContactClicked(long suggestionId);
96
97    /**
98     * Handles a request to remove a suggestion from history.
99     *
100     * @param suggestionId The ID of the suggestion clicked. If the suggestion list is flat, this
101     *      will be the position within the list.
102     */
103    void onSuggestionRemoveFromHistoryClicked(long suggestionId);
104
105    /**
106     * Handles a click on the query refinement button.
107     *
108     * @param suggestionId The ID of the suggestion clicked. If the suggestion list is flat, this
109     *      will be the position within the list.
110     */
111    void onSuggestionQueryRefineClicked(long suggestionId);
112
113    /**
114     * Gets the adapter to be used by the UI view.
115     */
116    A getListAdapter();
117
118}
119