taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit 9f230c0aeeccb3a766ece438929ad5ea6259c63f
parent 6e21df1b59a134409d43d251175792d06e0451c6
Author: Iván Ávalos <avalos@disroot.org>
Date:   Wed, 29 May 2024 13:36:22 -0600

[pos] Initial working version of v15 /pos endpoint

bug 0008838

Diffstat:
Mmerchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigFragment.kt | 79++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Mmerchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt | 33++++++++++++++++++++-------------
Mmerchant-terminal/src/main/java/net/taler/merchantpos/config/PosConfig.kt | 2+-
3 files changed, 75 insertions(+), 39 deletions(-)

diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigFragment.kt @@ -61,13 +61,11 @@ class ConfigFragment : Fragment() { }) ui.oldConfigButton.setOnClickListener { - ui.oldConfigForm.visibility = VISIBLE - ui.newConfigForm.visibility = GONE + showOldConfig() } ui.newConfigButton.setOnClickListener { - ui.oldConfigForm.visibility = GONE - ui.newConfigForm.visibility = VISIBLE + showNewConfig() } /* @@ -150,37 +148,68 @@ class ConfigFragment : Fragment() { } private fun updateView(isInitialization: Boolean = false) { + if (isInitialization) { + ui.configUrlView.editText!!.setText(OLD_CONFIG_URL_DEMO) + ui.usernameView.editText!!.setText(OLD_CONFIG_USERNAME_DEMO) + ui.passwordView.editText!!.setText(OLD_CONFIG_PASSWORD_DEMO) + + ui.merchantUrlView.editText!!.setText(NEW_CONFIG_URL_DEMO) + ui.tokenView.editText!!.setText(NEW_CONFIG_ACCESS_TOKEN_DEMO) + + when (val config = configManager.config) { + is Config.Old -> { + if (config.configUrl.isNotBlank()) { + ui.configUrlView.editText!!.setText(config.configUrl) + } + + if (config.username.isNotBlank()) { + ui.usernameView.editText!!.setText(config.username) + } + + if (config.password.isNotBlank()) { + ui.passwordView.editText!!.setText(config.password) + } + } + + is Config.New -> { + if (config.merchantUrl.isNotBlank()) { + ui.merchantUrlView.editText!!.setText(config.merchantUrl) + } + + if (config.accessToken.isNotBlank()) { + ui.tokenView.editText!!.setText(config.accessToken) + } + } + } + } + when (val config = configManager.config) { is Config.Old -> { - ui.configUrlView.editText!!.setText( - if (isInitialization && config.configUrl.isBlank()) CONFIG_URL_DEMO - else config.configUrl - ) - ui.usernameView.editText!!.setText( - if (isInitialization && config.username.isBlank()) CONFIG_USERNAME_DEMO - else config.username - ) - ui.passwordView.editText!!.setText( - if (isInitialization && config.password.isBlank()) CONFIG_PASSWORD_DEMO - else config.password - ) + ui.configToggle.check(R.id.oldConfigButton) + showOldConfig() + ui.forgetPasswordButton.visibility = if (config.hasPassword()) VISIBLE else GONE } - is Config.New -> { - ui.merchantUrlView.editText!!.setText( - if (isInitialization && config.merchantUrl.isBlank()) MERCHANT_URL_DEMO - else config.merchantUrl - ) - ui.tokenView.editText!!.setText( - if (isInitialization && config.accessToken.isBlank()) MERCHANT_ACCESS_TOKEN_DEMO - else config.accessToken - ) + ui.configToggle.check(R.id.newConfigButton) + showNewConfig() + + ui.tokenView.visibility = if (config.hasPassword()) VISIBLE else GONE } } } + private fun showOldConfig() { + ui.oldConfigForm.visibility = VISIBLE + ui.newConfigForm.visibility = GONE + } + + private fun showNewConfig() { + ui.oldConfigForm.visibility = GONE + ui.newConfigForm.visibility = VISIBLE + } + private fun checkForUrlCredentials() { val text = ui.configUrlView.editText!!.text.toString() Uri.parse(text)?.userInfo?.let { userInfo -> diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt @@ -48,24 +48,26 @@ private const val SETTINGS_NAME = "taler-merchant-terminal" private const val SETTINGS_CONFIG_VERSION = "configVersion" +internal const val CONFIG_VERSION_OLD = 0 +internal const val CONFIG_VERSION_NEW = 1 + +// Old JSON config + basic auth config + private const val SETTINGS_CONFIG_URL = "configUrl" private const val SETTINGS_USERNAME = "username" private const val SETTINGS_PASSWORD = "password" -private const val SETTINGS_MERCHANT_URL = "merchantUrl" -private const val SETTINGS_ACCESS_TOKEN = "accessToken" - -internal const val CONFIG_URL_DEMO = "https://docs.taler.net/_static/sample-pos-config.json" -internal const val CONFIG_USERNAME_DEMO = "" -internal const val CONFIG_PASSWORD_DEMO = "" +internal const val OLD_CONFIG_URL_DEMO = "https://docs.taler.net/_static/sample-pos-config.json" +internal const val OLD_CONFIG_USERNAME_DEMO = "" +internal const val OLD_CONFIG_PASSWORD_DEMO = "" -internal const val MERCHANT_URL_DEMO = "https://backend.demo.taler.net/instances/pos" -internal const val MERCHANT_ACCESS_TOKEN_DEMO = "sandbox" +// New merchant API + token config -internal const val CONFIG_VERSION_OLD = 0 -internal const val CONFIG_VERSION_NEW = 1 +private const val SETTINGS_MERCHANT_URL = "merchantUrl" +private const val SETTINGS_ACCESS_TOKEN = "accessToken" -internal const val CONFIG_ACCESS_TOKEN_DEMO = "" +internal const val NEW_CONFIG_URL_DEMO = "https://backend.demo.taler.net/instances/pos" +internal const val NEW_CONFIG_ACCESS_TOKEN_DEMO = "sandbox" private val VERSION = Version.parse(BuildConfig.BACKEND_API_VERSION)!! @@ -90,7 +92,7 @@ class ConfigManager( var config: Config = Config.New( merchantUrl = prefs.getString(SETTINGS_MERCHANT_URL, "")!!, - accessToken = prefs.getString(SETTINGS_ACCESS_TOKEN, CONFIG_ACCESS_TOKEN_DEMO)!!, + accessToken = prefs.getString(SETTINGS_ACCESS_TOKEN, NEW_CONFIG_ACCESS_TOKEN_DEMO)!!, ) @Volatile @@ -144,7 +146,12 @@ class ConfigManager( } } }.body() - val merchantConfig = posConfig.merchantConfig + + val merchantConfig = when (val c = config) { + is Config.Old -> posConfig.merchantConfig!! + is Config.New -> MerchantConfig(c.merchantUrl, "secret-token:${c.accessToken}") + } + // get config from merchant backend API api.getConfig(merchantConfig.baseUrl).handleSuspend(::onNetworkError) { onMerchantConfigReceived(configToSave, posConfig, merchantConfig, it) diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/config/PosConfig.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/config/PosConfig.kt @@ -57,7 +57,7 @@ sealed class Config { @Serializable data class PosConfig( @SerialName("config") - val merchantConfig: MerchantConfig, + val merchantConfig: MerchantConfig? = null , val categories: List<Category>, val products: List<ConfigProduct> )