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;
public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter {
private boolean isFavorite = false;
public ShuffleButtonSongAdapter(AppCompatActivity activity, List<Song> 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);

View file

@ -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;
}
}

View file

@ -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");

View file

@ -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<Song> callback) {
public static void getShuffle(MediaCallback<Song> 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);
}

View file

@ -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: