1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 * or implied. See the License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14package com.example.android.leanback; 15 16import android.content.Context; 17import android.content.Intent; 18import android.os.Bundle; 19import android.os.Handler; 20import android.support.v17.leanback.widget.ArrayObjectAdapter; 21import android.support.v17.leanback.widget.OnItemViewClickedListener; 22import android.support.v17.leanback.widget.OnItemViewSelectedListener; 23import android.support.v17.leanback.widget.Presenter; 24import android.support.v17.leanback.widget.Row; 25import android.support.v17.leanback.widget.RowPresenter; 26import android.support.v17.leanback.widget.VerticalGridPresenter; 27import android.support.v4.content.res.ResourcesCompat; 28import android.util.Log; 29import android.view.View; 30 31public class VerticalGridFragment extends android.support.v17.leanback.app.VerticalGridFragment { 32 private static final String TAG = "leanback.VerticalGridFragment"; 33 34 private static final int NUM_COLUMNS = 3; 35 private static final int NUM_ITEMS = 50; 36 private static final int HEIGHT = 200; 37 private static final boolean TEST_ENTRANCE_TRANSITION = true; 38 39 private static class Adapter extends ArrayObjectAdapter { 40 public Adapter(StringPresenter presenter) { 41 super(presenter); 42 } 43 public void callNotifyChanged() { 44 super.notifyChanged(); 45 } 46 } 47 private Adapter mAdapter; 48 49 @Override 50 public void onCreate(Bundle savedInstanceState) { 51 Log.i(TAG, "onCreate"); 52 super.onCreate(savedInstanceState); 53 54 final Context context = getActivity(); 55 setBadgeDrawable(ResourcesCompat.getDrawable(context.getResources(), 56 R.drawable.ic_title, context.getTheme())); 57 setTitle("Leanback Vertical Grid Demo"); 58 59 setupFragment(); 60 if (TEST_ENTRANCE_TRANSITION) { 61 // don't run entrance transition if fragment is restored. 62 if (savedInstanceState == null) { 63 prepareEntranceTransition(); 64 } 65 } 66 // simulates in a real world use case data being loaded two seconds later 67 new Handler().postDelayed(new Runnable() { 68 @Override 69 public void run() { 70 loadData(); 71 startEntranceTransition(); 72 } 73 }, 2000); 74 } 75 76 private void loadData() { 77 for (int i = 0; i < NUM_ITEMS; i++) { 78 mAdapter.add(Integer.toString(i)); 79 } 80 } 81 82 private void setupFragment() { 83 VerticalGridPresenter gridPresenter = new VerticalGridPresenter(); 84 gridPresenter.setNumberOfColumns(NUM_COLUMNS); 85 setGridPresenter(gridPresenter); 86 87 mAdapter = new Adapter(new StringPresenter()); 88 setAdapter(mAdapter); 89 90 setOnItemViewSelectedListener(new OnItemViewSelectedListener() { 91 @Override 92 public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 93 RowPresenter.ViewHolder rowViewHolder, Row row) { 94 Log.i(TAG, "onItemSelected: " + item + " row " + row); 95 } 96 }); 97 98 setOnItemViewClickedListener(new OnItemViewClickedListener() { 99 @Override 100 public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, 101 RowPresenter.ViewHolder rowViewHolder, Row row) { 102 Log.i(TAG, "onItemClicked: " + item + " row " + row); 103 mAdapter.callNotifyChanged(); 104 } 105 }); 106 setOnSearchClickedListener(new View.OnClickListener() { 107 @Override 108 public void onClick(View view) { 109 Intent intent = new Intent(getActivity(), SearchActivity.class); 110 startActivity(intent); 111 } 112 }); 113 } 114} 115