package com.florianmski.tracktoid.ui.fragments.library; 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.adapters.lists.RecyclerTraktItemAdapter; import com.florianmski.tracktoid.data.TraktoidItem; import com.florianmski.tracktoid.image.Type; import com.florianmski.tracktoid.ui.fragments.base.trakt.TraktItemsFragment; public abstract class LibraryFragment<E extends TraktoidItem> extends TraktItemsFragment<E> { // TODO add filter to pref so it can persist across app launches protected static final int FILTER_PLAYS = R.id.action_bar_filter_plays, FILTER_COLLECTION = R.id.action_bar_filter_collection, FILTER_WATCHLIST = R.id.action_bar_filter_watchlist, FILTER_ALL = R.id.action_bar_filter_all; protected boolean filterHideWatched = false; protected int currentFilter = FILTER_PLAYS; public LibraryFragment() {} @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); setInstantLoad(true); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ((RecyclerTraktItemAdapter)getAdapter()).titleVisible(false); } @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_PLAYS, Menu.NONE, "Plays"); createGroupItem(filterMenu, Menu.FIRST, FILTER_COLLECTION, Menu.NONE, "Collection"); createGroupItem(filterMenu, Menu.FIRST, FILTER_WATCHLIST, Menu.NONE, "Watchlist"); createGroupItem(filterMenu, Menu.FIRST, FILTER_ALL, Menu.NONE, "All"); filterMenu.setGroupCheckable(Menu.FIRST, true, true); menu.add(Menu.NONE, R.id.action_bar_filter_hide_watched, Menu.NONE, "Hide watched") .setCheckable(true) .setChecked(filterHideWatched) .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_plays: case R.id.action_bar_filter_collection: case R.id.action_bar_filter_watchlist: case R.id.action_bar_filter_all: changeFilter(itemId); return true; case R.id.action_bar_filter_hide_watched: filterHideWatched = !filterHideWatched; 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 protected Type getImageType() { return Type.POSTER; } }