diff options
Diffstat (limited to 'app/src/main/java/net/taler/merchantpos/ProcessPayment.kt')
-rw-r--r-- | app/src/main/java/net/taler/merchantpos/ProcessPayment.kt | 60 |
1 files changed, 56 insertions, 4 deletions
diff --git a/app/src/main/java/net/taler/merchantpos/ProcessPayment.kt b/app/src/main/java/net/taler/merchantpos/ProcessPayment.kt index 81c1901..c98a3e4 100644 --- a/app/src/main/java/net/taler/merchantpos/ProcessPayment.kt +++ b/app/src/main/java/net/taler/merchantpos/ProcessPayment.kt @@ -1,12 +1,28 @@ package net.taler.merchantpos import android.content.Context +import android.graphics.Bitmap +import android.graphics.Color import android.net.Uri import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import com.google.zxing.BarcodeFormat +import com.google.zxing.common.BitMatrix +import com.google.zxing.qrcode.QRCodeWriter +import android.opengl.ETC1.getWidth +import android.opengl.ETC1.getHeight +import android.widget.Button +import android.widget.ImageView +import android.widget.TextView +import androidx.activity.OnBackPressedCallback +import androidx.activity.addCallback +import androidx.lifecycle.ViewModelProviders +import androidx.navigation.findNavController +import androidx.navigation.fragment.findNavController +import com.google.android.material.snackbar.Snackbar // TODO: Rename parameter arguments, choose names that match @@ -29,12 +45,19 @@ class ProcessPayment : Fragment() { private var param2: String? = null private var listener: OnFragmentInteractionListener? = null + private lateinit var model: PosTerminalViewModel + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } + + model = activity?.run { + ViewModelProviders.of(this)[PosTerminalViewModel::class.java] + } ?: throw Exception("Invalid Activity") + } override fun onCreateView( @@ -42,12 +65,41 @@ class ProcessPayment : Fragment() { savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_process_payment, container, false) + val view = inflater.inflate(R.layout.fragment_process_payment, container, false) + val img = view.findViewById<ImageView>(R.id.qrcode) + val myBitmap = makeQrCode(model.activeContractUri!!) + img.setImageBitmap(myBitmap) + val cancelPaymentButton = view.findViewById<Button>(R.id.button_cancel_payment) + cancelPaymentButton.setOnClickListener { + onPaymentCancel() + } + val textViewAmount = view.findViewById<TextView>(R.id.text_view_amount) + textViewAmount.text = model.activeAmountPretty() + val textViewOrderId = view.findViewById<TextView>(R.id.text_view_order_reference) + textViewOrderId.text = "Order Reference: " + model.activeOrderId + return view } - // TODO: Rename method, update argument and hook method into UI event - fun onButtonPressed(uri: Uri) { - listener?.onFragmentInteraction(uri) + private fun onPaymentCancel() { + val navController = findNavController() + navController.popBackStack() + + val mySnackbar = Snackbar.make(view!!, "Payment Canceled", Snackbar.LENGTH_SHORT) + mySnackbar.show() + } + + fun makeQrCode(text: String): Bitmap { + val qrCodeWriter: QRCodeWriter = QRCodeWriter() + val bitMatrix: BitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, 256, 256) + val height = bitMatrix.height + val width = bitMatrix.width + val bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565) + for (x in 0 until width) { + for (y in 0 until height) { + bmp.setPixel(x, y, if (bitMatrix.get(x, y)) Color.BLACK else Color.WHITE) + } + } + return bmp; } override fun onAttach(context: Context) { |