SearchFragment.java revision b7087e036a48f5a3db28d02ff7f9b97fbbc46c4f
1package com.example.android.leanback;
2
3import android.content.Context;
4import android.content.Intent;
5import android.os.Bundle;
6import android.os.Handler;
7import android.support.v17.leanback.widget.ArrayObjectAdapter;
8import android.support.v17.leanback.widget.HeaderItem;
9import android.support.v17.leanback.widget.ImageCardView;
10import android.support.v17.leanback.widget.ListRow;
11import android.support.v17.leanback.widget.ListRowPresenter;
12import android.support.v17.leanback.widget.ObjectAdapter;
13import android.support.v17.leanback.widget.OnItemViewClickedListener;
14import android.support.v17.leanback.widget.Presenter;
15import android.support.v17.leanback.widget.Row;
16import android.support.v17.leanback.widget.RowPresenter;
17import android.support.v4.app.ActivityOptionsCompat;
18import android.support.v4.content.res.ResourcesCompat;
19import android.text.TextUtils;
20import android.util.Log;
21
22public 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
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
47    public ObjectAdapter getResultsAdapter() {
48        return mRowsAdapter;
49    }
50
51    @Override
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
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
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
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
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