package im.tox.toktok.app.profile; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.ItemTouchHelper.Callback; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView.ViewHolder; import java.util.List; import im.tox.toktok.R; final class RejectedCallAdapter extends RecyclerView.Adapter<RejectedCallViewHolder> implements DragInterface { private final List<String> items; private final DragStart dragStart; RejectedCallAdapter(List<String> items, DragStart dragStart) { this.items = items; this.dragStart = dragStart; } @NonNull @Override public RejectedCallViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) { RelativeLayout itemView = (RelativeLayout) LayoutInflater.from(viewGroup.getContext()).inflate( R.layout.rejected_call_item, viewGroup, false); return new RejectedCallViewHolder(itemView); } @Override public void onBindViewHolder(@NonNull final RejectedCallViewHolder viewHolder, int position) { String item = items.get(position); viewHolder.mMessage.setText(item); viewHolder.itemView.setOnTouchListener((v, event) -> { if (event.getAction() == MotionEvent.ACTION_DOWN) { dragStart.onDragStart(viewHolder); } return false; }); } @Override public int getItemCount() { return items.size(); } @Override public void onItemMove(int originalPosition, int newPosition) { String originalItem = items.get(originalPosition); items.set(originalPosition, items.get(newPosition)); items.set(newPosition, originalItem); notifyItemMoved(originalPosition, newPosition); } } final class RejectedCallViewHolder extends RecyclerView.ViewHolder { final TextView mMessage; RejectedCallViewHolder(@NonNull RelativeLayout itemView) { super(itemView); mMessage = itemView.findViewById(R.id.reject_item_message); } } final class DragHelperCallback extends ItemTouchHelper.Callback { private final DragInterface adapter; DragHelperCallback(DragInterface adapter) { this.adapter = adapter; } @Override public boolean isLongPressDragEnabled() { return true; } @Override public boolean isItemViewSwipeEnabled() { return false; } @Override public int getMovementFlags(RecyclerView recyclerView, ViewHolder viewHolder) { int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; return Callback.makeMovementFlags(dragFlags, 0); } @Override public boolean onMove(RecyclerView recyclerView, @NonNull ViewHolder viewHolder, @NonNull ViewHolder target) { adapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); return true; } @Override public void onSwiped(ViewHolder viewHolder, int direction) { } } interface DragInterface { void onItemMove(int originalPosition, int newPosition); } interface DragStart { void onDragStart(ViewHolder viewHolder); }