Fix shuffle button shuffles all songs instead of just favorites

This commit is contained in:
jakobkukla 2022-09-20 17:40:36 +02:00
commit 7980f515f2
5 changed files with 32 additions and 4 deletions

View file

@ -18,6 +18,8 @@ import com.dkanada.gramophone.model.Song;
import java.util.List; import java.util.List;
public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter { public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter {
private boolean isFavorite = false;
public ShuffleButtonSongAdapter(AppCompatActivity activity, List<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) { public ShuffleButtonSongAdapter(AppCompatActivity activity, List<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
super(activity, dataSet, itemLayoutRes, usePalette, 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 class ViewHolder extends AbsOffsetSongAdapter.ViewHolder {
public ViewHolder(@NonNull View itemView) { public ViewHolder(@NonNull View itemView) {
super(itemView); super(itemView);
@ -73,7 +79,7 @@ public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (getItemViewType() == OFFSET_ITEM) { if (getItemViewType() == OFFSET_ITEM) {
ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true)); ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true), isFavorite);
} }
super.onClick(v); super.onClick(v);

View file

@ -1,6 +1,10 @@
package com.dkanada.gramophone.fragments.library; package com.dkanada.gramophone.fragments.library;
import androidx.annotation.NonNull; 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.ItemFilter;
import org.jellyfin.apiclient.model.querying.ItemQuery; import org.jellyfin.apiclient.model.querying.ItemQuery;
@ -15,4 +19,17 @@ public class FavoritesFragment extends SongsFragment {
return query; 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;
}
} }

View file

@ -194,7 +194,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements ViewPage
int id = item.getItemId(); int id = item.getItemId();
switch (id) { switch (id) {
case R.id.action_shuffle_all: case R.id.action_shuffle_all:
ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true)); ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true), false);
return true; return true;
case R.id.action_new_playlist: case R.id.action_new_playlist:
CreatePlaylistDialog.create().show(getChildFragmentManager(), "CREATE_PLAYLIST"); CreatePlaylistDialog.create().show(getChildFragmentManager(), "CREATE_PLAYLIST");

View file

@ -9,6 +9,7 @@ import com.dkanada.gramophone.model.Song;
import org.jellyfin.apiclient.interaction.Response; import org.jellyfin.apiclient.interaction.Response;
import org.jellyfin.apiclient.model.dto.BaseItemDto; import org.jellyfin.apiclient.model.dto.BaseItemDto;
import org.jellyfin.apiclient.model.querying.ItemFields; 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.ItemQuery;
import org.jellyfin.apiclient.model.querying.ItemsResult; import org.jellyfin.apiclient.model.querying.ItemsResult;
@ -34,12 +35,16 @@ public class ShortcutUtil {
getSongs(query, callback); getSongs(query, callback);
} }
public static void getShuffle(MediaCallback<Song> callback) { public static void getShuffle(MediaCallback<Song> callback, boolean onlyFavorites) {
ItemQuery query = new ItemQuery(); ItemQuery query = new ItemQuery();
query.setSortBy(new String[]{SortMethod.RANDOM.getApi()}); query.setSortBy(new String[]{SortMethod.RANDOM.getApi()});
query.setSortOrder(SortOrder.DESCENDING.getApi()); query.setSortOrder(SortOrder.DESCENDING.getApi());
if (onlyFavorites) {
query.setFilters(new ItemFilter[]{ItemFilter.IsFavorite});
}
getSongs(query, callback); getSongs(query, callback);
} }

View file

@ -27,7 +27,7 @@ public class AppShortcutLauncherActivity extends Activity {
switch (getIntent().getIntExtra(EXTRA_SHORTCUT, SHORTCUT_TYPE_DEFAULT)) { switch (getIntent().getIntExtra(EXTRA_SHORTCUT, SHORTCUT_TYPE_DEFAULT)) {
case SHORTCUT_TYPE_SHUFFLE: case SHORTCUT_TYPE_SHUFFLE:
ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true)); ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true), false);
DynamicShortcutManager.reportShortcutUsed(this, ShuffleShortcutType.getId()); DynamicShortcutManager.reportShortcutUsed(this, ShuffleShortcutType.getId());
break; break;
case SHORTCUT_TYPE_FREQUENT: case SHORTCUT_TYPE_FREQUENT: