package com.florianmski.tracktoid.ui.fragments.progress; import android.content.Context; import android.database.Cursor; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.SubMenu; import com.florianmski.tracktoid.R; import com.florianmski.tracktoid.TraktoidTheme; import com.florianmski.tracktoid.adapters.lists.RecyclerTraktItemAdapter; import com.florianmski.tracktoid.data.WShow; import com.florianmski.tracktoid.data.database.ProviderSchematic; import com.florianmski.tracktoid.data.database.columns.ShowColumns; import com.florianmski.tracktoid.image.Type; import com.florianmski.tracktoid.rx.observables.CursorObservable; import com.florianmski.tracktoid.ui.fragments.base.trakt.TraktItemsFragment; import java.util.List; import rx.Observable; public class ProgressFragment extends TraktItemsFragment<WShow> { protected static final int FILTER_WATCHED = R.id.action_bar_filter_watched, FILTER_COLLECTION = R.id.action_bar_filter_collection; protected boolean filterHideComplete = false; protected int currentFilter = FILTER_WATCHED; public ProgressFragment() {} public static ProgressFragment newInstance() { return new ProgressFragment(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); setInstantLoad(true); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getActionBar().setSubtitle("Watched"); } @Override protected Observable<List<WShow>> createObservable() { return Observable.create( new CursorObservable<List<WShow>>( getActivity(), ProviderSchematic.Shows.CONTENT_URI, ProviderSchematic.Shows.PROJECTION, generateSelection(), null, ShowColumns.LAST_WATCHED_AT + " DESC") { @Override protected List<WShow> toObject(Cursor cursor) { return WShow.unpackList(cursor); } }); } private String generateSelection() { String selection = ShowColumns.EPISODES_AIRED + ">0"; if(filterHideComplete) selection += " AND " + (currentFilter == FILTER_WATCHED ? ShowColumns.EPISODES_WATCHED : ShowColumns.EPISODES_COLLECTED) + "<" + ShowColumns.EPISODES_AIRED; return selection; } @Override protected Type getImageType() { return Type.FANART; } @Override protected RecyclerTraktItemAdapter<WShow> createAdapter(List<WShow> items) { return new RecyclerProgressAdapter(getActivity(), items, getTheme(), this).imageType(getImageType()); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); SubMenu filterMenu = menu.addSubMenu(Menu.NONE, R.id.action_bar_filter, Menu.NONE, "Filter"); filterMenu.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); filterMenu.setIcon(R.drawable.ic_filter_list_white_24dp); createGroupItem(filterMenu, Menu.FIRST, FILTER_WATCHED, Menu.NONE, "Watched"); createGroupItem(filterMenu, Menu.FIRST, FILTER_COLLECTION, Menu.NONE, "Collection"); filterMenu.setGroupCheckable(Menu.FIRST, true, true); menu.add(Menu.NONE, R.id.action_bar_filter_hide_complete, Menu.NONE, "Hide complete") .setCheckable(true) .setChecked(filterHideComplete) .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); } private void createGroupItem(SubMenu subMenu, int groupId, int filterId, int order, CharSequence title) { subMenu.add(groupId, filterId, order, title).setChecked(currentFilter == filterId); } @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); switch(itemId) { case R.id.action_bar_filter_watched: case R.id.action_bar_filter_collection: changeFilter(itemId); getActionBar().setSubtitle(item.getTitle()); return true; case R.id.action_bar_filter_hide_complete: filterHideComplete = !filterHideComplete; refresh(false); getActivity().invalidateOptionsMenu(); return true; } return super.onOptionsItemSelected(item); } private void changeFilter(int newFilter) { if(currentFilter == newFilter) return; currentFilter = newFilter; refresh(false); getActivity().invalidateOptionsMenu(); } @Override public TraktoidTheme getTheme() { return TraktoidTheme.SHOW; } private class RecyclerProgressAdapter extends RecyclerTraktItemAdapter<WShow> { public RecyclerProgressAdapter(Context context, List<WShow> list, TraktoidTheme theme, OnItemClickListener listener) { super(context, list, theme, listener); } @Override public void onBindViewHolder(final TraktItemViewHolder holder, int position) { super.onBindViewHolder(holder, position); WShow wShow = getItem2(position); int episodesAired = wShow.episodesAired; int episodesToCompare = currentFilter == FILTER_WATCHED ? wShow.episodesWatched : wShow.episodeCollected; int percentage = (int)((episodesToCompare * 1f / episodesAired) * 100); holder.fv.setSubtitle(String.format("%d%% (%d/%d)", percentage, episodesToCompare, episodesAired)); } } }