1 package com.android.settings.notification.history; 2 3 import android.annotation.Nullable; 4 import android.content.Context; 5 import android.util.AttributeSet; 6 7 import androidx.recyclerview.widget.DividerItemDecoration; 8 import androidx.recyclerview.widget.ItemTouchHelper; 9 import androidx.recyclerview.widget.LinearLayoutManager; 10 import androidx.recyclerview.widget.RecyclerView; 11 12 public class NotificationHistoryRecyclerView extends RecyclerView { 13 14 private static final String TAG = "HistoryRecyclerView"; 15 16 private OnItemSwipeDeleteListener listener; 17 NotificationHistoryRecyclerView(Context context)18 public NotificationHistoryRecyclerView(Context context) { 19 this(context, null); 20 } 21 NotificationHistoryRecyclerView(Context context, @Nullable AttributeSet attrs)22 public NotificationHistoryRecyclerView(Context context, @Nullable AttributeSet attrs) { 23 this(context, attrs, 0); 24 } 25 NotificationHistoryRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle)26 public NotificationHistoryRecyclerView(Context context, @Nullable AttributeSet attrs, 27 int defStyle) { 28 super(context, attrs, defStyle); 29 30 setLayoutManager(new LinearLayoutManager(getContext())); 31 addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)); 32 ItemTouchHelper touchHelper = new ItemTouchHelper( 33 new DismissTouchHelper(0, ItemTouchHelper.START | ItemTouchHelper.END)); 34 touchHelper.attachToRecyclerView(this); 35 setNestedScrollingEnabled(false); 36 } 37 setOnItemSwipeDeleteListener(OnItemSwipeDeleteListener listener)38 public void setOnItemSwipeDeleteListener(OnItemSwipeDeleteListener listener) { 39 this.listener = listener; 40 } 41 42 private class DismissTouchHelper extends ItemTouchHelper.SimpleCallback { 43 DismissTouchHelper(int dragDirs, int swipeDirs)44 public DismissTouchHelper(int dragDirs, int swipeDirs) { 45 super(dragDirs, swipeDirs); 46 } 47 48 @Override onMove(RecyclerView recyclerView, ViewHolder viewHolder, ViewHolder target)49 public boolean onMove(RecyclerView recyclerView, ViewHolder viewHolder, ViewHolder target) { 50 // Do nothing. 51 return false; 52 } 53 54 @Override onSwiped(ViewHolder viewHolder, int direction)55 public void onSwiped(ViewHolder viewHolder, int direction) { 56 if (listener != null) { 57 listener.onItemSwipeDeleted(viewHolder.getAdapterPosition()); 58 } 59 } 60 } 61 62 public interface OnItemSwipeDeleteListener { onItemSwipeDeleted(int position)63 void onItemSwipeDeleted(int position); 64 } 65 }