package io.github.xwz.base.fragments; import android.content.Intent; import android.os.Bundle; import android.support.v17.leanback.app.VerticalGridFragment; import android.support.v17.leanback.widget.ArrayObjectAdapter; import android.support.v17.leanback.widget.OnItemViewClickedListener; import android.support.v17.leanback.widget.Presenter; import android.support.v17.leanback.widget.Row; import android.support.v17.leanback.widget.RowPresenter; import android.support.v17.leanback.widget.VerticalGridPresenter; import android.util.Log; import android.view.View; import java.util.List; import io.github.xwz.base.Utils; import io.github.xwz.base.adapters.EpisodePresenter; import io.github.xwz.base.adapters.FilmPresenter; import io.github.xwz.base.api.EpisodeBaseModel; import io.github.xwz.base.content.ContentManagerBase; public abstract class CategoryFragment extends VerticalGridFragment { private static final String TAG = "CategoryFragment"; private static final int FILM_COLUMNS = 10; private static final int SHOW_COLUMNS = 5; private String category; private boolean isFilm = false; @Override public void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); category = getActivity().getIntent().getStringExtra(ContentManagerBase.CONTENT_ID); isFilm = category.contains("Film/") || category.equals("Film"); setupFragment(); setupListeners(); setupHeader(); } protected void setupHeader() { } private void setupFragment() { VerticalGridPresenter gridPresenter = new VerticalGridPresenter(); gridPresenter.setNumberOfColumns(isFilm ? FILM_COLUMNS : SHOW_COLUMNS); setGridPresenter(gridPresenter); setTitle(Utils.stripCategory(category)); List<EpisodeBaseModel> all = getContentManger().getAllShowsByCategory(category); ArrayObjectAdapter adapter; if (isFilm) { adapter = new ArrayObjectAdapter(new FilmPresenter(true)); } else { adapter = new ArrayObjectAdapter(new EpisodePresenter()); } adapter.addAll(0, all); setAdapter(adapter); } private void setupListeners() { setOnSearchClickedListener(getSearchClickedListener()); setOnItemViewClickedListener(getItemClickedListener()); } private View.OnClickListener getSearchClickedListener() { return new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(getActivity(), getSearchActivityClass()); startActivity(intent); } }; } private OnItemViewClickedListener getItemClickedListener() { return new OnItemViewClickedListener() { @Override public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row) { if (item instanceof EpisodeBaseModel) { Intent intent = new Intent(getActivity(), getDetailsActivityClass()); intent.putExtra(ContentManagerBase.CONTENT_ID, (EpisodeBaseModel) item); startActivity(intent); } } }; } protected abstract ContentManagerBase getContentManger(); protected abstract Class<?> getSearchActivityClass(); protected abstract Class<?> getDetailsActivityClass(); }