From a4796ec47d89a851b260b6fc195494547208a025 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 18 Mar 2020 14:24:41 -0300 Subject: Merge all three apps into one repository --- .../merchantpos/payment/ProcessPaymentFragment.kt | 96 ++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 merchant-terminal/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt (limited to 'merchant-terminal/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt') diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt new file mode 100644 index 0000000..24f67f1 --- /dev/null +++ b/merchant-terminal/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt @@ -0,0 +1,96 @@ +/* + * This file is part of GNU Taler + * (C) 2020 Taler Systems S.A. + * + * GNU Taler is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 3, or (at your option) any later version. + * + * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * GNU Taler; see the file COPYING. If not, see + */ + +package net.taler.merchantpos.payment + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Observer +import androidx.navigation.fragment.findNavController +import com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_LONG +import kotlinx.android.synthetic.main.fragment_process_payment.* +import net.taler.merchantpos.MainViewModel +import net.taler.merchantpos.NfcManager.Companion.hasNfc +import net.taler.merchantpos.QrCodeManager.makeQrCode +import net.taler.merchantpos.R +import net.taler.merchantpos.fadeIn +import net.taler.merchantpos.fadeOut +import net.taler.merchantpos.navigate +import net.taler.merchantpos.payment.ProcessPaymentFragmentDirections.Companion.actionProcessPaymentToPaymentSuccess +import net.taler.merchantpos.topSnackbar + +class ProcessPaymentFragment : Fragment() { + + private val model: MainViewModel by activityViewModels() + private val paymentManager by lazy { model.paymentManager } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_process_payment, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + val introRes = + if (hasNfc(requireContext())) R.string.payment_intro_nfc else R.string.payment_intro + payIntroView.setText(introRes) + paymentManager.payment.observe(viewLifecycleOwner, Observer { payment -> + onPaymentStateChanged(payment) + }) + cancelPaymentButton.setOnClickListener { + onPaymentCancel() + } + } + + private fun onPaymentStateChanged(payment: Payment) { + if (payment.error) { + topSnackbar(view!!, R.string.error_network, LENGTH_LONG) + findNavController().navigateUp() + return + } + if (payment.paid) { + model.orderManager.onOrderPaid(payment.order.id) + actionProcessPaymentToPaymentSuccess().navigate(findNavController()) + return + } + payIntroView.fadeIn() + @SuppressLint("SetTextI18n") + amountView.text = "${payment.order.totalAsString} ${payment.currency}" + payment.orderId?.let { + orderRefView.text = getString(R.string.payment_order_ref, it) + orderRefView.fadeIn() + } + payment.talerPayUri?.let { + val qrcodeBitmap = makeQrCode(it) + qrcodeView.setImageBitmap(qrcodeBitmap) + qrcodeView.fadeIn() + progressBar.fadeOut() + } + } + + private fun onPaymentCancel() { + paymentManager.cancelPayment() + findNavController().navigateUp() + topSnackbar(view!!, R.string.payment_canceled, LENGTH_LONG) + } + +} -- cgit v1.2.3