SuggestionsAdapter.java revision 185bb2e3881452c084fde44d9bee657f65881b0e
1185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert/* 2185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * Copyright (C) 2009 The Android Open Source Project 3185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * 4185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 5185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * you may not use this file except in compliance with the License. 6185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * You may obtain a copy of the License at 7185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * 8185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 9185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * 10185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * Unless required by applicable law or agreed to in writing, software 11185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 12185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * See the License for the specific language governing permissions and 14185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * limitations under the License. 15185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert */ 16185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 17185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertpackage com.android.quicksearchbox.ui; 18185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 19185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport com.android.quicksearchbox.Source; 20185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport com.android.quicksearchbox.SuggestionCursor; 21185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport com.android.quicksearchbox.Suggestions; 22185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 23185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport android.database.DataSetObservable; 24185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport android.database.DataSetObserver; 25185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport android.graphics.drawable.Drawable; 26185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport android.util.Log; 27185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport android.view.View; 28185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport android.view.ViewGroup; 29185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 30185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport java.util.ArrayList; 31185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 32185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert/** 33185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * Uses a {@link Suggestions} object to back a {@link TabView}. 34185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert */ 35185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertpublic class SuggestionsAdapter implements TabAdapter { 36185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 37185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private static final boolean DBG = true; 38185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private static final String TAG = "QSB.SuggestionsAdapter"; 39185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 40185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private long mSourceResultPublishDelayMillis; 41185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private long mInitialSourceResultWaitMillis; 42185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 43185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private final DataSetObservable mDataSetObservable = new DataSetObservable(); 44185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 45185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private final SuggestionViewFactory mViewFactory; 46185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 47185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private DataSetObserver mDataSetObserver; 48185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 49185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert /** 50185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * The tabs, in their display order. 51185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert */ 52185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private final ArrayList<Tab> mTabs = new ArrayList<Tab>(); 53185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 54185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private Suggestions mSuggestions; 55185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 56185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private boolean mClosed = false; 57185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 58185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public SuggestionsAdapter(SuggestionViewFactory viewFactory) { 59185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mViewFactory = viewFactory; 60185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 61185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 62185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public void setSourceResultPublishDelayMillis(long millis) { 63185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mSourceResultPublishDelayMillis = millis; 64185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 65185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 66185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public void setInitialSourceResultWaitMillis(long millis) { 67185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mInitialSourceResultWaitMillis = millis; 68185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 69185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 70185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public int getTabCount() { 71185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return mTabs.size(); 72185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 73185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 74185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public void setSources(ArrayList<Source> sources) { 75185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert setSuggestions(null); 76185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mTabs.clear(); 77185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert SuggestionCursorAdapter promoted = new SuggestionCursorAdapter(mViewFactory); 78185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mTabs.add(new PromotedTab(promoted)); 79185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert int count = sources.size(); 80185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert for (int i = 0; i < count; i++) { 81185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert Source source = sources.get(i); 82185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert // TODO: Each source should specify its own view factory 83185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert SuggestionCursorAdapter adapter = new SuggestionCursorAdapter(mViewFactory); 84185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mTabs.add(new SourceTab(source, adapter)); 85185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 86185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert notifyDataSetChanged(); 87185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 88185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 89185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public void close() { 90185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert setSuggestions(null); 91185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mTabs.clear(); 92185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mClosed = true; 93185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 94185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 95185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public void setSuggestions(Suggestions suggestions) { 96185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert if (mSuggestions == suggestions) { 97185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return; 98185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 99185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert if (mClosed) { 100185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert if (suggestions != null) { 101185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert suggestions.close(); 102185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 103185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return; 104185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 105185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert if (mDataSetObserver == null) { 106185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mDataSetObserver = new MySuggestionsObserver(); 107185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 108185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert // TODO: delay the change if there are no suggestions for the currently visible tab. 109185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert if (mSuggestions != null) { 110185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mSuggestions.unregisterDataSetObserver(mDataSetObserver); 111185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mSuggestions.close(); 112185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 113185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mSuggestions = suggestions; 114185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert if (mSuggestions != null) { 115185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mSuggestions.registerDataSetObserver(mDataSetObserver); 116185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 117185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert onSuggestionsChanged(); 118185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 119185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 120185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public View getTabContentView(int position, ViewGroup parent) { 121185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert if (DBG) Log.d(TAG, "getTabContent(" + position + ")"); 122185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return getTab(position).getListView(parent); 123185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 124185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 125185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public View getTabHandleView(int position, ViewGroup parent) { 126185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return getTab(position).getTabHandleView(parent); 127185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 128185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 129185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private Tab getTab(int position) { 130185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert if (mClosed) { 131185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert throw new IllegalStateException("SuggestionsAdapter is closed."); 132185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 133185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return mTabs.get(position); 134185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 135185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 136185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public String getTag(int position) { 137185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return String.valueOf(position); 138185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 139185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 140185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public int getTabPosition(String tag) { 141185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return Integer.parseInt(tag); 142185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 143185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 144185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public void registerDataSetObserver(DataSetObserver observer) { 145185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mDataSetObservable.registerObserver(observer); 146185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 147185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 148185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public void unregisterDataSetObserver(DataSetObserver observer) { 149185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mDataSetObservable.unregisterObserver(observer); 150185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 151185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 152185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert protected void notifyDataSetChanged() { 153185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mDataSetObservable.notifyChanged(); 154185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 155185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 156185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert protected void notifyDataSetInvalidated() { 157185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mDataSetObservable.notifyInvalidated(); 158185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 159185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 160185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert protected void onSuggestionsChanged() { 161185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert if (DBG) Log.d(TAG, "onSuggestionsChanged(), mSuggestions=" + mSuggestions); 162185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert // TODO: It's inefficient to change all cursors every time a 163185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert // new one is added to Suggestions, we should get a set of 164185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert // changed ones in the call. 165185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert for (Tab tab : mTabs) { 166185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert tab.update(); 167185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 168185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 169185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 170185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private class MySuggestionsObserver extends DataSetObserver { 171185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert @Override 172185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public void onChanged() { 173185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert onSuggestionsChanged(); 174185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 175185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 176185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 177185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private abstract class Tab { 178185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private final SuggestionCursorAdapter mAdapter; 179185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 180185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public Tab(SuggestionCursorAdapter adapter) { 181185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mAdapter = adapter; 182185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 183185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 184185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public SuggestionCursorAdapter getAdapter() { 185185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return mAdapter; 186185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 187185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 188185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public void update() { 189185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert if (mSuggestions == null) { 190185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mAdapter.changeCursor(null); 191185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } else { 192185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mAdapter.changeCursor(getCursor(mSuggestions)); 193185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 194185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 195185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 196185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert protected abstract SuggestionCursor getCursor(Suggestions suggestions); 197185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 198185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert protected abstract Drawable getIcon(); 199185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 200185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public View getTabHandleView(ViewGroup parent) { 201185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert TabHandleView view = mViewFactory.createSuggestionTabView(parent); 202185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert view.setIcon(getIcon()); 203185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return view; 204185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 205185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 206185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public View getListView(ViewGroup parent) { 207185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert if (DBG) Log.d(TAG, "getListView()"); 208185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert SuggestionListView view = mViewFactory.createSuggestionListView(parent); 209185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert view.setAdapter(mAdapter); 210185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return view; 211185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 212185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 213185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 214185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private class PromotedTab extends Tab { 215185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 216185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public PromotedTab(SuggestionCursorAdapter adapter) { 217185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert super(adapter); 218185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 219185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 220185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert @Override 221185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert protected SuggestionCursor getCursor(Suggestions suggestions) { 222185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return suggestions.getPromoted(); 223185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 224185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 225185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert @Override 226185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert protected Drawable getIcon() { 227185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return mViewFactory.getPromotedIcon(); 228185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 229185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 230185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 231185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private class SourceTab extends Tab { 232185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert private final Source mSource; 233185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 234185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert public SourceTab(Source source, SuggestionCursorAdapter adapter) { 235185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert super(adapter); 236185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert mSource = source; 237185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 238185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 239185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert @Override 240185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert protected SuggestionCursor getCursor(Suggestions suggestions) { 241185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return suggestions.getSourceResult(mSource.getComponentName()); 242185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 243185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 244185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert @Override 245185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert protected Drawable getIcon() { 246185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert return mSource.getSourceIcon(); 247185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 248185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert } 249185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert 250185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert} 251