Add FavoritesFragment based on SongsFragment
This commit is contained in:
parent
102a745718
commit
ce23df3ef1
5 changed files with 191 additions and 2 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@
|
|||
<string name="genres">Genres</string>
|
||||
<string name="songs">Songs</string>
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="favorites">Favorites</string>
|
||||
<string name="no_playlists">No playlists</string>
|
||||
<string name="no_albums">No albums</string>
|
||||
<string name="no_songs">No songs</string>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue