commit 0310be19806ee821261947afb90e40fe14e1aa70 parent 6f83492076eae27f3e519688b3a7f0fcb12c941b Author: Iván Ávalos <avalos@disroot.org> Date: Thu, 5 Sep 2024 21:36:50 +0200 [pos] "Remember password" now empties password field when unchecked Diffstat:
4 files changed, 32 insertions(+), 17 deletions(-)
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigFetcherFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigFetcherFragment.kt @@ -46,7 +46,12 @@ class ConfigFetcherFragment : Fragment() { } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - configManager.fetchConfig(configManager.config, false) + if (configManager.config.savePassword()) { + configManager.fetchConfig(configManager.config, false) + } else { + navigate(actionConfigFetcherToMerchantSettings()) + } + configManager.configUpdateResult.observe(viewLifecycleOwner) { result -> when (result) { null -> return@observe 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 @@ -89,9 +89,10 @@ class ConfigFragment : Fragment() { val config = Config.Old( configUrl = url, username = ui.usernameView.editText!!.text.toString(), - password = ui.passwordView.editText!!.text.toString() + password = ui.passwordView.editText!!.text.toString(), + savePassword = ui.savePasswordCheckBox.isChecked, ) - configManager.fetchConfig(config, true, ui.savePasswordCheckBox.isChecked) + configManager.fetchConfig(config, true) configManager.configUpdateResult.observe(viewLifecycleOwner) { result -> if (onConfigUpdate(result)) { configManager.configUpdateResult.removeObservers(viewLifecycleOwner) @@ -124,8 +125,9 @@ class ConfigFragment : Fragment() { val config = Config.New( merchantUrl = url, accessToken = ui.tokenView.editText!!.text.toString(), + savePassword = ui.saveTokenCheckBox.isChecked, ) - configManager.fetchConfig(config, true, ui.saveTokenCheckBox.isChecked) + configManager.fetchConfig(config, true) configManager.configUpdateResult.observe(viewLifecycleOwner) { result -> if (onConfigUpdate(result)) { configManager.configUpdateResult.removeObservers(viewLifecycleOwner) @@ -154,7 +156,6 @@ class ConfigFragment : Fragment() { 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 -> { @@ -166,9 +167,11 @@ class ConfigFragment : Fragment() { ui.usernameView.editText!!.setText(config.username) } - if (config.password.isNotBlank()) { + if (config.password.isNotBlank() && config.savePassword) { ui.passwordView.editText!!.setText(config.password) } + + ui.savePasswordCheckBox.isChecked = config.savePassword } is Config.New -> { @@ -176,25 +179,23 @@ class ConfigFragment : Fragment() { ui.merchantUrlView.editText!!.setText(config.merchantUrl) } - if (config.accessToken.isNotBlank()) { + if (config.accessToken.isNotBlank() && config.savePassword) { ui.tokenView.editText!!.setText(config.accessToken) } + + ui.saveTokenCheckBox.isChecked = config.savePassword } } } - when (val config = configManager.config) { + when (configManager.config) { is Config.Old -> { ui.configToggle.check(R.id.oldConfigButton) showOldConfig() - - ui.forgetPasswordButton.visibility = if (config.hasPassword()) VISIBLE else GONE } is Config.New -> { ui.configToggle.check(R.id.newConfigButton) showNewConfig() - - ui.tokenView.visibility = if (config.hasPassword()) VISIBLE else GONE } } 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 @@ -56,6 +56,7 @@ internal const val CONFIG_VERSION_NEW = 1 private const val SETTINGS_CONFIG_URL = "configUrl" private const val SETTINGS_USERNAME = "username" private const val SETTINGS_PASSWORD = "password" +private const val SETTINGS_SAVE_PASSWORD = "savePassword" internal const val OLD_CONFIG_URL_DEMO = "https://docs.taler.net/_static/sample-pos-config.json" internal const val OLD_CONFIG_USERNAME_DEMO = "" @@ -67,7 +68,6 @@ private const val SETTINGS_MERCHANT_URL = "merchantUrl" private const val SETTINGS_ACCESS_TOKEN = "accessToken" 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)!! @@ -93,13 +93,15 @@ class ConfigManager( var config: Config = if (prefs.getInt(SETTINGS_CONFIG_VERSION, CONFIG_VERSION_NEW) == CONFIG_VERSION_NEW) { Config.New( merchantUrl = prefs.getString(SETTINGS_MERCHANT_URL, "")!!, - accessToken = prefs.getString(SETTINGS_ACCESS_TOKEN, NEW_CONFIG_ACCESS_TOKEN_DEMO)!!, + accessToken = prefs.getString(SETTINGS_ACCESS_TOKEN, "")!!, + savePassword = prefs.getBoolean(SETTINGS_SAVE_PASSWORD, true), ) } else { Config.Old( configUrl = prefs.getString(SETTINGS_CONFIG_URL, "")!!, username = prefs.getString(SETTINGS_USERNAME, OLD_CONFIG_USERNAME_DEMO)!!, password = prefs.getString(SETTINGS_PASSWORD, OLD_CONFIG_PASSWORD_DEMO)!!, + savePassword = prefs.getBoolean(SETTINGS_SAVE_PASSWORD, true) ) } @@ -120,14 +122,14 @@ class ConfigManager( @UiThread fun reloadConfig() { - fetchConfig(config, true, config.hasPassword()) + fetchConfig(config, true) } @UiThread - fun fetchConfig(config: Config, save: Boolean, savePassword: Boolean = false) { + fun fetchConfig(config: Config, save: Boolean) { mConfigUpdateResult.value = null val configToSave = if (save) { - if (savePassword) config else when (val c = config) { + if (config.savePassword()) config else when (val c = config) { is Config.Old -> c.copy(password = "") is Config.New -> c.copy(accessToken = "") } @@ -237,11 +239,13 @@ class ConfigManager( .putString(SETTINGS_CONFIG_URL, c.configUrl) .putString(SETTINGS_USERNAME, c.username) .putString(SETTINGS_PASSWORD, c.password) + .putBoolean(SETTINGS_SAVE_PASSWORD, c.savePassword) .apply() is Config.New -> prefs.edit() .putInt(SETTINGS_CONFIG_VERSION, CONFIG_VERSION_NEW) .putString(SETTINGS_MERCHANT_URL, c.merchantUrl) .putString(SETTINGS_ACCESS_TOKEN, c.accessToken) + .putBoolean(SETTINGS_SAVE_PASSWORD, c.savePassword) .apply() } } 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 @@ -30,6 +30,7 @@ import java.util.UUID sealed class Config { abstract fun isValid(): Boolean abstract fun hasPassword(): Boolean + abstract fun savePassword(): Boolean /** * JSON config URL + user/password @@ -38,9 +39,11 @@ sealed class Config { val configUrl: String, val username: String, val password: String, + val savePassword: Boolean, ): Config() { override fun isValid() = configUrl.isNotBlank() override fun hasPassword() = password.isNotBlank() + override fun savePassword() = savePassword } /** @@ -49,9 +52,11 @@ sealed class Config { data class New( val merchantUrl: String, val accessToken: String, + val savePassword: Boolean, ): Config() { override fun isValid() = merchantUrl.isNotBlank() override fun hasPassword() = accessToken.isNotBlank() + override fun savePassword() = savePassword } }