Commit 433336f3 authored by Mygod's avatar Mygod

Ensure deletion is committed

parent 1362e8ce
...@@ -36,33 +36,29 @@ class UndoSnackbarManager<in T>(private val activity: MainActivity, private val ...@@ -36,33 +36,29 @@ class UndoSnackbarManager<in T>(private val activity: MainActivity, private val
private val recycleBin = ArrayList<Pair<Int, T>>() private val recycleBin = ArrayList<Pair<Int, T>>()
private val removedCallback = object : Snackbar.Callback() { private val removedCallback = object : Snackbar.Callback() {
override fun onDismissed(transientBottomBar: Snackbar?, event: Int) { override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
when (event) { if (last === transientBottomBar && event != DISMISS_EVENT_ACTION) {
DISMISS_EVENT_SWIPE, DISMISS_EVENT_MANUAL, DISMISS_EVENT_TIMEOUT -> {
commit?.invoke(recycleBin) commit?.invoke(recycleBin)
recycleBin.clear() recycleBin.clear()
}
}
last = null last = null
} }
} }
}
private var last: Snackbar? = null private var last: Snackbar? = null
fun remove(items: Collection<Pair<Int, T>>) { fun remove(items: Collection<Pair<Int, T>>) {
recycleBin.addAll(items) recycleBin.addAll(items)
val count = recycleBin.size val count = recycleBin.size
last = activity.snackbar(activity.resources.getQuantityString(R.plurals.removed, count, count)).apply { activity.snackbar(activity.resources.getQuantityString(R.plurals.removed, count, count)).apply {
addCallback(removedCallback) addCallback(removedCallback)
setAction(R.string.undo) { setAction(R.string.undo) {
undo(recycleBin.reversed()) undo(recycleBin.reversed())
recycleBin.clear() recycleBin.clear()
} }
last = this
show() show()
} }
} }
fun remove(vararg items: Pair<Int, T>) = remove(items.toList()) fun remove(vararg items: Pair<Int, T>) = remove(items.toList())
fun flush() { fun flush() = last?.dismiss()
last?.dismiss()
last = null
}
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment