• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.example.android.leanback;
2 
3 import android.content.Context;
4 import android.content.Intent;
5 import android.os.Bundle;
6 import android.os.Handler;
7 import android.support.v17.leanback.widget.ArrayObjectAdapter;
8 import android.support.v17.leanback.widget.HeaderItem;
9 import android.support.v17.leanback.widget.ImageCardView;
10 import android.support.v17.leanback.widget.ListRow;
11 import android.support.v17.leanback.widget.ListRowPresenter;
12 import android.support.v17.leanback.widget.ObjectAdapter;
13 import android.support.v17.leanback.widget.OnItemViewClickedListener;
14 import android.support.v17.leanback.widget.Presenter;
15 import android.support.v17.leanback.widget.Row;
16 import android.support.v17.leanback.widget.RowPresenter;
17 import android.support.v4.app.ActivityOptionsCompat;
18 import android.support.v4.content.res.ResourcesCompat;
19 import android.text.TextUtils;
20 import android.util.Log;
21 
22 public class SearchFragment extends android.support.v17.leanback.app.SearchFragment
23     implements android.support.v17.leanback.app.SearchFragment.SearchResultProvider {
24     private static final String TAG = "leanback.SearchFragment";
25     private static final int NUM_ROWS = 3;
26     private static final int SEARCH_DELAY_MS = 1000;
27 
28     private ArrayObjectAdapter mRowsAdapter;
29     private Handler mHandler = new Handler();
30     private String mQuery;
31 
32     @Override
onCreate(Bundle savedInstanceState)33     public void onCreate(Bundle savedInstanceState) {
34         super.onCreate(savedInstanceState);
35 
36         mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
37 
38         final Context context = getActivity();
39         setBadgeDrawable(ResourcesCompat.getDrawable(context.getResources(),
40                 R.drawable.ic_title, context.getTheme()));
41         setTitle("Leanback Sample App");
42         setSearchResultProvider(this);
43         setOnItemViewClickedListener(new ItemViewClickedListener());
44     }
45 
46     @Override
getResultsAdapter()47     public ObjectAdapter getResultsAdapter() {
48         return mRowsAdapter;
49     }
50 
51     @Override
onQueryTextChange(String newQuery)52     public boolean onQueryTextChange(String newQuery) {
53         Log.i(TAG, String.format("Search Query Text Change %s", newQuery));
54         mRowsAdapter.clear();
55         loadQuery(newQuery);
56         return true;
57     }
58 
59     @Override
onQueryTextSubmit(String query)60     public boolean onQueryTextSubmit(String query) {
61         Log.i(TAG, String.format("Search Query Text Submit %s", query));
62         mRowsAdapter.clear();
63         loadQuery(query);
64         return true;
65     }
66 
loadQuery(String query)67     private void loadQuery(String query) {
68         mQuery = query;
69         mHandler.removeCallbacks(mDelayedLoad);
70         if (!TextUtils.isEmpty(query) && !query.equals("nil")) {
71             mHandler.postDelayed(mDelayedLoad, SEARCH_DELAY_MS);
72         }
73     }
74 
loadRows()75     private void loadRows() {
76         for (int i = 0; i < NUM_ROWS; ++i) {
77             ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new CardPresenter());
78             listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1));
79             listRowAdapter.add(new PhotoItem("This is a test", R.drawable.gallery_photo_2));
80             HeaderItem header = new HeaderItem(i, mQuery + " results row " + i);
81             mRowsAdapter.add(new ListRow(header, listRowAdapter));
82         }
83     }
84 
85     private Runnable mDelayedLoad = new Runnable() {
86         @Override
87         public void run() {
88             loadRows();
89         }
90     };
91 
92     private final class ItemViewClickedListener implements OnItemViewClickedListener {
93         @Override
onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row)94         public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
95                 RowPresenter.ViewHolder rowViewHolder, Row row) {
96             Intent intent = new Intent(getActivity(), DetailsActivity.class);
97             intent.putExtra(DetailsActivity.EXTRA_ITEM, (PhotoItem) item);
98 
99             Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
100                     getActivity(),
101                     ((ImageCardView)itemViewHolder.view).getMainImageView(),
102                     DetailsActivity.SHARED_ELEMENT_NAME).toBundle();
103             getActivity().startActivity(intent, bundle);
104         }
105     }
106 }
107