From 528ccc1e9da91bb5bcf5e818bfa16f2ca2c09eaa Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Fri, 3 Nov 2023 12:56:03 -0400 Subject: [PATCH] Navigate to main donation screen if user leaves for external app. --- .../gifts/flow/GiftFlowConfirmationFragment.kt | 4 +--- .../donate/DonateToSignalFragment.kt | 4 +--- .../donate/DonationCheckoutDelegate.kt | 4 ++-- .../donate/stripe/Stripe3DSDialogFragment.kt | 4 ++-- .../details/BankTransferDetailsFragment.kt | 12 ++++++++---- .../ideal/IdealTransferDetailsFragment.kt | 18 ++++++++++++++---- 6 files changed, 28 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/flow/GiftFlowConfirmationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/flow/GiftFlowConfirmationFragment.kt index 46c3eb3f45..b1fac2460c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/flow/GiftFlowConfirmationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/flow/GiftFlowConfirmationFragment.kt @@ -286,9 +286,7 @@ class GiftFlowConfirmationFragment : override fun onProcessorActionProcessed() = Unit - override fun onUserCancelledPaymentFlow() { - findNavController().popBackStack(R.id.giftFlowConfirmationFragment, false) - } + override fun onUserLaunchedAnExternalApplication() = Unit override fun navigateToDonationPending(gatewayRequest: GatewayRequest) = error("Unsupported operation") } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonateToSignalFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonateToSignalFragment.kt index 8b1e9b3d64..6788171d69 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonateToSignalFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonateToSignalFragment.kt @@ -466,9 +466,7 @@ class DonateToSignalFragment : viewModel.refreshActiveSubscription() } - override fun onUserCancelledPaymentFlow() { - findNavController().popBackStack(R.id.donateToSignalFragment, false) - } + override fun onUserLaunchedAnExternalApplication() = Unit override fun navigateToDonationPending(gatewayRequest: GatewayRequest) { findNavController().safeNavigate(DonateToSignalFragmentDirections.actionDonateToSignalFragmentToDonationPendingBottomSheet(gatewayRequest)) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonationCheckoutDelegate.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonationCheckoutDelegate.kt index 1737697db0..13214494a5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonationCheckoutDelegate.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonationCheckoutDelegate.kt @@ -282,7 +282,7 @@ class DonationCheckoutDelegate( if (throwable is DonationError.UserLaunchedExternalApplication) { Log.d(TAG, "User launched an external application.", true) - + errorHandlerCallback?.onUserLaunchedAnExternalApplication() return } @@ -330,7 +330,7 @@ class DonationCheckoutDelegate( } interface ErrorHandlerCallback { - fun onUserCancelledPaymentFlow() + fun onUserLaunchedAnExternalApplication() fun navigateToDonationPending(gatewayRequest: GatewayRequest) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/stripe/Stripe3DSDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/stripe/Stripe3DSDialogFragment.kt index 9d1fab128a..35fb89bfd0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/stripe/Stripe3DSDialogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/stripe/Stripe3DSDialogFragment.kt @@ -35,6 +35,7 @@ class Stripe3DSDialogFragment : DialogFragment(R.layout.donation_webview_fragmen } val binding by ViewBinderDelegate(DonationWebviewFragmentBinding::bind) { + it.webView.webViewClient = WebViewClient() it.webView.clearCache(true) it.webView.clearHistory() } @@ -78,14 +79,13 @@ class Stripe3DSDialogFragment : DialogFragment(R.layout.donation_webview_fragmen } private fun handleLaunchExternal(intent: Intent) { - startActivity(intent) - SignalStore.donationsValues().setPending3DSData(args.stripe3DSData) result = bundleOf( LAUNCHED_EXTERNAL to true ) + startActivity(intent) dismissAllowingStateLoss() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/transfer/details/BankTransferDetailsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/transfer/details/BankTransferDetailsFragment.kt index fb8cfed528..9112b89b65 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/transfer/details/BankTransferDetailsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/transfer/details/BankTransferDetailsFragment.kt @@ -43,6 +43,8 @@ import androidx.core.os.bundleOf import androidx.fragment.app.setFragmentResult import androidx.fragment.app.setFragmentResultListener import androidx.fragment.app.viewModels +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.navigation.navGraphViewModels @@ -156,13 +158,15 @@ class BankTransferDetailsFragment : ComposeFragment(), DonationCheckoutDelegate. ) } - override fun onUserCancelledPaymentFlow() = Unit + override fun onUserLaunchedAnExternalApplication() = Unit override fun navigateToDonationPending(gatewayRequest: GatewayRequest) { - findNavController().popBackStack() - findNavController().popBackStack() - setFragmentResult(BankTransferRequestKeys.PENDING_KEY, bundleOf(BankTransferRequestKeys.PENDING_KEY to gatewayRequest)) + viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver { + override fun onResume(owner: LifecycleOwner) { + findNavController().popBackStack(R.id.donateToSignalFragment, false) + } + }) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/transfer/ideal/IdealTransferDetailsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/transfer/ideal/IdealTransferDetailsFragment.kt index 71f665b4a5..c5c4cd3872 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/transfer/ideal/IdealTransferDetailsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/transfer/ideal/IdealTransferDetailsFragment.kt @@ -42,6 +42,8 @@ import androidx.core.os.bundleOf import androidx.fragment.app.setFragmentResult import androidx.fragment.app.setFragmentResultListener import androidx.fragment.app.viewModels +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.navigation.navGraphViewModels @@ -147,13 +149,21 @@ class IdealTransferDetailsFragment : ComposeFragment(), DonationCheckoutDelegate ) } - override fun onUserCancelledPaymentFlow() = Unit + override fun onUserLaunchedAnExternalApplication() { + viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver { + override fun onResume(owner: LifecycleOwner) { + findNavController().popBackStack(R.id.donateToSignalFragment, true) + } + }) + } override fun navigateToDonationPending(gatewayRequest: GatewayRequest) { - findNavController().popBackStack() - findNavController().popBackStack() - setFragmentResult(BankTransferRequestKeys.PENDING_KEY, bundleOf(BankTransferRequestKeys.PENDING_KEY to gatewayRequest)) + viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver { + override fun onResume(owner: LifecycleOwner) { + findNavController().popBackStack(R.id.donateToSignalFragment, false) + } + }) } }