diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 930821cda..75ed379f2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -105,6 +105,8 @@ import java.net.SocketException; import java.net.SocketTimeoutException; import java.security.Security; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.TimeUnit; import io.reactivex.rxjava3.core.CompletableObserver; @@ -164,7 +166,6 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr .addBlocking("app-dependencies", this::initializeAppDependencies) .addBlocking("first-launch", this::initializeFirstEverAppLaunch) .addBlocking("app-migrations", this::initializeApplicationMigrations) - .addBlocking("ring-rtc", this::initializeRingRtc) .addBlocking("mark-registration", () -> RegistrationUtil.maybeMarkRegistrationComplete(this)) .addBlocking("lifecycle-observer", () -> ApplicationDependencies.getAppForegroundObserver().addListener(this)) .addBlocking("message-retriever", this::initializeMessageRetrieval) @@ -177,6 +178,7 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr }) .addBlocking("blob-provider", this::initializeBlobProvider) .addBlocking("feature-flags", FeatureFlags::init) + .addBlocking("ring-rtc", this::initializeRingRtc) .addBlocking("glide", () -> SignalGlideModule.setRegisterGlideComponents(new SignalGlideComponents())) .addNonBlocking(this::checkIsGooglePayReady) .addNonBlocking(this::cleanAvatarStorage) @@ -416,7 +418,11 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr private void initializeRingRtc() { try { - CallManager.initialize(this, new RingRtcLogger(), Collections.emptyMap()); + Map fieldTrials = new HashMap<>(); + if (FeatureFlags.callingFieldTrialAnyAddressPortsKillSwitch()) { + fieldTrials.put("RingRTC-AnyAddressPortsKillSwitch", "Enabled"); + } + CallManager.initialize(this, new RingRtcLogger(), fieldTrials); } catch (UnsatisfiedLinkError e) { throw new AssertionError("Unable to load ringrtc library", e); } 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 b0e4e91e4..7aca3d065 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -105,6 +105,7 @@ public final class FeatureFlags { private static final String PAYPAL_ONE_TIME_DONATIONS = "android.oneTimePayPalDonations.2"; private static final String PAYPAL_RECURRING_DONATIONS = "android.recurringPayPalDonations.3"; private static final String TEXT_FORMATTING = "android.textFormatting"; + private static final String ANY_ADDRESS_PORTS_KILL_SWITCH = "android.calling.fieldTrial.anyAddressPortsKillSwitch"; /** * We will only store remote values for flags in this set. If you want a flag to be controllable @@ -160,7 +161,8 @@ public final class FeatureFlags { CHAT_FILTERS, PAYPAL_ONE_TIME_DONATIONS, PAYPAL_RECURRING_DONATIONS, - TEXT_FORMATTING + TEXT_FORMATTING, + ANY_ADDRESS_PORTS_KILL_SWITCH ); @VisibleForTesting @@ -574,6 +576,13 @@ public final class FeatureFlags { return getBoolean(TEXT_FORMATTING, false); } + /** + * Enable/disable RingRTC field trial for "AnyAddressPortsKillSwitch" + */ + public static boolean callingFieldTrialAnyAddressPortsKillSwitch() { + return getBoolean(ANY_ADDRESS_PORTS_KILL_SWITCH, false); + } + /** Only for rendering debug info. */ public static synchronized @NonNull Map getMemoryValues() { return new TreeMap<>(REMOTE_VALUES);