diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/clipboard/ClipboardHistoryRecyclerView.kt b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/clipboard/ClipboardHistoryRecyclerView.kt index fbc0ab670..2158c8339 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/clipboard/ClipboardHistoryRecyclerView.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/clipboard/ClipboardHistoryRecyclerView.kt @@ -5,7 +5,9 @@ package org.dslul.openboard.inputmethod.keyboard.clipboard import android.content.Context import android.util.AttributeSet import android.view.View +import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView +import org.dslul.openboard.inputmethod.latin.ClipboardHistoryManager class ClipboardHistoryRecyclerView @JvmOverloads constructor( context: Context, @@ -14,6 +16,19 @@ class ClipboardHistoryRecyclerView @JvmOverloads constructor( ) : RecyclerView(context, attrs, defStyleAttr) { var placeholderView: View? = null + val historyManager: ClipboardHistoryManager? get() = (adapter as? ClipboardAdapter?)?.clipboardHistoryManager + private val touchHelper = ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) { + override fun onMove(recyclerView: RecyclerView, viewHolder: ViewHolder, target: ViewHolder) = false + override fun getSwipeDirs(recyclerView: RecyclerView, viewHolder: ViewHolder): Int { + if (historyManager?.canRemove(viewHolder.absoluteAdapterPosition) == false) + return 0 // block swipe for pinned items + return super.getSwipeDirs(recyclerView, viewHolder) + } + override fun onSwiped(viewHolder: ViewHolder, dir: Int) { + historyManager?.removeEntry(viewHolder.absoluteAdapterPosition) + adapter?.notifyItemRemoved(viewHolder.absoluteAdapterPosition) + } + }).attachToRecyclerView(this) private val adapterDataObserver: AdapterDataObserver = object : AdapterDataObserver() { diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ClipboardHistoryManager.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ClipboardHistoryManager.kt index 163f3cd53..fe78def0d 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ClipboardHistoryManager.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ClipboardHistoryManager.kt @@ -92,6 +92,13 @@ class ClipboardHistoryManager( } } + fun canRemove(index: Int) = historyEntries.getOrNull(index)?.isPinned != true + + fun removeEntry(index: Int) { + if (canRemove(index)) + historyEntries.removeAt(index) + } + private fun sortHistoryEntries() { historyEntries.sort() }