From bfdeb0658b330e43de8f928312f071dbe511a0c9 Mon Sep 17 00:00:00 2001 From: Matthew Simpson Date: Sun, 9 Mar 2025 14:15:17 +0000 Subject: [PATCH] Change `PlaylistChooserDialog`\`PlaylistEditorDialog` to require `ArrayList` of Songs This allows for being able to provide an entire Album's worth of songs in one API call. --- .../tempo/ui/dialog/PlaylistChooserDialog.java | 6 +++--- .../tempo/ui/dialog/PlaylistEditorDialog.java | 8 ++++---- .../bottomsheetdialog/SongBottomSheetDialog.java | 5 ++++- .../tempo/viewmodel/PlaylistChooserViewModel.java | 13 +++++++------ .../tempo/viewmodel/PlaylistEditorViewModel.java | 13 +++++++------ 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/PlaylistChooserDialog.java b/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/PlaylistChooserDialog.java index f0266c84..5c0b119c 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/PlaylistChooserDialog.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/PlaylistChooserDialog.java @@ -57,14 +57,14 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba } private void setSongInfo() { - playlistChooserViewModel.setSongToAdd(requireArguments().getParcelable(Constants.TRACK_OBJECT)); + playlistChooserViewModel.setSongsToAdd(requireArguments().getParcelableArrayList(Constants.TRACKS_OBJECT)); } private void setButtonAction() { androidx.appcompat.app.AlertDialog alertDialog = (androidx.appcompat.app.AlertDialog) Objects.requireNonNull(getDialog()); alertDialog.getButton(androidx.appcompat.app.AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> { Bundle bundle = new Bundle(); - bundle.putParcelable(Constants.TRACK_OBJECT, playlistChooserViewModel.getSongToAdd()); + bundle.putParcelableArrayList(Constants.TRACKS_OBJECT, playlistChooserViewModel.getSongsToAdd()); PlaylistEditorDialog dialog = new PlaylistEditorDialog(null); dialog.setArguments(bundle); @@ -98,7 +98,7 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba @Override public void onPlaylistClick(Bundle bundle) { Playlist playlist = bundle.getParcelable(Constants.PLAYLIST_OBJECT); - playlistChooserViewModel.addSongToPlaylist(playlist.getId()); + playlistChooserViewModel.addSongsToPlaylist(playlist.getId()); dismiss(); } } diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/PlaylistEditorDialog.java b/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/PlaylistEditorDialog.java index 4d265beb..dea70d7d 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/PlaylistEditorDialog.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/PlaylistEditorDialog.java @@ -74,11 +74,11 @@ public class PlaylistEditorDialog extends DialogFragment { } private void setParameterInfo() { - if (requireArguments().getParcelable(Constants.TRACK_OBJECT) != null) { - playlistEditorViewModel.setSongToAdd(requireArguments().getParcelable(Constants.TRACK_OBJECT)); + if (requireArguments().getParcelableArrayList(Constants.TRACKS_OBJECT) != null) { + playlistEditorViewModel.setSongsToAdd(requireArguments().getParcelableArrayList(Constants.TRACKS_OBJECT)); playlistEditorViewModel.setPlaylistToEdit(null); } else if (requireArguments().getParcelable(Constants.PLAYLIST_OBJECT) != null) { - playlistEditorViewModel.setSongToAdd(null); + playlistEditorViewModel.setSongsToAdd(null); playlistEditorViewModel.setPlaylistToEdit(requireArguments().getParcelable(Constants.PLAYLIST_OBJECT)); if (playlistEditorViewModel.getPlaylistToEdit() != null) { @@ -92,7 +92,7 @@ public class PlaylistEditorDialog extends DialogFragment { alertDialog.getButton(androidx.appcompat.app.AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> { if (validateInput()) { - if (playlistEditorViewModel.getSongToAdd() != null) { + if (playlistEditorViewModel.getSongsToAdd() != null) { playlistEditorViewModel.createPlaylist(playlistName); } else if (playlistEditorViewModel.getPlaylistToEdit() != null) { playlistEditorViewModel.updatePlaylist(playlistName); diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java index b22830eb..0d15ad2f 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java @@ -39,6 +39,9 @@ import com.cappielloantonio.tempo.viewmodel.SongBottomSheetViewModel; import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import com.google.common.util.concurrent.ListenableFuture; +import java.util.ArrayList; +import java.util.Collections; + @UnstableApi public class SongBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener { private HomeViewModel homeViewModel; @@ -177,7 +180,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements TextView addToPlaylist = view.findViewById(R.id.add_to_playlist_text_view); addToPlaylist.setOnClickListener(v -> { Bundle bundle = new Bundle(); - bundle.putParcelable(Constants.TRACK_OBJECT, song); + bundle.putParcelableArrayList(Constants.TRACKS_OBJECT, new ArrayList<>(Collections.singletonList(song))); PlaylistChooserDialog dialog = new PlaylistChooserDialog(); dialog.setArguments(bundle); diff --git a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlaylistChooserViewModel.java b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlaylistChooserViewModel.java index cb8833fe..fdee85c6 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlaylistChooserViewModel.java +++ b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlaylistChooserViewModel.java @@ -11,6 +11,7 @@ import androidx.lifecycle.MutableLiveData; import com.cappielloantonio.tempo.repository.PlaylistRepository; import com.cappielloantonio.tempo.subsonic.models.Child; import com.cappielloantonio.tempo.subsonic.models.Playlist; +import com.google.common.collect.Lists; import java.util.ArrayList; import java.util.Collections; @@ -20,7 +21,7 @@ public class PlaylistChooserViewModel extends AndroidViewModel { private final PlaylistRepository playlistRepository; private final MutableLiveData> playlists = new MutableLiveData<>(null); - private Child toAdd; + private ArrayList toAdd; public PlaylistChooserViewModel(@NonNull Application application) { super(application); @@ -33,15 +34,15 @@ public class PlaylistChooserViewModel extends AndroidViewModel { return playlists; } - public void addSongToPlaylist(String playlistId) { - playlistRepository.addSongToPlaylist(playlistId, new ArrayList(Collections.singletonList(toAdd.getId()))); + public void addSongsToPlaylist(String playlistId) { + playlistRepository.addSongToPlaylist(playlistId, new ArrayList<>(Lists.transform(toAdd, Child::getId))); } - public void setSongToAdd(Child song) { - toAdd = song; + public void setSongsToAdd(ArrayList songs) { + toAdd = songs; } - public Child getSongToAdd() { + public ArrayList getSongsToAdd() { return toAdd; } } diff --git a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlaylistEditorViewModel.java b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlaylistEditorViewModel.java index 8f9181a0..aceedb95 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlaylistEditorViewModel.java +++ b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlaylistEditorViewModel.java @@ -12,6 +12,7 @@ import com.cappielloantonio.tempo.repository.SharingRepository; import com.cappielloantonio.tempo.subsonic.models.Child; import com.cappielloantonio.tempo.subsonic.models.Playlist; import com.cappielloantonio.tempo.subsonic.models.Share; +import com.google.common.collect.Lists; import java.util.ArrayList; import java.util.Collections; @@ -24,7 +25,7 @@ public class PlaylistEditorViewModel extends AndroidViewModel { private final PlaylistRepository playlistRepository; private final SharingRepository sharingRepository; - private Child toAdd; + private ArrayList toAdd; private Playlist toEdit; private MutableLiveData> songLiveList = new MutableLiveData<>(); @@ -37,7 +38,7 @@ public class PlaylistEditorViewModel extends AndroidViewModel { } public void createPlaylist(String name) { - playlistRepository.createPlaylist(null, name, new ArrayList(Collections.singletonList(toAdd.getId()))); + playlistRepository.createPlaylist(null, name, new ArrayList(Lists.transform(toAdd, Child::getId))); } public void updatePlaylist(String name) { @@ -48,12 +49,12 @@ public class PlaylistEditorViewModel extends AndroidViewModel { if (toEdit != null) playlistRepository.deletePlaylist(toEdit.getId()); } - public Child getSongToAdd() { - return toAdd; + public void setSongsToAdd(ArrayList songs) { + toAdd = songs; } - public void setSongToAdd(Child song) { - this.toAdd = song; + public ArrayList getSongsToAdd() { + return toAdd; } public Playlist getPlaylistToEdit() {