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.
This commit is contained in:
Matthew Simpson 2025-03-09 14:15:17 +00:00
parent 9cf62c8c0c
commit bfdeb0658b
No known key found for this signature in database
GPG key ID: 9291883D725C52C9
5 changed files with 25 additions and 20 deletions

View file

@ -57,14 +57,14 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba
} }
private void setSongInfo() { private void setSongInfo() {
playlistChooserViewModel.setSongToAdd(requireArguments().getParcelable(Constants.TRACK_OBJECT)); playlistChooserViewModel.setSongsToAdd(requireArguments().getParcelableArrayList(Constants.TRACKS_OBJECT));
} }
private void setButtonAction() { private void setButtonAction() {
androidx.appcompat.app.AlertDialog alertDialog = (androidx.appcompat.app.AlertDialog) Objects.requireNonNull(getDialog()); androidx.appcompat.app.AlertDialog alertDialog = (androidx.appcompat.app.AlertDialog) Objects.requireNonNull(getDialog());
alertDialog.getButton(androidx.appcompat.app.AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> { alertDialog.getButton(androidx.appcompat.app.AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putParcelable(Constants.TRACK_OBJECT, playlistChooserViewModel.getSongToAdd()); bundle.putParcelableArrayList(Constants.TRACKS_OBJECT, playlistChooserViewModel.getSongsToAdd());
PlaylistEditorDialog dialog = new PlaylistEditorDialog(null); PlaylistEditorDialog dialog = new PlaylistEditorDialog(null);
dialog.setArguments(bundle); dialog.setArguments(bundle);
@ -98,7 +98,7 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba
@Override @Override
public void onPlaylistClick(Bundle bundle) { public void onPlaylistClick(Bundle bundle) {
Playlist playlist = bundle.getParcelable(Constants.PLAYLIST_OBJECT); Playlist playlist = bundle.getParcelable(Constants.PLAYLIST_OBJECT);
playlistChooserViewModel.addSongToPlaylist(playlist.getId()); playlistChooserViewModel.addSongsToPlaylist(playlist.getId());
dismiss(); dismiss();
} }
} }

View file

@ -74,11 +74,11 @@ public class PlaylistEditorDialog extends DialogFragment {
} }
private void setParameterInfo() { private void setParameterInfo() {
if (requireArguments().getParcelable(Constants.TRACK_OBJECT) != null) { if (requireArguments().getParcelableArrayList(Constants.TRACKS_OBJECT) != null) {
playlistEditorViewModel.setSongToAdd(requireArguments().getParcelable(Constants.TRACK_OBJECT)); playlistEditorViewModel.setSongsToAdd(requireArguments().getParcelableArrayList(Constants.TRACKS_OBJECT));
playlistEditorViewModel.setPlaylistToEdit(null); playlistEditorViewModel.setPlaylistToEdit(null);
} else if (requireArguments().getParcelable(Constants.PLAYLIST_OBJECT) != null) { } else if (requireArguments().getParcelable(Constants.PLAYLIST_OBJECT) != null) {
playlistEditorViewModel.setSongToAdd(null); playlistEditorViewModel.setSongsToAdd(null);
playlistEditorViewModel.setPlaylistToEdit(requireArguments().getParcelable(Constants.PLAYLIST_OBJECT)); playlistEditorViewModel.setPlaylistToEdit(requireArguments().getParcelable(Constants.PLAYLIST_OBJECT));
if (playlistEditorViewModel.getPlaylistToEdit() != null) { if (playlistEditorViewModel.getPlaylistToEdit() != null) {
@ -92,7 +92,7 @@ public class PlaylistEditorDialog extends DialogFragment {
alertDialog.getButton(androidx.appcompat.app.AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> { alertDialog.getButton(androidx.appcompat.app.AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
if (validateInput()) { if (validateInput()) {
if (playlistEditorViewModel.getSongToAdd() != null) { if (playlistEditorViewModel.getSongsToAdd() != null) {
playlistEditorViewModel.createPlaylist(playlistName); playlistEditorViewModel.createPlaylist(playlistName);
} else if (playlistEditorViewModel.getPlaylistToEdit() != null) { } else if (playlistEditorViewModel.getPlaylistToEdit() != null) {
playlistEditorViewModel.updatePlaylist(playlistName); playlistEditorViewModel.updatePlaylist(playlistName);

View file

@ -39,6 +39,9 @@ import com.cappielloantonio.tempo.viewmodel.SongBottomSheetViewModel;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import java.util.ArrayList;
import java.util.Collections;
@UnstableApi @UnstableApi
public class SongBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener { public class SongBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
private HomeViewModel homeViewModel; private HomeViewModel homeViewModel;
@ -177,7 +180,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
TextView addToPlaylist = view.findViewById(R.id.add_to_playlist_text_view); TextView addToPlaylist = view.findViewById(R.id.add_to_playlist_text_view);
addToPlaylist.setOnClickListener(v -> { addToPlaylist.setOnClickListener(v -> {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putParcelable(Constants.TRACK_OBJECT, song); bundle.putParcelableArrayList(Constants.TRACKS_OBJECT, new ArrayList<>(Collections.singletonList(song)));
PlaylistChooserDialog dialog = new PlaylistChooserDialog(); PlaylistChooserDialog dialog = new PlaylistChooserDialog();
dialog.setArguments(bundle); dialog.setArguments(bundle);

View file

@ -11,6 +11,7 @@ import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.tempo.repository.PlaylistRepository; import com.cappielloantonio.tempo.repository.PlaylistRepository;
import com.cappielloantonio.tempo.subsonic.models.Child; import com.cappielloantonio.tempo.subsonic.models.Child;
import com.cappielloantonio.tempo.subsonic.models.Playlist; import com.cappielloantonio.tempo.subsonic.models.Playlist;
import com.google.common.collect.Lists;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -20,7 +21,7 @@ public class PlaylistChooserViewModel extends AndroidViewModel {
private final PlaylistRepository playlistRepository; private final PlaylistRepository playlistRepository;
private final MutableLiveData<List<Playlist>> playlists = new MutableLiveData<>(null); private final MutableLiveData<List<Playlist>> playlists = new MutableLiveData<>(null);
private Child toAdd; private ArrayList<Child> toAdd;
public PlaylistChooserViewModel(@NonNull Application application) { public PlaylistChooserViewModel(@NonNull Application application) {
super(application); super(application);
@ -33,15 +34,15 @@ public class PlaylistChooserViewModel extends AndroidViewModel {
return playlists; return playlists;
} }
public void addSongToPlaylist(String playlistId) { public void addSongsToPlaylist(String playlistId) {
playlistRepository.addSongToPlaylist(playlistId, new ArrayList(Collections.singletonList(toAdd.getId()))); playlistRepository.addSongToPlaylist(playlistId, new ArrayList<>(Lists.transform(toAdd, Child::getId)));
} }
public void setSongToAdd(Child song) { public void setSongsToAdd(ArrayList<Child> songs) {
toAdd = song; toAdd = songs;
} }
public Child getSongToAdd() { public ArrayList<Child> getSongsToAdd() {
return toAdd; return toAdd;
} }
} }

View file

@ -12,6 +12,7 @@ import com.cappielloantonio.tempo.repository.SharingRepository;
import com.cappielloantonio.tempo.subsonic.models.Child; import com.cappielloantonio.tempo.subsonic.models.Child;
import com.cappielloantonio.tempo.subsonic.models.Playlist; import com.cappielloantonio.tempo.subsonic.models.Playlist;
import com.cappielloantonio.tempo.subsonic.models.Share; import com.cappielloantonio.tempo.subsonic.models.Share;
import com.google.common.collect.Lists;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -24,7 +25,7 @@ public class PlaylistEditorViewModel extends AndroidViewModel {
private final PlaylistRepository playlistRepository; private final PlaylistRepository playlistRepository;
private final SharingRepository sharingRepository; private final SharingRepository sharingRepository;
private Child toAdd; private ArrayList<Child> toAdd;
private Playlist toEdit; private Playlist toEdit;
private MutableLiveData<List<Child>> songLiveList = new MutableLiveData<>(); private MutableLiveData<List<Child>> songLiveList = new MutableLiveData<>();
@ -37,7 +38,7 @@ public class PlaylistEditorViewModel extends AndroidViewModel {
} }
public void createPlaylist(String name) { 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) { public void updatePlaylist(String name) {
@ -48,12 +49,12 @@ public class PlaylistEditorViewModel extends AndroidViewModel {
if (toEdit != null) playlistRepository.deletePlaylist(toEdit.getId()); if (toEdit != null) playlistRepository.deletePlaylist(toEdit.getId());
} }
public Child getSongToAdd() { public void setSongsToAdd(ArrayList<Child> songs) {
return toAdd; toAdd = songs;
} }
public void setSongToAdd(Child song) { public ArrayList<Child> getSongsToAdd() {
this.toAdd = song; return toAdd;
} }
public Playlist getPlaylistToEdit() { public Playlist getPlaylistToEdit() {