mirror of
https://github.com/antebudimir/tempus.git
synced 2026-01-02 10:23:33 +00:00
implemented the playlist management logic
This commit is contained in:
parent
d2092f5239
commit
4adde9e951
13 changed files with 448 additions and 27 deletions
|
|
@ -7,14 +7,21 @@ import android.os.Bundle;
|
|||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.cappielloantonio.play.R;
|
||||
import com.cappielloantonio.play.adapter.PlaylistDialogSongHorizontalAdapter;
|
||||
import com.cappielloantonio.play.databinding.DialogPlaylistEditorBinding;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.cappielloantonio.play.viewmodel.PlaylistEditorViewModel;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Objects;
|
||||
|
||||
public class PlaylistEditorDialog extends DialogFragment {
|
||||
|
|
@ -26,6 +33,7 @@ public class PlaylistEditorDialog extends DialogFragment {
|
|||
private PlaylistEditorViewModel playlistEditorViewModel;
|
||||
|
||||
private String playlistName;
|
||||
private PlaylistDialogSongHorizontalAdapter playlistDialogSongHorizontalAdapter;
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
|
|
@ -41,6 +49,7 @@ public class PlaylistEditorDialog extends DialogFragment {
|
|||
.setTitle("Create playlist")
|
||||
.setPositiveButton("Save", (dialog, id) -> {
|
||||
})
|
||||
.setNeutralButton("Delete", (dialog, id) -> dialog.cancel())
|
||||
.setNegativeButton("Cancel", (dialog, id) -> dialog.cancel());
|
||||
|
||||
return builder.create();
|
||||
|
|
@ -50,15 +59,28 @@ public class PlaylistEditorDialog extends DialogFragment {
|
|||
public void onStart() {
|
||||
super.onStart();
|
||||
|
||||
setSongInfo();
|
||||
setParameterInfo();
|
||||
setButtonAction();
|
||||
initSongsView();
|
||||
}
|
||||
|
||||
private void setSongInfo() {
|
||||
private void setParameterInfo() {
|
||||
if (getArguments() != null) {
|
||||
playlistEditorViewModel.setSongToAdd(getArguments().getParcelable("song_object"));
|
||||
if (getArguments().getParcelable("song_object") != null) {
|
||||
playlistEditorViewModel.setSongToAdd(getArguments().getParcelable("song_object"));
|
||||
playlistEditorViewModel.setPlaylistToEdit(null);
|
||||
}
|
||||
else if (getArguments().getParcelable("playlist_object") != null) {
|
||||
playlistEditorViewModel.setSongToAdd(null);
|
||||
playlistEditorViewModel.setPlaylistToEdit(getArguments().getParcelable("playlist_object"));
|
||||
|
||||
if (playlistEditorViewModel.getPlaylistToEdit() != null) {
|
||||
bind.playlistNameTextView.setText(MusicUtil.getReadableString(playlistEditorViewModel.getPlaylistToEdit().getName()));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
playlistEditorViewModel.setSongToAdd(null);
|
||||
playlistEditorViewModel.setPlaylistToEdit(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -69,10 +91,74 @@ public class PlaylistEditorDialog extends DialogFragment {
|
|||
|
||||
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
|
||||
if (validateInput()) {
|
||||
playlistEditorViewModel.createPlaylist(playlistName);
|
||||
if (playlistEditorViewModel.getSongToAdd() != null) {
|
||||
playlistEditorViewModel.createPlaylist(playlistName);
|
||||
} else if (playlistEditorViewModel.getPlaylistToEdit() != null) {
|
||||
playlistEditorViewModel.updatePlaylist(playlistName);
|
||||
}
|
||||
|
||||
Objects.requireNonNull(getDialog()).dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> {
|
||||
playlistEditorViewModel.deletePlaylist();
|
||||
Objects.requireNonNull(getDialog()).dismiss();
|
||||
});
|
||||
}
|
||||
|
||||
private void initSongsView() {
|
||||
bind.playlistSongRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||
bind.playlistSongRecyclerView.setHasFixedSize(true);
|
||||
|
||||
playlistDialogSongHorizontalAdapter = new PlaylistDialogSongHorizontalAdapter(activity, requireContext(), getChildFragmentManager());
|
||||
bind.playlistSongRecyclerView.setAdapter(playlistDialogSongHorizontalAdapter);
|
||||
|
||||
playlistEditorViewModel.getPlaylistSongLiveList().observe(requireActivity(), songs -> {
|
||||
playlistDialogSongHorizontalAdapter.setItems(songs);
|
||||
});
|
||||
|
||||
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT) {
|
||||
int originalPosition = -1;
|
||||
int fromPosition = -1;
|
||||
int toPosition = -1;
|
||||
|
||||
@Override
|
||||
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
|
||||
if (originalPosition == -1)
|
||||
originalPosition = viewHolder.getBindingAdapterPosition();
|
||||
|
||||
fromPosition = viewHolder.getBindingAdapterPosition();
|
||||
toPosition = target.getBindingAdapterPosition();
|
||||
|
||||
Collections.swap(playlistDialogSongHorizontalAdapter.getItems(), fromPosition, toPosition);
|
||||
recyclerView.getAdapter().notifyItemMoved(fromPosition, toPosition);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
|
||||
super.clearView(recyclerView, viewHolder);
|
||||
|
||||
/*
|
||||
* Qui vado a riscivere tutta la table Queue, quando teoricamente potrei solo swappare l'ordine degli elementi interessati
|
||||
* Nel caso la coda contenesse parecchi brani, potrebbero verificarsi rallentamenti pesanti
|
||||
*/
|
||||
playlistEditorViewModel.orderPlaylistSongLiveListAfterSwap(playlistDialogSongHorizontalAdapter.getItems());
|
||||
|
||||
originalPosition = -1;
|
||||
fromPosition = -1;
|
||||
toPosition = -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
|
||||
playlistEditorViewModel.removeFromPlaylistSongLiveList(playlistDialogSongHorizontalAdapter.getItem(viewHolder.getBindingAdapterPosition()));
|
||||
bind.playlistSongRecyclerView.getAdapter().notifyItemRemoved(viewHolder.getBindingAdapterPosition());
|
||||
}
|
||||
}
|
||||
).attachToRecyclerView(bind.playlistSongRecyclerView);
|
||||
}
|
||||
|
||||
private boolean validateInput() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue