summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2020-02-25 12:42:13 -0300
committerTorsten Grote <t@grobox.de>2020-02-25 12:42:13 -0300
commit4aa85912e86b8fae15a3ac1d78722c42059d667b (patch)
tree16671e796294c3a4084e73d725bfdfb3debdbf11 /app
parentae9faac31f03b891b4ab3b20434dab532514c5f5 (diff)
downloadmerchant-terminal-android-4aa85912e86b8fae15a3ac1d78722c42059d667b.tar.gz
merchant-terminal-android-4aa85912e86b8fae15a3ac1d78722c42059d667b.tar.bz2
merchant-terminal-android-4aa85912e86b8fae15a3ac1d78722c42059d667b.zip
Scroll to last added product and select it
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/net/taler/merchantpos/order/OrderManager.kt4
-rw-r--r--app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt31
2 files changed, 27 insertions, 8 deletions
diff --git a/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt b/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
index d7db048..60f1e4a 100644
--- a/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
+++ b/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
@@ -43,6 +43,9 @@ class OrderManager(private val mapper: ObjectMapper) : ConfigurationReceiver {
private val mSelectedOrderLine = MutableLiveData<ConfigProduct>()
+ internal var lastAddedProduct: ConfigProduct? = null
+ private set
+
internal val modifyOrderAllowed =
CombinedLiveData(restartState, mSelectedOrderLine) { restartState, selectedOrderLine ->
restartState != DISABLED && selectedOrderLine != null
@@ -113,6 +116,7 @@ class OrderManager(private val mapper: ObjectMapper) : ConfigurationReceiver {
@UiThread
internal fun addProduct(product: ConfigProduct) {
+ lastAddedProduct = product
val order = mOrder.value ?: newOrder
mOrder.value = order + product
mRestartState.value = ENABLED
diff --git a/app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt b/app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
index 098692c..f016795 100644
--- a/app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
+++ b/app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
@@ -70,14 +70,7 @@ class OrderStateFragment : Fragment() {
this.tracker = tracker
orderManager.order.observe(viewLifecycleOwner, Observer { order ->
- adapter.setItems(order.products) {
- // workaround for bug: SelectionObserver doesn't update when removing selected item
- if (tracker.hasSelection()) {
- val key = tracker.selection.first()
- val product = order.products.find { it.id == key }
- if (product == null) tracker.clearSelection()
- }
- }
+ onOrderChanged(order, tracker)
})
orderManager.orderTotal.observe(viewLifecycleOwner, Observer { orderTotal ->
if (orderTotal == 0.0) {
@@ -96,6 +89,24 @@ class OrderStateFragment : Fragment() {
tracker?.onSaveInstanceState(outState)
}
+ private fun onOrderChanged(order: Order, tracker: SelectionTracker<String>) {
+ adapter.setItems(order.products) {
+ orderManager.lastAddedProduct?.let {
+ val position = adapter.findPosition(it)
+ if (position >= 0) {
+ orderList.scrollToPosition(position)
+ orderList.post { this.tracker?.select(it.id) }
+ }
+ }
+ // workaround for bug: SelectionObserver doesn't update when removing selected item
+ if (tracker.hasSelection()) {
+ val key = tracker.selection.first()
+ val product = order.products.find { it.id == key }
+ if (product == null) tracker.clearSelection()
+ }
+ }
+ }
+
}
private class OrderAdapter : Adapter<OrderViewHolder>() {
@@ -137,6 +148,10 @@ private class OrderAdapter : Adapter<OrderViewHolder>() {
return differ.currentList.find { it.id == key }
}
+ fun findPosition(product: ConfigProduct): Int {
+ return differ.currentList.indexOf(product)
+ }
+
private inner class OrderViewHolder(private val v: View) : ViewHolder(v) {
private val quantity: TextView = v.findViewById(R.id.quantity)
private val name: TextView = v.findViewById(R.id.name)