From d85f95da91bd6d1bdf21761b0675bfa8991069f4 Mon Sep 17 00:00:00 2001 From: dkanada Date: Thu, 6 May 2021 15:13:15 +0900 Subject: [PATCH] support batch actions for parent items --- .../gramophone/adapter/PlaylistAdapter.java | 22 ++++++++++++------- .../adapter/album/AlbumAdapter.java | 13 +++++++++-- .../adapter/artist/ArtistAdapter.java | 15 ++++++++++++- .../main/res/menu/menu_media_selection.xml | 1 + .../res/menu/menu_playlists_selection.xml | 1 + 5 files changed, 41 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/PlaylistAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/PlaylistAdapter.java index 25bc5d93..4a991a89 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/PlaylistAdapter.java @@ -22,9 +22,11 @@ import com.dkanada.gramophone.helper.menu.PlaylistMenuHelper; import com.dkanada.gramophone.helper.menu.SongsMenuHelper; import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.model.Playlist; +import com.dkanada.gramophone.util.QueryUtil; import com.dkanada.gramophone.util.NavigationUtil; -import java.util.ArrayList; +import org.jellyfin.apiclient.model.querying.ItemQuery; + import java.util.List; public class PlaylistAdapter extends AbsMultiSelectAdapter { @@ -126,13 +128,17 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter selection) { - switch (menuItem.getItemId()) { - case R.id.action_delete_playlist: - DeletePlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), DeletePlaylistDialog.TAG); - break; - default: - SongsMenuHelper.handleMenuClick(activity, new ArrayList<>(), menuItem.getItemId()); - break; + if (menuItem.getItemId() == R.id.action_delete_playlist) { + DeletePlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), DeletePlaylistDialog.TAG); + } else { + for (Playlist playlist : selection) { + ItemQuery songs = new ItemQuery(); + songs.setParentId(playlist.id); + + QueryUtil.getSongs(songs, (media) -> { + SongsMenuHelper.handleMenuClick(activity, media, menuItem.getItemId()); + }); + } } } diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/album/AlbumAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/album/AlbumAdapter.java index 542c64e3..a404cde7 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/album/AlbumAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/album/AlbumAdapter.java @@ -12,6 +12,7 @@ import androidx.annotation.Nullable; import androidx.core.util.Pair; import androidx.appcompat.app.AppCompatActivity; +import com.dkanada.gramophone.util.QueryUtil; import com.kabouzeid.appthemehelper.util.ColorUtil; import com.kabouzeid.appthemehelper.util.MaterialValueHelper; import com.dkanada.gramophone.R; @@ -28,7 +29,8 @@ import com.dkanada.gramophone.util.NavigationUtil; import com.dkanada.gramophone.util.PreferenceUtil; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; -import java.util.ArrayList; +import org.jellyfin.apiclient.model.querying.ItemQuery; + import java.util.List; public class AlbumAdapter extends AbsMultiSelectAdapter implements FastScrollRecyclerView.SectionedAdapter { @@ -170,7 +172,14 @@ public class AlbumAdapter extends AbsMultiSelectAdapter selection) { - SongsMenuHelper.handleMenuClick(activity, new ArrayList<>(), menuItem.getItemId()); + for (Album album : selection) { + ItemQuery songs = new ItemQuery(); + songs.setParentId(album.id); + + QueryUtil.getSongs(songs, (media) -> { + SongsMenuHelper.handleMenuClick(activity, media, menuItem.getItemId()); + }); + } } @NonNull diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/artist/ArtistAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/artist/ArtistAdapter.java index 9d626b05..1923dc52 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/artist/ArtistAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/artist/ArtistAdapter.java @@ -12,6 +12,7 @@ import androidx.annotation.Nullable; import androidx.core.util.Pair; import androidx.appcompat.app.AppCompatActivity; +import com.dkanada.gramophone.util.QueryUtil; import com.kabouzeid.appthemehelper.util.ColorUtil; import com.kabouzeid.appthemehelper.util.MaterialValueHelper; import com.dkanada.gramophone.R; @@ -26,6 +27,8 @@ import com.dkanada.gramophone.util.MusicUtil; import com.dkanada.gramophone.util.NavigationUtil; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; +import org.jellyfin.apiclient.model.querying.ItemQuery; + import java.util.ArrayList; import java.util.List; @@ -159,7 +162,17 @@ public class ArtistAdapter extends AbsMultiSelectAdapter selection) { - SongsMenuHelper.handleMenuClick(activity, new ArrayList<>(), menuItem.getItemId()); + List ids = new ArrayList<>(); + for (Artist artist : selection) { + ids.add(artist.id); + } + + ItemQuery songs = new ItemQuery(); + songs.setArtistIds(ids.toArray(new String[0])); + + QueryUtil.getSongs(songs, (media) -> { + SongsMenuHelper.handleMenuClick(activity, media, menuItem.getItemId()); + }); } @NonNull diff --git a/app/src/main/res/menu/menu_media_selection.xml b/app/src/main/res/menu/menu_media_selection.xml index f294dae1..c713e4f8 100644 --- a/app/src/main/res/menu/menu_media_selection.xml +++ b/app/src/main/res/menu/menu_media_selection.xml @@ -18,6 +18,7 @@ android:id="@+id/action_add_to_playlist" android:icon="@drawable/ic_playlist_add_white_24dp" android:title="@string/action_add_to_playlist" + android:visible="false" app:showAsAction="ifRoom" />