diff options
author | Florian Dold <florian.dold@gmail.com> | 2019-09-01 18:32:32 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2019-09-01 18:32:32 +0200 |
commit | d783859b7928566090c88be05c6cf3871de6fbf2 (patch) | |
tree | 26bbb7fc6507b82f3438cd003397696f4bc3003f /app/src/main/java/net/taler/merchantpos | |
parent | 2a457a1c46a5da4985035d8bff1db914de161049 (diff) | |
download | merchant-terminal-android-d783859b7928566090c88be05c6cf3871de6fbf2.tar.gz merchant-terminal-android-d783859b7928566090c88be05c6cf3871de6fbf2.tar.bz2 merchant-terminal-android-d783859b7928566090c88be05c6cf3871de6fbf2.zip |
support for new backend API, bug fixes
Diffstat (limited to 'app/src/main/java/net/taler/merchantpos')
6 files changed, 33 insertions, 40 deletions
diff --git a/app/src/main/java/net/taler/merchantpos/CreatePayment.kt b/app/src/main/java/net/taler/merchantpos/CreatePayment.kt index e07802f..c6a8066 100644 --- a/app/src/main/java/net/taler/merchantpos/CreatePayment.kt +++ b/app/src/main/java/net/taler/merchantpos/CreatePayment.kt @@ -1,14 +1,12 @@ package net.taler.merchantpos -import android.content.Context -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 android.widget.Button import android.widget.EditText +import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProviders import androidx.navigation.fragment.findNavController import com.android.volley.Request @@ -16,28 +14,30 @@ import com.android.volley.RequestQueue import com.android.volley.Response import com.android.volley.VolleyError import com.android.volley.toolbox.Volley -import org.json.JSONObject import com.google.android.material.snackbar.Snackbar +import org.json.JSONObject -// TODO: Rename parameter arguments, choose names that match -// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER -private const val ARG_PARAM1 = "param1" -private const val ARG_PARAM2 = "param2" - /** - * A simple [Fragment] subclass. - * Activities that contain this fragment must implement the - * [CreatePayment.OnFragmentInteractionListener] interface - * to handle interaction events. - * Use the [CreatePayment.newInstance] factory method to - * create an instance of this fragment. - * + * Fragment that allows the merchant to create a payment. */ class CreatePayment : Fragment() { private lateinit var queue: RequestQueue private lateinit var model: PosTerminalViewModel + private var paused: Boolean = false + + + override fun onPause() { + super.onPause() + this.paused = true + } + + override fun onResume() { + super.onResume() + this.paused = false + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -54,16 +54,16 @@ class CreatePayment : Fragment() { model.activeAmount = amount model.activeSubject = activity!!.findViewById<EditText>(R.id.edit_payment_subject).text - var order = JSONObject().also { + val order = JSONObject().also { it.put("amount", amount) it.put("summary", model.activeSubject!!) it.put("fulfillment_url", "https://example.com") it.put("instance", "default") } - var reqBody = JSONObject().also { it.put("order", order) } + val reqBody = JSONObject().also { it.put("order", order) } - var req = MerchantInternalRequest( + val req = MerchantInternalRequest( Request.Method.POST, model.merchantConfig!!, "order", @@ -73,7 +73,6 @@ class CreatePayment : Fragment() { Response.ErrorListener { onNetworkError(it) }) queue.add(req) - } private fun onNetworkError(volleyError: VolleyError?) { @@ -87,18 +86,24 @@ class CreatePayment : Fragment() { val params = mapOf("order_id" to orderId, "instance" to merchantConfig.instance) model.activeOrderId = orderId - var req = MerchantInternalRequest(Request.Method.GET, model.merchantConfig!!, "check-payment", params, null, + val req = MerchantInternalRequest(Request.Method.GET, model.merchantConfig!!, "check-payment", params, null, Response.Listener { onCheckPayment(it) }, Response.ErrorListener { onNetworkError(it) }) queue.add(req) } + /** + * Called when the /check-payment response gave a result. + */ private fun onCheckPayment(checkPaymentResponse: JSONObject) { + if (paused) { + return + } if (checkPaymentResponse.getBoolean("paid")) { val mySnackbar = Snackbar.make(view!!, "Already paid?!", Snackbar.LENGTH_SHORT) mySnackbar.show() return } - model.activeContractUri = checkPaymentResponse.getString("contract_url") + model.activeTalerPayUri = checkPaymentResponse.getString("taler_pay_uri") findNavController().navigate(R.id.action_createPayment_to_processPayment) } diff --git a/app/src/main/java/net/taler/merchantpos/MainActivity.kt b/app/src/main/java/net/taler/merchantpos/MainActivity.kt index 23d0417..e8e9a2a 100644 --- a/app/src/main/java/net/taler/merchantpos/MainActivity.kt +++ b/app/src/main/java/net/taler/merchantpos/MainActivity.kt @@ -158,7 +158,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte isoDep.transceive(apduSelectFile()) - val contractUri: String? = model.activeContractUri + val contractUri: String? = model.activeTalerPayUri if (contractUri != null) { isoDep.transceive(apduPutTalerData(1, contractUri.toByteArray())) diff --git a/app/src/main/java/net/taler/merchantpos/MerchantConfig.kt b/app/src/main/java/net/taler/merchantpos/MerchantConfig.kt index b0552c1..3e043a0 100644 --- a/app/src/main/java/net/taler/merchantpos/MerchantConfig.kt +++ b/app/src/main/java/net/taler/merchantpos/MerchantConfig.kt @@ -6,10 +6,8 @@ data class MerchantConfig(val baseUrl: String, val instance: String, val apiKey: fun urlFor(endpoint: String, params: Map<String, String>?): String { val uriBuilder = Uri.parse(baseUrl).buildUpon() uriBuilder.appendPath(endpoint) - if (params != null) { - params.forEach { - uriBuilder.appendQueryParameter(it.key, it.value) - } + params?.forEach { + uriBuilder.appendQueryParameter(it.key, it.value) } return uriBuilder.toString() } diff --git a/app/src/main/java/net/taler/merchantpos/MerchantSettings.kt b/app/src/main/java/net/taler/merchantpos/MerchantSettings.kt index e3dffb4..1903bce 100644 --- a/app/src/main/java/net/taler/merchantpos/MerchantSettings.kt +++ b/app/src/main/java/net/taler/merchantpos/MerchantSettings.kt @@ -8,19 +8,9 @@ import android.view.ViewGroup /** - * A simple [Fragment] subclass. - * Activities that contain this fragment must implement the - * [MerchantSettings.OnFragmentInteractionListener] interface - * to handle interaction events. - * Use the [MerchantSettings.newInstance] factory method to - * create an instance of this fragment. - * + * Fragment that displays merchant settings. */ class MerchantSettings : Fragment() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? diff --git a/app/src/main/java/net/taler/merchantpos/PosTerminalViewModel.kt b/app/src/main/java/net/taler/merchantpos/PosTerminalViewModel.kt index bcbc0c8..a6548e4 100644 --- a/app/src/main/java/net/taler/merchantpos/PosTerminalViewModel.kt +++ b/app/src/main/java/net/taler/merchantpos/PosTerminalViewModel.kt @@ -8,7 +8,7 @@ class PosTerminalViewModel : ViewModel() { var merchantConfig: MerchantConfig? = null var activeOrderId: String? = null var activeAmount: String? = null - var activeContractUri: String? = null + var activeTalerPayUri: String? = null fun activeAmountPretty(): String? { val amount = activeAmount ?: return null diff --git a/app/src/main/java/net/taler/merchantpos/ProcessPayment.kt b/app/src/main/java/net/taler/merchantpos/ProcessPayment.kt index 26ef1c7..fbd60c6 100644 --- a/app/src/main/java/net/taler/merchantpos/ProcessPayment.kt +++ b/app/src/main/java/net/taler/merchantpos/ProcessPayment.kt @@ -112,7 +112,7 @@ class ProcessPayment : Fragment() { // Inflate the layout for this fragment val view = inflater.inflate(R.layout.fragment_process_payment, container, false) val img = view.findViewById<ImageView>(R.id.qrcode) - val talerPayUrl = "talerpay:" + URLEncoder.encode(model.activeContractUri!!, "utf-8") + val talerPayUrl = model.activeTalerPayUri!!; val myBitmap = makeQrCode(talerPayUrl) img.setImageBitmap(myBitmap) val cancelPaymentButton = view.findViewById<Button>(R.id.button_cancel_payment) |