refactor context menus for playlist song adapters
This commit is contained in:
parent
86d20c044b
commit
9bd539f7ab
7 changed files with 25 additions and 115 deletions
|
|
@ -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);
|
return new ViewHolder(LayoutInflater.from(activity).inflate(R.layout.item_list, parent, false), viewType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("ConstantConditions")
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
|
||||||
switch (getItemViewType(position)) {
|
switch (getItemViewType(position)) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.dkanada.gramophone.adapter.song;
|
package com.dkanada.gramophone.adapter.song;
|
||||||
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import androidx.annotation.LayoutRes;
|
import androidx.annotation.LayoutRes;
|
||||||
|
|
@ -8,13 +7,12 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
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.DraggableItemAdapter;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemState;
|
import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemState;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemViewHolder;
|
import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemViewHolder;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange;
|
import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.annotation.DraggableItemStateFlags;
|
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.interfaces.CabHolder;
|
||||||
import com.dkanada.gramophone.model.Song;
|
import com.dkanada.gramophone.model.Song;
|
||||||
import com.dkanada.gramophone.util.ViewUtil;
|
import com.dkanada.gramophone.util.ViewUtil;
|
||||||
|
|
@ -23,11 +21,10 @@ import java.util.List;
|
||||||
|
|
||||||
public class OrderablePlaylistSongAdapter extends PlaylistSongAdapter implements DraggableItemAdapter<OrderablePlaylistSongAdapter.ViewHolder> {
|
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);
|
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder);
|
||||||
setMultiSelectMenuRes(R.menu.menu_playlists_songs_selection);
|
|
||||||
this.onMoveItemListener = onMoveItemListener;
|
this.onMoveItemListener = onMoveItemListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -44,17 +41,6 @@ public class OrderablePlaylistSongAdapter extends PlaylistSongAdapter implements
|
||||||
return dataSet.get(position).id.hashCode();
|
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
|
@Override
|
||||||
public boolean onCheckCanStartDrag(@NonNull ViewHolder holder, int position, int x, int y) {
|
public boolean onCheckCanStartDrag(@NonNull ViewHolder holder, int position, int x, int y) {
|
||||||
return onMoveItemListener != null && position > 0 &&
|
return onMoveItemListener != null && position > 0 &&
|
||||||
|
|
@ -88,10 +74,6 @@ public class OrderablePlaylistSongAdapter extends PlaylistSongAdapter implements
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface OnMoveItemListener {
|
|
||||||
void onMoveItem(int fromPosition, int toPosition);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ViewHolder extends PlaylistSongAdapter.ViewHolder implements DraggableItemViewHolder {
|
public class ViewHolder extends PlaylistSongAdapter.ViewHolder implements DraggableItemViewHolder {
|
||||||
@DraggableItemStateFlags
|
@DraggableItemStateFlags
|
||||||
private int mDragStateFlags;
|
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
|
@Override
|
||||||
public void setDragStateFlags(@DraggableItemStateFlags int flags) {
|
public void setDragStateFlags(@DraggableItemStateFlags int flags) {
|
||||||
mDragStateFlags = flags;
|
mDragStateFlags = flags;
|
||||||
|
|
|
||||||
|
|
@ -6,23 +6,21 @@ import android.view.View;
|
||||||
import androidx.annotation.LayoutRes;
|
import androidx.annotation.LayoutRes;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.util.Pair;
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
|
import com.dkanada.gramophone.dialogs.RemoveFromPlaylistDialog;
|
||||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
import com.dkanada.gramophone.R;
|
import com.dkanada.gramophone.R;
|
||||||
import com.dkanada.gramophone.interfaces.CabHolder;
|
import com.dkanada.gramophone.interfaces.CabHolder;
|
||||||
import com.dkanada.gramophone.model.Album;
|
|
||||||
import com.dkanada.gramophone.model.Song;
|
import com.dkanada.gramophone.model.Song;
|
||||||
import com.dkanada.gramophone.util.MusicUtil;
|
import com.dkanada.gramophone.util.MusicUtil;
|
||||||
import com.dkanada.gramophone.util.NavigationUtil;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PlaylistSongAdapter extends AbsOffsetSongAdapter {
|
public class PlaylistSongAdapter extends AbsOffsetSongAdapter {
|
||||||
public PlaylistSongAdapter(AppCompatActivity activity, @NonNull List<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
|
public PlaylistSongAdapter(AppCompatActivity activity, @NonNull List<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
|
||||||
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder, false);
|
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
|
@Override
|
||||||
|
|
@ -30,6 +28,16 @@ public class PlaylistSongAdapter extends AbsOffsetSongAdapter {
|
||||||
return new PlaylistSongAdapter.ViewHolder(view);
|
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
|
@Override
|
||||||
public void onBindViewHolder(@NonNull final SongAdapter.ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull final SongAdapter.ViewHolder holder, int position) {
|
||||||
if (holder.getItemViewType() == OFFSET_ITEM) {
|
if (holder.getItemViewType() == OFFSET_ITEM) {
|
||||||
|
|
@ -77,14 +85,13 @@ public class PlaylistSongAdapter extends AbsOffsetSongAdapter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getSongMenuRes() {
|
protected int getSongMenuRes() {
|
||||||
return R.menu.menu_item_cannot_delete_single_songs_playlist_song;
|
return R.menu.menu_item_playlist_song;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean onSongMenuItemClick(MenuItem item) {
|
protected boolean onSongMenuItemClick(MenuItem item) {
|
||||||
if (item.getItemId() == R.id.action_go_to_album) {
|
if (item.getItemId() == R.id.action_remove_from_playlist) {
|
||||||
Pair[] albumPairs = new Pair[]{Pair.create(image, activity.getString(R.string.transition_album_image))};
|
RemoveFromPlaylistDialog.create(getSong()).show(activity.getSupportFragmentManager(), RemoveFromPlaylistDialog.TAG);
|
||||||
NavigationUtil.startAlbum(activity, new Album(dataSet.get(getBindingAdapterPosition() - 1)), albumPairs);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class RemoveFromPlaylistDialog extends DialogFragment {
|
public class RemoveFromPlaylistDialog extends DialogFragment {
|
||||||
|
public static final String TAG = RemoveFromPlaylistDialog.class.getSimpleName();
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public static RemoveFromPlaylistDialog create(Song song) {
|
public static RemoveFromPlaylistDialog create(Song song) {
|
||||||
List<Song> list = new ArrayList<>();
|
List<Song> list = new ArrayList<>();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
package com.dkanada.gramophone.interfaces;
|
||||||
|
|
||||||
|
public interface OrderableListener {
|
||||||
|
void onMoveItem(int from, int to);
|
||||||
|
}
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue