1816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/* 2816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Copyright (C) 2015 The Android Open Source Project 3816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 4816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License"); 5816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * you may not use this file except in compliance with the License. 6816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * You may obtain a copy of the License at 7816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 8816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * http://www.apache.org/licenses/LICENSE-2.0 9816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 10816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Unless required by applicable law or agreed to in writing, software 11816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS, 12816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * See the License for the specific language governing permissions and 14816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * limitations under the License. 15816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 16816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 17816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopackage com.android.tv.search; 18816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 19816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.res.Resources; 20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.graphics.Bitmap; 21816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.graphics.drawable.BitmapDrawable; 22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.AsyncTask; 23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.Bundle; 24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.app.SearchFragment; 25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.ArrayObjectAdapter; 26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.HeaderItem; 27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.ImageCardView; 28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.ListRow; 29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.ListRowPresenter; 30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.ObjectAdapter; 31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.OnItemViewClickedListener; 32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.Presenter; 33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.Row; 34816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.RowPresenter; 35816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.SearchBar; 36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.text.TextUtils; 37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.util.Log; 38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.LayoutInflater; 39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.View; 40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.ViewGroup; 41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.MainActivity; 43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.R; 44816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.util.ImageLoader; 457d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalkoimport com.android.tv.util.PermissionUtils; 46816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.List; 48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class ProgramGuideSearchFragment extends SearchFragment { 50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private static final String TAG = "ProgramGuideSearch"; 51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private static final boolean DEBUG = false; 52816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private static final int SEARCH_RESULT_MAX = 10; 53816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 54816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private final Presenter mPresenter = new Presenter() { 55816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 56816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public Presenter.ViewHolder onCreateViewHolder(ViewGroup viewGroup) { 57816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (DEBUG) Log.d(TAG, "onCreateViewHolder"); 58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ImageCardView cardView = new ImageCardView(mMainActivity); 60816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko cardView.setFocusable(true); 61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko cardView.setFocusableInTouchMode(true); 62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko cardView.setMainImageAdjustViewBounds(false); 63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Resources res = mMainActivity.getResources(); 65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko cardView.setMainImageDimensions( 66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko res.getDimensionPixelSize(R.dimen.card_image_layout_width), 67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko res.getDimensionPixelSize(R.dimen.card_image_layout_height)); 68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 69816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return new Presenter.ViewHolder(cardView); 70816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 71816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 72816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 73816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onBindViewHolder(ViewHolder viewHolder, Object o) { 74ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko ImageCardView cardView = (ImageCardView) viewHolder.view; 75816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko LocalSearchProvider.SearchResult result = (LocalSearchProvider.SearchResult) o; 76816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (DEBUG) Log.d(TAG, "onBindViewHolder result:" + result); 77816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 78816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko cardView.setTitleText(result.title); 79816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (!TextUtils.isEmpty(result.imageUri)) { 80ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko ImageLoader.loadBitmap(mMainActivity, result.imageUri, mMainCardWidth, 81ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko mMainCardHeight, createImageLoaderCallback(cardView)); 82816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } else { 83816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko cardView.setMainImage(mMainActivity.getDrawable(R.drawable.ic_launcher)); 84816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 85816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 86816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 87816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 88816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onUnbindViewHolder(ViewHolder viewHolder) { 89816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Do nothing here. 90816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 91816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko }; 92816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 93ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko private static ImageLoader.ImageLoaderCallback<ImageCardView> createImageLoaderCallback( 94ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko ImageCardView cardView) { 95ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return new ImageLoader.ImageLoaderCallback<ImageCardView>(cardView) { 96ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko @Override 97ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public void onBitmapLoaded(ImageCardView cardView, Bitmap bitmap) { 98ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko cardView.setMainImage( 99ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko new BitmapDrawable(cardView.getContext().getResources(), bitmap)); 100ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 101ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko }; 102ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 103ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 104816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private final SearchResultProvider mSearchResultProvider = new SearchResultProvider() { 105816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 106816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public ObjectAdapter getResultsAdapter() { 107816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return mResultAdapter; 108816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 109816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 110816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 111816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public boolean onQueryTextChange(String query) { 112816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko searchAndRefresh(query); 113816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return true; 114816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 115816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 116816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 117816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public boolean onQueryTextSubmit(String query) { 118816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko searchAndRefresh(query); 119816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return true; 120816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 121816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko }; 122816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 123816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private final OnItemViewClickedListener mItemClickedListener = new OnItemViewClickedListener() { 124816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 125816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onItemClicked(Presenter.ViewHolder viewHolder, Object o, RowPresenter 126816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko .ViewHolder viewHolder1, Row row) { 127816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko LocalSearchProvider.SearchResult result = (LocalSearchProvider.SearchResult) o; 128816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mMainActivity.getFragmentManager().popBackStack(); 129816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mMainActivity.tuneToChannel( 130816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mMainActivity.getChannelDataManager().getChannel(result.channelId)); 131816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 132816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko }; 133816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 134816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private final ArrayObjectAdapter mResultAdapter = 135816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko new ArrayObjectAdapter(new ListRowPresenter()); 136816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private MainActivity mMainActivity; 1377d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko private SearchInterface mSearch; 138816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private int mMainCardWidth; 139816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private int mMainCardHeight; 140816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private SearchTask mSearchTask; 141816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 142816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 143816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onCreate(Bundle savedInstanceState) { 144816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onCreate(savedInstanceState); 145816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 146816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mMainActivity = (MainActivity) getActivity(); 1477d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko if (PermissionUtils.hasAccessAllEpg(mMainActivity)) { 1487d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko mSearch = new TvProviderSearch(mMainActivity); 1497d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko } else { 1507d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko mSearch = new DataManagerSearch(mMainActivity); 1517d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko } 152816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Resources res = getResources(); 153816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mMainCardWidth = res.getDimensionPixelSize(R.dimen.card_image_layout_width); 154816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mMainCardHeight = res.getDimensionPixelSize(R.dimen.card_image_layout_height); 155816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 156816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 157816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 158816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public View onCreateView( 159816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 160816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko View v = super.onCreateView(inflater, container, savedInstanceState); 161816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko v.setBackgroundResource(R.color.program_guide_scrim); 162816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 163816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko setBadgeDrawable(mMainActivity.getDrawable(R.drawable.ic_launcher)); 164816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko setSearchResultProvider(mSearchResultProvider); 165816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko setOnItemViewClickedListener(mItemClickedListener); 166816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return v; 167816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 168816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 169816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 170816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onResume() { 171816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onResume(); 172816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 173816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko SearchBar searchBar = (SearchBar) getView().findViewById(R.id.lb_search_bar); 174816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko searchBar.setSearchQuery(""); 175816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mResultAdapter.clear(); 176816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 177816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 178816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private void searchAndRefresh(String query) { 179816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // TODO: Search directly from program data manager for performance. 180816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // TODO: Search upcoming programs. 181816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (mSearchTask != null) { 182816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mSearchTask.cancel(true); 183816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 184816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mSearchTask = new SearchTask(query); 185816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mSearchTask.execute(); 186816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 187816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 188816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private class SearchTask extends 189816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko AsyncTask<Void, Void, List<LocalSearchProvider.SearchResult>> { 190816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private final String mQuery; 191816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 192816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public SearchTask(String query) { 193816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mQuery = query; 194816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 195816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 196816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 197816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected List<LocalSearchProvider.SearchResult> doInBackground(Void... params) { 1987d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko return mSearch.search(mQuery, SEARCH_RESULT_MAX, 199816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko TvProviderSearch.ACTION_TYPE_AMBIGUOUS); 200816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 201816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 202816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 203816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected void onPostExecute(List<LocalSearchProvider.SearchResult> results) { 204816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onPostExecute(results); 205816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mResultAdapter.clear(); 206816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 207816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (DEBUG) { 208816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Log.d(TAG, "searchAndRefresh query=" + mQuery 209816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko + " results=" + ((results == null) ? 0 : results.size())); 210816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 211816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 212816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (results == null || results.size() == 0) { 213816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko HeaderItem header = 214816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko new HeaderItem(0, mMainActivity.getString(R.string 215816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko .search_result_no_result)); 216816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ArrayObjectAdapter resultsAdapter = new ArrayObjectAdapter(mPresenter); 217816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mResultAdapter.add(new ListRow(header, resultsAdapter)); 218816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } else { 219816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko HeaderItem header = 220816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko new HeaderItem(0, mMainActivity.getString(R.string 221816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko .search_result_title)); 222816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ArrayObjectAdapter resultsAdapter = new ArrayObjectAdapter(mPresenter); 223816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko resultsAdapter.addAll(0, results); 224816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mResultAdapter.add(new ListRow(header, resultsAdapter)); 225816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 226816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mSearchTask = null; 227816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 228816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 229816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko} 230