Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ public void updateFromItem(final LocalItem localItem,
return true;
});

itemView.setOnTouchListener(getOnDragListener(item));

itemHandleView.setOnTouchListener(getOnTouchListener(item));
}

Expand Down Expand Up @@ -135,4 +137,14 @@ private View.OnTouchListener getOnTouchListener(final PlaylistStreamEntry item)
return false;
};
}

private View.OnTouchListener getOnDragListener(final PlaylistStreamEntry item) {
return (view, motionEvent) -> {
if (itemBuilder != null && itemBuilder.getOnItemSelectedListener() != null) {
itemBuilder.getOnItemSelectedListener().swipe(item,
LocalPlaylistStreamItemHolder.this);
}
return false;
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Canvas;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Parcelable;
import android.text.TextUtils;
Expand All @@ -19,6 +22,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewbinding.ViewBinding;
Expand Down Expand Up @@ -190,6 +194,14 @@ public void drag(final LocalItem selectedItem,
itemTouchHelper.startDrag(viewHolder);
}
}

@Override
public void swipe(final LocalItem selectedItem,
final RecyclerView.ViewHolder viewHolder) {
if (itemTouchHelper != null) {
itemTouchHelper.startSwipe(viewHolder);
}
}
});
}

Expand Down Expand Up @@ -679,8 +691,13 @@ private ItemTouchHelper.SimpleCallback getItemTouchCallback() {
if (isGridLayout()) {
directions |= ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
}

final Drawable icon = ContextCompat.getDrawable(getContext(), R.drawable.ic_delete);
final ColorDrawable background =
new ColorDrawable(getResources().getColor(R.color.light_settings_accent_color));

return new ItemTouchHelper.SimpleCallback(directions,
ItemTouchHelper.ACTION_STATE_IDLE) {
ItemTouchHelper.LEFT) {
@Override
public int interpolateOutOfBoundsScroll(@NonNull final RecyclerView recyclerView,
final int viewSize,
Expand Down Expand Up @@ -719,12 +736,53 @@ public boolean isLongPressDragEnabled() {

@Override
public boolean isItemViewSwipeEnabled() {
return false;
return true;
}

@Override
public void onSwiped(@NonNull final RecyclerView.ViewHolder viewHolder,
final int swipeDir) {
final int position = viewHolder.getAdapterPosition() - 1;
final PlaylistStreamEntry item =
(PlaylistStreamEntry) itemListAdapter.getItemsList().get(position);
deleteItem(item);
}

@Override
public void onChildDraw(final Canvas c, final RecyclerView recyclerView,
final RecyclerView.ViewHolder viewHolder,
final float dX, final float dY, final int actionState,
final boolean isCurrentlyActive) {

final View itemView = viewHolder.itemView;
final int backgroundCornerOffset = 20;

final int iconMargin = (itemView.getHeight() - icon.getIntrinsicHeight()) / 2;
final int iconTop = itemView.getTop() + (itemView.getHeight()
- icon.getIntrinsicHeight()) / 2;
final int iconBottom = iconTop + icon.getIntrinsicHeight();


if (dX < 0) {
// Swiping to the left
final int iconLeft = Math.max(itemView.getRight() - iconMargin * 2,
itemView.getRight() + ((int) dX));
final int iconRight = Math.max(itemView.getRight() - iconMargin * 2
+ icon.getIntrinsicWidth(),
itemView.getRight() + icon.getIntrinsicWidth() + ((int) dX));
icon.setBounds(iconLeft, iconTop, iconRight, iconBottom);

background.setBounds(itemView.getRight() + ((int) dX) - backgroundCornerOffset,
itemView.getTop(), itemView.getRight(), itemView.getBottom());
} else {
// view is unSwiped
background.setBounds(0, 0, 0, 0);
}

background.draw(c);
icon.draw(c);
super.onChildDraw(c, recyclerView, viewHolder, dX, dY,
actionState, isCurrentlyActive);
}
};
}
Expand Down Expand Up @@ -817,4 +875,3 @@ private PlayQueue getPlayQueue(final int index) {
return new SinglePlayQueue(streamInfoItems, index);
}
}

4 changes: 4 additions & 0 deletions app/src/main/java/org/schabi/newpipe/util/OnClickGesture.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,8 @@ public void held(final T selectedItem) {
public void drag(final T selectedItem, final RecyclerView.ViewHolder viewHolder) {
// Optional gesture
}

public void swipe(final T selectedItem, final RecyclerView.ViewHolder viewHolder) {
// Optional gesture
}
}