taler-android

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

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:
Mwallet/src/main/java/net/taler/wallet/backend/InitResponse.kt | 1+
Mwallet/src/main/java/net/taler/wallet/main/MainViewModel.kt | 21+++++++++++++++++++++
Mwallet/src/main/java/net/taler/wallet/settings/SettingsScreen.kt | 21+++++++++++++++++++++
Mwallet/src/main/res/values-de/strings.xml | 5+++++
Mwallet/src/main/res/values-fr/strings.xml | 5+++++
Mwallet/src/main/res/values/strings.xml | 5+++++
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>