From 55624eb33bae14380efe8ca085dc420390b23702 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 1 Nov 2022 15:36:17 -0300 Subject: [wallet] Allow exporting the entire DB --- .../taler/wallet/backend/WalletBackendService.kt | 3 ++- .../net/taler/wallet/settings/SettingsFragment.kt | 10 ++++++++ .../net/taler/wallet/settings/SettingsManager.kt | 28 ++++++++++++++++++++++ wallet/src/main/res/drawable/ic_unarchive.xml | 26 ++++++++++++++++++++ wallet/src/main/res/values/strings.xml | 6 ++++- wallet/src/main/res/xml/settings_main.xml | 8 +++++++ 6 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 wallet/src/main/res/drawable/ic_unarchive.xml (limited to 'wallet/src') diff --git a/wallet/src/main/java/net/taler/wallet/backend/WalletBackendService.kt b/wallet/src/main/java/net/taler/wallet/backend/WalletBackendService.kt index f99f38d..06e0627 100644 --- a/wallet/src/main/java/net/taler/wallet/backend/WalletBackendService.kt +++ b/wallet/src/main/java/net/taler/wallet/backend/WalletBackendService.kt @@ -35,6 +35,7 @@ import java.util.concurrent.ConcurrentHashMap import kotlin.system.exitProcess private const val TAG = "taler-wallet-backend" +const val WALLET_DB = "talerwalletdb-v30.json" class RequestData(val clientRequestId: Int, val messenger: Messenger) @@ -83,7 +84,7 @@ class WalletBackendService : Service() { msg.put("operation", "init") val args = JSONObject() msg.put("args", args) - args.put("persistentStoragePath", "${application.filesDir}/talerwalletdb-v30.json") + args.put("persistentStoragePath", "${application.filesDir}/$WALLET_DB") akono.sendMessage(msg.toString()) } diff --git a/wallet/src/main/java/net/taler/wallet/settings/SettingsFragment.kt b/wallet/src/main/java/net/taler/wallet/settings/SettingsFragment.kt index ecf45a6..3d31dc5 100644 --- a/wallet/src/main/java/net/taler/wallet/settings/SettingsFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/settings/SettingsFragment.kt @@ -48,6 +48,7 @@ class SettingsFragment : PreferenceFragmentCompat() { private lateinit var prefDevMode: SwitchPreferenceCompat private lateinit var prefWithdrawTest: Preference private lateinit var prefLogcat: Preference + private lateinit var prefExportDb: Preference private lateinit var prefVersionApp: Preference private lateinit var prefVersionCore: Preference private lateinit var prefVersionExchange: Preference @@ -58,6 +59,7 @@ class SettingsFragment : PreferenceFragmentCompat() { prefBackup, prefWithdrawTest, prefLogcat, + prefExportDb, prefVersionApp, prefVersionCore, prefVersionExchange, @@ -69,6 +71,9 @@ class SettingsFragment : PreferenceFragmentCompat() { private val logLauncher = registerForActivityResult(CreateDocument("text/plain")) { uri -> settingsManager.exportLogcat(uri) } + private val dbExportLauncher = registerForActivityResult(CreateDocument("application/json")) { uri -> + settingsManager.exportDb(uri) + } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.settings_main, rootKey) @@ -76,6 +81,7 @@ class SettingsFragment : PreferenceFragmentCompat() { prefDevMode = findPreference("pref_dev_mode")!! prefWithdrawTest = findPreference("pref_testkudos")!! prefLogcat = findPreference("pref_logcat")!! + prefExportDb = findPreference("pref_export_db")!! prefVersionApp = findPreference("pref_version_app")!! prefVersionCore = findPreference("pref_version_core")!! prefVersionExchange = findPreference("pref_version_protocol_exchange")!! @@ -125,6 +131,10 @@ class SettingsFragment : PreferenceFragmentCompat() { logLauncher.launch("taler-wallet-log-${currentTimeMillis()}.txt") true } + prefExportDb.setOnPreferenceClickListener { + dbExportLauncher.launch("taler-wallet-db-${currentTimeMillis()}.json") + true + } prefReset.setOnPreferenceClickListener { showResetDialog() diff --git a/wallet/src/main/java/net/taler/wallet/settings/SettingsManager.kt b/wallet/src/main/java/net/taler/wallet/settings/SettingsManager.kt index 6bf1673..349c7b1 100644 --- a/wallet/src/main/java/net/taler/wallet/settings/SettingsManager.kt +++ b/wallet/src/main/java/net/taler/wallet/settings/SettingsManager.kt @@ -26,6 +26,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import net.taler.wallet.R +import net.taler.wallet.backend.WALLET_DB class SettingsManager( private val context: Context, @@ -59,4 +60,31 @@ class SettingsManager( Toast.makeText(context, R.string.settings_logcat_error, LENGTH_LONG).show() } + fun exportDb(uri: Uri?) { + if (uri == null) { + onDbExportError() + return + } + scope.launch(Dispatchers.IO) { + try { + context.contentResolver.openOutputStream(uri, "wt")?.use { outputStream -> + context.openFileInput(WALLET_DB).use { inputStream -> + inputStream.copyTo(outputStream) + } + } ?: onDbExportError() + } catch (e: Exception) { + Log.e(SettingsManager::class.simpleName, "Error exporting db: ", e) + onDbExportError() + return@launch + } + withContext(Dispatchers.Main) { + Toast.makeText(context, R.string.settings_db_export_success, LENGTH_LONG).show() + } + } + } + + private fun onDbExportError() { + Toast.makeText(context, R.string.settings_db_export_error, LENGTH_LONG).show() + } + } diff --git a/wallet/src/main/res/drawable/ic_unarchive.xml b/wallet/src/main/res/drawable/ic_unarchive.xml new file mode 100644 index 0000000..e6faf51 --- /dev/null +++ b/wallet/src/main/res/drawable/ic_unarchive.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml index 2b81894..5fba9f1 100644 --- a/wallet/src/main/res/values/strings.xml +++ b/wallet/src/main/res/values/strings.xml @@ -214,9 +214,13 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card Withdraw TESTKUDOS Get money for testing Debug log - View/send internal log + Save internal log Error exporting log Log exported to file + Database + Save internal database + Error exporting database + Database exported to file App Version Wallet Core Version Supported Exchange Versions diff --git a/wallet/src/main/res/xml/settings_main.xml b/wallet/src/main/res/xml/settings_main.xml index a713838..101aa37 100644 --- a/wallet/src/main/res/xml/settings_main.xml +++ b/wallet/src/main/res/xml/settings_main.xml @@ -54,6 +54,14 @@ app:title="@string/settings_logcat" tools:isPreferenceVisible="true" /> + +