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);
}

View file

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_play_next"
android:icon="@drawable/ic_redo_white_24dp"
android:title="@string/action_play_next"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_add_to_queue"
android:icon="@drawable/ic_library_add_white_24dp"
android:title="@string/action_add_to_queue"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_add_to_playlist"
android:icon="@drawable/ic_playlist_add_white_24dp"
android:title="@string/action_add_to_playlist"
app:showAsAction="ifRoom" />
<item
android:id="@id/action_select_all"
android:icon="@drawable/ic_select_all_white_24dp"
android:title="@string/select_all_title"
app:showAsAction="ifRoom" />
</menu>

View file

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_play_next"
android:title="@string/action_play_next"
app:showAsAction="never" />
<item
android:id="@+id/action_add_to_queue"
android:title="@string/action_add_to_queue"
app:showAsAction="never" />
<item
android:id="@+id/action_add_to_playlist"
android:title="@string/action_add_to_playlist"
app:showAsAction="never" />
<item
android:id="@+id/action_go_to_album"
android:title="@string/action_go_to_album"
app:showAsAction="never" />
<item
android:id="@+id/action_go_to_artist"
android:title="@string/action_go_to_artist"
app:showAsAction="never" />
<item
android:id="@+id/action_share"
android:title="@string/action_share"
app:showAsAction="never" />
<item
android:id="@+id/action_details"
android:title="@string/action_details"
app:showAsAction="never" />
</menu>