From cdad45096bec7e18732ca240673c1696bedd6dea Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 25 Aug 2022 08:51:31 -0400 Subject: [PATCH] Fix bug with back navigation during payment lock. --- .../confirm/ConfirmPaymentFragment.java | 26 ++++++++++++++++--- app/src/main/res/values/strings.xml | 6 +++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentFragment.java index 6d9d2745b..20936cd7b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentFragment.java @@ -27,12 +27,14 @@ import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.bottomsheet.BottomSheetDialog; import com.google.android.material.bottomsheet.BottomSheetDialogFragment; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.ThreadUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.BiometricDeviceAuthentication; import org.thoughtcrime.securesms.BiometricDeviceLockContract; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.payments.CanNotSendPaymentDialog; import org.thoughtcrime.securesms.payments.FiatMoneyUtil; @@ -218,7 +220,19 @@ public class ConfirmPaymentFragment extends BottomSheetDialogFragment { public void onConfirmPayment() { setCancelable(false); if (isPaymentLockEnabled(requireContext())) { - biometricAuth.authenticate(requireContext(), true, this::showConfirmDeviceCredentialIntent); + boolean success = biometricAuth.authenticate(requireContext(), true, this::showConfirmDeviceCredentialIntent); + if (!success) { + setCancelable(true); + new MaterialAlertDialogBuilder(requireContext()) + .setTitle(R.string.ConfirmPaymentFragment__failed_to_show_payment_lock) + .setMessage(R.string.ConfirmPaymentFragment__you_enabled_payment_lock_in_the_settings) + .setNeutralButton(android.R.string.ok, (d, i) -> d.dismiss()) + .setNegativeButton(R.string.ConfirmPaymentFragment__go_to_settings, (d, i) -> { + startActivity(AppSettingsActivity.privacy(requireContext())); + d.dismiss(); + }) + .show(); + } } else { viewModel.confirmPayment(); } @@ -234,8 +248,14 @@ public class ConfirmPaymentFragment extends BottomSheetDialogFragment { @Override public void onAuthenticationError(int errorCode, @NonNull CharSequence errorString) { Log.w(TAG, "Authentication error: " + errorCode); - if (errorCode != BiometricPrompt.ERROR_CANCELED && errorCode != BiometricPrompt.ERROR_USER_CANCELED) { - onAuthenticationFailed(); + switch (errorCode) { + case BiometricPrompt.ERROR_CANCELED: + case BiometricPrompt.ERROR_USER_CANCELED: + setCancelable(true); + break; + default: + onAuthenticationFailed(); + break; } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 44d582e74..4e8a32afe 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2992,6 +2992,12 @@ Invalid recipient Unlock to Send Payment + + Failed to show payment lock + + You enabled payment lock in the settings, but it cannot be shown. + + Go to settings This person has not activated payments Unable to request a network fee. To continue this payment tap okay to try again.