From c69b91c4dbe00bbd514cb8f6edf1f1afef458d81 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 10 Nov 2022 10:17:13 -0400 Subject: [PATCH] Add blocked regions from global config for donations payments. --- .../app/subscription/InAppDonations.kt | 12 ++++++-- .../securesms/util/FeatureFlags.java | 29 ++++++++++++++++++- .../securesms/util/LocaleFeatureFlags.java | 21 ++++++++++++++ 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/InAppDonations.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/InAppDonations.kt index e01e349845..af0d8a15bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/InAppDonations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/InAppDonations.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.components.settings.app.subscription import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.util.FeatureFlags +import org.thoughtcrime.securesms.util.LocaleFeatureFlags import org.thoughtcrime.securesms.util.PlayServicesUtil /** @@ -17,14 +18,14 @@ object InAppDonations { * - Able to use PayPal and is in a region where it is able to be accepted. */ fun hasAtLeastOnePaymentMethodAvailable(): Boolean { - return isCreditCardAvailable() || isPayPalAvailable() || isPlayServicesAvailable() + return isCreditCardAvailable() || isPayPalAvailable() || isGooglePayAvailable() } /** * Whether the user is in a region that supports credit cards, based off local phone number. */ fun isCreditCardAvailable(): Boolean { - return FeatureFlags.creditCardPayments() + return FeatureFlags.creditCardPayments() && !LocaleFeatureFlags.isCreditCardDisabled() } /** @@ -34,6 +35,13 @@ object InAppDonations { return false } + /** + * Whether the user is in a region that supports GooglePay, based off local phone number. + */ + private fun isGooglePayAvailable(): Boolean { + return isPlayServicesAvailable() && !LocaleFeatureFlags.isGooglePayDisabled() + } + /** * Whether Play Services is available. This will *not* tell you whether a user has Google Pay set up, but is * enough information to determine whether we can display Google Pay as an option. diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java index 7c61d90b5a..0cee57cb81 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -103,6 +103,9 @@ public final class FeatureFlags { public static final String CREDIT_CARD_PAYMENTS = "android.credit.card.payments.1"; private static final String PAYMENTS_REQUEST_ACTIVATE_FLOW = "android.payments.requestActivateFlow"; private static final String KEEP_MUTED_CHATS_ARCHIVED = "android.keepMutedChatsArchived"; + public static final String GOOGLE_PAY_DISABLED_REGIONS = "global.donations.gpayDisabledRegions"; + public static final String CREDIT_CARD_DISABLED_REGIONS = "global.donations.ccDisabledRegions"; + public static final String PAYPAL_DISABLED_REGIONS = "global.donations.paypalDisabledRegions"; /** * We will only store remote values for flags in this set. If you want a flag to be controllable @@ -157,7 +160,10 @@ public final class FeatureFlags { SMS_EXPORT_MEGAPHONE_DELAY_DAYS, CREDIT_CARD_PAYMENTS, PAYMENTS_REQUEST_ACTIVATE_FLOW, - KEEP_MUTED_CHATS_ARCHIVED + KEEP_MUTED_CHATS_ARCHIVED, + GOOGLE_PAY_DISABLED_REGIONS, + CREDIT_CARD_DISABLED_REGIONS, + PAYPAL_DISABLED_REGIONS ); @VisibleForTesting @@ -562,6 +568,27 @@ public final class FeatureFlags { return getBoolean(KEEP_MUTED_CHATS_ARCHIVED, false); } + /** + * @return Serialized list of regions in which Google Pay is disabled for donations + */ + public static @NonNull String googlePayDisabledRegions() { + return getString(GOOGLE_PAY_DISABLED_REGIONS, "*"); + } + + /** + * @return Serialized list of regions in which credit cards are disabled for donations + */ + public static @NonNull String creditCardDisabledRegions() { + return getString(CREDIT_CARD_DISABLED_REGIONS, "*"); + } + + /** + * @return Serialized list of regions in which PayPal is disabled for donations + */ + public static @NonNull String paypalDisabledRegions() { + return getString(PAYPAL_DISABLED_REGIONS, "*"); + } + /** Only for rendering debug info. */ public static synchronized @NonNull Map getMemoryValues() { return new TreeMap<>(REMOTE_VALUES); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/LocaleFeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/LocaleFeatureFlags.java index 17e9084287..96d86a90e9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/LocaleFeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/LocaleFeatureFlags.java @@ -48,6 +48,27 @@ public final class LocaleFeatureFlags { return isEnabled(releaseNoteUuid, countries); } + /** + * @return Whether Google Pay is disabled in this region + */ + public static boolean isGooglePayDisabled() { + return isEnabled(FeatureFlags.GOOGLE_PAY_DISABLED_REGIONS, FeatureFlags.googlePayDisabledRegions()); + } + + /** + * @return Whether credit cards are disabled in this region + */ + public static boolean isCreditCardDisabled() { + return isEnabled(FeatureFlags.CREDIT_CARD_DISABLED_REGIONS, FeatureFlags.googlePayDisabledRegions()); + } + + /** + * @return Whether PayPal is disabled in this region + */ + public static boolean isPayPalDisabled() { + return isEnabled(FeatureFlags.PAYPAL_DISABLED_REGIONS, FeatureFlags.googlePayDisabledRegions()); + } + /** * Parses a comma-separated list of country codes colon-separated from how many buckets out of 1 million * should be enabled to see this megaphone in that country code. At the end of the list, an optional