From 162ca3e21e3109317b80588fb4c1cb14d92bb0e0 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 24 Oct 2023 16:02:52 -0300 Subject: [PATCH] Add locale based feature flags for iDEAL / SEPA donations. --- .../app/subscription/InAppDonations.kt | 9 +++++---- .../securesms/util/FeatureFlags.java | 18 +++++++++++++++--- .../securesms/util/LocaleFeatureFlags.java | 8 ++++++++ 3 files changed, 28 insertions(+), 7 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 58af7d7203..f6b8f58550 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 @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.components.settings.app.subscription import org.signal.donations.PaymentSourceType import org.thoughtcrime.securesms.components.settings.app.subscription.donate.DonateToSignalType import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.util.Environment import org.thoughtcrime.securesms.util.FeatureFlags import org.thoughtcrime.securesms.util.LocaleFeatureFlags @@ -66,14 +67,14 @@ object InAppDonations { * Whether the user is in a region which supports SEPA Debit transfers, based off local phone number. */ fun isSEPADebitAvailable(): Boolean { - return FeatureFlags.sepaDebitDonations() + return Environment.IS_STAGING || (FeatureFlags.sepaDebitDonations() && LocaleFeatureFlags.isSepaEnabled()) } /** * Whether the user is in a region which supports IDEAL transfers, based off local phone number. */ fun isIDEALAvailable(): Boolean { - return FeatureFlags.idealDonations() + return Environment.IS_STAGING || (FeatureFlags.idealDonations() && LocaleFeatureFlags.isIdealEnabled()) } /** @@ -81,7 +82,7 @@ object InAppDonations { * and donation type. */ fun isSEPADebitAvailableForDonateToSignalType(donateToSignalType: DonateToSignalType): Boolean { - return donateToSignalType != DonateToSignalType.GIFT && FeatureFlags.sepaDebitDonations() + return donateToSignalType != DonateToSignalType.GIFT && isSEPADebitAvailable() } /** @@ -89,6 +90,6 @@ object InAppDonations { * donation type */ fun isIDEALAvailbleForDonateToSignalType(donateToSignalType: DonateToSignalType): Boolean { - return donateToSignalType != DonateToSignalType.GIFT && FeatureFlags.idealDonations() + return donateToSignalType != DonateToSignalType.GIFT && isIDEALAvailable() } } 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 05426feddf..871a5d3707 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -119,6 +119,8 @@ public final class FeatureFlags { public static final String CRASH_PROMPT_CONFIG = "android.crashPromptConfig"; private static final String SEPA_DEBIT_DONATIONS = "android.sepa.debit.donations"; private static final String IDEAL_DONATIONS = "android.ideal.donations"; + public static final String IDEAL_ENABLED_REGIONS = "global.donations.idealEnabledRegions"; + public static final String SEPA_ENABLED_REGIONS = "global.donations.sepaEnabledRegions"; /** * We will only store remote values for flags in this set. If you want a flag to be controllable @@ -189,7 +191,9 @@ public final class FeatureFlags { CRASH_PROMPT_CONFIG, BLOCK_SSE, SEPA_DEBIT_DONATIONS, - IDEAL_DONATIONS + IDEAL_DONATIONS, + IDEAL_ENABLED_REGIONS, + SEPA_ENABLED_REGIONS ); @VisibleForTesting @@ -689,11 +693,19 @@ public final class FeatureFlags { * WARNING: This feature is under heavy development and is *not* ready for wider use. */ public static boolean sepaDebitDonations() { - return getBoolean(SEPA_DEBIT_DONATIONS, Environment.IS_STAGING); + return getBoolean(SEPA_DEBIT_DONATIONS, false); } public static boolean idealDonations() { - return getBoolean(IDEAL_DONATIONS, Environment.IS_STAGING); + return getBoolean(IDEAL_DONATIONS, false); + } + + public static String idealEnabledRegions() { + return getString(IDEAL_ENABLED_REGIONS, ""); + } + + public static String sepaEnabledRegions() { + return getString(SEPA_ENABLED_REGIONS, ""); } /** Only for rendering debug info. */ 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 948668e1b3..07a2387af0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/LocaleFeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/LocaleFeatureFlags.java @@ -65,6 +65,14 @@ public final class LocaleFeatureFlags { return isEnabled(FeatureFlags.PAYPAL_DISABLED_REGIONS, FeatureFlags.paypalDisabledRegions()); } + public static boolean isIdealEnabled() { + return isEnabled(FeatureFlags.IDEAL_ENABLED_REGIONS, FeatureFlags.idealEnabledRegions()); + } + + public static boolean isSepaEnabled() { + return isEnabled(FeatureFlags.SEPA_ENABLED_REGIONS, FeatureFlags.sepaEnabledRegions()); + } + public static boolean isDelayedNotificationPromptEnabled() { return FeatureFlags.internalUser() || isEnabled(FeatureFlags.PROMPT_FOR_NOTIFICATION_LOGS, FeatureFlags.promptForDelayedNotificationLogs()); }