From a3eb514e969cc2b59270b1a694817e07894885e9 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sun, 6 Jun 2021 16:16:42 +0900 Subject: [PATCH] fix several issues with playlist menus --- .../details/PlaylistDetailActivity.java | 23 ++++----- .../gramophone/adapter/PlaylistAdapter.java | 28 +++++++++-- .../dialogs/RenamePlaylistDialog.java | 2 + .../helper/menu/PlaylistMenuHelper.java | 49 ------------------- .../helper/menu/SongsMenuHelper.java | 3 ++ app/src/main/res/menu/menu_item_playlist.xml | 4 ++ 6 files changed, 46 insertions(+), 63 deletions(-) delete mode 100644 app/src/main/java/com/dkanada/gramophone/helper/menu/PlaylistMenuHelper.java diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java index 18f31883..82411408 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java @@ -13,7 +13,9 @@ import com.afollestad.materialcab.MaterialCab; import com.dkanada.gramophone.BuildConfig; import com.dkanada.gramophone.activities.base.AbsMusicContentActivity; import com.dkanada.gramophone.databinding.ActivityPlaylistDetailBinding; -import com.dkanada.gramophone.util.NavigationUtil; +import com.dkanada.gramophone.dialogs.DeletePlaylistDialog; +import com.dkanada.gramophone.dialogs.RenamePlaylistDialog; +import com.dkanada.gramophone.helper.menu.SongsMenuHelper; import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator; import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator; import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager; @@ -23,7 +25,6 @@ import com.dkanada.gramophone.R; import com.dkanada.gramophone.adapter.song.OrderablePlaylistSongAdapter; import com.dkanada.gramophone.adapter.song.SongAdapter; import com.dkanada.gramophone.helper.MusicPlayerRemote; -import com.dkanada.gramophone.helper.menu.PlaylistMenuHelper; import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.model.Playlist; import com.dkanada.gramophone.model.PlaylistSong; @@ -128,17 +129,17 @@ public class PlaylistDetailActivity extends AbsMusicContentActivity implements C @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { - int id = item.getItemId(); - switch (id) { - case R.id.action_shuffle_playlist: - MusicPlayerRemote.openAndShuffleQueue(adapter.getDataSet(), true); - return true; - case R.id.action_download: - NavigationUtil.startDownload(this, adapter.getDataSet()); - return true; + if (item.getItemId() == R.id.action_shuffle_playlist) { + MusicPlayerRemote.openAndShuffleQueue(adapter.getDataSet(), true); + } else if (item.getItemId() == R.id.action_rename_playlist) { + RenamePlaylistDialog.create(playlist).show(getSupportFragmentManager(), RenamePlaylistDialog.TAG); + } else if (item.getItemId() == R.id.action_delete_playlist) { + DeletePlaylistDialog.create(playlist).show(getSupportFragmentManager(), DeletePlaylistDialog.TAG); } - return PlaylistMenuHelper.handleMenuClick(this, playlist, item); + // TODO move SongsMenuHelper into AbsMediaDetailActivity + return SongsMenuHelper.handleMenuClick(this, adapter.getDataSet(), item.getItemId()) + || super.onOptionsItemSelected(item); } @NonNull 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 bda7fa10..67f3af6b 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/PlaylistAdapter.java @@ -16,9 +16,9 @@ import com.dkanada.gramophone.R; import com.dkanada.gramophone.adapter.base.AbsMultiSelectAdapter; import com.dkanada.gramophone.adapter.base.MediaEntryViewHolder; import com.dkanada.gramophone.dialogs.DeletePlaylistDialog; +import com.dkanada.gramophone.dialogs.RenamePlaylistDialog; import com.dkanada.gramophone.glide.CustomGlideRequest; import com.dkanada.gramophone.glide.CustomPaletteTarget; -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; @@ -142,7 +142,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter PlaylistMenuHelper.handleMenuClick(activity, dataSet.get(getBindingAdapterPosition()), item)); + popupMenu.setOnMenuItemClickListener(this); popupMenu.show(); }); } } + @Override + public boolean onMenuItemClick(MenuItem item) { + Playlist playlist = dataSet.get(getBindingAdapterPosition()); + + if (item.getItemId() == R.id.action_rename_playlist) { + RenamePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), RenamePlaylistDialog.TAG); + return true; + } else if (item.getItemId() == R.id.action_delete_playlist) { + DeletePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), DeletePlaylistDialog.TAG); + return true; + } + + ItemQuery songs = new ItemQuery(); + songs.setParentId(playlist.id); + + QueryUtil.getSongs(songs, (media) -> { + SongsMenuHelper.handleMenuClick(activity, media, item.getItemId()); + }); + + return true; + } + @Override public void onClick(View view) { if (isInQuickSelectMode()) { diff --git a/app/src/main/java/com/dkanada/gramophone/dialogs/RenamePlaylistDialog.java b/app/src/main/java/com/dkanada/gramophone/dialogs/RenamePlaylistDialog.java index 76a6592e..a4c6383b 100644 --- a/app/src/main/java/com/dkanada/gramophone/dialogs/RenamePlaylistDialog.java +++ b/app/src/main/java/com/dkanada/gramophone/dialogs/RenamePlaylistDialog.java @@ -13,6 +13,8 @@ import com.dkanada.gramophone.model.Playlist; import com.dkanada.gramophone.util.PlaylistUtil; public class RenamePlaylistDialog extends DialogFragment { + public static final String TAG = RenamePlaylistDialog.class.getSimpleName(); + private static final String PLAYLIST = "playlist"; @NonNull diff --git a/app/src/main/java/com/dkanada/gramophone/helper/menu/PlaylistMenuHelper.java b/app/src/main/java/com/dkanada/gramophone/helper/menu/PlaylistMenuHelper.java deleted file mode 100644 index 156bf8cf..00000000 --- a/app/src/main/java/com/dkanada/gramophone/helper/menu/PlaylistMenuHelper.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.dkanada.gramophone.helper.menu; - -import android.app.Activity; -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import android.view.MenuItem; - -import com.dkanada.gramophone.R; -import com.dkanada.gramophone.dialogs.AddToPlaylistDialog; -import com.dkanada.gramophone.dialogs.DeletePlaylistDialog; -import com.dkanada.gramophone.dialogs.RenamePlaylistDialog; -import com.dkanada.gramophone.helper.MusicPlayerRemote; -import com.dkanada.gramophone.model.Playlist; -import com.dkanada.gramophone.model.Song; - -import java.util.ArrayList; -import java.util.List; - -public class PlaylistMenuHelper { - public static boolean handleMenuClick(@NonNull AppCompatActivity activity, @NonNull final Playlist playlist, @NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.action_play: - MusicPlayerRemote.openQueue(new ArrayList<>(getPlaylistSongs(activity, playlist)), 0, true); - return true; - case R.id.action_play_next: - MusicPlayerRemote.playNext(new ArrayList<>(getPlaylistSongs(activity, playlist))); - return true; - case R.id.action_add_to_queue: - MusicPlayerRemote.enqueue(new ArrayList<>(getPlaylistSongs(activity, playlist))); - return true; - case R.id.action_add_to_playlist: - AddToPlaylistDialog.create(new ArrayList<>(getPlaylistSongs(activity, playlist))).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); - return true; - case R.id.action_rename_playlist: - RenamePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), "RENAME_PLAYLIST"); - return true; - case R.id.action_delete_playlist: - DeletePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), DeletePlaylistDialog.TAG); - return true; - } - - return false; - } - - @NonNull - private static List getPlaylistSongs(@NonNull Activity activity, Playlist playlist) { - return new ArrayList<>(); - } -} diff --git a/app/src/main/java/com/dkanada/gramophone/helper/menu/SongsMenuHelper.java b/app/src/main/java/com/dkanada/gramophone/helper/menu/SongsMenuHelper.java index 2d86d92a..43a376ae 100644 --- a/app/src/main/java/com/dkanada/gramophone/helper/menu/SongsMenuHelper.java +++ b/app/src/main/java/com/dkanada/gramophone/helper/menu/SongsMenuHelper.java @@ -14,6 +14,9 @@ import java.util.List; public class SongsMenuHelper { public static boolean handleMenuClick(@NonNull FragmentActivity activity, @NonNull List songs, int menuItemId) { switch (menuItemId) { + case R.id.action_play: + MusicPlayerRemote.openQueue(songs, 0, true); + return true; case R.id.action_play_next: MusicPlayerRemote.playNext(songs); return true; diff --git a/app/src/main/res/menu/menu_item_playlist.xml b/app/src/main/res/menu/menu_item_playlist.xml index 9383187a..f444bc8a 100644 --- a/app/src/main/res/menu/menu_item_playlist.xml +++ b/app/src/main/res/menu/menu_item_playlist.xml @@ -25,4 +25,8 @@ android:id="@+id/action_delete_playlist" android:title="@string/action_delete" /> + +