taler-android

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

commit d6c523720db1b3cf0de7638a44420d0c8e0a162c
parent fe695e99303bfa9da8626cd6eac4124c5f004ce2
Author: Iván Ávalos <avalos@disroot.org>
Date:   Mon, 19 Feb 2024 16:48:25 -0600

[cashier] Upgrade to newer bank APIs and better response handling

Diffstat:
Mcashier/src/main/java/net/taler/cashier/HttpHelper.kt | 12++++++++----
Mcashier/src/main/java/net/taler/cashier/MainViewModel.kt | 2+-
Mcashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt | 28++++++++++++++--------------
3 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/cashier/src/main/java/net/taler/cashier/HttpHelper.kt b/cashier/src/main/java/net/taler/cashier/HttpHelper.kt @@ -50,11 +50,13 @@ object HttpHelper { Log.e(TAG, "Error retrieving $url", e) return HttpJsonResult.Error(0) } - return if (response.code == 200 && response.body != null) { + return if (response.code == 204) { + HttpJsonResult.Success(JSONObject()) + } else if (response.code in 200..299 && response.body != null) { val jsonObject = JSONObject(response.body!!.string()) HttpJsonResult.Success(jsonObject) } else { - Log.e(TAG, "Received status ${response.code} from $url expected 200") + Log.e(TAG, "Received status ${response.code} from $url expected 2xx") HttpJsonResult.Error(response.code, getErrorBody(response)) } } @@ -76,11 +78,13 @@ object HttpHelper { Log.e(TAG, "Error retrieving $url", e) return HttpJsonResult.Error(0) } - return if (response.code == 200 && response.body != null) { + return if (response.code == 204) { + HttpJsonResult.Success(JSONObject()) + } else if (response.code in 200..299 && response.body != null) { val jsonObject = JSONObject(response.body!!.string()) HttpJsonResult.Success(jsonObject) } else { - Log.e(TAG, "Received status ${response.code} from $url expected 200") + Log.e(TAG, "Received status ${response.code} from $url expected 2xx") HttpJsonResult.Error(response.code, getErrorBody(response)) } } diff --git a/cashier/src/main/java/net/taler/cashier/MainViewModel.kt b/cashier/src/main/java/net/taler/cashier/MainViewModel.kt @@ -64,7 +64,7 @@ class MainViewModel(private val app: Application) : AndroidViewModel(app) { fun getBalance() = viewModelScope.launch(Dispatchers.IO) { check(configManager.hasConfig()) { "No config to get balance" } val config = configManager.config - val url = "${config.bankUrl}/access-api/accounts/${config.username}" + val url = "${config.bankUrl}/accounts/${config.username}" Log.d(TAG, "Checking balance at $url") val result = when (val response = makeJsonGetRequest(url, config)) { is HttpJsonResult.Success -> { diff --git a/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt b/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt @@ -94,7 +94,7 @@ class WithdrawManager( mWithdrawResult.value = null mWithdrawAmount.value = amount scope.launch(Dispatchers.IO) { - val url = "${config.bankUrl}/access-api/accounts/${config.username}/withdrawals" + val url = "${config.bankUrl}/accounts/${config.username}/withdrawals" Log.d(TAG, "Starting withdrawal at $url") val map = mapOf("amount" to amount.toJSONString()) val body = JSONObject(map) @@ -154,31 +154,31 @@ class WithdrawManager( private fun checkWithdrawStatus(withdrawalId: String) = scope.launch(Dispatchers.IO) { val url = - "${config.bankUrl}/access-api/accounts/${config.username}/withdrawals/${withdrawalId}" + "${config.bankUrl}/withdrawals/${withdrawalId}" Log.d(TAG, "Checking withdraw status at $url") val response = makeJsonGetRequest(url, config) if (response !is Success) return@launch // ignore errors and continue trying val oldStatus = mWithdrawStatus.value try { - when { - response.json.getBoolean("aborted") -> { + when(response.json.getString("status")) { + "selected" -> { + // only update status, if there's none, yet + // so we don't re-notify or overwrite newer status info + if (oldStatus == null) { + mWithdrawStatus.postValue(WithdrawStatus.SelectionDone(withdrawalId)) + } + } + "aborted" -> { cancelWithdrawStatusCheck() mWithdrawStatus.postValue(WithdrawStatus.Aborted) } - response.json.getBoolean("confirmation_done") -> { + "confirmed" -> { if (oldStatus !is WithdrawStatus.Success) { cancelWithdrawStatusCheck() mWithdrawStatus.postValue(WithdrawStatus.Success) viewModel.getBalance() } } - response.json.getBoolean("selection_done") -> { - // only update status, if there's none, yet - // so we don't re-notify or overwrite newer status info - if (oldStatus == null) { - mWithdrawStatus.postValue(WithdrawStatus.SelectionDone(withdrawalId)) - } - } } } catch (e: Exception) { mWithdrawStatus.postValue(WithdrawStatus.Error(e.toString())) @@ -206,7 +206,7 @@ class WithdrawManager( private fun abort(withdrawalId: String) = scope.launch(Dispatchers.IO) { val url = - "${config.bankUrl}/access-api/accounts/${config.username}/withdrawals/${withdrawalId}/abort" + "${config.bankUrl}/accounts/${config.username}/withdrawals/${withdrawalId}/abort" Log.d(TAG, "Aborting withdrawal at $url") makeJsonPostRequest(url, JSONObject(), config) } @@ -216,7 +216,7 @@ class WithdrawManager( mWithdrawStatus.value = WithdrawStatus.Confirming scope.launch(Dispatchers.IO) { val url = - "${config.bankUrl}/access-api/accounts/${config.username}/withdrawals/${withdrawalId}/confirm" + "${config.bankUrl}/accounts/${config.username}/withdrawals/${withdrawalId}/confirm" Log.d(TAG, "Confirming withdrawal at $url") when (val response = makeJsonPostRequest(url, JSONObject(), config)) { is Success -> {