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 | |
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
-rw-r--r-- | .idea/dictionaries/dold.xml | 1 | ||||
-rw-r--r-- | app/src/main/java/net/taler/merchantpos/CreatePayment.kt | 49 | ||||
-rw-r--r-- | app/src/main/java/net/taler/merchantpos/MainActivity.kt | 2 | ||||
-rw-r--r-- | app/src/main/java/net/taler/merchantpos/MerchantConfig.kt | 6 | ||||
-rw-r--r-- | app/src/main/java/net/taler/merchantpos/MerchantSettings.kt | 12 | ||||
-rw-r--r-- | app/src/main/java/net/taler/merchantpos/PosTerminalViewModel.kt | 2 | ||||
-rw-r--r-- | app/src/main/java/net/taler/merchantpos/ProcessPayment.kt | 2 | ||||
-rw-r--r-- | app/src/main/res/drawable/side_nav_bar.xml | 6 | ||||
-rw-r--r-- | app/src/main/res/layout/nav_header_main.xml | 4 | ||||
-rw-r--r-- | app/src/main/res/values/colors.xml | 6 | ||||
-rw-r--r-- | app/src/main/res/values/styles.xml | 1 |
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. --> |