fix several issues with playlist menus

This commit is contained in:
dkanada 2021-06-06 16:16:42 +09:00
commit a3eb514e96
6 changed files with 46 additions and 63 deletions

View file

@ -13,7 +13,9 @@ import com.afollestad.materialcab.MaterialCab;
import com.dkanada.gramophone.BuildConfig; import com.dkanada.gramophone.BuildConfig;
import com.dkanada.gramophone.activities.base.AbsMusicContentActivity; import com.dkanada.gramophone.activities.base.AbsMusicContentActivity;
import com.dkanada.gramophone.databinding.ActivityPlaylistDetailBinding; 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.GeneralItemAnimator;
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator; import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator;
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager; 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.OrderablePlaylistSongAdapter;
import com.dkanada.gramophone.adapter.song.SongAdapter; import com.dkanada.gramophone.adapter.song.SongAdapter;
import com.dkanada.gramophone.helper.MusicPlayerRemote; import com.dkanada.gramophone.helper.MusicPlayerRemote;
import com.dkanada.gramophone.helper.menu.PlaylistMenuHelper;
import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.interfaces.CabHolder;
import com.dkanada.gramophone.model.Playlist; import com.dkanada.gramophone.model.Playlist;
import com.dkanada.gramophone.model.PlaylistSong; import com.dkanada.gramophone.model.PlaylistSong;
@ -128,17 +129,17 @@ public class PlaylistDetailActivity extends AbsMusicContentActivity implements C
@Override @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId(); if (item.getItemId() == R.id.action_shuffle_playlist) {
switch (id) {
case R.id.action_shuffle_playlist:
MusicPlayerRemote.openAndShuffleQueue(adapter.getDataSet(), true); MusicPlayerRemote.openAndShuffleQueue(adapter.getDataSet(), true);
return true; } else if (item.getItemId() == R.id.action_rename_playlist) {
case R.id.action_download: RenamePlaylistDialog.create(playlist).show(getSupportFragmentManager(), RenamePlaylistDialog.TAG);
NavigationUtil.startDownload(this, adapter.getDataSet()); } else if (item.getItemId() == R.id.action_delete_playlist) {
return true; 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 @NonNull

View file

@ -16,9 +16,9 @@ import com.dkanada.gramophone.R;
import com.dkanada.gramophone.adapter.base.AbsMultiSelectAdapter; import com.dkanada.gramophone.adapter.base.AbsMultiSelectAdapter;
import com.dkanada.gramophone.adapter.base.MediaEntryViewHolder; import com.dkanada.gramophone.adapter.base.MediaEntryViewHolder;
import com.dkanada.gramophone.dialogs.DeletePlaylistDialog; import com.dkanada.gramophone.dialogs.DeletePlaylistDialog;
import com.dkanada.gramophone.dialogs.RenamePlaylistDialog;
import com.dkanada.gramophone.glide.CustomGlideRequest; import com.dkanada.gramophone.glide.CustomGlideRequest;
import com.dkanada.gramophone.glide.CustomPaletteTarget; import com.dkanada.gramophone.glide.CustomPaletteTarget;
import com.dkanada.gramophone.helper.menu.PlaylistMenuHelper;
import com.dkanada.gramophone.helper.menu.SongsMenuHelper; import com.dkanada.gramophone.helper.menu.SongsMenuHelper;
import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.interfaces.CabHolder;
import com.dkanada.gramophone.model.Playlist; import com.dkanada.gramophone.model.Playlist;
@ -142,7 +142,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
} }
} }
public class ViewHolder extends MediaEntryViewHolder { public class ViewHolder extends MediaEntryViewHolder implements PopupMenu.OnMenuItemClickListener {
public ViewHolder(@NonNull View itemView, int itemViewType) { public ViewHolder(@NonNull View itemView, int itemViewType) {
super(itemView); super(itemView);
@ -151,13 +151,35 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
final PopupMenu popupMenu = new PopupMenu(activity, view); final PopupMenu popupMenu = new PopupMenu(activity, view);
popupMenu.inflate(R.menu.menu_item_playlist); popupMenu.inflate(R.menu.menu_item_playlist);
popupMenu.setOnMenuItemClickListener(item -> PlaylistMenuHelper.handleMenuClick(activity, dataSet.get(getBindingAdapterPosition()), item)); popupMenu.setOnMenuItemClickListener(this);
popupMenu.show(); 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 @Override
public void onClick(View view) { public void onClick(View view) {
if (isInQuickSelectMode()) { if (isInQuickSelectMode()) {

View file

@ -13,6 +13,8 @@ import com.dkanada.gramophone.model.Playlist;
import com.dkanada.gramophone.util.PlaylistUtil; import com.dkanada.gramophone.util.PlaylistUtil;
public class RenamePlaylistDialog extends DialogFragment { public class RenamePlaylistDialog extends DialogFragment {
public static final String TAG = RenamePlaylistDialog.class.getSimpleName();
private static final String PLAYLIST = "playlist"; private static final String PLAYLIST = "playlist";
@NonNull @NonNull

View file

@ -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<Song> getPlaylistSongs(@NonNull Activity activity, Playlist playlist) {
return new ArrayList<>();
}
}

View file

@ -14,6 +14,9 @@ import java.util.List;
public class SongsMenuHelper { public class SongsMenuHelper {
public static boolean handleMenuClick(@NonNull FragmentActivity activity, @NonNull List<Song> songs, int menuItemId) { public static boolean handleMenuClick(@NonNull FragmentActivity activity, @NonNull List<Song> songs, int menuItemId) {
switch (menuItemId) { switch (menuItemId) {
case R.id.action_play:
MusicPlayerRemote.openQueue(songs, 0, true);
return true;
case R.id.action_play_next: case R.id.action_play_next:
MusicPlayerRemote.playNext(songs); MusicPlayerRemote.playNext(songs);
return true; return true;

View file

@ -25,4 +25,8 @@
android:id="@+id/action_delete_playlist" android:id="@+id/action_delete_playlist"
android:title="@string/action_delete" /> android:title="@string/action_delete" />
<item
android:id="@+id/action_download"
android:title="@string/action_download" />
</menu> </menu>