summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/peer
diff options
context:
space:
mode:
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/peer')
-rw-r--r--wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt80
-rw-r--r--wallet/src/main/java/net/taler/wallet/peer/OutgoingPushIntroComposable.kt39
2 files changed, 85 insertions, 34 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt
new file mode 100644
index 0000000..ae0ef10
--- /dev/null
+++ b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt
@@ -0,0 +1,80 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2022 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.peer
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.compose.material.Surface
+import androidx.compose.ui.platform.ComposeView
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.activityViewModels
+import androidx.navigation.findNavController
+import com.google.android.material.composethemeadapter.MdcTheme
+import net.taler.common.Amount
+import net.taler.wallet.MainViewModel
+import net.taler.wallet.R
+import net.taler.wallet.compose.collectAsStateLifecycleAware
+
+class OutgoingPushFragment : Fragment() {
+ private val model: MainViewModel by activityViewModels()
+ private val peerManager get() = model.peerManager
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?,
+ ): View {
+ val amount = arguments?.getString("amount")?.let {
+ Amount.fromJSONString(it)
+ } ?: error("no amount passed")
+ return ComposeView(requireContext()).apply {
+ setContent {
+ MdcTheme {
+ Surface {
+ val state = peerManager.pushState.collectAsStateLifecycleAware()
+ if (state.value is OutgoingIntro) {
+ OutgoingPushIntroComposable(
+ amount = amount,
+ onSend = this@OutgoingPushFragment::onSend,
+ )
+ } else {
+ OutgoingPushResultComposable(state.value) {
+ findNavController().popBackStack()
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ override fun onStart() {
+ super.onStart()
+ activity?.setTitle(R.string.receive_peer_title)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ if (!requireActivity().isChangingConfigurations) peerManager.resetPushPayment()
+ }
+
+ private fun onSend(amount: Amount, summary: String) {
+ peerManager.initiatePeerPushPayment(amount, summary)
+ }
+}
diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushIntroComposable.kt b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushIntroComposable.kt
index 72c8862..1964ebd 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushIntroComposable.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushIntroComposable.kt
@@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
-import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Button
import androidx.compose.material.MaterialTheme
@@ -39,16 +38,14 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import net.taler.common.Amount
import net.taler.wallet.R
-import net.taler.wallet.getAmount
@Composable
fun OutgoingPushIntroComposable(
- currency: String,
+ amount: Amount,
onSend: (amount: Amount, summary: String) -> Unit,
) {
val scrollState = rememberScrollState()
@@ -58,38 +55,14 @@ fun OutgoingPushIntroComposable(
.verticalScroll(scrollState),
horizontalAlignment = CenterHorizontally,
) {
- var amountText by rememberSaveable { mutableStateOf("") }
- var isError by rememberSaveable { mutableStateOf(false) }
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.padding(16.dp),
) {
- OutlinedTextField(
- modifier = Modifier
- .weight(1f)
- .padding(end = 16.dp),
- value = amountText,
- keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Decimal),
- onValueChange = { input ->
- isError = false
- amountText = input.filter { it.isDigit() || it == '.' }
- },
- isError = isError,
- label = {
- if (isError) {
- Text(
- stringResource(R.string.receive_amount_invalid),
- color = Color.Red,
- )
- } else {
- Text(stringResource(R.string.send_peer_amount))
- }
- }
- )
Text(
modifier = Modifier,
- text = currency,
+ text = amount.toString(),
softWrap = false,
style = MaterialTheme.typography.h6,
)
@@ -118,11 +91,9 @@ fun OutgoingPushIntroComposable(
)
Button(
modifier = Modifier.padding(16.dp),
- enabled = subject.isNotBlank() && amountText.isNotBlank(),
+ enabled = subject.isNotBlank(),
onClick = {
- val amount = getAmount(currency, amountText)
- if (amount == null) isError = true
- else onSend(amount, subject)
+ onSend(amount, subject)
},
) {
Text(text = stringResource(R.string.send_peer_create_button))
@@ -134,6 +105,6 @@ fun OutgoingPushIntroComposable(
@Composable
fun PeerPushIntroComposablePreview() {
Surface {
- OutgoingPushIntroComposable("TESTKUDOS") { _, _ -> }
+ OutgoingPushIntroComposable(Amount.fromDouble("TESTKUDOS", 42.23)) { _, _ -> }
}
}