Pipe in bank mandate parameter.

This commit is contained in:
Alex Hart 2023-10-24 15:21:16 -03:00 committed by Cody Henthorne
parent 95d68e09da
commit dddd0e7b71
5 changed files with 39 additions and 17 deletions

View file

@ -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(
}
}
}
}
}

View file

@ -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())

View file

@ -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()
}
}

View file

@ -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\' -->

View file

@ -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
);
}