commit 320c5ab7e566f3dfe939ed09cf41e12a08fffb2b
parent ce61eb24235f6e564c38d8c2fdcdb0a329710003
Author: Bohdan Potuzhnyi <bohdan.potuzhnyi@gmail.com>
Date: Mon, 29 Jun 2026 16:13:32 +0200
[pos] mega bad bug fix + adding about section
Diffstat:
3 files changed, 53 insertions(+), 1 deletion(-)
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
@@ -221,6 +221,10 @@ class ConfigManager(
var currencySpec: CurrencySpecification? = null
private set
+ @Volatile
+ var backendVersion: String? = null
+ private set
+
private val mInitialOrderScreen = MutableLiveData(
InitialOrderScreen.fromPrefValue(
prefs.getString(SETTINGS_INITIAL_ORDER_SCREEN, InitialOrderScreen.AmountEntry.prefValue),
@@ -433,6 +437,7 @@ class ConfigManager(
this@ConfigManager.merchantConfig = merchantConfig
this@ConfigManager.currency = configResponse.currency
this@ConfigManager.currencySpec = currencySpec
+ this@ConfigManager.backendVersion = configResponse.version
saveCachedRuntimeConfig(
CachedRuntimeConfig(
posConfig = posConfigWithCachedStock,
@@ -556,7 +561,7 @@ class ConfigManager(
val resp: LimitedTokenResponse = response.body()
- return resp.token.removePrefix("secret-token:")
+ return resp.token
}
suspend fun requestChallenge(
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/config/GeneralSettingsFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/config/GeneralSettingsFragment.kt
@@ -54,12 +54,18 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.buildAnnotatedString
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.withStyle
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.ui.unit.dp
+import androidx.core.net.toUri
+import net.taler.merchantpos.BuildConfig
import net.taler.merchantpos.compose.PosOutlinedCard
import net.taler.merchantpos.compose.PosTheme
import net.taler.merchantpos.R
@@ -93,6 +99,11 @@ class GeneralSettingsFragment : Fragment() {
val selectedTag = getCurrentLanguageTag()
return ComposeView(requireContext()).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
+ val config = configManager.config
+ val username = if (config is Config.New && config.merchantUrl.isNotBlank()) {
+ config.merchantUrl.toUri().pathSegments
+ ?.lastOrNull { it.isNotBlank() }
+ } else null
setContent {
GeneralSettingsScreen(
languageOptions = languageOptions,
@@ -111,6 +122,9 @@ class GeneralSettingsFragment : Fragment() {
clearBackStack = true,
)
},
+ backendVersion = configManager.backendVersion,
+ username = username,
+ merchantUrl = (config as? Config.New)?.merchantUrl?.takeIf { it.isNotBlank() },
)
}
}
@@ -172,6 +186,9 @@ private fun GeneralSettingsScreen(
onInitialOrderSelected: (InitialOrderScreen) -> Unit,
onInstanceSettingsClick: () -> Unit,
onLogoutClick: () -> Unit,
+ backendVersion: String? = null,
+ username: String? = null,
+ merchantUrl: String? = null,
) {
var languageExpanded by remember { mutableStateOf(false) }
var selectedTag by rememberSaveable { mutableStateOf(initialSelectedTag) }
@@ -263,6 +280,21 @@ private fun GeneralSettingsScreen(
}
}
}
+
+ item {
+ SettingsCard(
+ title = stringResource(R.string.settings_about_title),
+ ) {
+ AboutRow(stringResource(R.string.app_name), BuildConfig.VERSION_NAME)
+ if (username != null) {
+ AboutRow(stringResource(R.string.config_username), username)
+ }
+ if (merchantUrl != null) {
+ val suffix = if (backendVersion != null) " ($backendVersion)" else ""
+ AboutRow(stringResource(R.string.config_merchant_url), "$merchantUrl$suffix")
+ }
+ }
+ }
}
}
}
@@ -295,6 +327,20 @@ private fun SettingsCard(
}
}
+@Composable
+private fun AboutRow(label: String, value: String) {
+ Text(
+ text = buildAnnotatedString {
+ withStyle(SpanStyle(fontWeight = FontWeight.Bold)) {
+ append("$label: ")
+ }
+ append(value)
+ },
+ style = MaterialTheme.typography.bodyMedium,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
+ )
+}
+
@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun <T> SettingsDropdown(
diff --git a/merchant-terminal/src/main/res/values/strings.xml b/merchant-terminal/src/main/res/values/strings.xml
@@ -54,6 +54,7 @@
<string name="settings_instance_description">Change merchant portal URL, username, password, and other settings.</string>
<string name="settings_instance_button">Modify login settings</string>
<string name="settings_logout_button">Log out</string>
+ <string name="settings_about_title">About</string>
<string name="config_old_label">JSON file (old)</string>
<string name="config_setup_password">Password</string>
<string name="config_old_deprecation">This configuration method is deprecated, please use the new merchant API configuration.</string>