From 126b0710dda4546dc3337df1bee886f5f4657674 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 3 Sep 2020 10:01:11 -0300 Subject: [pos] migrate to view binding --- .../taler/merchantpos/order/CategoriesFragment.kt | 15 ++++--- .../net/taler/merchantpos/order/OrderFragment.kt | 50 +++++++++++----------- .../taler/merchantpos/order/OrderStateFragment.kt | 31 +++++++------- .../taler/merchantpos/order/ProductsFragment.kt | 14 +++--- 4 files changed, 58 insertions(+), 52 deletions(-) (limited to 'merchant-terminal/src/main/java/net/taler/merchantpos/order') diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/order/CategoriesFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/order/CategoriesFragment.kt index 4f8e5af..69e74ce 100644 --- a/merchant-terminal/src/main/java/net/taler/merchantpos/order/CategoriesFragment.kt +++ b/merchant-terminal/src/main/java/net/taler/merchantpos/order/CategoriesFragment.kt @@ -23,12 +23,10 @@ import android.view.View.INVISIBLE import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager -import kotlinx.android.synthetic.main.fragment_categories.* import net.taler.merchantpos.MainViewModel -import net.taler.merchantpos.R import net.taler.merchantpos.config.Category +import net.taler.merchantpos.databinding.FragmentCategoriesBinding interface CategorySelectionListener { fun onCategorySelected(category: Category) @@ -38,6 +36,8 @@ class CategoriesFragment : Fragment(), CategorySelectionListener { private val viewModel: MainViewModel by activityViewModels() private val orderManager by lazy { viewModel.orderManager } + + private lateinit var ui: FragmentCategoriesBinding private val adapter = CategoryAdapter(this) override fun onCreateView( @@ -45,18 +45,19 @@ class CategoriesFragment : Fragment(), CategorySelectionListener { container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.fragment_categories, container, false) + ui = FragmentCategoriesBinding.inflate(inflater, container, false) + return ui.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - categoriesList.apply { + ui.categoriesList.apply { adapter = this@CategoriesFragment.adapter layoutManager = LinearLayoutManager(requireContext()) } - orderManager.categories.observe(viewLifecycleOwner, Observer { categories -> + orderManager.categories.observe(viewLifecycleOwner, { categories -> adapter.setItems(categories) - progressBar.visibility = INVISIBLE + ui.progressBar.visibility = INVISIBLE }) } diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderFragment.kt index 7291a23..1335b65 100644 --- a/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderFragment.kt +++ b/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderFragment.kt @@ -22,12 +22,11 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import androidx.lifecycle.Observer import androidx.transition.TransitionManager.beginDelayedTransition -import kotlinx.android.synthetic.main.fragment_order.* import net.taler.common.navigate import net.taler.merchantpos.MainViewModel import net.taler.merchantpos.R +import net.taler.merchantpos.databinding.FragmentOrderBinding import net.taler.merchantpos.order.OrderFragmentDirections.Companion.actionGlobalConfigFetcher import net.taler.merchantpos.order.OrderFragmentDirections.Companion.actionOrderToMerchantSettings import net.taler.merchantpos.order.OrderFragmentDirections.Companion.actionOrderToProcessPayment @@ -40,17 +39,20 @@ class OrderFragment : Fragment() { private val orderManager by lazy { viewModel.orderManager } private val paymentManager by lazy { viewModel.paymentManager } + private lateinit var ui: FragmentOrderBinding + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.fragment_order, container, false) + ui = FragmentOrderBinding.inflate(inflater, container, false) + return ui.root } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - orderManager.currentOrderId.observe(viewLifecycleOwner, Observer { orderId -> + orderManager.currentOrderId.observe(viewLifecycleOwner, { orderId -> val liveOrder = orderManager.getOrder(orderId) onOrderSwitched(orderId, liveOrder) // add a new OrderStateFragment for each order @@ -72,39 +74,39 @@ class OrderFragment : Fragment() { private fun onOrderSwitched(orderId: Int, liveOrder: LiveOrder) { // order title - liveOrder.order.observe(viewLifecycleOwner, Observer { order -> + liveOrder.order.observe(viewLifecycleOwner, { order -> activity?.title = getString(R.string.order_label_title, order.title) }) // restart button - restartButton.setOnClickListener { liveOrder.restartOrUndo() } - liveOrder.restartState.observe(viewLifecycleOwner, Observer { state -> + ui.restartButton.setOnClickListener { liveOrder.restartOrUndo() } + liveOrder.restartState.observe(viewLifecycleOwner, { state -> beginDelayedTransition(view as ViewGroup) if (state == UNDO) { - restartButton.setText(R.string.order_undo) - restartButton.isEnabled = true - completeButton.isEnabled = false + ui.restartButton.setText(R.string.order_undo) + ui.restartButton.isEnabled = true + ui.completeButton.isEnabled = false } else { - restartButton.setText(R.string.order_restart) - restartButton.isEnabled = state == ENABLED - completeButton.isEnabled = state == ENABLED + ui.restartButton.setText(R.string.order_restart) + ui.restartButton.isEnabled = state == ENABLED + ui.completeButton.isEnabled = state == ENABLED } }) // -1 and +1 buttons - liveOrder.modifyOrderAllowed.observe(viewLifecycleOwner, Observer { allowed -> - minusButton.isEnabled = allowed - plusButton.isEnabled = allowed + liveOrder.modifyOrderAllowed.observe(viewLifecycleOwner, { allowed -> + ui.minusButton.isEnabled = allowed + ui.plusButton.isEnabled = allowed }) - minusButton.setOnClickListener { liveOrder.decreaseSelectedOrderLine() } - plusButton.setOnClickListener { liveOrder.increaseSelectedOrderLine() } + ui.minusButton.setOnClickListener { liveOrder.decreaseSelectedOrderLine() } + ui.plusButton.setOnClickListener { liveOrder.increaseSelectedOrderLine() } // previous and next button - prevButton.isEnabled = orderManager.hasPreviousOrder(orderId) - orderManager.hasNextOrder(orderId).observe(viewLifecycleOwner, Observer { hasNextOrder -> - nextButton.isEnabled = hasNextOrder + ui.prevButton.isEnabled = orderManager.hasPreviousOrder(orderId) + orderManager.hasNextOrder(orderId).observe(viewLifecycleOwner, { hasNextOrder -> + ui.nextButton.isEnabled = hasNextOrder }) - prevButton.setOnClickListener { orderManager.previousOrder() } - nextButton.setOnClickListener { orderManager.nextOrder() } + ui.prevButton.setOnClickListener { orderManager.previousOrder() } + ui.nextButton.setOnClickListener { orderManager.nextOrder() } // complete button - completeButton.setOnClickListener { + ui.completeButton.setOnClickListener { val order = liveOrder.order.value ?: return@setOnClickListener paymentManager.createPayment(order) navigate(actionOrderToProcessPayment()) diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt index b60f3a5..93c4f97 100644 --- a/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt +++ b/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt @@ -22,16 +22,15 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import androidx.lifecycle.Observer import androidx.recyclerview.selection.SelectionPredicates import androidx.recyclerview.selection.SelectionTracker import androidx.recyclerview.selection.StorageStrategy import androidx.recyclerview.widget.LinearLayoutManager -import kotlinx.android.synthetic.main.fragment_order_state.* import net.taler.common.fadeIn import net.taler.common.fadeOut import net.taler.merchantpos.MainViewModel import net.taler.merchantpos.R +import net.taler.merchantpos.databinding.FragmentOrderStateBinding import net.taler.merchantpos.order.OrderAdapter.OrderLineLookup class OrderStateFragment : Fragment() { @@ -39,6 +38,8 @@ class OrderStateFragment : Fragment() { private val viewModel: MainViewModel by activityViewModels() private val orderManager by lazy { viewModel.orderManager } private val liveOrder by lazy { orderManager.getOrder(orderManager.currentOrderId.value!!) } + + private lateinit var ui: FragmentOrderStateBinding private val adapter = OrderAdapter() private var tracker: SelectionTracker? = null @@ -47,18 +48,19 @@ class OrderStateFragment : Fragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.fragment_order_state, container, false) + ui = FragmentOrderStateBinding.inflate(inflater, container, false) + return ui.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - orderList.apply { + ui.orderList.apply { adapter = this@OrderStateFragment.adapter layoutManager = LinearLayoutManager(requireContext()) } - val detailsLookup = OrderLineLookup(orderList) + val detailsLookup = OrderLineLookup(ui.orderList) val tracker = SelectionTracker.Builder( "order-selection-id", - orderList, + ui.orderList, adapter.keyProvider, detailsLookup, StorageStrategy.createStringStorage() @@ -80,16 +82,16 @@ class OrderStateFragment : Fragment() { liveOrder.selectOrderLine(item) } }) - liveOrder.order.observe(viewLifecycleOwner, Observer { order -> + liveOrder.order.observe(viewLifecycleOwner, { order -> onOrderChanged(order, tracker) }) - liveOrder.orderTotal.observe(viewLifecycleOwner, Observer { orderTotal -> + liveOrder.orderTotal.observe(viewLifecycleOwner, { orderTotal -> if (orderTotal.isZero()) { - totalView.fadeOut() - totalView.text = null + ui.totalView.fadeOut() + ui.totalView.text = null } else { - totalView.text = getString(R.string.order_total, orderTotal) - totalView.fadeIn() + ui.totalView.text = getString(R.string.order_total, orderTotal) + ui.totalView.fadeIn() } }) } @@ -104,9 +106,8 @@ class OrderStateFragment : Fragment() { liveOrder.lastAddedProduct?.let { val position = adapter.findPosition(it) if (position >= 0) { - // orderList can be null m( - orderList?.scrollToPosition(position) - orderList?.post { this.tracker?.select(it.id) } + ui.orderList.scrollToPosition(position) + ui.orderList.post { this.tracker?.select(it.id) } } } // workaround for bug: SelectionObserver doesn't update when removing selected item diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/order/ProductsFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/order/ProductsFragment.kt index 00eb509..a3898fd 100644 --- a/merchant-terminal/src/main/java/net/taler/merchantpos/order/ProductsFragment.kt +++ b/merchant-terminal/src/main/java/net/taler/merchantpos/order/ProductsFragment.kt @@ -24,14 +24,13 @@ import android.view.ViewGroup import android.widget.TextView import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import androidx.lifecycle.Observer import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView.Adapter import androidx.recyclerview.widget.RecyclerView.ViewHolder -import kotlinx.android.synthetic.main.fragment_products.* import net.taler.merchantpos.MainViewModel import net.taler.merchantpos.R import net.taler.merchantpos.config.ConfigProduct +import net.taler.merchantpos.databinding.FragmentProductsBinding import net.taler.merchantpos.order.ProductAdapter.ProductViewHolder interface ProductSelectionListener { @@ -44,27 +43,30 @@ class ProductsFragment : Fragment(), ProductSelectionListener { private val orderManager by lazy { viewModel.orderManager } private val adapter = ProductAdapter(this) + private lateinit var ui: FragmentProductsBinding + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.fragment_products, container, false) + ui = FragmentProductsBinding.inflate(inflater, container, false) + return ui.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - productsList.apply { + ui.productsList.apply { adapter = this@ProductsFragment.adapter layoutManager = GridLayoutManager(requireContext(), 3) } - orderManager.products.observe(viewLifecycleOwner, Observer { products -> + orderManager.products.observe(viewLifecycleOwner, { products -> if (products == null) { adapter.setItems(emptyList()) } else { adapter.setItems(products) } - progressBar.visibility = INVISIBLE + ui.progressBar.visibility = INVISIBLE }) } -- cgit v1.2.3