aboutsummaryrefslogtreecommitdiff
path: root/wallet
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2020-03-30 14:47:52 -0300
committerTorsten Grote <t@grobox.de>2020-03-30 14:47:52 -0300
commita66b2179638ba8c458aaba86d0707c7046ad881b (patch)
tree4c3aa77365b77de633b33ae893f4f9f2a61b68d8 /wallet
parentdb0cf385fe707091f219cc61fb4e12b5b1fe64d0 (diff)
downloadtaler-android-a66b2179638ba8c458aaba86d0707c7046ad881b.tar.gz
taler-android-a66b2179638ba8c458aaba86d0707c7046ad881b.tar.bz2
taler-android-a66b2179638ba8c458aaba86d0707c7046ad881b.zip
[wallet] Add basic support for refunds
Diffstat (limited to 'wallet')
-rw-r--r--wallet/src/main/java/net/taler/wallet/MainActivity.kt15
-rw-r--r--wallet/src/main/java/net/taler/wallet/WalletViewModel.kt2
-rw-r--r--wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt2
-rw-r--r--wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt48
-rw-r--r--wallet/src/main/res/values/strings.xml3
5 files changed, 66 insertions, 4 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/MainActivity.kt b/wallet/src/main/java/net/taler/wallet/MainActivity.kt
index df7bdc6..26af3f0 100644
--- a/wallet/src/main/java/net/taler/wallet/MainActivity.kt
+++ b/wallet/src/main/java/net/taler/wallet/MainActivity.kt
@@ -38,8 +38,9 @@ import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupWithNavController
import com.google.android.material.navigation.NavigationView.OnNavigationItemSelectedListener
+import com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_LONG
+import com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_SHORT
import com.google.android.material.snackbar.Snackbar
-import com.google.android.material.snackbar.Snackbar.LENGTH_SHORT
import com.google.zxing.integration.android.IntentIntegrator
import com.google.zxing.integration.android.IntentIntegrator.parseActivityResult
import kotlinx.android.synthetic.main.activity_main.*
@@ -50,6 +51,7 @@ import net.taler.wallet.HostCardEmulatorService.Companion.HTTP_TUNNEL_RESPONSE
import net.taler.wallet.HostCardEmulatorService.Companion.MERCHANT_NFC_CONNECTED
import net.taler.wallet.HostCardEmulatorService.Companion.MERCHANT_NFC_DISCONNECTED
import net.taler.wallet.HostCardEmulatorService.Companion.TRIGGER_PAYMENT_ACTION
+import net.taler.wallet.refund.RefundStatus
import java.util.Locale.ROOT
class MainActivity : AppCompatActivity(), OnNavigationItemSelectedListener,
@@ -150,8 +152,15 @@ class MainActivity : AppCompatActivity(), OnNavigationItemSelectedListener,
model.withdrawManager.getWithdrawalInfo(url)
}
url.toLowerCase(ROOT).startsWith("taler://refund/") -> {
- // TODO implement refunds
- Snackbar.make(nav_view, "Refunds are not yet implemented", LENGTH_SHORT).show()
+ model.showProgressBar.value = true
+ model.refundManager.refund(url).observe(this, Observer { status ->
+ model.showProgressBar.value = false
+ val res = when (status) {
+ is RefundStatus.Error -> R.string.refund_error
+ is RefundStatus.Success -> R.string.refund_success
+ }
+ Snackbar.make(nav_view, res, LENGTH_LONG).show()
+ })
}
else -> {
Snackbar.make(
diff --git a/wallet/src/main/java/net/taler/wallet/WalletViewModel.kt b/wallet/src/main/java/net/taler/wallet/WalletViewModel.kt
index 9599123..fc17c7c 100644
--- a/wallet/src/main/java/net/taler/wallet/WalletViewModel.kt
+++ b/wallet/src/main/java/net/taler/wallet/WalletViewModel.kt
@@ -31,6 +31,7 @@ import net.taler.wallet.backend.WalletBackendApi
import net.taler.wallet.history.HistoryManager
import net.taler.wallet.payment.PaymentManager
import net.taler.wallet.pending.PendingOperationsManager
+import net.taler.wallet.refund.RefundManager
import net.taler.wallet.withdraw.WithdrawManager
import org.json.JSONObject
@@ -67,6 +68,7 @@ class WalletViewModel(val app: Application) : AndroidViewModel(app) {
val pendingOperationsManager: PendingOperationsManager =
PendingOperationsManager(walletBackendApi)
val historyManager = HistoryManager(walletBackendApi, mapper)
+ val refundManager = RefundManager(walletBackendApi)
override fun onCleared() {
walletBackendApi.destroy()
diff --git a/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt b/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt
index 2125dbc..694c5da 100644
--- a/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt
@@ -41,7 +41,7 @@ class PendingOperationsManager(private val walletBackendApi: WalletBackendApi) {
walletBackendApi.sendRequest("getPendingOperations", null) { isError, result ->
activeGetPending--
if (isError) {
- Log.i(TAG, "got getPending error result")
+ Log.i(TAG, "got getPending error result: $result")
return@sendRequest
}
Log.i(TAG, "got getPending result")
diff --git a/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt b/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt
new file mode 100644
index 0000000..21c634e
--- /dev/null
+++ b/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt
@@ -0,0 +1,48 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.wallet.refund
+
+import android.util.Log
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import net.taler.wallet.TAG
+import net.taler.wallet.backend.WalletBackendApi
+import org.json.JSONObject
+
+sealed class RefundStatus {
+ object Error : RefundStatus()
+ object Success : RefundStatus()
+}
+
+class RefundManager(private val walletBackendApi: WalletBackendApi) {
+
+ fun refund(refundUri: String): LiveData<RefundStatus> {
+ val liveData = MutableLiveData<RefundStatus>()
+ val args = JSONObject().also { it.put("talerRefundUri", refundUri) }
+ walletBackendApi.sendRequest("applyRefund", args) { isError, result ->
+ if (isError) {
+ Log.e(TAG, "Refund Error: $result")
+ liveData.postValue(RefundStatus.Error)
+ } else {
+ Log.e(TAG, "Refund Success: $result")
+ liveData.postValue(RefundStatus.Success)
+ }
+ }
+ return liveData
+ }
+
+}
diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml
index 04a507b..6bc073f 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -102,4 +102,7 @@
<string name="settings_developer">Developer Settings (use with caution!)</string>
<string name="settings_reset">Reset Wallet (dangerous!)</string>
+ <string name="refund_error">Error processing refund</string>
+ <string name="refund_success">Refund received</string>
+
</resources>