Home | History | Annotate | Download | only in ui
      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  */
     14 
     15 package com.example.android.tvleanback.ui;
     16 
     17 import android.content.Intent;
     18 import android.os.Bundle;
     19 import android.support.v17.leanback.widget.ArrayObjectAdapter;
     20 import android.support.v17.leanback.widget.ImageCardView;
     21 import android.support.v17.leanback.widget.OnItemViewClickedListener;
     22 import android.support.v17.leanback.widget.OnItemViewSelectedListener;
     23 import android.support.v17.leanback.widget.Presenter;
     24 import android.support.v17.leanback.widget.Row;
     25 import android.support.v17.leanback.widget.RowPresenter;
     26 import android.support.v17.leanback.widget.VerticalGridPresenter;
     27 import android.support.v4.app.ActivityOptionsCompat;
     28 import android.util.Log;
     29 import android.view.View;
     30 
     31 import com.example.android.tvleanback.R;
     32 import com.example.android.tvleanback.data.VideoProvider;
     33 import com.example.android.tvleanback.model.Movie;
     34 import com.example.android.tvleanback.presenter.CardPresenter;
     35 
     36 import java.util.Collections;
     37 import java.util.HashMap;
     38 import java.util.List;
     39 import java.util.Map;
     40 import java.util.Random;
     41 
     42 /*
     43  * VerticalGridFragment shows a grid of videos
     44  */
     45 public class VerticalGridFragment extends android.support.v17.leanback.app.VerticalGridFragment {
     46     private static final String TAG = "VerticalGridFragment";
     47 
     48     private static final int NUM_COLUMNS = 5;
     49 
     50     private ArrayObjectAdapter mAdapter;
     51 
     52     @Override
     53     public void onCreate(Bundle savedInstanceState) {
     54         Log.d(TAG, "onCreate");
     55         super.onCreate(savedInstanceState);
     56 
     57         setTitle(getString(R.string.vertical_grid_title));
     58 
     59         setupFragment();
     60     }
     61 
     62     private void setupFragment() {
     63         VerticalGridPresenter gridPresenter = new VerticalGridPresenter();
     64         gridPresenter.setNumberOfColumns(NUM_COLUMNS);
     65         setGridPresenter(gridPresenter);
     66 
     67         mAdapter = new ArrayObjectAdapter(new CardPresenter());
     68 
     69         long seed = System.nanoTime();
     70 
     71         HashMap<String, List<Movie>> movies = VideoProvider.getMovieList();
     72 
     73         for (Map.Entry<String, List<Movie>> entry : movies.entrySet()) {
     74             List<Movie> list = entry.getValue();
     75             Collections.shuffle(list, new Random(seed));
     76             for (Movie movie : list) {
     77                 mAdapter.add(movie);
     78             }
     79         }
     80 
     81         setAdapter(mAdapter);
     82 
     83         setOnSearchClickedListener(new View.OnClickListener() {
     84             @Override
     85             public void onClick(View view) {
     86                 Intent intent = new Intent(getActivity(), SearchActivity.class);
     87                 startActivity(intent);
     88             }
     89         });
     90 
     91         setOnItemViewClickedListener(new ItemViewClickedListener());
     92         setOnItemViewSelectedListener(new ItemViewSelectedListener());
     93     }
     94 
     95     private final class ItemViewClickedListener implements OnItemViewClickedListener {
     96         @Override
     97         public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
     98                                   RowPresenter.ViewHolder rowViewHolder, Row row) {
     99 
    100             if (item instanceof Movie) {
    101                 Movie movie = (Movie) item;
    102                 Log.d(TAG, "Item: " + item.toString());
    103                 Intent intent = new Intent(getActivity(), MovieDetailsActivity.class);
    104                 intent.putExtra(MovieDetailsActivity.MOVIE, movie);
    105 
    106                 Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
    107                         getActivity(),
    108                         ((ImageCardView) itemViewHolder.view).getMainImageView(),
    109                         MovieDetailsActivity.SHARED_ELEMENT_NAME).toBundle();
    110                 getActivity().startActivity(intent, bundle);
    111             }
    112         }
    113     }
    114 
    115 
    116     private final class ItemViewSelectedListener implements OnItemViewSelectedListener {
    117         @Override
    118         public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
    119                                    RowPresenter.ViewHolder rowViewHolder, Row row) {
    120         }
    121     }
    122 
    123 }
    124