[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-merchant-terminal-android] branch master updated (a78fac0 -> 4aa8
From: |
gnunet |
Subject: |
[taler-merchant-terminal-android] branch master updated (a78fac0 -> 4aa8591) |
Date: |
Tue, 25 Feb 2020 17:07:39 +0100 |
This is an automated email from the git hooks/post-receive script.
torsten-grote pushed a change to branch master
in repository merchant-terminal-android.
from a78fac0 Fix lint and make all strings translatable
new e02adae Add CI file for automatic nightly repo
new 76301ac Improve config fragment: remove currency and move fetch
button up
new 662f4c2 Redo payment fragment and upgrade gradle/kotlin
new bde9555 Show snackbars at the top of the order, not at the bottom
new 7f76cdb Redesign payment successful screen
new b15056e Improve display of order total
new ae9faac Make fragment titles translatable
new 4aa8591 Scroll to last added product and select it
The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.gitlab-ci.yml | 39 ++++++
.idea/codeStyles/Project.xml | 3 -
.idea/gradle.xml | 3 +
app/build.gradle | 1 -
.../java/net/taler/merchantpos/MainActivity.kt | 2 +-
.../java/net/taler/merchantpos/MerchantHistory.kt | 2 +-
app/src/main/java/net/taler/merchantpos/Utils.kt | 37 ++++++
.../net/taler/merchantpos/config/ConfigManager.kt | 1 +
.../merchantpos/config/MerchantConfigFragment.kt | 20 +--
.../net/taler/merchantpos/order/OrderFragment.kt | 14 +-
.../net/taler/merchantpos/order/OrderManager.kt | 4 +
.../taler/merchantpos/order/OrderStateFragment.kt | 38 ++++--
.../merchantpos/payment/PaymentSuccessFragment.kt | 6 +-
.../merchantpos/payment/ProcessPaymentFragment.kt | 29 ++--
app/src/main/res/drawable/ic_check_circle.xml | 10 ++
app/src/main/res/layout/app_bar_main.xml | 24 +++-
app/src/main/res/layout/content_main.xml | 24 ----
...t_settings.xml => fragment_merchant_config.xml} | 34 ++---
app/src/main/res/layout/fragment_order.xml | 16 +--
app/src/main/res/layout/fragment_order_state.xml | 19 ++-
.../main/res/layout/fragment_payment_success.xml | 47 +++++--
.../main/res/layout/fragment_process_payment.xml | 146 ++++++++++++---------
app/src/main/res/navigation/nav_graph.xml | 14 +-
app/src/main/res/values-night/colors.xml | 1 +
app/src/main/res/values/colors.xml | 6 +-
app/src/main/res/values/strings.xml | 16 ++-
build.gradle | 8 +-
gradle/wrapper/gradle-wrapper.properties | 4 +-
28 files changed, 355 insertions(+), 213 deletions(-)
create mode 100644 .gitlab-ci.yml
create mode 100644 app/src/main/res/drawable/ic_check_circle.xml
delete mode 100644 app/src/main/res/layout/content_main.xml
rename app/src/main/res/layout/{fragment_merchant_settings.xml =>
fragment_merchant_config.xml} (84%)
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..05106b6
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,39 @@
+image: registry.gitlab.com/fdroid/ci-images-client:latest
+
+cache:
+ paths:
+ - .gradle/wrapper
+ - .gradle/caches
+
+stages:
+ - test
+ - deploy
+
+test:
+ stage: test
+ script: ./gradlew lint assembleRelease
+
+deploy_nightly:
+ stage: deploy
+ only:
+ - master
+ script:
+ # Ensure that key exists
+ - test -z "$DEBUG_KEYSTORE" && exit 0
+ # Rename nightly app
+ - sed -i
+ 's,<string name="app_name">.*</string>,<string name="app_name">Merchant
PoS Nightly</string>,'
+ app/src/main/res/values*/strings.xml
+ # Set time-based version code
+ - export versionCode=$(date '+%s')
+ - sed -i "s,^\(\s*versionCode\) *[0-9].*,\1 $versionCode," app/build.gradle
+ # Set nightly application ID
+ - sed -i "s,^\(\s*applicationId\) \"*[a-z\.].*\",\1
\"net.taler.merchantpos.nightly\"," app/build.gradle
+ # Build the APK
+ - ./gradlew assembleDebug
+ - CI_PROJECT_URL="https://gitlab.com/gnu-taler/fdroid-repo"
CI_PROJECT_PATH="gnu-taler/fdroid-repo" fdroid nightly -v
+
+after_script:
+ # this file changes every time but should not be cached
+ - rm -f $GRADLE_USER_HOME/caches/modules-2/modules-2.lock
+ - rm -fr $GRADLE_USER_HOME/caches/*/plugin-resolution/
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index a705caf..fad1c60 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -1,8 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
- <AndroidXmlCodeStyleSettings>
- <option name="ARRANGEMENT_SETTINGS_MIGRATED_TO_191" value="true" />
- </AndroidXmlCodeStyleSettings>
<JetCodeStyleSettings>
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS"
value="2147483647" />
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 7ac24c7..674414f 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,8 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
+ <component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
+ <option name="delegatedBuild" value="false" />
+ <option name="testRunner" value="PLATFORM" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
diff --git a/app/build.gradle b/app/build.gradle
index 38ddaa9..2a9d620 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,7 +2,6 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
-
apply plugin: 'kotlin-android-extensions'
android {
diff --git a/app/src/main/java/net/taler/merchantpos/MainActivity.kt
b/app/src/main/java/net/taler/merchantpos/MainActivity.kt
index 4206b51..36c1211 100644
--- a/app/src/main/java/net/taler/merchantpos/MainActivity.kt
+++ b/app/src/main/java/net/taler/merchantpos/MainActivity.kt
@@ -53,7 +53,7 @@ class MainActivity : AppCompatActivity(),
OnNavigationItemSelectedListener {
)
val navHostFragment =
- supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as
NavHostFragment
+ supportFragmentManager.findFragmentById(R.id.navHostFragment) as
NavHostFragment
nav = navHostFragment.navController
toolbar.setupWithNavController(nav, appBarConfiguration)
}
diff --git a/app/src/main/java/net/taler/merchantpos/MerchantHistory.kt
b/app/src/main/java/net/taler/merchantpos/MerchantHistory.kt
index c21a8a7..27f8a98 100644
--- a/app/src/main/java/net/taler/merchantpos/MerchantHistory.kt
+++ b/app/src/main/java/net/taler/merchantpos/MerchantHistory.kt
@@ -120,7 +120,7 @@ class MerchantHistory : Fragment() {
private fun onNetworkError() {
this.isLoading.value = false
- Snackbar.make(view!!, "Network Error", LENGTH_SHORT).show()
+ Snackbar.make(view!!, R.string.error_network, LENGTH_SHORT).show()
}
}
diff --git a/app/src/main/java/net/taler/merchantpos/Utils.kt
b/app/src/main/java/net/taler/merchantpos/Utils.kt
index 9b0075a..948120e 100644
--- a/app/src/main/java/net/taler/merchantpos/Utils.kt
+++ b/app/src/main/java/net/taler/merchantpos/Utils.kt
@@ -1,8 +1,15 @@
package net.taler.merchantpos
+import android.view.View
+import android.view.View.INVISIBLE
+import android.view.View.VISIBLE
+import androidx.annotation.StringRes
import androidx.lifecycle.LiveData
import androidx.lifecycle.MediatorLiveData
import androidx.lifecycle.Observer
+import
com.google.android.material.snackbar.BaseTransientBottomBar.ANIMATION_MODE_FADE
+import com.google.android.material.snackbar.BaseTransientBottomBar.Duration
+import com.google.android.material.snackbar.Snackbar.make
object Utils {
@@ -40,6 +47,36 @@ object Utils {
}
+fun View.fadeIn(endAction: () -> Unit = {}) {
+ if (visibility == VISIBLE) return
+ alpha = 0f
+ visibility = VISIBLE
+ animate().alpha(1f).withEndAction {
+ if (context != null) endAction.invoke()
+ }.start()
+}
+
+fun View.fadeOut(endAction: () -> Unit = {}) {
+ if (visibility == INVISIBLE) return
+ animate().alpha(0f).withEndAction {
+ if (context == null) return@withEndAction
+ visibility = INVISIBLE
+ alpha = 1f
+ endAction.invoke()
+ }.start()
+}
+
+fun topSnackbar(view: View, text: CharSequence, @Duration duration: Int) {
+ make(view, text, duration)
+ .setAnimationMode(ANIMATION_MODE_FADE)
+ .setAnchorView(R.id.navHostFragment)
+ .show()
+}
+
+fun topSnackbar(view: View, @StringRes resId: Int, @Duration duration: Int) {
+ topSnackbar(view, view.resources.getText(resId), duration)
+}
+
class CombinedLiveData<T, K, S>(
source1: LiveData<T>,
source2: LiveData<K>,
diff --git a/app/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
b/app/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
index 6c230d1..753f5b9 100644
--- a/app/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
+++ b/app/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
@@ -52,6 +52,7 @@ class ConfigManager(
password = prefs.getString(SETTINGS_PASSWORD, "")!!
)
var merchantConfig: MerchantConfig? = null
+ private set
private val mConfigUpdateResult = MutableLiveData<ConfigUpdateResult>()
val configUpdateResult: LiveData<ConfigUpdateResult> = mConfigUpdateResult
diff --git
a/app/src/main/java/net/taler/merchantpos/config/MerchantConfigFragment.kt
b/app/src/main/java/net/taler/merchantpos/config/MerchantConfigFragment.kt
index abee7e3..c6e60d3 100644
--- a/app/src/main/java/net/taler/merchantpos/config/MerchantConfigFragment.kt
+++ b/app/src/main/java/net/taler/merchantpos/config/MerchantConfigFragment.kt
@@ -11,11 +11,12 @@ 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 com.google.android.material.snackbar.Snackbar
-import com.google.android.material.snackbar.Snackbar.LENGTH_SHORT
-import kotlinx.android.synthetic.main.fragment_merchant_settings.*
+import kotlinx.android.synthetic.main.fragment_merchant_config.*
import net.taler.merchantpos.MainViewModel
import net.taler.merchantpos.R
+import net.taler.merchantpos.topSnackbar
/**
* Fragment that displays merchant settings.
@@ -30,7 +31,7 @@ class MerchantConfigFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- return inflater.inflate(R.layout.fragment_merchant_settings,
container, false)
+ return inflater.inflate(R.layout.fragment_merchant_config, container,
false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -58,7 +59,6 @@ class MerchantConfigFragment : Fragment() {
configManager.forgetPassword()
passwordView.editText!!.text = null
forgetPasswordButton.visibility = GONE
- currencyView.visibility = GONE
}
updateView()
}
@@ -80,14 +80,6 @@ class MerchantConfigFragment : Fragment() {
passwordView.editText!!.setText(configManager.config.password)
forgetPasswordButton.visibility = if
(configManager.config.hasPassword()) VISIBLE else GONE
-
- val currency = configManager.merchantConfig?.currency
- if (currency == null) {
- currencyView.visibility = GONE
- } else {
- currencyView.text = getString(R.string.config_currency, currency)
- currencyView.visibility = VISIBLE
- }
}
private fun checkInput(): Boolean {
@@ -102,14 +94,14 @@ class MerchantConfigFragment : Fragment() {
private fun onConfigReceived(currency: String) {
onResultReceived()
updateView()
- Snackbar.make(view!!, "Changed to new $currency merchant",
LENGTH_SHORT).show()
+ topSnackbar(view!!, getString(R.string.config_changed, currency),
LENGTH_LONG)
findNavController().navigate(R.id.order)
}
private fun onNetworkError(authError: Boolean) {
onResultReceived()
val res = if (authError) R.string.config_auth_error else
R.string.config_error
- Snackbar.make(view!!, res, LENGTH_SHORT).show()
+ Snackbar.make(view!!, res, LENGTH_LONG).show()
}
private fun onResultReceived() {
diff --git a/app/src/main/java/net/taler/merchantpos/order/OrderFragment.kt
b/app/src/main/java/net/taler/merchantpos/order/OrderFragment.kt
index 6696afe..90d882f 100644
--- a/app/src/main/java/net/taler/merchantpos/order/OrderFragment.kt
+++ b/app/src/main/java/net/taler/merchantpos/order/OrderFragment.kt
@@ -7,8 +7,6 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
-import androidx.navigation.NavController
-import androidx.navigation.Navigation.findNavController
import androidx.navigation.fragment.findNavController
import androidx.transition.TransitionManager.beginDelayedTransition
import kotlinx.android.synthetic.main.fragment_order.*
@@ -55,14 +53,16 @@ class OrderFragment : Fragment() {
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
- val nav: NavController = findNavController(requireActivity(),
R.id.nav_host_fragment)
- reconfigureButton.setOnClickListener {
nav.navigate(R.id.action_order_to_merchantSettings) }
- historyButton.setOnClickListener {
nav.navigate(R.id.action_order_to_merchantHistory) }
- logoutButton.setOnClickListener {
nav.navigate(R.id.action_order_to_merchantSettings) }
+ reconfigureButton.setOnClickListener {
+ findNavController().navigate(R.id.action_order_to_merchantSettings)
+ }
+ historyButton.setOnClickListener {
+ findNavController().navigate(R.id.action_order_to_merchantHistory)
+ }
completeButton.setOnClickListener {
val order = orderManager.order.value ?: return@setOnClickListener
paymentManager.createPayment(order)
- nav.navigate(R.id.action_order_to_processPayment)
+ findNavController().navigate(R.id.action_order_to_processPayment)
}
}
diff --git a/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
b/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
index d7db048..60f1e4a 100644
--- a/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
+++ b/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
@@ -43,6 +43,9 @@ class OrderManager(private val mapper: ObjectMapper) :
ConfigurationReceiver {
private val mSelectedOrderLine = MutableLiveData<ConfigProduct>()
+ internal var lastAddedProduct: ConfigProduct? = null
+ private set
+
internal val modifyOrderAllowed =
CombinedLiveData(restartState, mSelectedOrderLine) { restartState,
selectedOrderLine ->
restartState != DISABLED && selectedOrderLine != null
@@ -113,6 +116,7 @@ class OrderManager(private val mapper: ObjectMapper) :
ConfigurationReceiver {
@UiThread
internal fun addProduct(product: ConfigProduct) {
+ lastAddedProduct = product
val order = mOrder.value ?: newOrder
mOrder.value = order + product
mRestartState.value = ENABLED
diff --git
a/app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
b/app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
index 3988f17..f016795 100644
--- a/app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
+++ b/app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
@@ -23,6 +23,8 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder
import kotlinx.android.synthetic.main.fragment_order_state.*
import net.taler.merchantpos.MainViewModel
import net.taler.merchantpos.R
+import net.taler.merchantpos.fadeIn
+import net.taler.merchantpos.fadeOut
import net.taler.merchantpos.order.OrderAdapter.OrderLineLookup
import net.taler.merchantpos.order.OrderAdapter.OrderViewHolder
@@ -68,20 +70,16 @@ class OrderStateFragment : Fragment() {
this.tracker = tracker
orderManager.order.observe(viewLifecycleOwner, Observer { order ->
- adapter.setItems(order.products) {
- // workaround for bug: SelectionObserver doesn't update when
removing selected item
- if (tracker.hasSelection()) {
- val key = tracker.selection.first()
- val product = order.products.find { it.id == key }
- if (product == null) tracker.clearSelection()
- }
- }
+ onOrderChanged(order, tracker)
})
orderManager.orderTotal.observe(viewLifecycleOwner, Observer {
orderTotal ->
if (orderTotal == 0.0) {
+ totalView.fadeOut()
totalView.text = null
} else {
- totalView.text = getString(R.string.order_total, orderTotal)
+ val currency = viewModel.configManager.merchantConfig?.currency
+ totalView.text = getString(R.string.order_total, orderTotal,
currency)
+ totalView.fadeIn()
}
})
}
@@ -91,6 +89,24 @@ class OrderStateFragment : Fragment() {
tracker?.onSaveInstanceState(outState)
}
+ private fun onOrderChanged(order: Order, tracker:
SelectionTracker<String>) {
+ adapter.setItems(order.products) {
+ orderManager.lastAddedProduct?.let {
+ val position = adapter.findPosition(it)
+ if (position >= 0) {
+ orderList.scrollToPosition(position)
+ orderList.post { this.tracker?.select(it.id) }
+ }
+ }
+ // workaround for bug: SelectionObserver doesn't update when
removing selected item
+ if (tracker.hasSelection()) {
+ val key = tracker.selection.first()
+ val product = order.products.find { it.id == key }
+ if (product == null) tracker.clearSelection()
+ }
+ }
+ }
+
}
private class OrderAdapter : Adapter<OrderViewHolder>() {
@@ -132,6 +148,10 @@ private class OrderAdapter : Adapter<OrderViewHolder>() {
return differ.currentList.find { it.id == key }
}
+ fun findPosition(product: ConfigProduct): Int {
+ return differ.currentList.indexOf(product)
+ }
+
private inner class OrderViewHolder(private val v: View) : ViewHolder(v) {
private val quantity: TextView = v.findViewById(R.id.quantity)
private val name: TextView = v.findViewById(R.id.name)
diff --git
a/app/src/main/java/net/taler/merchantpos/payment/PaymentSuccessFragment.kt
b/app/src/main/java/net/taler/merchantpos/payment/PaymentSuccessFragment.kt
index 176b6fc..1e9953f 100644
--- a/app/src/main/java/net/taler/merchantpos/payment/PaymentSuccessFragment.kt
+++ b/app/src/main/java/net/taler/merchantpos/payment/PaymentSuccessFragment.kt
@@ -5,7 +5,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
-import androidx.navigation.findNavController
+import androidx.navigation.fragment.findNavController
import kotlinx.android.synthetic.main.fragment_payment_success.*
import net.taler.merchantpos.R
@@ -20,8 +20,8 @@ class PaymentSuccessFragment : Fragment() {
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
- button_success_back.setOnClickListener {
-
requireActivity().findNavController(R.id.nav_host_fragment).navigateUp()
+ paymentButton.setOnClickListener {
+ findNavController().navigateUp()
}
}
}
diff --git
a/app/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt
b/app/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt
index 738ec2f..6965e56 100644
--- a/app/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt
+++ b/app/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt
@@ -9,13 +9,15 @@ 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.Snackbar
-import com.google.android.material.snackbar.Snackbar.LENGTH_SHORT
+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.topSnackbar
class ProcessPaymentFragment : Fragment() {
@@ -32,18 +34,19 @@ class ProcessPaymentFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val introRes =
if (hasNfc(requireContext())) R.string.payment_intro_nfc else
R.string.payment_intro
- textView2.setText(introRes)
+ payIntroView.setText(introRes)
paymentManager.payment.observe(viewLifecycleOwner, Observer { payment
->
onPaymentStateChanged(payment)
})
- button_cancel_payment.setOnClickListener {
+ cancelPaymentButton.setOnClickListener {
onPaymentCancel()
}
}
private fun onPaymentStateChanged(payment: Payment) {
if (payment.error) {
- Snackbar.make(view!!, "Network Error", LENGTH_SHORT).show()
+ topSnackbar(view!!, R.string.error_network, LENGTH_LONG)
+ findNavController().navigateUp()
return
}
if (payment.paid) {
@@ -51,19 +54,25 @@ class ProcessPaymentFragment : Fragment() {
model.orderManager.restartOrUndo()
return
}
+ payIntroView.fadeIn()
@SuppressLint("SetTextI18n")
- text_view_amount.text = "${payment.order.totalAsString}
${payment.currency}"
- text_view_order_reference.text = getString(R.string.payment_order_ref,
payment.orderId)
+ 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)
- qrcode.setImageBitmap(qrcodeBitmap)
+ qrcodeView.setImageBitmap(qrcodeBitmap)
+ qrcodeView.fadeIn()
+ progressBar.fadeOut()
}
}
private fun onPaymentCancel() {
paymentManager.cancelPayment()
- findNavController().popBackStack()
- Snackbar.make(view!!, "Payment Canceled", LENGTH_SHORT).show()
+ findNavController().navigateUp()
+ topSnackbar(view!!, R.string.payment_canceled, LENGTH_LONG)
}
}
diff --git a/app/src/main/res/drawable/ic_check_circle.xml
b/app/src/main/res/drawable/ic_check_circle.xml
new file mode 100644
index 0000000..61e1b5a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_check_circle.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:alpha="0.56"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="@color/green"
+ android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48
10,-10S17.52,2 12,2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z" />
+</vector>
diff --git a/app/src/main/res/layout/app_bar_main.xml
b/app/src/main/res/layout/app_bar_main.xml
index 01c4602..a4ddb39 100644
--- a/app/src/main/res/layout/app_bar_main.xml
+++ b/app/src/main/res/layout/app_bar_main.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<androidx.coordinatorlayout.widget.CoordinatorLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
@@ -8,8 +7,8 @@
tools:context=".MainActivity">
<com.google.android.material.appbar.AppBarLayout
- android:layout_height="wrap_content"
android:layout_width="match_parent"
+ android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
@@ -17,11 +16,22 @@
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
- app:popupTheme="@style/AppTheme.PopupOverlay"/>
+ app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.AppBarLayout>
- <include layout="@layout/content_main"/>
-
+ <androidx.fragment.app.FragmentContainerView
+ android:id="@+id/navHostFragment"
+ android:name="androidx.navigation.fragment.NavHostFragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ app:defaultNavHost="true"
+ app:layout_insetEdge="top"
+ app:layout_behavior="@string/appbar_scrolling_view_behavior"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toRightOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:navGraph="@navigation/nav_graph" />
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/app/src/main/res/layout/content_main.xml
b/app/src/main/res/layout/content_main.xml
deleted file mode 100644
index a87cf40..0000000
--- a/app/src/main/res/layout/content_main.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- app:layout_behavior="@string/appbar_scrolling_view_behavior"
- tools:showIn="@layout/app_bar_main"
- tools:context=".MainActivity">
-
- <androidx.fragment.app.FragmentContainerView
- android:id="@+id/nav_host_fragment"
- android:name="androidx.navigation.fragment.NavHostFragment"
- android:layout_width="0dp"
- android:layout_height="0dp"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintBottom_toBottomOf="parent"
- app:defaultNavHost="true"
- app:navGraph="@navigation/nav_graph" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_merchant_settings.xml
b/app/src/main/res/layout/fragment_merchant_config.xml
similarity index 84%
rename from app/src/main/res/layout/fragment_merchant_settings.xml
rename to app/src/main/res/layout/fragment_merchant_config.xml
index 93874b8..0f0b96f 100644
--- a/app/src/main/res/layout/fragment_merchant_settings.xml
+++ b/app/src/main/res/layout/fragment_merchant_config.xml
@@ -9,7 +9,6 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_margin="16dp"
tools:context=".config.MerchantConfigFragment">
<com.google.android.material.textfield.TextInputLayout
@@ -86,27 +85,19 @@
android:id="@+id/savePasswordCheckBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_margin="16dp"
+ android:layout_marginStart="16dp"
+ android:layout_marginTop="16dp"
+ android:layout_marginBottom="16dp"
android:checked="true"
android:text="@string/config_save_password"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/passwordView" />
-
- <TextView
- android:id="@+id/currencyView"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_margin="16dp"
- android:textSize="18sp"
- android:visibility="gone"
- app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/okButton"
+ app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/savePasswordCheckBox"
- tools:text="@string/config_currency"
- tools:visibility="visible" />
+ app:layout_constraintTop_toBottomOf="@+id/passwordView"
+ app:layout_constraintVertical_bias="0.0" />
- <Button
+ <com.google.android.material.button.MaterialButton
android:id="@+id/okButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -114,10 +105,9 @@
android:text="@string/config_ok"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="1.0"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/currencyView"
- app:layout_constraintVertical_bias="1.0" />
+ app:layout_constraintStart_toEndOf="@+id/savePasswordCheckBox"
+ app:layout_constraintTop_toBottomOf="@+id/passwordView"
+ app:layout_constraintVertical_bias="0.0" />
<ProgressBar
android:id="@+id/progressBar"
diff --git a/app/src/main/res/layout/fragment_order.xml
b/app/src/main/res/layout/fragment_order.xml
index 136d1e7..3fd4902 100644
--- a/app/src/main/res/layout/fragment_order.xml
+++ b/app/src/main/res/layout/fragment_order.xml
@@ -10,6 +10,7 @@
android:name="net.taler.merchantpos.order.OrderStateFragment"
android:layout_width="0dp"
android:layout_height="0dp"
+ android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/restartButton"
app:layout_constraintEnd_toStartOf="@+id/guideline1"
app:layout_constraintStart_toStartOf="parent"
@@ -28,6 +29,7 @@
android:name="net.taler.merchantpos.order.ProductsFragment"
android:layout_width="0dp"
android:layout_height="0dp"
+ android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/restartButton"
app:layout_constraintEnd_toStartOf="@+id/guideline2"
app:layout_constraintStart_toStartOf="@+id/guideline1"
@@ -46,6 +48,7 @@
android:name="net.taler.merchantpos.order.CategoriesFragment"
android:layout_width="0dp"
android:layout_height="0dp"
+ android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/restartButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline2"
@@ -104,17 +107,6 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/reconfigureButton" />
- <Button
- android:id="@+id/logoutButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dp"
- android:backgroundTint="@color/logoutButton"
- android:text="@string/button_logout"
- android:visibility="gone"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toEndOf="@+id/historyButton" />
-
<Button
android:id="@+id/completeButton"
android:layout_width="wrap_content"
@@ -125,6 +117,6 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
- app:layout_constraintStart_toEndOf="@+id/logoutButton" />
+ app:layout_constraintStart_toEndOf="@+id/historyButton" />
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_order_state.xml
b/app/src/main/res/layout/fragment_order_state.xml
index 0cd9c75..0fc602a 100644
--- a/app/src/main/res/layout/fragment_order_state.xml
+++ b/app/src/main/res/layout/fragment_order_state.xml
@@ -10,22 +10,27 @@
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/totalView"
- tools:listitem="@layout/list_item_order"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent"
+ tools:listitem="@layout/list_item_order" />
<TextView
android:id="@+id/totalView"
- android:layout_width="wrap_content"
+ android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_margin="8dp"
+ android:background="@color/highlightedBackground"
+ android:elevation="2dp"
+ android:gravity="center_vertical|end"
+ android:padding="8dp"
+ android:textColor="?android:textColorPrimary"
+ android:textSize="16sp"
+ android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/orderList"
- app:layout_constraintVertical_bias="1.0"
- tools:text="Total: 23.75" />
+ tools:text="Total: 23.75 TESTKUDOS"
+ tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_payment_success.xml
b/app/src/main/res/layout/fragment_payment_success.xml
index d6a27db..4924df4 100644
--- a/app/src/main/res/layout/fragment_payment_success.xml
+++ b/app/src/main/res/layout/fragment_payment_success.xml
@@ -4,30 +4,59 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_margin="16dp"
tools:context=".payment.PaymentSuccessFragment">
+ <ImageView
+ android:id="@+id/paymentIcon"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_margin="16dp"
+ android:src="@drawable/ic_check_circle"
+ app:layout_constraintBottom_toTopOf="@+id/paymentLabel"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.5"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_chainStyle="spread_inside"
+ tools:ignore="ContentDescription" />
+
<TextView
- android:id="@+id/textView3"
+ android:id="@+id/paymentLabel"
android:layout_width="0dp"
android:layout_height="0dp"
- android:gravity="center"
+ android:layout_margin="16dp"
+ android:gravity="center_horizontal|top"
android:text="@string/payment_received"
- android:textColor="@android:color/holo_green_dark"
+ android:textColor="@color/green"
app:autoSizeMaxTextSize="42sp"
app:autoSizeTextType="uniform"
- app:layout_constraintBottom_toTopOf="@+id/button_success_back"
+ app:layout_constraintBottom_toTopOf="@+id/paymentButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toBottomOf="@+id/paymentIcon" />
+
+ <androidx.constraintlayout.widget.Guideline
+ android:id="@+id/guidelineLeft"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ app:layout_constraintGuide_percent="0.25" />
+
+ <androidx.constraintlayout.widget.Guideline
+ android:id="@+id/guidelineRight"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ app:layout_constraintGuide_percent="0.75" />
<Button
- android:id="@+id/button_success_back"
+ android:id="@+id/paymentButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
+ android:layout_margin="16dp"
android:text="@string/payment_back_button"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent" />
+ app:layout_constraintEnd_toStartOf="@+id/guidelineRight"
+ app:layout_constraintStart_toStartOf="@+id/guidelineLeft" />
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_process_payment.xml
b/app/src/main/res/layout/fragment_process_payment.xml
index 879773c..c36090d 100644
--- a/app/src/main/res/layout/fragment_process_payment.xml
+++ b/app/src/main/res/layout/fragment_process_payment.xml
@@ -1,76 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/frameLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_margin="15dp"
tools:context=".payment.ProcessPaymentFragment">
- <androidx.constraintlayout.widget.ConstraintLayout
- android:id="@+id/constraintLayout"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
+ <ImageView
+ android:id="@+id/qrcodeView"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_margin="32dp"
+ android:visibility="invisible"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/guideline"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:ignore="ContentDescription"
+ tools:src="@tools:sample/avatars"
+ tools:visibility="visible" />
- <Button
- android:id="@+id/button_cancel_payment"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/payment_cancel"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent" />
+ <ProgressBar
+ android:id="@+id/progressBar"
+ style="?android:attr/progressBarStyleLarge"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ app:layout_constraintBottom_toBottomOf="@+id/qrcodeView"
+ app:layout_constraintEnd_toEndOf="@+id/qrcodeView"
+ app:layout_constraintStart_toStartOf="@+id/qrcodeView"
+ app:layout_constraintTop_toTopOf="@+id/qrcodeView" />
- <ImageView
- android:id="@+id/qrcode"
- android:layout_width="269dp"
- android:layout_height="275dp"
- android:layout_marginTop="32dp"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- tools:ignore="ContentDescription"
- tools:src="@tools:sample/backgrounds/scenic[16]" />
+ <androidx.constraintlayout.widget.Guideline
+ android:id="@+id/guideline"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ app:layout_constraintGuide_percent="0.54" />
- <TextView
- android:id="@+id/textView2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="15dp"
- android:layout_marginBottom="15dp"
- android:text="@string/payment_intro_nfc"
- android:textAlignment="center"
- android:textSize="24sp"
- app:layout_constraintBottom_toTopOf="@+id/text_view_amount"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/qrcode" />
+ <TextView
+ android:id="@+id/payIntroView"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_margin="16dp"
+ android:text="@string/payment_intro_nfc"
+ android:textAlignment="center"
+ android:textSize="24sp"
+ android:visibility="invisible"
+ app:layout_constraintBottom_toTopOf="@+id/amountView"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="@+id/guideline"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_chainStyle="spread"
+ tools:visibility="visible" />
- <TextView
- android:id="@+id/text_view_amount"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="39dp"
- android:textSize="30sp"
-
app:layout_constraintBottom_toTopOf="@+id/text_view_order_reference"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/textView2"
- tools:text="10.49 Eur" />
+ <TextView
+ android:id="@+id/amountView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="16dp"
+ android:textAppearance="@style/TextAppearance.AppCompat.Headline"
+ app:layout_constraintBottom_toTopOf="@+id/orderRefView"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="@+id/guideline"
+ app:layout_constraintTop_toBottomOf="@+id/payIntroView"
+ tools:text="10.49 TESTKUDOS" />
- <TextView
- android:id="@+id/text_view_order_reference"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:layout_marginTop="8dp"
- android:layout_marginEnd="8dp"
- android:layout_marginBottom="8dp"
- android:textAlignment="center"
- app:layout_constraintBottom_toTopOf="@id/button_cancel_payment"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/text_view_amount"
- tools:text="@string/payment_order_ref" />
- </androidx.constraintlayout.widget.ConstraintLayout>
-</FrameLayout>
\ No newline at end of file
+ <TextView
+ android:id="@+id/orderRefView"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_margin="16dp"
+ android:textAlignment="center"
+ android:visibility="invisible"
+ app:layout_constraintBottom_toTopOf="@id/cancelPaymentButton"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="@+id/guideline"
+ app:layout_constraintTop_toBottomOf="@+id/amountView"
+ tools:text="@string/payment_order_ref"
+ tools:visibility="visible" />
+
+ <Button
+ android:id="@+id/cancelPaymentButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="16dp"
+ android:backgroundTint="@color/red"
+ android:text="@string/payment_cancel"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="@+id/guideline" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/navigation/nav_graph.xml
b/app/src/main/res/navigation/nav_graph.xml
index 227cd3a..35c2bf2 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -9,7 +9,7 @@
<fragment
android:id="@+id/order"
android:name="net.taler.merchantpos.order.OrderFragment"
- android:label="Order"
+ android:label="@string/order_label"
tools:layout="@layout/fragment_order">
<action
android:id="@+id/action_order_to_processPayment"
@@ -25,7 +25,7 @@
<fragment
android:id="@+id/processPayment"
android:name="net.taler.merchantpos.payment.ProcessPaymentFragment"
- android:label="Payment Prompt"
+ android:label="@string/payment_process_label"
tools:layout="@layout/fragment_process_payment">
<action
android:id="@+id/action_processPayment_to_paymentSuccess"
@@ -36,19 +36,19 @@
<fragment
android:id="@+id/merchantHistory"
android:name="net.taler.merchantpos.MerchantHistory"
- android:label="Payment History"
+ android:label="@string/history_label"
tools:layout="@layout/fragment_merchant_history" />
<fragment
android:id="@+id/merchantSettings"
android:name="net.taler.merchantpos.config.MerchantConfigFragment"
- android:label="Merchant Settings"
- tools:layout="@layout/fragment_merchant_settings" />
+ android:label="@string/config_label"
+ tools:layout="@layout/fragment_merchant_config" />
<fragment
android:id="@+id/configFetcher"
android:name="net.taler.merchantpos.config.ConfigFetcherFragment"
- android:label="Fetching Configuration"
+ android:label="@string/config_fetching_label"
tools:layout="@layout/fragment_config_fetcher">
<action
android:id="@+id/action_configFetcher_to_merchantSettings"
@@ -64,7 +64,7 @@
<fragment
android:id="@+id/paymentSuccess"
android:name="net.taler.merchantpos.payment.PaymentSuccessFragment"
- android:label="Payment Received"
+ android:label="@string/payment_received"
tools:layout="@layout/fragment_payment_success" />
<action
diff --git a/app/src/main/res/values-night/colors.xml
b/app/src/main/res/values-night/colors.xml
index 47721b4..10bdbb9 100644
--- a/app/src/main/res/values-night/colors.xml
+++ b/app/src/main/res/values-night/colors.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
+ <color name="highlightedBackground">#2E2E2E</color>
<color name="selectedBackground">#363636</color>
</resources>
diff --git a/app/src/main/res/values/colors.xml
b/app/src/main/res/values/colors.xml
index 3ed8874..bf0c849 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -4,7 +4,11 @@
<color name="colorPrimaryDark">#5D4037</color>
<color name="colorAccent">#FFEB3B</color>
+ <color name="highlightedBackground">#E4E4E4</color>
<color name="selectedBackground">#DADADA</color>
<color name="bottomButtons">#9E9D24</color>
- <color name="logoutButton">#C62828</color>
+
+ <color name="green">#388E3C</color>
+ <color name="red">#C62828</color>
+
</resources>
diff --git a/app/src/main/res/values/strings.xml
b/app/src/main/res/values/strings.xml
index fe4a61b..d313f03 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -7,7 +7,9 @@
<string name="menu_history">History</string>
<string name="menu_settings">Settings</string>
- <string name="order_total">Total: %1$.2f</string>
+ <string name="order_label">Order</string>
+ <!-- The first placeholder is the amount and the second the currency -->
+ <string name="order_total">Total: %1$.2f %2$s</string>
<string name="order_restart">Restart</string>
<string name="order_undo">Undo</string>
<string name="button_reconfigure">Reconfigure</string>
@@ -15,6 +17,7 @@
<string name="button_logout">Logout</string>
<string name="button_complete">Complete</string>
+ <string name="config_label">Merchant Settings</string>
<string name="config_url">Configuration URL</string>
<string name="config_username">Username</string>
<string name="config_password">Password</string>
@@ -26,15 +29,22 @@
<string name="config_fetching">Fetching Configuration…</string>
<string name="config_save_password">Remember Password</string>
<string name="config_forget_password">Forget</string>
+ <string name="config_changed">Changed to new merchant using %s</string>
+ <string name="config_fetching_label">Fetching Configuration</string>
<string name="payment_intro_nfc">Please scan QR Code or use NFC to
pay</string>
<string name="payment_intro">Please scan QR Code to pay</string>
<string name="payment_cancel">Cancel Payment</string>
- <string name="payment_received">Payment Received</string>
- <string name="payment_back_button">Go Back</string>
+ <string name="payment_received">Payment received</string>
+ <string name="payment_back_button">Continue</string>
<string name="payment_order_ref">Order Reference: %s</string>
+ <string name="payment_process_label">Customer Payment Required</string>
+ <string name="payment_canceled">Payment Canceled</string>
+ <string name="history_label">Payment History</string>
<string name="history_received_at">Received at</string>
<string name="history_ref_no">Ref. No:</string>
+ <string name="error_network">Network Error</string>
+
</resources>
diff --git a/build.gradle b/build.gradle
index dfab280..82723c0 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,17 +1,13 @@
-// Top-level build file where you can add configuration options common to all
sub-projects/modules.
-
buildscript {
- ext.kotlin_version = '1.3.41'
+ ext.kotlin_version = '1.3.61'
repositories {
google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.5.3'
+ classpath 'com.android.tools.build:gradle:3.6.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
}
}
diff --git a/gradle/wrapper/gradle-wrapper.properties
b/gradle/wrapper/gradle-wrapper.properties
index 344e98a..ef25684 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Tue Aug 20 23:27:29 CEST 2019
+#Tue Feb 25 09:57:57 BRT 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
--
To stop receiving notification emails like this one, please contact
address@hidden.
- [taler-merchant-terminal-android] branch master updated (a78fac0 -> 4aa8591),
gnunet <=
- [taler-merchant-terminal-android] 01/08: Add CI file for automatic nightly repo, gnunet, 2020/02/25
- [taler-merchant-terminal-android] 07/08: Make fragment titles translatable, gnunet, 2020/02/25
- [taler-merchant-terminal-android] 05/08: Redesign payment successful screen, gnunet, 2020/02/25
- [taler-merchant-terminal-android] 02/08: Improve config fragment: remove currency and move fetch button up, gnunet, 2020/02/25
- [taler-merchant-terminal-android] 06/08: Improve display of order total, gnunet, 2020/02/25
- [taler-merchant-terminal-android] 08/08: Scroll to last added product and select it, gnunet, 2020/02/25
- [taler-merchant-terminal-android] 04/08: Show snackbars at the top of the order, not at the bottom, gnunet, 2020/02/25
- [taler-merchant-terminal-android] 03/08: Redo payment fragment and upgrade gradle/kotlin, gnunet, 2020/02/25