From 7980f515f28f4fbe81c75e0c4d898cbeef5b342a Mon Sep 17 00:00:00 2001 From: jakobkukla Date: Tue, 20 Sep 2022 17:40:36 +0200 Subject: [PATCH] Fix shuffle button shuffles all songs instead of just favorites --- .../adapter/song/ShuffleButtonSongAdapter.java | 8 +++++++- .../fragments/library/FavoritesFragment.java | 17 +++++++++++++++++ .../fragments/main/LibraryFragment.java | 2 +- .../dkanada/gramophone/util/ShortcutUtil.java | 7 ++++++- .../shortcuts/AppShortcutLauncherActivity.java | 2 +- 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/song/ShuffleButtonSongAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/song/ShuffleButtonSongAdapter.java index c61e2eb5..646dc7b2 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/song/ShuffleButtonSongAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/song/ShuffleButtonSongAdapter.java @@ -18,6 +18,8 @@ import com.dkanada.gramophone.model.Song; import java.util.List; public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter { + private boolean isFavorite = false; + public ShuffleButtonSongAdapter(AppCompatActivity activity, List dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) { super(activity, dataSet, itemLayoutRes, usePalette, cabHolder); } @@ -65,6 +67,10 @@ public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter { } } + public void setFavorite(boolean isFavorite) { + this.isFavorite = isFavorite; + } + public class ViewHolder extends AbsOffsetSongAdapter.ViewHolder { public ViewHolder(@NonNull View itemView) { super(itemView); @@ -73,7 +79,7 @@ public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter { @Override public void onClick(View v) { if (getItemViewType() == OFFSET_ITEM) { - ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true)); + ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true), isFavorite); } super.onClick(v); diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/library/FavoritesFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/library/FavoritesFragment.java index ec057477..990b5753 100644 --- a/app/src/main/java/com/dkanada/gramophone/fragments/library/FavoritesFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/fragments/library/FavoritesFragment.java @@ -1,6 +1,10 @@ package com.dkanada.gramophone.fragments.library; import androidx.annotation.NonNull; + +import com.dkanada.gramophone.adapter.song.ShuffleButtonSongAdapter; +import com.dkanada.gramophone.adapter.song.SongAdapter; + import org.jellyfin.apiclient.model.querying.ItemFilter; import org.jellyfin.apiclient.model.querying.ItemQuery; @@ -15,4 +19,17 @@ public class FavoritesFragment extends SongsFragment { return query; } + + @NonNull + @Override + protected SongAdapter createAdapter() { + SongAdapter adapter = super.createAdapter(); + + // set the shuffle button adapter to only shuffle favorites + if (adapter instanceof ShuffleButtonSongAdapter) { + ((ShuffleButtonSongAdapter) adapter).setFavorite(true); + } + + return adapter; + } } diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java index 8ed52903..f2e59c38 100644 --- a/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java @@ -194,7 +194,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements ViewPage int id = item.getItemId(); switch (id) { case R.id.action_shuffle_all: - ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true)); + ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true), false); return true; case R.id.action_new_playlist: CreatePlaylistDialog.create().show(getChildFragmentManager(), "CREATE_PLAYLIST"); diff --git a/app/src/main/java/com/dkanada/gramophone/util/ShortcutUtil.java b/app/src/main/java/com/dkanada/gramophone/util/ShortcutUtil.java index b7f4d9b5..bf6114b8 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/ShortcutUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/ShortcutUtil.java @@ -9,6 +9,7 @@ import com.dkanada.gramophone.model.Song; 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; @@ -34,12 +35,16 @@ public class ShortcutUtil { getSongs(query, callback); } - public static void getShuffle(MediaCallback callback) { + public static void getShuffle(MediaCallback callback, boolean onlyFavorites) { ItemQuery query = new ItemQuery(); query.setSortBy(new String[]{SortMethod.RANDOM.getApi()}); query.setSortOrder(SortOrder.DESCENDING.getApi()); + if (onlyFavorites) { + query.setFilters(new ItemFilter[]{ItemFilter.IsFavorite}); + } + getSongs(query, callback); } diff --git a/app/src/main/java/com/dkanada/gramophone/views/shortcuts/AppShortcutLauncherActivity.java b/app/src/main/java/com/dkanada/gramophone/views/shortcuts/AppShortcutLauncherActivity.java index 910f2724..cc9c85be 100644 --- a/app/src/main/java/com/dkanada/gramophone/views/shortcuts/AppShortcutLauncherActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/views/shortcuts/AppShortcutLauncherActivity.java @@ -27,7 +27,7 @@ public class AppShortcutLauncherActivity extends Activity { switch (getIntent().getIntExtra(EXTRA_SHORTCUT, SHORTCUT_TYPE_DEFAULT)) { case SHORTCUT_TYPE_SHUFFLE: - ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true)); + ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true), false); DynamicShortcutManager.reportShortcutUsed(this, ShuffleShortcutType.getId()); break; case SHORTCUT_TYPE_FREQUENT: