SearchFragment.java revision 05a2ef073edfc6226e014d93c70e0774887de700
1package com.example.android.leanback;
2
3import android.content.Intent;
4import android.os.Bundle;
5import android.os.Handler;
6import android.support.v17.leanback.widget.ArrayObjectAdapter;
7import android.support.v17.leanback.widget.HeaderItem;
8import android.support.v17.leanback.widget.ListRow;
9import android.support.v17.leanback.widget.ListRowPresenter;
10import android.support.v17.leanback.widget.ObjectAdapter;
11import android.support.v17.leanback.widget.OnItemClickedListener;
12import android.support.v17.leanback.widget.Row;
13import android.text.TextUtils;
14import android.util.Log;
15
16public class SearchFragment extends android.support.v17.leanback.app.SearchFragment
17    implements android.support.v17.leanback.app.SearchFragment.SearchResultProvider {
18    private static final String TAG = "leanback.SearchFragment";
19    private static final int NUM_ROWS = 3;
20    private static final int SEARCH_DELAY_MS = 300;
21
22    private ArrayObjectAdapter mRowsAdapter;
23    private Handler mHandler = new Handler();
24
25    @Override
26    public void onCreate(Bundle savedInstanceState) {
27        super.onCreate(savedInstanceState);
28
29        mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
30
31        setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.ic_title));
32        setTitle("Leanback Sample App");
33        setSearchResultProvider(this);
34        setOnItemClickedListener(new ItemClickedListener());
35    }
36
37    @Override
38    public ObjectAdapter getResultsAdapter() {
39        return mRowsAdapter;
40    }
41
42    @Override
43    public boolean onQueryTextChange(String newQuery) {
44        Log.i(TAG, String.format("Search Query Text Change %s", newQuery));
45        mRowsAdapter.clear();
46        if (!TextUtils.isEmpty(newQuery)) {
47            mHandler.removeCallbacks(mDelayedLoad);
48            mHandler.postDelayed(mDelayedLoad, SEARCH_DELAY_MS);
49        }
50        return true;
51    }
52
53    @Override
54    public boolean onQueryTextSubmit(String query) {
55        Log.i(TAG, String.format("Search Query Text Submit %s", query));
56        mRowsAdapter.clear();
57        if (!TextUtils.isEmpty(query)) {
58            mHandler.removeCallbacks(mDelayedLoad);
59            mHandler.postDelayed(mDelayedLoad, SEARCH_DELAY_MS);
60        }
61        return true;
62    }
63
64    private void loadRows() {
65        for (int i = 0; i < NUM_ROWS; ++i) {
66            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new StringPresenter());
67            listRowAdapter.add("Hello world");
68            listRowAdapter.add("This is a test");
69            HeaderItem header = new HeaderItem(i, "Row " + i, null);
70            mRowsAdapter.add(new ListRow(header, listRowAdapter));
71        }
72    }
73
74    private Runnable mDelayedLoad = new Runnable() {
75        @Override
76        public void run() {
77            loadRows();
78        }
79    };
80    private final class ItemClickedListener implements OnItemClickedListener {
81        public void onItemClicked(Object item, Row row) {
82            // TODO: use a fragment transaction instead of launching a new
83            // activity
84            Intent intent = new Intent(getActivity(), DetailsActivity.class);
85            startActivity(intent);
86        }
87    }
88}
89