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