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.FragmentManager;
|
||||||
import androidx.fragment.app.FragmentPagerAdapter;
|
import androidx.fragment.app.FragmentPagerAdapter;
|
||||||
|
|
||||||
|
import com.dkanada.gramophone.fragments.mainactivity.library.pager.FavoritesFragment;
|
||||||
import com.dkanada.gramophone.model.CategoryInfo;
|
import com.dkanada.gramophone.model.CategoryInfo;
|
||||||
import com.dkanada.gramophone.fragments.mainactivity.library.pager.AlbumsFragment;
|
import com.dkanada.gramophone.fragments.mainactivity.library.pager.AlbumsFragment;
|
||||||
import com.dkanada.gramophone.fragments.mainactivity.library.pager.ArtistsFragment;
|
import com.dkanada.gramophone.fragments.mainactivity.library.pager.ArtistsFragment;
|
||||||
|
|
@ -154,7 +155,8 @@ public class MusicLibraryPagerAdapter extends FragmentPagerAdapter {
|
||||||
ALBUMS(AlbumsFragment.class),
|
ALBUMS(AlbumsFragment.class),
|
||||||
ARTISTS(ArtistsFragment.class),
|
ARTISTS(ArtistsFragment.class),
|
||||||
GENRES(GenresFragment.class),
|
GENRES(GenresFragment.class),
|
||||||
PLAYLISTS(PlaylistsFragment.class);
|
PLAYLISTS(PlaylistsFragment.class),
|
||||||
|
FAVORITES(FavoritesFragment.class);
|
||||||
|
|
||||||
private final Class<? extends Fragment> mFragmentClass;
|
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),
|
ALBUMS(R.string.albums),
|
||||||
ARTISTS(R.string.artists),
|
ARTISTS(R.string.artists),
|
||||||
GENRES(R.string.genres),
|
GENRES(R.string.genres),
|
||||||
PLAYLISTS(R.string.playlists);
|
PLAYLISTS(R.string.playlists),
|
||||||
|
FAVORITES(R.string.favorites);
|
||||||
|
|
||||||
public final int stringRes;
|
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.ARTISTS, true));
|
||||||
defaultCategories.add(new CategoryInfo(CategoryInfo.Category.GENRES, true));
|
defaultCategories.add(new CategoryInfo(CategoryInfo.Category.GENRES, true));
|
||||||
defaultCategories.add(new CategoryInfo(CategoryInfo.Category.PLAYLISTS, true));
|
defaultCategories.add(new CategoryInfo(CategoryInfo.Category.PLAYLISTS, true));
|
||||||
|
defaultCategories.add(new CategoryInfo(CategoryInfo.Category.FAVORITES, true));
|
||||||
return defaultCategories;
|
return defaultCategories;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@
|
||||||
<string name="genres">Genres</string>
|
<string name="genres">Genres</string>
|
||||||
<string name="songs">Songs</string>
|
<string name="songs">Songs</string>
|
||||||
<string name="playlists">Playlists</string>
|
<string name="playlists">Playlists</string>
|
||||||
|
<string name="favorites">Favorites</string>
|
||||||
<string name="no_playlists">No playlists</string>
|
<string name="no_playlists">No playlists</string>
|
||||||
<string name="no_albums">No albums</string>
|
<string name="no_albums">No albums</string>
|
||||||
<string name="no_songs">No songs</string>
|
<string name="no_songs">No songs</string>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue