diff options
author | Torsten Grote <t@grobox.de> | 2020-02-25 12:42:13 -0300 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2020-02-25 12:42:13 -0300 |
commit | 4aa85912e86b8fae15a3ac1d78722c42059d667b (patch) | |
tree | 16671e796294c3a4084e73d725bfdfb3debdbf11 /app | |
parent | ae9faac31f03b891b4ab3b20434dab532514c5f5 (diff) | |
download | merchant-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.kt | 4 | ||||
-rw-r--r-- | app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt | 31 |
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) |