package com.ptrprograms.androidtvmediaplayer.Fragment; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import android.content.Intent; import android.os.Bundle; import android.support.v17.leanback.app.BackgroundManager; import android.support.v17.leanback.app.BrowseFragment; import android.support.v17.leanback.widget.ArrayObjectAdapter; import android.support.v17.leanback.widget.HeaderItem; import android.support.v17.leanback.widget.ListRow; import android.support.v17.leanback.widget.ListRowPresenter; import android.support.v17.leanback.widget.OnItemClickedListener; import android.support.v17.leanback.widget.Row; import android.view.View; import android.widget.Toast; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.ptrprograms.androidtvmediaplayer.Activity.DetailsActivity; import com.ptrprograms.androidtvmediaplayer.Bonus.SlothActivity; import com.ptrprograms.androidtvmediaplayer.Presenter.CardPresenter; import com.ptrprograms.androidtvmediaplayer.Model.Movie; import com.ptrprograms.androidtvmediaplayer.Presenter.PreferenceCardPresenter; import com.ptrprograms.androidtvmediaplayer.R; import com.ptrprograms.androidtvmediaplayer.Util.Utils; public class MainFragment extends BrowseFragment { private List<Movie> mMovies = new ArrayList<Movie>(); @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); loadData(); initUI(); loadRows(); setupEventListeners(); } private void loadData() { String json = Utils.loadJSONFromResource( getActivity(), R.raw.movies ); Gson gson = new Gson(); Type collection = new TypeToken<ArrayList<Movie>>(){}.getType(); mMovies = gson.fromJson( json, collection ); } private void loadRows() { ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter( new ListRowPresenter() ); CardPresenter cardPresenter = new CardPresenter(); List<String> categories = getCategories(); if( categories == null || categories.isEmpty() ) return; for( String category : categories ) { ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter( cardPresenter ); for( Movie movie : mMovies ) { if( category.equalsIgnoreCase( movie.getCategory() ) ) listRowAdapter.add( movie ); } if( listRowAdapter.size() > 0 ) { HeaderItem header = new HeaderItem( rowsAdapter.size() - 1, category, null ); rowsAdapter.add( new ListRow( header, listRowAdapter ) ); } } setupPreferences( rowsAdapter ); setAdapter( rowsAdapter ); } private void setupPreferences( ArrayObjectAdapter adapter ) { HeaderItem gridHeader = new HeaderItem( adapter.size(), "Preferences", null ); PreferenceCardPresenter mGridPresenter = new PreferenceCardPresenter(); ArrayObjectAdapter gridRowAdapter = new ArrayObjectAdapter( mGridPresenter ); gridRowAdapter.add( getResources().getString( R.string.sloth ) ); adapter.add( new ListRow( gridHeader, gridRowAdapter ) ); } private List<String> getCategories() { if( mMovies == null ) return null; List<String> categories = new ArrayList<String>(); for( Movie movie : mMovies ) { if( !categories.contains( movie.getCategory() ) ) { categories.add( movie.getCategory() ); } } return categories; } private void setBackground() { BackgroundManager backgroundManager = BackgroundManager.getInstance( getActivity() ); backgroundManager.attach( getActivity().getWindow() ); backgroundManager.setDrawable( getResources().getDrawable( R.drawable.default_background ) ); } private void initUI() { setTitle( getString( R.string.browse_title ) ); setHeadersState( HEADERS_ENABLED ); //Back button goes to the fast lane, rather than home screen setHeadersTransitionOnBackEnabled( true ); setBrandColor( getResources().getColor( R.color.fastlane_background ) ); setSearchAffordanceColor( getResources().getColor( R.color.search_button_color ) ); setBackground(); } private void setupEventListeners() { setOnItemClickedListener( getDefaultItemClickedListener() ); setOnSearchClickedListener( new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(getActivity(), "Implement your own in-app search", Toast.LENGTH_LONG).show(); } }); } protected OnItemClickedListener getDefaultItemClickedListener() { return new OnItemClickedListener() { @Override public void onItemClicked( Object item, Row row ) { if( item instanceof Movie ) { Movie movie = (Movie) item; Intent intent = new Intent( getActivity(), DetailsActivity.class ); intent.putExtra( VideoDetailsFragment.EXTRA_MOVIE, movie ); startActivity( intent ); } else if( item instanceof String ) { if( ((String) item).equalsIgnoreCase( getString( R.string.sloth ) ) ) { Intent intent = new Intent( getActivity(), SlothActivity.class ); startActivity( intent ); } } } }; } }