commit ed6fdd1baf197d54d4d5c1e29800655aab17a955
parent c9f533b2fa2388aa575cd0526fb551d3a6ddf4ba
Author: Iván Ávalos <avalos@disroot.org>
Date: Thu, 13 Aug 2026 20:36:59 +0200
[wallet] add setting to enable new wallet-core SQLite backend
Diffstat:
6 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/wallet/src/main/java/net/taler/wallet/backend/InitResponse.kt b/wallet/src/main/java/net/taler/wallet/backend/InitResponse.kt
@@ -65,6 +65,7 @@ data class WalletRunConfig(
data class Features(
val allowHttp: Boolean = false,
val enableV1Contracts: Boolean = false,
+ val migrateNativeDb: Boolean = false,
)
}
diff --git a/wallet/src/main/java/net/taler/wallet/main/MainViewModel.kt b/wallet/src/main/java/net/taler/wallet/main/MainViewModel.kt
@@ -272,6 +272,27 @@ class MainViewModel(
}
}
+ /**
+ * Enables the experimental migration of the wallet database to the new
+ * native SQLite backend. This may result in data loss and cannot be undone.
+ */
+ fun enableMigrateNativeDb(onError: (error: TalerErrorInfo) -> Unit) {
+ viewModelScope.launch {
+ val config = walletConfig.copy(
+ features = walletConfig.features?.copy(
+ migrateNativeDb = true,
+ ) ?: Features(
+ migrateNativeDb = true,
+ ),
+ )
+
+ api.setWalletConfig(config)
+ .onSuccess {
+ walletConfig = config
+ }.onError(onError)
+ }
+ }
+
fun showObservabilityLog() {
mShowObservabilityLog.value = true
}
diff --git a/wallet/src/main/java/net/taler/wallet/settings/SettingsScreen.kt b/wallet/src/main/java/net/taler/wallet/settings/SettingsScreen.kt
@@ -51,6 +51,7 @@ import androidx.compose.material.icons.filled.AccountBalance
import androidx.compose.material.icons.filled.Dns
import androidx.compose.material.icons.filled.DomainAdd
import androidx.compose.material.icons.filled.LocalAtm
+import androidx.compose.material.icons.filled.Memory
import androidx.compose.material.icons.filled.VideoLibrary
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
@@ -97,6 +98,8 @@ fun SettingsScreen(
val testRunningMessage = stringResource(R.string.settings_test_running)
val resetDoneMessage = stringResource(R.string.settings_alert_reset_done)
val resetCanceledMessage = stringResource(R.string.settings_alert_reset_canceled)
+ val migrateDoneMessage = stringResource(R.string.settings_db_migrate_done)
+ val migrateCanceledMessage = stringResource(R.string.settings_db_migrate_canceled)
val biometricAuthUnavailableMessage = stringResource(R.string.biometric_auth_unavailable)
val scope = rememberCoroutineScope()
val settingsManager = model.settingsManager
@@ -289,6 +292,24 @@ fun SettingsScreen(
)
SettingsItem(
+ title = stringResource(R.string.settings_migrate_db),
+ summary = stringResource(R.string.settings_migrate_db_summary),
+ icon = Icons.Default.Memory,
+ onClick = {
+ MaterialAlertDialogBuilder(context)
+ .setMessage(R.string.settings_dialog_migrate_db_message)
+ .setNegativeButton(R.string.settings_migrate_db) { _, _ ->
+ model.enableMigrateNativeDb { onShowError(it) }
+ scope.launch { snackbarHostState.showSnackbar(migrateDoneMessage) }
+ }
+ .setPositiveButton(R.string.cancel) { _, _ ->
+ scope.launch { snackbarHostState.showSnackbar(migrateCanceledMessage) }
+ }
+ .show()
+ }
+ )
+
+ SettingsItem(
title = stringResource(R.string.settings_reset),
summary = stringResource(R.string.settings_reset_summary),
icon = ImageVector.vectorResource(R.drawable.ic_nuke),
diff --git a/wallet/src/main/res/values-de/strings.xml b/wallet/src/main/res/values-de/strings.xml
@@ -179,6 +179,11 @@
<string name="send_peer_purpose">Buchungsvermerk</string>
<string name="exchange_list_select">Zahlungsdienstleister auswählen</string>
<string name="settings_db_import_success">Datenbank aus Datei importiert</string>
+ <string name="settings_db_migrate_canceled">Migration abgebrochen</string>
+ <string name="settings_db_migrate_done">Datenbankmigration gestartet</string>
+ <string name="settings_migrate_db">Datenbank migrieren (experimentell!)</string>
+ <string name="settings_migrate_db_summary">Auf die neue SQLite-Datenbank umstellen</string>
+ <string name="settings_dialog_migrate_db_message">Dadurch wird die Wallet-Datenbank auf die neue SQLite-Datenbank migriert. Die Migration ist experimentell und kann zu Datenverlust führen. Möchten Sie fortfahren?</string>
<string name="error_broken_uri">Fehler: Dieser Taler-Link funktioniert (zurzeit) nicht.</string>
<string name="settings_alert_import_canceled">Import abgebrochen</string>
<string name="import_db">Importieren</string>
diff --git a/wallet/src/main/res/values-fr/strings.xml b/wallet/src/main/res/values-fr/strings.xml
@@ -283,6 +283,11 @@
<string name="settings_alert_import_canceled">Importation annulée</string>
<string name="observability_hide_json">Cacher le JSON</string>
<string name="settings_db_import_error">Erreur d\'importation de la base de données</string>
+ <string name="settings_db_migrate_canceled">Migration annulée</string>
+ <string name="settings_db_migrate_done">Migration de la base de données démarrée</string>
+ <string name="settings_migrate_db">Migrer la base de données (expérimental !)</string>
+ <string name="settings_migrate_db_summary">Passer au nouveau backend SQLite</string>
+ <string name="settings_dialog_migrate_db_message">Cette opération migrera la base de données du portefeuille vers le nouveau backend SQLite. La migration est expérimentale et peut entraîner une perte de données. Voulez-vous continuer ?</string>
<string name="settings_logcat_error">Erreur d\'exportation du journal</string>
<string name="send_deposit_host">Banque en devise locale</string>
<string name="send_deposit_no_methods_error">Aucune méthode de virement n\'est prise en charge</string>
diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml
@@ -507,6 +507,8 @@ GNU Taler is immune to many types of fraud such as credit card data theft, phish
<string name="settings_db_import_message">Importing database, please wait until confirmation</string>
<string name="settings_db_import_success">Database imported from file</string>
<string name="settings_db_import_summary">Restore database from file</string>
+ <string name="settings_db_migrate_canceled">Migration cancelled</string>
+ <string name="settings_db_migrate_done">Database migration started</string>
<string name="settings_dev_mode">Developer mode</string>
<string name="settings_dev_mode_summary">Shows more information intended for debugging</string>
<string name="settings_dialog_import_message">This operation will overwrite your existing database. Do you want to continue?</string>
@@ -519,6 +521,9 @@ GNU Taler is immune to many types of fraud such as credit card data theft, phish
<string name="settings_logcat_error">Error exporting log</string>
<string name="settings_logcat_success">Log exported to file</string>
<string name="settings_logcat_summary">Save internal log</string>
+ <string name="settings_migrate_db">Migrate database (experimental!)</string>
+ <string name="settings_migrate_db_summary">Switch to the new SQLite database backend</string>
+ <string name="settings_dialog_migrate_db_message">This will migrate the wallet database to the new SQLite backend. The migration is experimental and may result in data loss. Do you want to continue?</string>
<string name="settings_stats">Performance stats</string>
<string name="settings_stats_summary">View top time-consuming operations</string>
<string name="settings_reset">Reset Wallet (dangerous!)</string>