summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java
diff options
context:
space:
mode:
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.java120
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();
- }
}