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.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:
if (item.getItemId() == R.id.action_shuffle_playlist) {
MusicPlayerRemote.openAndShuffleQueue(adapter.getDataSet(), true);
return true;
case R.id.action_download:
NavigationUtil.startDownload(this, adapter.getDataSet());
return 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

View file

@ -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<PlaylistAdapter.ViewH
}
}
public class ViewHolder extends MediaEntryViewHolder {
public class ViewHolder extends MediaEntryViewHolder implements PopupMenu.OnMenuItemClickListener {
public ViewHolder(@NonNull View itemView, int itemViewType) {
super(itemView);
@ -151,13 +151,35 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
final PopupMenu popupMenu = new PopupMenu(activity, view);
popupMenu.inflate(R.menu.menu_item_playlist);
popupMenu.setOnMenuItemClickListener(item -> 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()) {

View file

@ -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

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 static boolean handleMenuClick(@NonNull FragmentActivity activity, @NonNull List<Song> 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;

View file

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