refactor context menus for playlist song adapters

This commit is contained in:
dkanada 2021-05-16 17:42:36 +09:00
commit 9bd539f7ab
7 changed files with 25 additions and 115 deletions

View file

@ -60,7 +60,6 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
return new ViewHolder(LayoutInflater.from(activity).inflate(R.layout.item_list, parent, false), viewType);
}
@SuppressWarnings("ConstantConditions")
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
switch (getItemViewType(position)) {

View file

@ -1,6 +1,5 @@
package com.dkanada.gramophone.adapter.song;
import android.view.MenuItem;
import android.view.View;
import androidx.annotation.LayoutRes;
@ -8,13 +7,12 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.dkanada.gramophone.interfaces.OrderableListener;
import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemAdapter;
import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemState;
import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemViewHolder;
import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange;
import com.h6ah4i.android.widget.advrecyclerview.draggable.annotation.DraggableItemStateFlags;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.dialogs.RemoveFromPlaylistDialog;
import com.dkanada.gramophone.interfaces.CabHolder;
import com.dkanada.gramophone.model.Song;
import com.dkanada.gramophone.util.ViewUtil;
@ -23,11 +21,10 @@ import java.util.List;
public class OrderablePlaylistSongAdapter extends PlaylistSongAdapter implements DraggableItemAdapter<OrderablePlaylistSongAdapter.ViewHolder> {
private OnMoveItemListener onMoveItemListener;
private OrderableListener onMoveItemListener;
public OrderablePlaylistSongAdapter(@NonNull AppCompatActivity activity, @NonNull List<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder, @Nullable OnMoveItemListener onMoveItemListener) {
public OrderablePlaylistSongAdapter(@NonNull AppCompatActivity activity, @NonNull List<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder, @Nullable OrderableListener onMoveItemListener) {
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder);
setMultiSelectMenuRes(R.menu.menu_playlists_songs_selection);
this.onMoveItemListener = onMoveItemListener;
}
@ -44,17 +41,6 @@ public class OrderablePlaylistSongAdapter extends PlaylistSongAdapter implements
return dataSet.get(position).id.hashCode();
}
@Override
protected void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull List<Song> selection) {
switch (menuItem.getItemId()) {
case R.id.action_remove_from_playlist:
RemoveFromPlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST");
return;
}
super.onMultipleItemAction(menuItem, selection);
}
@Override
public boolean onCheckCanStartDrag(@NonNull ViewHolder holder, int position, int x, int y) {
return onMoveItemListener != null && position > 0 &&
@ -88,10 +74,6 @@ public class OrderablePlaylistSongAdapter extends PlaylistSongAdapter implements
notifyDataSetChanged();
}
public interface OnMoveItemListener {
void onMoveItem(int fromPosition, int toPosition);
}
public class ViewHolder extends PlaylistSongAdapter.ViewHolder implements DraggableItemViewHolder {
@DraggableItemStateFlags
private int mDragStateFlags;
@ -108,22 +90,6 @@ public class OrderablePlaylistSongAdapter extends PlaylistSongAdapter implements
}
}
@Override
protected int getSongMenuRes() {
return R.menu.menu_item_playlist_song;
}
@Override
protected boolean onSongMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_remove_from_playlist:
RemoveFromPlaylistDialog.create(getSong()).show(activity.getSupportFragmentManager(), "REMOVE_FROM_PLAYLIST");
return true;
}
return super.onSongMenuItemClick(item);
}
@Override
public void setDragStateFlags(@DraggableItemStateFlags int flags) {
mDragStateFlags = flags;

View file

@ -6,23 +6,21 @@ import android.view.View;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.util.Pair;
import androidx.appcompat.app.AppCompatActivity;
import com.dkanada.gramophone.dialogs.RemoveFromPlaylistDialog;
import com.kabouzeid.appthemehelper.ThemeStore;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.interfaces.CabHolder;
import com.dkanada.gramophone.model.Album;
import com.dkanada.gramophone.model.Song;
import com.dkanada.gramophone.util.MusicUtil;
import com.dkanada.gramophone.util.NavigationUtil;
import java.util.List;
public class PlaylistSongAdapter extends AbsOffsetSongAdapter {
public PlaylistSongAdapter(AppCompatActivity activity, @NonNull List<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder, false);
setMultiSelectMenuRes(R.menu.menu_cannot_delete_single_songs_playlist_songs_selection);
setMultiSelectMenuRes(R.menu.menu_playlists_songs_selection);
}
@Override
@ -30,6 +28,16 @@ public class PlaylistSongAdapter extends AbsOffsetSongAdapter {
return new PlaylistSongAdapter.ViewHolder(view);
}
@Override
protected void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull List<Song> selection) {
if (menuItem.getItemId() == R.id.action_remove_from_playlist) {
RemoveFromPlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), RemoveFromPlaylistDialog.TAG);
return;
}
super.onMultipleItemAction(menuItem, selection);
}
@Override
public void onBindViewHolder(@NonNull final SongAdapter.ViewHolder holder, int position) {
if (holder.getItemViewType() == OFFSET_ITEM) {
@ -77,14 +85,13 @@ public class PlaylistSongAdapter extends AbsOffsetSongAdapter {
@Override
protected int getSongMenuRes() {
return R.menu.menu_item_cannot_delete_single_songs_playlist_song;
return R.menu.menu_item_playlist_song;
}
@Override
protected boolean onSongMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.action_go_to_album) {
Pair[] albumPairs = new Pair[]{Pair.create(image, activity.getString(R.string.transition_album_image))};
NavigationUtil.startAlbum(activity, new Album(dataSet.get(getBindingAdapterPosition() - 1)), albumPairs);
if (item.getItemId() == R.id.action_remove_from_playlist) {
RemoveFromPlaylistDialog.create(getSong()).show(activity.getSupportFragmentManager(), RemoveFromPlaylistDialog.TAG);
return true;
}

View file

@ -17,6 +17,8 @@ import java.util.ArrayList;
import java.util.List;
public class RemoveFromPlaylistDialog extends DialogFragment {
public static final String TAG = RemoveFromPlaylistDialog.class.getSimpleName();
@NonNull
public static RemoveFromPlaylistDialog create(Song song) {
List<Song> list = new ArrayList<>();

View file

@ -0,0 +1,5 @@
package com.dkanada.gramophone.interfaces;
public interface OrderableListener {
void onMoveItem(int from, int to);
}