diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/MusicLibraryPagerAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/MusicLibraryPagerAdapter.java index 1f93edde..0729f818 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/MusicLibraryPagerAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/MusicLibraryPagerAdapter.java @@ -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 mFragmentClass; diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/mainactivity/library/LibraryFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/mainactivity/library/LibraryFragment.java index fa8fb365..67a5ad9b 100644 --- a/app/src/main/java/com/dkanada/gramophone/fragments/mainactivity/library/LibraryFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/fragments/mainactivity/library/LibraryFragment.java @@ -19,6 +19,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.dkanada.gramophone.databinding.FragmentLibraryBinding; +import com.dkanada.gramophone.fragments.mainactivity.library.pager.FavoritesFragment; import com.google.android.material.appbar.AppBarLayout; import com.afollestad.materialcab.MaterialCab; import com.kabouzeid.appthemehelper.ThemeStore; @@ -354,7 +355,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde .setChecked(currentSortMethod.equals(SortMethod.ADDED)); sortMethodMenu.add(0, R.id.action_sort_method_random, 4, R.string.sort_method_random) .setChecked(currentSortMethod.equals(SortMethod.RANDOM)); - } else if (fragment instanceof SongsFragment) { + } else if (fragment instanceof SongsFragment || fragment instanceof FavoritesFragment) { sortMethodMenu.add(0, R.id.action_sort_method_name, 0, R.string.sort_method_name) .setChecked(currentSortMethod.equals(SortMethod.NAME)); sortMethodMenu.add(0, R.id.action_sort_method_album, 1, R.string.sort_method_album) diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/mainactivity/library/pager/FavoritesFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/mainactivity/library/pager/FavoritesFragment.java new file mode 100644 index 00000000..0dc9c134 --- /dev/null +++ b/app/src/main/java/com/dkanada/gramophone/fragments/mainactivity/library/pager/FavoritesFragment.java @@ -0,0 +1,30 @@ +package com.dkanada.gramophone.fragments.mainactivity.library.pager; + +import androidx.annotation.NonNull; +import com.dkanada.gramophone.App; +import com.dkanada.gramophone.util.PreferenceUtil; +import com.dkanada.gramophone.util.QueryUtil; +import org.jellyfin.apiclient.model.querying.ItemFields; +import org.jellyfin.apiclient.model.querying.ItemFilter; +import org.jellyfin.apiclient.model.querying.ItemQuery; + +public class FavoritesFragment extends SongsFragment { + @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; + } +} diff --git a/app/src/main/java/com/dkanada/gramophone/model/CategoryInfo.java b/app/src/main/java/com/dkanada/gramophone/model/CategoryInfo.java index 214c8221..0b112a6e 100644 --- a/app/src/main/java/com/dkanada/gramophone/model/CategoryInfo.java +++ b/app/src/main/java/com/dkanada/gramophone/model/CategoryInfo.java @@ -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; diff --git a/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java index 7217d2f6..da2ff95f 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java @@ -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; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e6c53142..b88c2079 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -49,6 +49,7 @@ Genres Songs Playlists + Favorites No playlists No albums No songs