package cl.monsoon.s1next.view.fragment; import android.content.Context; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import cl.monsoon.s1next.data.api.model.collection.Favourites; import cl.monsoon.s1next.data.api.model.wrapper.FavouritesWrapper; import cl.monsoon.s1next.util.MathUtil; import cl.monsoon.s1next.view.adapter.FavouriteRecyclerViewAdapter; import cl.monsoon.s1next.view.internal.PagerCallback; import rx.Observable; /** * A Fragment representing one of the pages of favourites. * <p> * Activity or Fragment containing this must implement {@link PagerCallback}. */ public final class FavouriteListPagerFragment extends BaseFragment<FavouritesWrapper> { private static final String ARG_PAGE_NUM = "page_num"; private int mPageNum; private FavouriteRecyclerViewAdapter mRecyclerAdapter; private PagerCallback mPagerCallback; public static FavouriteListPagerFragment newInstance(int pageNum) { FavouriteListPagerFragment fragment = new FavouriteListPagerFragment(); Bundle bundle = new Bundle(); bundle.putInt(ARG_PAGE_NUM, pageNum); fragment.setArguments(bundle); return fragment; } @Override public void onAttach(Context context) { super.onAttach(context); mPagerCallback = (PagerCallback) getFragmentManager().findFragmentByTag( FavouriteListFragment.TAG); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mPageNum = getArguments().getInt(ARG_PAGE_NUM); RecyclerView recyclerView = getRecyclerView(); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); mRecyclerAdapter = new FavouriteRecyclerViewAdapter(getActivity()); recyclerView.setAdapter(mRecyclerAdapter); } @Override public void onDetach() { super.onDetach(); mPagerCallback = null; } @Override Observable<FavouritesWrapper> getSourceObservable() { return mS1Service.getFavouritesWrapper(mPageNum); } @Override void onNext(FavouritesWrapper data) { Favourites favourites = data.getFavourites(); if (favourites.getFavouriteList() == null) { consumeResult(data.getResult()); } else { super.onNext(data); mRecyclerAdapter.setDataSet(favourites.getFavouriteList()); mRecyclerAdapter.notifyDataSetChanged(); // update total page mPagerCallback.setTotalPages(MathUtil.divide(favourites.getTotal(), favourites.getFavouritesPerPage())); } } }