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 6a1699c2a5..96f80bea1e 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 @@ -43,6 +43,11 @@ class CallLinkPreJoinActionProcessor( override fun handlePreJoinCall(currentState: WebRtcServiceState, remotePeer: RemotePeer): WebRtcServiceState { Log.i(TAG, "handlePreJoinCall():") + if (currentState.callInfoState.groupCall != null) { + Log.w(TAG, "handlePreJoinCall(): Group call already exists, ignoring duplicate pre-join request") + return currentState + } + val groupCall = try { val callLink = callLinks.getCallLinkByRoomId(remotePeer.recipient.requireCallLinkRoomId()) if (callLink?.credentials == null) { 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 d32d9c61a8..6608e822fc 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 @@ -3,8 +3,10 @@ package org.thoughtcrime.securesms.service.webrtc; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import android.os.ResultReceiver; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.ringrtc.CallException; @@ -37,6 +39,14 @@ public class GroupNetworkUnavailableActionProcessor extends WebRtcActionProcesso this.actionProcessorFactory = actionProcessorFactory; } + @Override + protected @NonNull WebRtcServiceState handleIsInCallQuery(@NonNull WebRtcServiceState currentState, @Nullable ResultReceiver resultReceiver) { + if (resultReceiver != null) { + resultReceiver.send(1, ActiveCallData.fromCallState(currentState).toBundle()); + } + return currentState; + } + @Override protected @NonNull WebRtcServiceState handlePreJoinCall(@NonNull WebRtcServiceState currentState, @NonNull RemotePeer remotePeer) { Log.i(TAG, "handlePreJoinCall():"); 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 56cced783d..3606614cf7 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 @@ -1,6 +1,9 @@ package org.thoughtcrime.securesms.service.webrtc; +import android.os.ResultReceiver; + import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; @@ -43,10 +46,23 @@ public class GroupPreJoinActionProcessor extends GroupActionProcessor { super(actionProcessorFactory, webRtcInteractor, tag); } + @Override + protected @NonNull WebRtcServiceState handleIsInCallQuery(@NonNull WebRtcServiceState currentState, @Nullable ResultReceiver resultReceiver) { + if (resultReceiver != null) { + resultReceiver.send(1, ActiveCallData.fromCallState(currentState).toBundle()); + } + return currentState; + } + @Override protected @NonNull WebRtcServiceState handlePreJoinCall(@NonNull WebRtcServiceState currentState, @NonNull RemotePeer remotePeer) { Log.i(tag, "handlePreJoinCall():"); + if (currentState.getCallInfoState().getGroupCall() != null) { + Log.w(tag, "handlePreJoinCall(): Group call already exists, ignoring duplicate pre-join request"); + return currentState; + } + byte dredDuration = (byte) RemoteConfig.dredDuration(); byte[] groupId = currentState.getCallInfoState().getCallRecipient().requireGroupId().getDecodedId(); GroupCall groupCall = webRtcInteractor.getCallManager().createGroupCall(groupId,