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 2b4cd934d..c224228c2 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
@@ -331,10 +331,10 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter
dividerPref()
- sectionHeaderPref(R.string.preferences__internal_calling)
+ sectionHeaderPref(R.string.preferences__internal_calling_server)
radioPref(
- title = DSLSettingsText.from(R.string.preferences__internal_calling_default),
+ title = DSLSettingsText.from(R.string.preferences__internal_calling_server_default),
summary = DSLSettingsText.from(BuildConfig.SIGNAL_SFU_URL),
isChecked = state.callingServer == BuildConfig.SIGNAL_SFU_URL,
onClick = {
@@ -345,7 +345,7 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter
BuildConfig.SIGNAL_SFU_INTERNAL_NAMES.zip(BuildConfig.SIGNAL_SFU_INTERNAL_URLS)
.forEach { (name, server) ->
radioPref(
- title = DSLSettingsText.from(requireContext().getString(R.string.preferences__internal_calling_s_server, name)),
+ title = DSLSettingsText.from(requireContext().getString(R.string.preferences__internal_calling_server_s, name)),
summary = DSLSettingsText.from(server),
isChecked = state.callingServer == server,
onClick = {
@@ -354,14 +354,23 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter
)
}
- sectionHeaderPref(R.string.preferences__internal_audio)
+ sectionHeaderPref(R.string.preferences__internal_calling)
radioListPref(
- title = DSLSettingsText.from(R.string.preferences__internal_audio_processing_method),
+ title = DSLSettingsText.from(R.string.preferences__internal_calling_audio_processing_method),
listItems = CallManager.AudioProcessingMethod.values().map { it.name }.toTypedArray(),
- selected = CallManager.AudioProcessingMethod.values().indexOf(state.audioProcessingMethod),
+ selected = CallManager.AudioProcessingMethod.values().indexOf(state.callingAudioProcessingMethod),
onSelected = {
- viewModel.setInternalAudioProcessingMethod(CallManager.AudioProcessingMethod.values()[it])
+ viewModel.setInternalCallingAudioProcessingMethod(CallManager.AudioProcessingMethod.values()[it])
+ }
+ )
+
+ radioListPref(
+ title = DSLSettingsText.from(R.string.preferences__internal_calling_bandwidth_mode),
+ listItems = CallManager.BandwidthMode.values().map { it.name }.toTypedArray(),
+ selected = CallManager.BandwidthMode.values().indexOf(state.callingBandwidthMode),
+ onSelected = {
+ viewModel.setInternalCallingBandwidthMode(CallManager.BandwidthMode.values()[it])
}
)
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 528726035..06862eb2d 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
@@ -14,7 +14,8 @@ data class InternalSettingsState(
val disableAutoMigrationNotification: Boolean,
val allowCensorshipSetting: Boolean,
val callingServer: String,
- val audioProcessingMethod: CallManager.AudioProcessingMethod,
+ val callingAudioProcessingMethod: CallManager.AudioProcessingMethod,
+ val callingBandwidthMode: CallManager.BandwidthMode,
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 da05e05e1..c59744d01 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
@@ -91,8 +91,13 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito
refresh()
}
- fun setInternalAudioProcessingMethod(method: CallManager.AudioProcessingMethod) {
- preferenceDataStore.putInt(InternalValues.AUDIO_PROCESSING_METHOD, method.ordinal)
+ fun setInternalCallingAudioProcessingMethod(method: CallManager.AudioProcessingMethod) {
+ preferenceDataStore.putInt(InternalValues.CALLING_AUDIO_PROCESSING_METHOD, method.ordinal)
+ refresh()
+ }
+
+ fun setInternalCallingBandwidthMode(bandwidthMode: CallManager.BandwidthMode) {
+ preferenceDataStore.putInt(InternalValues.CALLING_BANDWIDTH_MODE, bandwidthMode.ordinal)
refresh()
}
@@ -121,7 +126,8 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito
disableAutoMigrationNotification = SignalStore.internalValues().disableGv1AutoMigrateNotification(),
allowCensorshipSetting = SignalStore.internalValues().allowChangingCensorshipSetting(),
callingServer = SignalStore.internalValues().groupCallingServer(),
- audioProcessingMethod = SignalStore.internalValues().audioProcessingMethod(),
+ callingAudioProcessingMethod = SignalStore.internalValues().callingAudioProcessingMethod(),
+ callingBandwidthMode = SignalStore.internalValues().callingBandwidthMode(),
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 914e8b1fc..178b8cf9a 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java
@@ -24,7 +24,8 @@ public final class InternalValues extends SignalStoreValues {
public static final String REMOVE_SENDER_KEY_MINIMUM = "internal.remove_sender_key_minimum";
public static final String DELAY_RESENDS = "internal.delay_resends";
public static final String CALLING_SERVER = "internal.calling_server";
- public static final String AUDIO_PROCESSING_METHOD = "internal.audio_processing_method";
+ public static final String CALLING_AUDIO_PROCESSING_METHOD = "internal.calling_audio_processing_method";
+ public static final String CALLING_BANDWIDTH_MODE = "internal.calling_bandwidth_mode";
public static final String SHAKE_TO_REPORT = "internal.shake_to_report";
public static final String DISABLE_STORAGE_SERVICE = "internal.disable_storage_service";
@@ -159,11 +160,22 @@ public final class InternalValues extends SignalStoreValues {
/**
* Setting to override the default handling of hardware/software AEC.
*/
- public synchronized CallManager.AudioProcessingMethod audioProcessingMethod() {
+ public synchronized CallManager.AudioProcessingMethod callingAudioProcessingMethod() {
if (FeatureFlags.internalUser()) {
- return CallManager.AudioProcessingMethod.values()[getInteger(AUDIO_PROCESSING_METHOD, CallManager.AudioProcessingMethod.Default.ordinal())];
+ return CallManager.AudioProcessingMethod.values()[getInteger(CALLING_AUDIO_PROCESSING_METHOD, CallManager.AudioProcessingMethod.Default.ordinal())];
} else {
return CallManager.AudioProcessingMethod.Default;
}
}
+
+ /**
+ * Setting to override the default calling bandwidth mode.
+ */
+ public synchronized CallManager.BandwidthMode callingBandwidthMode() {
+ if (FeatureFlags.internalUser()) {
+ return CallManager.BandwidthMode.values()[getInteger(CALLING_BANDWIDTH_MODE, CallManager.BandwidthMode.NORMAL.ordinal())];
+ } else {
+ return CallManager.BandwidthMode.NORMAL;
+ }
+ }
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/AudioProcessingMethodSelector.kt b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/AudioProcessingMethodSelector.kt
index 9e15812b4..624bf4d8b 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/AudioProcessingMethodSelector.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/AudioProcessingMethodSelector.kt
@@ -13,8 +13,8 @@ object AudioProcessingMethodSelector {
@JvmStatic
fun get(): AudioProcessingMethod {
- if (SignalStore.internalValues().audioProcessingMethod() != AudioProcessingMethod.Default) {
- return SignalStore.internalValues().audioProcessingMethod()
+ if (SignalStore.internalValues().callingAudioProcessingMethod() != AudioProcessingMethod.Default) {
+ return SignalStore.internalValues().callingAudioProcessingMethod()
}
val useAec3: Boolean = FeatureFlags.useAec3()
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/NetworkUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/NetworkUtil.java
index e16cd6c3e..38293a8b2 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/NetworkUtil.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/NetworkUtil.java
@@ -35,6 +35,10 @@ public final class NetworkUtil {
}
public static @NonNull CallManager.BandwidthMode getCallingBandwidthMode(@NonNull Context context, @NonNull PeerConnection.AdapterType networkAdapter) {
+ if (SignalStore.internalValues().callingBandwidthMode() != CallManager.BandwidthMode.NORMAL) {
+ return SignalStore.internalValues().callingBandwidthMode();
+ }
+
return useLowBandwidthCalling(context, networkAdapter) ? CallManager.BandwidthMode.LOW : CallManager.BandwidthMode.NORMAL;
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 26edaa390..d01c99d09 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -2692,11 +2692,12 @@
Local Metrics
Clear local metrics
Click to clear all local metrics state.
- Group call server
- Default
- %1$s server
- Audio options
- Audio processing method
+ Group call server
+ Default
+ %1$s server
+ Calling options
+ Audio processing method
+ Bandwidth mode
Badges
Enqueue redemption.
Release channel