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 f7e7a51240..027c1bb7b1 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
@@ -382,6 +382,14 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter
}
)
+ switchPref(
+ title = DSLSettingsText.from(R.string.preferences__internal_calling_disable_telecom),
+ isChecked = state.callingDisableTelecom,
+ onClick = {
+ viewModel.setInternalCallingDisableTelecom(!state.callingDisableTelecom)
+ }
+ )
+
if (FeatureFlags.donorBadges() && SignalStore.donationsValues().getSubscriber() != null) {
dividerPref()
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 06862eb2df..b864d08b67 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
@@ -16,6 +16,7 @@ data class InternalSettingsState(
val callingServer: String,
val callingAudioProcessingMethod: CallManager.AudioProcessingMethod,
val callingBandwidthMode: CallManager.BandwidthMode,
+ val callingDisableTelecom: 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 c59744d01c..d637827738 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
@@ -101,6 +101,11 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito
refresh()
}
+ fun setInternalCallingDisableTelecom(enabled: Boolean) {
+ preferenceDataStore.putBoolean(InternalValues.CALLING_DISABLE_TELECOM, enabled)
+ refresh()
+ }
+
fun toggleStories() {
val newState = !SignalStore.storyValues().isFeatureDisabled
SignalStore.storyValues().isFeatureDisabled = newState
@@ -128,6 +133,7 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito
callingServer = SignalStore.internalValues().groupCallingServer(),
callingAudioProcessingMethod = SignalStore.internalValues().callingAudioProcessingMethod(),
callingBandwidthMode = SignalStore.internalValues().callingBandwidthMode(),
+ callingDisableTelecom = SignalStore.internalValues().callingDisableTelecom(),
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 178b8cf9af..42f85943a6 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java
@@ -26,6 +26,7 @@ public final class InternalValues extends SignalStoreValues {
public static final String CALLING_SERVER = "internal.calling_server";
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 CALLING_DISABLE_TELECOM = "internal.calling_disable_telecom";
public static final String SHAKE_TO_REPORT = "internal.shake_to_report";
public static final String DISABLE_STORAGE_SERVICE = "internal.disable_storage_service";
@@ -178,4 +179,15 @@ public final class InternalValues extends SignalStoreValues {
return CallManager.BandwidthMode.NORMAL;
}
}
+
+ /**
+ * Whether or not Telecom integration is manually disabled.
+ */
+ public synchronized boolean callingDisableTelecom() {
+ if (FeatureFlags.internalUser()) {
+ return getBoolean(CALLING_DISABLE_TELECOM, false);
+ } else {
+ return true;
+ }
+ }
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/AndroidTelecomUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/AndroidTelecomUtil.kt
index 236558cf02..bc2a9a12f4 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/AndroidTelecomUtil.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/AndroidTelecomUtil.kt
@@ -19,8 +19,8 @@ import androidx.core.content.ContextCompat
import androidx.core.os.bundleOf
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
+import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.recipients.RecipientId
-import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.webrtc.audio.SignalAudioManager
/**
@@ -189,7 +189,7 @@ object AndroidTelecomUtil {
}
private fun isRestrictedDevice(): Boolean {
- return !FeatureFlags.internalUser()
+ return SignalStore.internalValues().callingDisableTelecom()
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b3927e3494..67a657d7cd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -2702,6 +2702,7 @@
Calling options
Audio processing method
Bandwidth mode
+ Disable Telecom integration
Badges
Enqueue redemption.
Release channel