summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java178
1 files changed, 90 insertions, 88 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
index b3c3d8567..31681252a 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -39,6 +39,7 @@ import de.danoeh.antennapod.core.event.PlayerStatusEvent;
import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.event.UnreadItemsUpdateEvent;
import de.danoeh.antennapod.fragment.actions.EpisodeMultiSelectActionHandler;
+import de.danoeh.antennapod.fragment.swipeactions.SwipeActions;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.core.feed.util.PlaybackSpeedUtils;
import de.danoeh.antennapod.core.preferences.UserPreferences;
@@ -48,6 +49,7 @@ import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.storage.DownloadRequester;
import de.danoeh.antennapod.core.util.Converter;
import de.danoeh.antennapod.core.util.FeedItemUtil;
+import de.danoeh.antennapod.model.feed.FeedItemFilter;
import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.core.util.download.AutoUpdateManager;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
@@ -70,7 +72,7 @@ import java.util.Locale;
* Shows all items in the queue.
*/
public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickListener,
- EpisodeItemListAdapter.OnEndSelectModeListener {
+ EpisodeItemListAdapter.OnSelectModeListener {
public static final String TAG = "QueueFragment";
private static final String KEY_UP_ARROW = "up_arrow";
@@ -90,7 +92,7 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi
private static final String PREF_SHOW_LOCK_WARNING = "show_lock_warning";
private Disposable disposable;
- private ItemTouchHelper itemTouchHelper;
+ private SwipeActions swipeActions;
private SharedPreferences prefs;
private SpeedDialView speedDialView;
@@ -398,12 +400,6 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi
Log.i(TAG, "Selected item no longer exist, ignoring selection");
return super.onContextItemSelected(item);
}
- if (item.getItemId() == R.id.multi_select) {
- speedDialView.setVisibility(View.VISIBLE);
- refreshToolbarState();
- infoBar.setVisibility(View.GONE);
- // Do not return: Let adapter handle its actions, too.
- }
if (recyclerAdapter.onContextItemSelected(item)) {
return true;
}
@@ -455,83 +451,9 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi
getResources().getInteger(R.integer.swipe_to_refresh_duration_in_ms));
});
- itemTouchHelper = new ItemTouchHelper(
- new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN,
- ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
-
- // Position tracking whilst dragging
- int dragFrom = -1;
- int dragTo = -1;
-
- @Override
- public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
- RecyclerView.ViewHolder target) {
- int fromPosition = viewHolder.getAdapterPosition();
- int toPosition = target.getAdapterPosition();
-
- // Update tracked position
- if (dragFrom == -1) {
- dragFrom = fromPosition;
- }
- dragTo = toPosition;
-
- int from = viewHolder.getAdapterPosition();
- int to = target.getAdapterPosition();
- Log.d(TAG, "move(" + from + ", " + to + ") in memory");
- if (from >= queue.size() || to >= queue.size() || from < 0 || to < 0) {
- return false;
- }
- queue.add(to, queue.remove(from));
- recyclerAdapter.notifyItemMoved(from, to);
- return true;
- }
-
- @Override
- public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
- if (disposable != null) {
- disposable.dispose();
- }
- final int position = viewHolder.getAdapterPosition();
- Log.d(TAG, "remove(" + position + ")");
- final FeedItem item = queue.get(position);
- DBWriter.removeQueueItem(getActivity(), true, item);
-
- ((MainActivity) getActivity()).showSnackbarAbovePlayer(
- getResources().getQuantityString(R.plurals.removed_from_queue_batch_label, 1, 1),
- Snackbar.LENGTH_LONG)
- .setAction(getString(R.string.undo), v ->
- DBWriter.addQueueItemAt(getActivity(), item.getId(), position, false));
- }
-
- @Override
- public boolean isLongPressDragEnabled() {
- return false;
- }
-
- @Override
- public boolean isItemViewSwipeEnabled() {
- return !UserPreferences.isQueueLocked();
- }
-
- @Override
- public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
- super.clearView(recyclerView, viewHolder);
- // Check if drag finished
- if (dragFrom != -1 && dragTo != -1 && dragFrom != dragTo) {
- reallyMoved(dragFrom, dragTo);
- }
-
- dragFrom = dragTo = -1;
- }
-
- private void reallyMoved(int from, int to) {
- // Write drag operation to database
- Log.d(TAG, "Write to database move(" + from + ", " + to + ")");
- DBWriter.moveQueueItem(from, to, true);
- }
- }
- );
- itemTouchHelper.attachToRecyclerView(recyclerView);
+ swipeActions = new QueueSwipeActions();
+ swipeActions.setFilter(new FeedItemFilter(FeedItemFilter.QUEUED));
+ swipeActions.attachTo(recyclerView);
emptyView = new EmptyViewHandler(getContext());
emptyView.attachToRecyclerView(recyclerView);
@@ -565,7 +487,6 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi
speedDialView.setOnActionSelectedListener(actionItem -> {
new EpisodeMultiSelectActionHandler(((MainActivity) getActivity()), recyclerAdapter.getSelectedItems())
.handleAction(actionItem.getId());
- onEndSelectMode();
recyclerAdapter.endSelectMode();
return true;
});
@@ -582,8 +503,8 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi
if (queue != null && queue.size() > 0) {
if (recyclerAdapter == null) {
MainActivity activity = (MainActivity) getActivity();
- recyclerAdapter = new QueueRecyclerAdapter(activity, itemTouchHelper);
- recyclerAdapter.setOnEndSelectModeListener(this);
+ recyclerAdapter = new QueueRecyclerAdapter(activity, swipeActions);
+ recyclerAdapter.setOnSelectModeListener(this);
recyclerView.setAdapter(recyclerAdapter);
emptyView.updateAdapter(recyclerAdapter);
}
@@ -649,9 +570,90 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi
}
@Override
+ public void onStartSelectMode() {
+ swipeActions.detach();
+ speedDialView.setVisibility(View.VISIBLE);
+ refreshToolbarState();
+ infoBar.setVisibility(View.GONE);
+ }
+
+ @Override
public void onEndSelectMode() {
speedDialView.close();
speedDialView.setVisibility(View.GONE);
infoBar.setVisibility(View.VISIBLE);
+ swipeActions.attachTo(recyclerView);
+ }
+
+ private class QueueSwipeActions extends SwipeActions {
+
+ // Position tracking whilst dragging
+ int dragFrom = -1;
+ int dragTo = -1;
+
+ public QueueSwipeActions() {
+ super(ItemTouchHelper.UP | ItemTouchHelper.DOWN, QueueFragment.this, TAG);
+ }
+
+ @Override
+ public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder,
+ @NonNull RecyclerView.ViewHolder target) {
+ int fromPosition = viewHolder.getBindingAdapterPosition();
+ int toPosition = target.getBindingAdapterPosition();
+
+ // Update tracked position
+ if (dragFrom == -1) {
+ dragFrom = fromPosition;
+ }
+ dragTo = toPosition;
+
+ int from = viewHolder.getBindingAdapterPosition();
+ int to = target.getBindingAdapterPosition();
+ Log.d(TAG, "move(" + from + ", " + to + ") in memory");
+ if (from >= queue.size() || to >= queue.size() || from < 0 || to < 0) {
+ return false;
+ }
+ queue.add(to, queue.remove(from));
+ recyclerAdapter.notifyItemMoved(from, to);
+ return true;
+ }
+
+ @Override
+ public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
+ if (disposable != null) {
+ disposable.dispose();
+ }
+
+ //SwipeActions
+ super.onSwiped(viewHolder, direction);
+ }
+
+ @Override
+ public boolean isLongPressDragEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isItemViewSwipeEnabled() {
+ return !UserPreferences.isQueueLocked();
+ }
+
+ @Override
+ public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
+ super.clearView(recyclerView, viewHolder);
+ // Check if drag finished
+ if (dragFrom != -1 && dragTo != -1 && dragFrom != dragTo) {
+ reallyMoved(dragFrom, dragTo);
+ }
+
+ dragFrom = dragTo = -1;
+ }
+
+ private void reallyMoved(int from, int to) {
+ // Write drag operation to database
+ Log.d(TAG, "Write to database move(" + from + ", " + to + ")");
+ DBWriter.moveQueueItem(from, to, true);
+ }
+
}
}