From cc806a2f79026bea33fda8ba0b5d9743dcab1600 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Mon, 22 Jul 2024 11:10:05 -0300 Subject: [PATCH] Add generic payment in progress strings. --- .../app/subscription/InAppPaymentsRepository.kt | 11 +++++++++++ .../paypal/PayPalPaymentInProgressFragment.kt | 9 +++++++-- .../stripe/StripePaymentInProgressFragment.kt | 14 ++++++++++++-- .../res/layout/donation_in_progress_fragment.xml | 1 - .../main/res/layout/processing_payment_dialog.xml | 1 - app/src/main/res/values/strings.xml | 9 ++++++++- 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/InAppPaymentsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/InAppPaymentsRepository.kt index 3805ad819c..77f2e3ccec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/InAppPaymentsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/InAppPaymentsRepository.kt @@ -6,6 +6,7 @@ package org.thoughtcrime.securesms.components.settings.app.subscription import android.annotation.SuppressLint +import androidx.annotation.StringRes import androidx.annotation.WorkerThread import io.reactivex.rxjava3.core.BackpressureStrategy import io.reactivex.rxjava3.core.Completable @@ -24,6 +25,7 @@ import org.signal.libsignal.zkgroup.InvalidInputException import org.signal.libsignal.zkgroup.VerificationFailedException import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialRequestContext import org.signal.libsignal.zkgroup.receipts.ReceiptSerial +import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.settings.app.subscription.DonationSerializationHelper.toFiatMoney import org.thoughtcrime.securesms.components.settings.app.subscription.donate.InAppPaymentError import org.thoughtcrime.securesms.components.settings.app.subscription.errors.DonationError @@ -65,6 +67,15 @@ object InAppPaymentsRepository { private val temporaryErrorProcessor = PublishProcessor.create>() + @get:StringRes + val InAppPaymentType.labelResource: Int get() { + return if (this == InAppPaymentType.RECURRING_BACKUP) { + R.string.InAppPaymentInProgressFragment__payment + } else { + R.string.InAppPaymentInProgressFragment__donation + } + } + /** * Wraps an in-app-payment update in a completable. */ diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/paypal/PayPalPaymentInProgressFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/paypal/PayPalPaymentInProgressFragment.kt index d4672e028e..48548eb5a1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/paypal/PayPalPaymentInProgressFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/paypal/PayPalPaymentInProgressFragment.kt @@ -22,6 +22,7 @@ import org.signal.core.util.getParcelableCompat import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.ViewBinderDelegate +import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentsRepository.labelResource import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentsRepository.toErrorSource import org.thoughtcrime.securesms.components.settings.app.subscription.donate.InAppPaymentProcessorAction import org.thoughtcrime.securesms.components.settings.app.subscription.donate.InAppPaymentProcessorActionResult @@ -82,8 +83,8 @@ class PayPalPaymentInProgressFragment : DialogFragment(R.layout.donation_in_prog private fun presentUiState(stage: InAppPaymentProcessorStage) { when (stage) { - InAppPaymentProcessorStage.INIT -> binding.progressCardStatus.setText(R.string.SubscribeFragment__processing_payment) - InAppPaymentProcessorStage.PAYMENT_PIPELINE -> binding.progressCardStatus.setText(R.string.SubscribeFragment__processing_payment) + InAppPaymentProcessorStage.INIT -> binding.progressCardStatus.text = getProcessingStatus() + InAppPaymentProcessorStage.PAYMENT_PIPELINE -> binding.progressCardStatus.text = getProcessingStatus() InAppPaymentProcessorStage.FAILED -> { viewModel.onEndAction() findNavController().popBackStack() @@ -120,6 +121,10 @@ class PayPalPaymentInProgressFragment : DialogFragment(R.layout.donation_in_prog } } + private fun getProcessingStatus(): String { + return getString(R.string.InAppPaymentInProgressFragment__processing_s, getString(args.inAppPaymentType.labelResource)) + } + private fun oneTimeConfirmationPipeline(createPaymentIntentResponse: PayPalCreatePaymentIntentResponse): Single { return routeToOneTimeConfirmation(createPaymentIntentResponse) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/stripe/StripePaymentInProgressFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/stripe/StripePaymentInProgressFragment.kt index 34b7225e2c..29a2c62265 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/stripe/StripePaymentInProgressFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/stripe/StripePaymentInProgressFragment.kt @@ -24,6 +24,7 @@ import org.signal.donations.StripeIntentAccessor import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.ViewBinderDelegate import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentComponent +import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentsRepository.labelResource import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentsRepository.requireSubscriberType import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentsRepository.toErrorSource import org.thoughtcrime.securesms.components.settings.app.subscription.donate.InAppPaymentProcessorAction @@ -68,9 +69,11 @@ class StripePaymentInProgressFragment : DialogFragment(R.layout.donation_in_prog InAppPaymentProcessorAction.PROCESS_NEW_IN_APP_PAYMENT -> { viewModel.processNewDonation(args.inAppPayment!!, this::handleSecure3dsAction) } + InAppPaymentProcessorAction.UPDATE_SUBSCRIPTION -> { viewModel.updateSubscription(args.inAppPayment!!) } + InAppPaymentProcessorAction.CANCEL_SUBSCRIPTION -> { viewModel.cancelSubscription(args.inAppPaymentType.requireSubscriberType()) } @@ -85,8 +88,8 @@ class StripePaymentInProgressFragment : DialogFragment(R.layout.donation_in_prog private fun presentUiState(stage: InAppPaymentProcessorStage) { when (stage) { - InAppPaymentProcessorStage.INIT -> binding.progressCardStatus.setText(R.string.SubscribeFragment__processing_payment) - InAppPaymentProcessorStage.PAYMENT_PIPELINE -> binding.progressCardStatus.setText(R.string.SubscribeFragment__processing_payment) + InAppPaymentProcessorStage.INIT -> binding.progressCardStatus.text = getProcessingStatus() + InAppPaymentProcessorStage.PAYMENT_PIPELINE -> binding.progressCardStatus.text = getProcessingStatus() InAppPaymentProcessorStage.FAILED -> { viewModel.onEndAction() findNavController().popBackStack() @@ -102,6 +105,7 @@ class StripePaymentInProgressFragment : DialogFragment(R.layout.donation_in_prog ) ) } + InAppPaymentProcessorStage.COMPLETE -> { viewModel.onEndAction() findNavController().popBackStack() @@ -117,16 +121,22 @@ class StripePaymentInProgressFragment : DialogFragment(R.layout.donation_in_prog ) ) } + InAppPaymentProcessorStage.CANCELLING -> binding.progressCardStatus.setText(R.string.StripePaymentInProgressFragment__cancelling) } } + private fun getProcessingStatus(): String { + return getString(R.string.InAppPaymentInProgressFragment__processing_s, getString(args.inAppPaymentType.labelResource)) + } + private fun handleSecure3dsAction(secure3dsAction: StripeApi.Secure3DSAction, inAppPayment: InAppPaymentTable.InAppPayment): Single { return when (secure3dsAction) { is StripeApi.Secure3DSAction.NotNeeded -> { Log.d(TAG, "No 3DS action required.") Single.just(StripeIntentAccessor.NO_ACTION_REQUIRED) } + is StripeApi.Secure3DSAction.ConfirmRequired -> { Log.d(TAG, "3DS action required. Displaying dialog...") Single.create { emitter -> diff --git a/app/src/main/res/layout/donation_in_progress_fragment.xml b/app/src/main/res/layout/donation_in_progress_fragment.xml index 46ded80b46..5c6091a79b 100644 --- a/app/src/main/res/layout/donation_in_progress_fragment.xml +++ b/app/src/main/res/layout/donation_in_progress_fragment.xml @@ -29,7 +29,6 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="16dp" android:gravity="center" - android:text="@string/SubscribeFragment__processing_payment" android:textAppearance="@style/Signal.Text.BodyLarge" android:textColor="@color/signal_colorOnSurfaceVariant" /> diff --git a/app/src/main/res/layout/processing_payment_dialog.xml b/app/src/main/res/layout/processing_payment_dialog.xml index caacf2131d..e179163060 100644 --- a/app/src/main/res/layout/processing_payment_dialog.xml +++ b/app/src/main/res/layout/processing_payment_dialog.xml @@ -36,7 +36,6 @@ android:layout_marginTop="20dp" android:layout_marginEnd="16dp" android:gravity="center" - android:text="@string/SubscribeFragment__processing_payment" android:textAppearance="@style/Signal.Text.Body" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f8f5ffee97..9faab9dea8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5472,7 +5472,14 @@ Contact Support Get a %1$s badge - Processing donation… + + + donation + + payment + + Processing %1$s… + Error processing donation