gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-merchant-terminal-android] 08/08: Scroll to last added product an


From: gnunet
Subject: [taler-merchant-terminal-android] 08/08: Scroll to last added product and select it
Date: Tue, 25 Feb 2020 17:07:47 +0100

This is an automated email from the git hooks/post-receive script.

torsten-grote pushed a commit to branch master
in repository merchant-terminal-android.

commit 4aa85912e86b8fae15a3ac1d78722c42059d667b
Author: Torsten Grote <address@hidden>
AuthorDate: Tue Feb 25 12:42:13 2020 -0300

    Scroll to last added product and select it
---
 .../net/taler/merchantpos/order/OrderManager.kt    |  4 +++
 .../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)

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]