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 - - - + + + - - + +