diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 3b20fa60bb..9efd93de10 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -426,6 +426,9 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr if (FeatureFlags.callingFieldTrialAnyAddressPortsKillSwitch()) { fieldTrials.put("RingRTC-AnyAddressPortsKillSwitch", "Enabled"); } + if (!SignalStore.internalValues().callingDisableLBRed()) { + fieldTrials.put("RingRTC-Audio-LBRed-For-Opus", "Enabled,bitrate_pri:22000"); + } 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/components/settings/app/internal/InternalSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt index c905a02d5d..c8d6081aa6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt @@ -492,9 +492,17 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter } ) - if (SignalStore.donationsValues().getSubscriber() != null) { - dividerPref() + switchPref( + title = DSLSettingsText.from("Disable LBRed"), + isChecked = state.callingDisableLBRed, + onClick = { + viewModel.setInternalCallingDisableLBRed(!state.callingDisableLBRed) + } + ) + dividerPref() + + if (SignalStore.donationsValues().getSubscriber() != null) { sectionHeaderPref(DSLSettingsText.from("Badges")) clickPref( @@ -527,6 +535,8 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter Toast.makeText(context, "Cleared", Toast.LENGTH_SHORT).show() } ) + + dividerPref() } if (state.hasPendingOneTimeDonation) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt index bee7b82be2..db9d1f5ecb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt @@ -15,6 +15,7 @@ data class InternalSettingsState( val callingAudioProcessingMethod: CallManager.AudioProcessingMethod, val callingDataMode: CallManager.DataMode, val callingDisableTelecom: Boolean, + val callingDisableLBRed: Boolean, val useBuiltInEmojiSet: Boolean, val emojiVersion: EmojiFiles.Version?, val removeSenderKeyMinimium: Boolean, diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt index eef30986c3..32df841908 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt @@ -113,6 +113,11 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito refresh() } + fun setInternalCallingDisableLBRed(enabled: Boolean) { + preferenceDataStore.putBoolean(InternalValues.CALLING_DISABLE_LBRED, enabled) + refresh() + } + fun setUseConversationItemV2Media(enabled: Boolean) { SignalStore.internalValues().setUseConversationItemV2Media(enabled) refresh() @@ -142,6 +147,7 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito callingAudioProcessingMethod = SignalStore.internalValues().callingAudioProcessingMethod(), callingDataMode = SignalStore.internalValues().callingDataMode(), callingDisableTelecom = SignalStore.internalValues().callingDisableTelecom(), + callingDisableLBRed = SignalStore.internalValues().callingDisableLBRed(), useBuiltInEmojiSet = SignalStore.internalValues().forceBuiltInEmoji(), emojiVersion = null, removeSenderKeyMinimium = SignalStore.internalValues().removeSenderKeyMinimum(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java index 884fef1f8b..eff23ac9a3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java @@ -25,6 +25,7 @@ public final class InternalValues extends SignalStoreValues { public static final String CALLING_AUDIO_PROCESSING_METHOD = "internal.calling_audio_processing_method"; public static final String CALLING_DATA_MODE = "internal.calling_bandwidth_mode"; public static final String CALLING_DISABLE_TELECOM = "internal.calling_disable_telecom"; + public static final String CALLING_DISABLE_LBRED = "internal.calling_disable_lbred"; public static final String SHAKE_TO_REPORT = "internal.shake_to_report"; public static final String DISABLE_STORAGE_SERVICE = "internal.disable_storage_service"; public static final String FORCE_WEBSOCKET_MODE = "internal.force_websocket_mode"; @@ -172,6 +173,17 @@ public final class InternalValues extends SignalStoreValues { } } + /** + * Whether or not LBRed for Opus is manually disabled. + */ + public synchronized boolean callingDisableLBRed() { + if (FeatureFlags.internalUser()) { + return getBoolean(CALLING_DISABLE_LBRED, false); + } else { + return true; + } + } + /** * Whether or not the system is forced to be in 'websocket mode', where FCM is ignored and we use a foreground service to keep the app alive. */