diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java | 120 |
1 files changed, 16 insertions, 104 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java index 456f45fd2..14f537eb0 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java @@ -6,44 +6,24 @@ import android.view.ContextMenu; import android.view.MenuInflater; import android.view.MotionEvent; import android.view.View; -import android.view.ViewGroup; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.core.view.MotionEventCompat; import androidx.recyclerview.widget.ItemTouchHelper; -import androidx.recyclerview.widget.RecyclerView; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; -import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.preferences.UserPreferences; -import de.danoeh.antennapod.core.util.LongList; -import de.danoeh.antennapod.fragment.ItemPagerFragment; -import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; import de.danoeh.antennapod.view.viewholder.EpisodeItemViewHolder; -import org.apache.commons.lang3.ArrayUtils; - -import java.lang.ref.WeakReference; /** * List adapter for the queue. */ -public class QueueRecyclerAdapter extends RecyclerView.Adapter<EpisodeItemViewHolder> implements View.OnCreateContextMenuListener { +public class QueueRecyclerAdapter extends EpisodeItemListAdapter { private static final String TAG = "QueueRecyclerAdapter"; - private final WeakReference<MainActivity> mainActivity; - private final ItemAccess itemAccess; private final ItemTouchHelper itemTouchHelper; - private boolean locked; - private FeedItem selectedItem; - - public QueueRecyclerAdapter(MainActivity mainActivity, - ItemAccess itemAccess, - ItemTouchHelper itemTouchHelper) { - super(); - this.mainActivity = new WeakReference<>(mainActivity); - this.itemAccess = itemAccess; + public QueueRecyclerAdapter(MainActivity mainActivity, ItemTouchHelper itemTouchHelper) { + super(mainActivity); this.itemTouchHelper = itemTouchHelper; locked = UserPreferences.isQueueLocked(); } @@ -53,31 +33,10 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<EpisodeItemViewHo notifyDataSetChanged(); } - @NonNull - @Override - public EpisodeItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new EpisodeItemViewHolder(mainActivity.get(), parent); - } - @Override @SuppressLint("ClickableViewAccessibility") public void onBindViewHolder(EpisodeItemViewHolder holder, int pos) { - FeedItem item = itemAccess.getItem(pos); - holder.bind(item); - holder.dragHandle.setVisibility(locked ? View.GONE : View.VISIBLE); - holder.itemView.setOnLongClickListener(v -> { - selectedItem = item; - return false; - }); - holder.itemView.setOnClickListener(v -> { - MainActivity activity = mainActivity.get(); - if (activity != null) { - long[] ids = itemAccess.getQueueIds().toArray(); - int position = ArrayUtils.indexOf(ids, item.getId()); - activity.loadChildFragment(ItemPagerFragment.newInstance(ids, position)); - } - }); - + super.onBindViewHolder(holder, pos); View.OnTouchListener startDragTouchListener = (v1, event) -> { if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) { Log.d(TAG, "startDrag()"); @@ -85,80 +44,33 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<EpisodeItemViewHo } return false; }; - if (!locked) { - holder.dragHandle.setOnTouchListener(startDragTouchListener); - holder.coverHolder.setOnTouchListener(startDragTouchListener); - } else { + + if (locked) { + holder.dragHandle.setVisibility(View.GONE); holder.dragHandle.setOnTouchListener(null); holder.coverHolder.setOnTouchListener(null); + } else { + holder.dragHandle.setVisibility(View.VISIBLE); + holder.dragHandle.setOnTouchListener(startDragTouchListener); + holder.coverHolder.setOnTouchListener(startDragTouchListener); } - holder.itemView.setOnCreateContextMenuListener(this); holder.isInQueue.setVisibility(View.GONE); holder.hideSeparatorIfNecessary(); } - @Nullable - public FeedItem getSelectedItem() { - return selectedItem; - } - - @Override - public long getItemId(int position) { - FeedItem item = itemAccess.getItem(position); - return item != null ? item.getId() : RecyclerView.NO_POSITION; - } - - public int getItemCount() { - return itemAccess.getCount(); - } - @Override public void onCreateContextMenu(final ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - MenuInflater inflater = mainActivity.get().getMenuInflater(); - inflater.inflate(R.menu.queue_context, menu); // queue-specific menu items - inflater.inflate(R.menu.feeditemlist_context, menu); // generic menu items for item feeds + MenuInflater inflater = getActivity().getMenuInflater(); + inflater.inflate(R.menu.queue_context, menu); + super.onCreateContextMenu(menu, v, menuInfo); - menu.setHeaderTitle(selectedItem.getTitle()); - FeedItemMenuHandler.onPrepareMenu(menu, selectedItem, R.id.skip_episode_item); - // Queue-specific menu preparation final boolean keepSorted = UserPreferences.isQueueKeepSorted(); - final LongList queueAccess = itemAccess.getQueueIds(); - if (queueAccess.size() == 0 || queueAccess.get(0) == selectedItem.getId() || keepSorted) { + if (getItem(0).getId() == getSelectedItem().getId() || keepSorted) { menu.findItem(R.id.move_to_top_item).setVisible(false); } - if (queueAccess.size() == 0 || queueAccess.get(queueAccess.size() - 1) == selectedItem.getId() || keepSorted) { + if (getItem(getItemCount() - 1).getId() == getSelectedItem().getId() || keepSorted) { menu.findItem(R.id.move_to_bottom_item).setVisible(false); } } - - public interface ItemAccess { - FeedItem getItem(int position); - - int getCount(); - - LongList getQueueIds(); - } - - /** - * Notifies a View Holder of relevant callbacks from - * {@link ItemTouchHelper.Callback}. - */ - public interface ItemTouchHelperViewHolder { - - /** - * Called when the {@link ItemTouchHelper} first registers an - * item as being moved or swiped. - * Implementations should update the item view to indicate - * it's active state. - */ - void onItemSelected(); - - - /** - * Called when the {@link ItemTouchHelper} has completed the - * move or swipe, and the active item state should be cleared. - */ - void onItemClear(); - } } |