summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2022-11-01 15:36:17 -0300
committerTorsten Grote <t@grobox.de>2022-11-01 15:36:17 -0300
commit55624eb33bae14380efe8ca085dc420390b23702 (patch)
tree3188915ef630ba9a170e2c54d4e475158aca4c15 /wallet/src/main/java/net
parent3a6662437dd0a017d6d75ea59eda8524e6fb58e9 (diff)
downloadtaler-android-55624eb33bae14380efe8ca085dc420390b23702.tar.gz
taler-android-55624eb33bae14380efe8ca085dc420390b23702.tar.bz2
taler-android-55624eb33bae14380efe8ca085dc420390b23702.zip
[wallet] Allow exporting the entire DB
Diffstat (limited to 'wallet/src/main/java/net')
-rw-r--r--wallet/src/main/java/net/taler/wallet/backend/WalletBackendService.kt3
-rw-r--r--wallet/src/main/java/net/taler/wallet/settings/SettingsFragment.kt10
-rw-r--r--wallet/src/main/java/net/taler/wallet/settings/SettingsManager.kt28
3 files changed, 40 insertions, 1 deletions
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()
+ }
+
}