diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallLinkPreJoinActionProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallLinkPreJoinActionProcessor.kt
index b62c00eea9..6a1699c2a5 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallLinkPreJoinActionProcessor.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallLinkPreJoinActionProcessor.kt
@@ -20,6 +20,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.ringrtc.RemotePeer
import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState
import org.thoughtcrime.securesms.util.NetworkUtil
+import org.thoughtcrime.securesms.util.RemoteConfig
import java.io.IOException
/**
@@ -65,6 +66,8 @@ class CallLinkPreJoinActionProcessor(
.groupsV2Authorization
.getCallLinkAuthorizationForToday(genericServerPublicParams, callLinkSecretParams)
+ val dredDuration: Byte = RemoteConfig.dredDuration.toByte()
+
webRtcInteractor.callManager.createCallLinkCall(
SignalStore.internal.groupCallingServer,
serverPublicParams.endorsementPublicKey,
@@ -73,6 +76,7 @@ class CallLinkPreJoinActionProcessor(
callLink.credentials.adminPassBytes,
ByteArray(0),
AUDIO_LEVELS_INTERVAL,
+ dredDuration,
RingRtcDynamicConfiguration.getAudioConfig(),
webRtcInteractor.groupCallObserver
)
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupNetworkUnavailableActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupNetworkUnavailableActionProcessor.java
index 9b0f5e5ba2..d32d9c61a8 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupNetworkUnavailableActionProcessor.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupNetworkUnavailableActionProcessor.java
@@ -14,6 +14,7 @@ import org.thoughtcrime.securesms.events.WebRtcViewModel;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.ringrtc.RemotePeer;
import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState;
+import org.thoughtcrime.securesms.util.RemoteConfig;
/**
* Processor which is utilized when the network becomes unavailable during a group call. In general,
@@ -48,13 +49,15 @@ public class GroupNetworkUnavailableActionProcessor extends WebRtcActionProcesso
return processor.handlePreJoinCall(currentState.builder().actionProcessor(processor).build(), remotePeer);
}
- byte[] groupId = currentState.getCallInfoState().getCallRecipient().requireGroupId().getDecodedId();
- GroupCall groupCall = webRtcInteractor.getCallManager().createGroupCall(groupId,
- SignalStore.internal().getGroupCallingServer(),
- new byte[0],
- null,
- RingRtcDynamicConfiguration.getAudioConfig(),
- webRtcInteractor.getGroupCallObserver());
+ byte dredDuration = (byte) RemoteConfig.dredDuration();
+ byte[] groupId = currentState.getCallInfoState().getCallRecipient().requireGroupId().getDecodedId();
+ GroupCall groupCall = webRtcInteractor.getCallManager().createGroupCall(groupId,
+ SignalStore.internal().getGroupCallingServer(),
+ new byte[0],
+ AUDIO_LEVELS_INTERVAL,
+ dredDuration,
+ RingRtcDynamicConfiguration.getAudioConfig(),
+ webRtcInteractor.getGroupCallObserver());
if (groupCall == null) {
return groupCallFailure(currentState, "RingRTC did not create a group call", null);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java
index ba8e4e94e3..8ad0b3c8fd 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java
@@ -20,6 +20,7 @@ import org.thoughtcrime.securesms.ringrtc.RemotePeer;
import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState;
import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceStateBuilder;
import org.thoughtcrime.securesms.util.NetworkUtil;
+import org.thoughtcrime.securesms.util.RemoteConfig;
import org.whispersystems.signalservice.api.messages.calls.OfferMessage;
import org.signal.core.models.ServiceId.ACI;
@@ -46,13 +47,15 @@ public class GroupPreJoinActionProcessor extends GroupActionProcessor {
protected @NonNull WebRtcServiceState handlePreJoinCall(@NonNull WebRtcServiceState currentState, @NonNull RemotePeer remotePeer) {
Log.i(tag, "handlePreJoinCall():");
- byte[] groupId = currentState.getCallInfoState().getCallRecipient().requireGroupId().getDecodedId();
- GroupCall groupCall = webRtcInteractor.getCallManager().createGroupCall(groupId,
- SignalStore.internal().getGroupCallingServer(),
- new byte[0],
- AUDIO_LEVELS_INTERVAL,
- RingRtcDynamicConfiguration.getAudioConfig(),
- webRtcInteractor.getGroupCallObserver());
+ byte dredDuration = (byte) RemoteConfig.dredDuration();
+ byte[] groupId = currentState.getCallInfoState().getCallRecipient().requireGroupId().getDecodedId();
+ GroupCall groupCall = webRtcInteractor.getCallManager().createGroupCall(groupId,
+ SignalStore.internal().getGroupCallingServer(),
+ new byte[0],
+ AUDIO_LEVELS_INTERVAL,
+ dredDuration,
+ RingRtcDynamicConfiguration.getAudioConfig(),
+ webRtcInteractor.getGroupCallObserver());
if (groupCall == null) {
return groupCallFailure(currentState, "RingRTC did not create a group call", null);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingCallActionProcessor.java
index 37019d88b7..17ad8b3ca2 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingCallActionProcessor.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingCallActionProcessor.java
@@ -30,6 +30,7 @@ import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState;
import org.thoughtcrime.securesms.util.AppForegroundObserver;
import org.thoughtcrime.securesms.util.NetworkUtil;
import org.signal.core.util.Util;
+import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.webrtc.locks.LockManager;
import org.webrtc.PeerConnection;
@@ -96,6 +97,7 @@ public class IncomingCallActionProcessor extends DeviceAwareActionProcessor {
return currentState;
}
+ byte dredDuration = (byte) RemoteConfig.dredDuration();
boolean hideIp = !activePeer.getRecipient().isProfileSharing() || callSetupState.isAlwaysTurnServers();
VideoState videoState = currentState.getVideoState();
CallParticipant callParticipant = Objects.requireNonNull(currentState.getCallInfoState().getRemoteCallParticipant(activePeer.getRecipient()));
@@ -112,6 +114,7 @@ public class IncomingCallActionProcessor extends DeviceAwareActionProcessor {
hideIp,
NetworkUtil.getCallingDataMode(context),
AUDIO_LEVELS_INTERVAL,
+ dredDuration,
false);
} catch (CallException e) {
return callFailure(currentState, "Unable to proceed with call: ", e);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java
index f1436b763a..9ded59220c 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java
@@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.ringrtc.RemotePeer;
import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState;
import org.thoughtcrime.securesms.util.AppForegroundObserver;
import org.thoughtcrime.securesms.util.NetworkUtil;
+import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.webrtc.locks.LockManager;
import java.util.Optional;
@@ -218,13 +219,15 @@ public final class IncomingGroupCallActionProcessor extends DeviceAwareActionPro
protected @NonNull WebRtcServiceState handleAcceptCall(@NonNull WebRtcServiceState currentState, boolean answerWithVideo) {
currentState = WebRtcVideoUtil.reinitializeCamera(context, webRtcInteractor.getCameraEventListener(), currentState);
- byte[] groupId = currentState.getCallInfoState().getCallRecipient().requireGroupId().getDecodedId();
- GroupCall groupCall = webRtcInteractor.getCallManager().createGroupCall(groupId,
- SignalStore.internal().getGroupCallingServer(),
- new byte[0],
- AUDIO_LEVELS_INTERVAL,
- RingRtcDynamicConfiguration.getAudioConfig(),
- webRtcInteractor.getGroupCallObserver());
+ byte dredDuration = (byte) RemoteConfig.dredDuration();
+ byte[] groupId = currentState.getCallInfoState().getCallRecipient().requireGroupId().getDecodedId();
+ GroupCall groupCall = webRtcInteractor.getCallManager().createGroupCall(groupId,
+ SignalStore.internal().getGroupCallingServer(),
+ new byte[0],
+ AUDIO_LEVELS_INTERVAL,
+ dredDuration,
+ RingRtcDynamicConfiguration.getAudioConfig(),
+ webRtcInteractor.getGroupCallObserver());
if (groupCall == null) {
return groupCallFailure(currentState, "RingRTC did not create a group call", null);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java
index 18b723a7af..4a0d108c35 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java
@@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState;
import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceStateBuilder;
import org.thoughtcrime.securesms.util.NetworkUtil;
import org.signal.core.util.Util;
+import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.webrtc.audio.SignalAudioManager;
import org.webrtc.PeerConnection;
import org.whispersystems.signalservice.api.messages.calls.OfferMessage;
@@ -144,6 +145,7 @@ public class OutgoingCallActionProcessor extends DeviceAwareActionProcessor {
return currentState;
}
+ byte dredDuration = (byte) RemoteConfig.dredDuration();
boolean hideIp = !activePeer.getRecipient().isProfileSharing() || callSetupState.isAlwaysTurnServers();
VideoState videoState = currentState.getVideoState();
CallParticipant callParticipant = Objects.requireNonNull(currentState.getCallInfoState().getRemoteCallParticipant(activePeer.getRecipient()));
@@ -160,6 +162,7 @@ public class OutgoingCallActionProcessor extends DeviceAwareActionProcessor {
hideIp,
NetworkUtil.getCallingDataMode(context),
AUDIO_LEVELS_INTERVAL,
+ dredDuration,
currentState.getCallSetupState(activePeer).isEnableVideoOnCreate());
} catch (CallException e) {
return callFailure(currentState, "Unable to proceed with call: ", e);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt b/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt
index c9a4ef89b6..22da18fc72 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt
@@ -1339,5 +1339,13 @@ object RemoteConfig {
defaultValue = 1.days.inWholeSeconds,
hotSwappable = true
)
+
+ @JvmStatic
+ @get:JvmName("dredDuration")
+ val dredDuration: Int by remoteInt(
+ key = "global.calling.dredDuration",
+ defaultValue = 0,
+ hotSwappable = true
+ )
// endregion
}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 4e216f41c8..8b500c3bff 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -170,7 +170,7 @@ libsignal-client = { module = "org.signal:libsignal-client", version.ref = "libs
libsignal-android = { module = "org.signal:libsignal-android", version.ref = "libsignal-client" }
protobuf-gradle-plugin = { module = "com.google.protobuf:protobuf-gradle-plugin", version.ref = "protobuf-gradle-plugin" }
signal-aesgcmprovider = "org.signal:aesgcmprovider:0.0.4"
-signal-ringrtc = "org.signal:ringrtc-android:2.65.3"
+signal-ringrtc = "org.signal:ringrtc-android:2.66.0"
# Third Party
signal-android-database-sqlcipher = "net.zetetic:sqlcipher-android:4.13.0"
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index fd1dacddc3..0843d40dc8 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -16807,12 +16807,12 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
-
-
-
+
+
+
-
-
+
+