summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2019-09-01 18:32:32 +0200
committerFlorian Dold <florian.dold@gmail.com>2019-09-01 18:32:32 +0200
commitd783859b7928566090c88be05c6cf3871de6fbf2 (patch)
tree26bbb7fc6507b82f3438cd003397696f4bc3003f
parent2a457a1c46a5da4985035d8bff1db914de161049 (diff)
downloadmerchant-terminal-android-d783859b7928566090c88be05c6cf3871de6fbf2.tar.gz
merchant-terminal-android-d783859b7928566090c88be05c6cf3871de6fbf2.tar.bz2
merchant-terminal-android-d783859b7928566090c88be05c6cf3871de6fbf2.zip
support for new backend API, bug fixes
-rw-r--r--.idea/dictionaries/dold.xml1
-rw-r--r--app/src/main/java/net/taler/merchantpos/CreatePayment.kt49
-rw-r--r--app/src/main/java/net/taler/merchantpos/MainActivity.kt2
-rw-r--r--app/src/main/java/net/taler/merchantpos/MerchantConfig.kt6
-rw-r--r--app/src/main/java/net/taler/merchantpos/MerchantSettings.kt12
-rw-r--r--app/src/main/java/net/taler/merchantpos/PosTerminalViewModel.kt2
-rw-r--r--app/src/main/java/net/taler/merchantpos/ProcessPayment.kt2
-rw-r--r--app/src/main/res/drawable/side_nav_bar.xml6
-rw-r--r--app/src/main/res/layout/nav_header_main.xml4
-rw-r--r--app/src/main/res/values/colors.xml6
-rw-r--r--app/src/main/res/values/styles.xml1
11 files changed, 43 insertions, 48 deletions
diff --git a/.idea/dictionaries/dold.xml b/.idea/dictionaries/dold.xml
index 192913d..f3ff859 100644
--- a/.idea/dictionaries/dold.xml
+++ b/.idea/dictionaries/dold.xml
@@ -2,6 +2,7 @@
<dictionary name="dold">
<words>
<w>snackbar</w>
+ <w>taler</w>
</words>
</dictionary>
</component> \ No newline at end of file
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)
diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml
index a33798b..50dc048 100644
--- a/app/src/main/res/drawable/side_nav_bar.xml
+++ b/app/src/main/res/drawable/side_nav_bar.xml
@@ -2,8 +2,8 @@
android:shape="rectangle">
<gradient
android:angle="135"
- android:centerColor="#009688"
- android:endColor="#00695C"
- android:startColor="#4DB6AC"
+ android:centerColor="@color/colorPrimaryDark"
+ android:endColor="@color/colorPrimaryDark"
+ android:startColor="@color/colorPrimary"
android:type="linear"/>
</shape> \ No newline at end of file
diff --git a/app/src/main/res/layout/nav_header_main.xml b/app/src/main/res/layout/nav_header_main.xml
index 84d4010..d84d107 100644
--- a/app/src/main/res/layout/nav_header_main.xml
+++ b/app/src/main/res/layout/nav_header_main.xml
@@ -9,7 +9,7 @@
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
- android:theme="@style/ThemeOverlay.AppCompat.Dark"
+ android:theme="@style/AppTheme"
android:orientation="vertical"
android:gravity="bottom">
@@ -25,11 +25,13 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
+ android:textColor="#FFF"
android:text="GNU Taler"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>
<TextView
android:layout_width="wrap_content"
+ android:textColor="#FFF"
android:layout_height="wrap_content"
android:text="Merchant Terminal"
android:id="@+id/textView"/>
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 69b2233..cbe99a2 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
- <color name="colorPrimary">#008577</color>
- <color name="colorPrimaryDark">#00574B</color>
- <color name="colorAccent">#D81B60</color>
+ <color name="colorPrimary">#795548</color>
+ <color name="colorPrimaryDark">#5D4037</color>
+ <color name="colorAccent">#FFEB3B</color>
</resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 16dbab3..1eb4629 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,5 +1,4 @@
<resources>
-
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->