Add FavoritesFragment based on SongsFragment

This commit is contained in:
Luuk Nieuwdorp 2021-01-07 17:01:10 +01:00
commit ce23df3ef1
5 changed files with 191 additions and 2 deletions

View file

@ -10,6 +10,7 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import com.dkanada.gramophone.fragments.mainactivity.library.pager.FavoritesFragment;
import com.dkanada.gramophone.model.CategoryInfo;
import com.dkanada.gramophone.fragments.mainactivity.library.pager.AlbumsFragment;
import com.dkanada.gramophone.fragments.mainactivity.library.pager.ArtistsFragment;
@ -154,7 +155,8 @@ public class MusicLibraryPagerAdapter extends FragmentPagerAdapter {
ALBUMS(AlbumsFragment.class),
ARTISTS(ArtistsFragment.class),
GENRES(GenresFragment.class),
PLAYLISTS(PlaylistsFragment.class);
PLAYLISTS(PlaylistsFragment.class),
FAVORITES(FavoritesFragment.class);
private final Class<? extends Fragment> mFragmentClass;

View file

@ -0,0 +1,184 @@
package com.dkanada.gramophone.fragments.mainactivity.library.pager;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.GridLayoutManager;
import com.dkanada.gramophone.App;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.adapter.song.ShuffleButtonSongAdapter;
import com.dkanada.gramophone.adapter.song.SongAdapter;
import com.dkanada.gramophone.model.Song;
import com.dkanada.gramophone.util.PreferenceUtil;
import com.dkanada.gramophone.util.QueryUtil;
import org.jellyfin.apiclient.interaction.Response;
import org.jellyfin.apiclient.model.dto.BaseItemDto;
import org.jellyfin.apiclient.model.querying.ItemFields;
import org.jellyfin.apiclient.model.querying.ItemFilter;
import org.jellyfin.apiclient.model.querying.ItemQuery;
import org.jellyfin.apiclient.model.querying.ItemsResult;
import java.util.ArrayList;
import java.util.List;
public class FavoritesFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFragment<SongAdapter, GridLayoutManager, ItemQuery> {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@NonNull
@Override
protected GridLayoutManager createLayoutManager() {
return new GridLayoutManager(getActivity(), getGridSize());
}
@NonNull
@Override
protected SongAdapter createAdapter() {
int itemLayoutRes = getItemLayoutRes();
notifyLayoutResChanged(itemLayoutRes);
boolean usePalette = loadUsePalette();
List<Song> dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
SongAdapter adapter;
if (getGridSize() <= getMaxGridSizeForList()) {
adapter = new ShuffleButtonSongAdapter(
getLibraryFragment().getMainActivity(),
dataSet,
itemLayoutRes,
usePalette,
getLibraryFragment());
} else {
adapter = new SongAdapter(
getLibraryFragment().getMainActivity(),
dataSet,
itemLayoutRes,
usePalette,
getLibraryFragment());
}
return adapter;
}
@NonNull
@Override
protected ItemQuery createQuery() {
ItemQuery query = new ItemQuery();
query.setIncludeItemTypes(new String[]{"Audio"});
query.setFields(new ItemFields[]{ItemFields.MediaSources});
query.setUserId(App.getApiClient().getCurrentUserId());
query.setRecursive(true);
query.setLimit(PreferenceUtil.getInstance(App.getInstance()).getPageSize());
query.setStartIndex(getAdapter().getItemCount());
query.setParentId(QueryUtil.currentLibrary.getId());
query.setFilters(new ItemFilter[]{ItemFilter.IsFavorite});
QueryUtil.applySortMethod(query, PreferenceUtil.getInstance(App.getInstance()).getSongSortMethod());
QueryUtil.applySortOrder(query, PreferenceUtil.getInstance(App.getInstance()).getSongSortOrder());
return query;
}
@Override
protected void loadItems(int index) {
ItemQuery query = getQuery();
query.setStartIndex(index);
App.getApiClient().GetItemsAsync(query, new Response<ItemsResult>() {
@Override
public void onResponse(ItemsResult result) {
if (index == 0) getAdapter().getDataSet().clear();
for (BaseItemDto itemDto : result.getItems()) {
getAdapter().getDataSet().add(new Song(itemDto));
}
size = result.getTotalRecordCount();
getAdapter().notifyDataSetChanged();
loading = false;
}
@Override
public void onError(Exception exception) {
exception.printStackTrace();
}
});
}
@Override
protected int getEmptyMessage() {
return R.string.no_songs;
}
@Override
protected String loadSortMethod() {
return PreferenceUtil.getInstance(getActivity()).getSongSortMethod();
}
@Override
protected void saveSortMethod(String sortMethod) {
PreferenceUtil.getInstance(getActivity()).setSongSortMethod(sortMethod);
}
@Override
protected void setSortMethod(String sortMethod) {
}
@Override
protected String loadSortOrder() {
return PreferenceUtil.getInstance(getActivity()).getSongSortOrder();
}
@Override
protected void saveSortOrder(String sortOrder) {
PreferenceUtil.getInstance(getActivity()).setSongSortOrder(sortOrder);
}
@Override
protected void setSortOrder(String sortOrder) {
}
@Override
protected int loadGridSize() {
return PreferenceUtil.getInstance(getActivity()).getSongGridSize(requireActivity());
}
@Override
protected void saveGridSize(int gridSize) {
PreferenceUtil.getInstance(getActivity()).setSongGridSize(gridSize);
}
@Override
protected int loadGridSizeLand() {
return PreferenceUtil.getInstance(getActivity()).getSongGridSizeLand(requireActivity());
}
@Override
protected void saveGridSizeLand(int gridSize) {
PreferenceUtil.getInstance(getActivity()).setSongGridSizeLand(gridSize);
}
@Override
public void saveUsePalette(boolean usePalette) {
PreferenceUtil.getInstance(getActivity()).setSongColoredFooters(usePalette);
}
@Override
public boolean loadUsePalette() {
return PreferenceUtil.getInstance(getActivity()).getSongColoredFooters();
}
@Override
public void setUsePalette(boolean usePalette) {
getAdapter().usePalette(usePalette);
}
@Override
protected void setGridSize(int gridSize) {
getLayoutManager().setSpanCount(gridSize);
getAdapter().notifyDataSetChanged();
}
}

View file

@ -44,7 +44,8 @@ public class CategoryInfo implements Parcelable {
ALBUMS(R.string.albums),
ARTISTS(R.string.artists),
GENRES(R.string.genres),
PLAYLISTS(R.string.playlists);
PLAYLISTS(R.string.playlists),
FAVORITES(R.string.favorites);
public final int stringRes;

View file

@ -429,6 +429,7 @@ public final class PreferenceUtil {
defaultCategories.add(new CategoryInfo(CategoryInfo.Category.ARTISTS, true));
defaultCategories.add(new CategoryInfo(CategoryInfo.Category.GENRES, true));
defaultCategories.add(new CategoryInfo(CategoryInfo.Category.PLAYLISTS, true));
defaultCategories.add(new CategoryInfo(CategoryInfo.Category.FAVORITES, true));
return defaultCategories;
}