Pipe in bank mandate parameter.
This commit is contained in:
parent
95d68e09da
commit
dddd0e7b71
5 changed files with 39 additions and 17 deletions
|
@ -35,7 +35,6 @@ import androidx.compose.ui.res.stringResource
|
|||
import androidx.compose.ui.res.vectorResource
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.fragment.navArgs
|
||||
import org.signal.core.ui.Buttons
|
||||
|
@ -43,12 +42,14 @@ import org.signal.core.ui.Dividers
|
|||
import org.signal.core.ui.Scaffolds
|
||||
import org.signal.core.ui.Texts
|
||||
import org.signal.core.ui.theme.SignalTheme
|
||||
import org.signal.donations.PaymentSourceType
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.settings.app.subscription.donate.gateway.GatewayResponse
|
||||
import org.thoughtcrime.securesms.compose.ComposeFragment
|
||||
import org.thoughtcrime.securesms.compose.StatusBarColorNestedScrollConnection
|
||||
import org.thoughtcrime.securesms.util.SpanUtil
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
import org.thoughtcrime.securesms.util.viewModel
|
||||
|
||||
/**
|
||||
* Displays Bank Transfer legal mandate users must agree to to move forward.
|
||||
|
@ -56,7 +57,10 @@ import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
|||
class BankTransferMandateFragment : ComposeFragment() {
|
||||
|
||||
private val args: BankTransferMandateFragmentArgs by navArgs()
|
||||
private val viewModel: BankTransferMandateViewModel by viewModels()
|
||||
private val viewModel: BankTransferMandateViewModel by viewModel {
|
||||
BankTransferMandateViewModel(PaymentSourceType.Stripe.SEPADebit)
|
||||
}
|
||||
|
||||
private lateinit var statusBarColorNestedScrollConnection: StatusBarColorNestedScrollConnection
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
|
@ -71,9 +75,11 @@ class BankTransferMandateFragment : ComposeFragment() {
|
|||
@Composable
|
||||
override fun FragmentContent() {
|
||||
val mandate by viewModel.mandate
|
||||
val failedToLoadMandate by viewModel.failedToLoadMandate
|
||||
|
||||
BankTransferScreen(
|
||||
bankMandate = mandate,
|
||||
failedToLoadMandate = failedToLoadMandate,
|
||||
onNavigationClick = this::onNavigationClick,
|
||||
onContinueClick = this::onContinueClick,
|
||||
onLearnMoreClick = this::onLearnMoreClick,
|
||||
|
@ -110,6 +116,7 @@ fun BankTransferScreenPreview() {
|
|||
SignalTheme {
|
||||
BankTransferScreen(
|
||||
bankMandate = "Test ".repeat(500),
|
||||
failedToLoadMandate = false,
|
||||
onNavigationClick = {},
|
||||
onContinueClick = {},
|
||||
onLearnMoreClick = {}
|
||||
|
@ -120,6 +127,7 @@ fun BankTransferScreenPreview() {
|
|||
@Composable
|
||||
fun BankTransferScreen(
|
||||
bankMandate: String,
|
||||
failedToLoadMandate: Boolean,
|
||||
onNavigationClick: () -> Unit,
|
||||
onContinueClick: () -> Unit,
|
||||
onLearnMoreClick: () -> Unit,
|
||||
|
@ -193,12 +201,13 @@ fun BankTransferScreen(
|
|||
|
||||
item {
|
||||
Text(
|
||||
text = bankMandate,
|
||||
text = if (failedToLoadMandate) stringResource(id = R.string.BankTransferMandateFragment__failed_to_load_mandate) else bankMandate,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(horizontal = dimensionResource(id = R.dimen.bank_transfer_mandate_gutter), vertical = 16.dp)
|
||||
)
|
||||
}
|
||||
|
||||
if (!failedToLoadMandate) {
|
||||
item {
|
||||
Buttons.LargeTonal(
|
||||
onClick = onContinueClick,
|
||||
|
@ -211,4 +220,5 @@ fun BankTransferScreen(
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,14 +7,15 @@ package org.thoughtcrime.securesms.components.settings.app.subscription.donate.t
|
|||
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import org.signal.donations.PaymentSourceType
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
|
||||
import java.util.Locale
|
||||
|
||||
class BankTransferMandateRepository {
|
||||
|
||||
fun getMandate(): Single<String> {
|
||||
fun getMandate(paymentSourceType: PaymentSourceType.Stripe): Single<String> {
|
||||
return Single
|
||||
.fromCallable { ApplicationDependencies.getDonationsService().getBankMandate(Locale.getDefault()) }
|
||||
.fromCallable { ApplicationDependencies.getDonationsService().getBankMandate(Locale.getDefault(), paymentSourceType.paymentMethod) }
|
||||
.flatMap { it.flattenResult() }
|
||||
.map { it.mandate }
|
||||
.subscribeOn(Schedulers.io())
|
||||
|
|
|
@ -12,21 +12,30 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||
import io.reactivex.rxjava3.kotlin.plusAssign
|
||||
import io.reactivex.rxjava3.kotlin.subscribeBy
|
||||
import org.signal.donations.PaymentSourceType
|
||||
|
||||
class BankTransferMandateViewModel(
|
||||
paymentSourceType: PaymentSourceType,
|
||||
repository: BankTransferMandateRepository = BankTransferMandateRepository()
|
||||
) : ViewModel() {
|
||||
|
||||
private val disposables = CompositeDisposable()
|
||||
private val internalMandate = mutableStateOf("")
|
||||
private val internalFailedToLoadMandate = mutableStateOf(false)
|
||||
|
||||
val mandate: State<String> = internalMandate
|
||||
val failedToLoadMandate: State<Boolean> = internalFailedToLoadMandate
|
||||
|
||||
init {
|
||||
disposables += repository.getMandate()
|
||||
disposables += repository.getMandate(paymentSourceType as PaymentSourceType.Stripe)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribeBy(
|
||||
onSuccess = { internalMandate.value = it },
|
||||
onError = { internalMandate.value = "Failed to load mandate." }
|
||||
onError = { internalFailedToLoadMandate.value = true }
|
||||
)
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
disposables.clear()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5889,6 +5889,8 @@
|
|||
<string name="BankTransferMandateFragment__learn_more">Learn more</string>
|
||||
<!-- Button label to continue with transfer -->
|
||||
<string name="BankTransferMandateFragment__continue">Continue</string>
|
||||
<!-- Text displayed when mandate load fails -->
|
||||
<string name="BankTransferMandateFragment__failed_to_load_mandate">Failed to load mandate</string>
|
||||
|
||||
<!-- BankTransferDetailsFragment -->
|
||||
<!-- Subtext explaining how email is used. Placeholder is \'Learn more\' -->
|
||||
|
|
|
@ -120,11 +120,11 @@ public class DonationsService {
|
|||
);
|
||||
}
|
||||
|
||||
public ServiceResponse<BankMandate> getBankMandate(Locale locale) {
|
||||
public ServiceResponse<BankMandate> getBankMandate(Locale locale, String bankTransferType) {
|
||||
return getCachedValue(
|
||||
locale,
|
||||
sepaBankMandateCache,
|
||||
l -> pushServiceSocket.getBankMandate(l, "SEPA_DEBIT"),
|
||||
l -> pushServiceSocket.getBankMandate(l, bankTransferType),
|
||||
SEPA_DEBIT_MANDATE_TTL
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue