swipe left to remove clipboard history entry

This commit is contained in:
Helium314 2023-12-20 23:00:41 +01:00
parent b921667c22
commit 3168d7738c
2 changed files with 22 additions and 0 deletions

View file

@ -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() {

View file

@ -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()
}