From 379ec8eae82a7477dad142cca11bad6c7660981b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= Date: Sun, 20 Nov 2022 01:47:55 +0100 Subject: [PATCH] Fix call state when join call response is received after signaling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a call is joined the call flags of the local participant change, so this causes a signaling message to be sent by the server. When the HPB is used the signaling message is sent through a WebSocket, which is already connected before joining the call. Therefore, in some cases the signaling message can be received through the WebSocket even before the response to the HTTP "joinCall" request. If there are other participants in the call the call state is changed to "IN_CONVERSATION" when the signaling message is processed. However, in the case described above the call state was then set to "JOINED", which automatically traverses to "CONNECTION_TIMEOUT" if no other call state was set in 45 seconds. Due to all this the call was joined and the connections with the other participants were established, but they were not visible in the UI (although they could be heard) and after 45 seconds the call was left. To prevent that now the call state is changed to "JOINED" if it was not already changed to "IN_CONVERSATION" in the meantime. Signed-off-by: Daniel Calviño Sánchez --- .../main/java/com/nextcloud/talk/activities/CallActivity.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java index 497899e31..a3a3f6d1e 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -1442,7 +1442,9 @@ public class CallActivity extends CallBaseActivity { @Override public void onNext(@io.reactivex.annotations.NonNull GenericOverall genericOverall) { if (currentCallStatus != CallStatus.LEAVING) { - setCallState(CallStatus.JOINED); + if (currentCallStatus != CallStatus.IN_CONVERSATION) { + setCallState(CallStatus.JOINED); + } ApplicationWideCurrentRoomHolder.getInstance().setInCall(true); ApplicationWideCurrentRoomHolder.getInstance().setDialing(false);