From 1046c84d9da548b43f8f834b07b4271297d8c651 Mon Sep 17 00:00:00 2001 From: Alexandra Parker Date: Sun, 4 Jan 2026 17:02:11 -0800 Subject: [PATCH] fix(CallActivity): check participant's nextcloud session ids if not MCU The logic in CallActivity ends up comparing our nextcloud session id to the call session ID when handling a "call participants changed" message. If hasMCU, then compare call session IDs, otherwise compare nextcloud session IDs. See: #5452 Signed-off-by: Alexandra Parker --- .../main/java/com/nextcloud/talk/activities/CallActivity.kt | 5 +++-- .../java/com/nextcloud/talk/call/CallParticipantList.java | 1 + .../nextcloud/talk/models/json/participants/Participant.kt | 5 ++++- .../nextcloud/talk/signaling/SignalingMessageReceiver.java | 1 + 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt index 095178fefbf..727725e496d 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt @@ -2123,11 +2123,12 @@ class CallActivity : CallBaseActivity() { for (participant in participantsInCall) { val inCallFlag = participant.inCall - if (participant.sessionId != currentSessionId) { + val participantSession = if (hasMCU) participant.sessionId else participant.nextcloudSessionId + if (participantSession != callSession) { Log.d( TAG, " inCallFlag of participant " + - participant.sessionId!!.substring(0, SESSION_ID_PREFFIX_END) + + participantSession!!.substring(0, SESSION_ID_PREFFIX_END) + " : " + inCallFlag ) diff --git a/app/src/main/java/com/nextcloud/talk/call/CallParticipantList.java b/app/src/main/java/com/nextcloud/talk/call/CallParticipantList.java index 4b3727aa474..3e675adf0a4 100644 --- a/app/src/main/java/com/nextcloud/talk/call/CallParticipantList.java +++ b/app/src/main/java/com/nextcloud/talk/call/CallParticipantList.java @@ -128,6 +128,7 @@ private Participant copyParticipant(Participant participant) { copiedParticipant.setInternal(participant.getInternal()); copiedParticipant.setLastPing(participant.getLastPing()); copiedParticipant.setSessionId(participant.getSessionId()); + copiedParticipant.setNextcloudSessionId(participant.getNextcloudSessionId()); copiedParticipant.setType(participant.getType()); copiedParticipant.setUserId(participant.getUserId()); diff --git a/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.kt b/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.kt index 0583c47fe2f..43ebdf27c4f 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.kt @@ -53,6 +53,9 @@ data class Participant( @JsonField(name = ["sessionId"]) var sessionId: String? = null, + @JsonField(name = ["nextcloudSessionId"]) + var nextcloudSessionId: String? = null, + @JsonField(name = ["sessionIds"]) var sessionIds: ArrayList = ArrayList(0), @@ -80,7 +83,7 @@ data class Participant( // This constructor is added to work with the 'com.bluelinelabs.logansquare.annotation.JsonObject' constructor() : this( null, null, null, null, null, null, null, null, null, - 0, null, ArrayList(0), 0, 0, null, + 0, null, null, ArrayList(0), 0, 0, null, null, null ) diff --git a/app/src/main/java/com/nextcloud/talk/signaling/SignalingMessageReceiver.java b/app/src/main/java/com/nextcloud/talk/signaling/SignalingMessageReceiver.java index 397ba7b55ce..1212ffab670 100644 --- a/app/src/main/java/com/nextcloud/talk/signaling/SignalingMessageReceiver.java +++ b/app/src/main/java/com/nextcloud/talk/signaling/SignalingMessageReceiver.java @@ -493,6 +493,7 @@ private Participant getParticipantFromMessageMap(Map participant participant.setInCall(Long.parseLong(participantMap.get("inCall").toString())); participant.setLastPing(Long.parseLong(participantMap.get("lastPing").toString())); participant.setSessionId(participantMap.get("sessionId").toString()); + participant.setNextcloudSessionId(participantMap.get("nextcloudSessionId").toString()); if (participantMap.get("userId") != null && !participantMap.get("userId").toString().isEmpty()) { participant.setUserId(participantMap.get("userId").toString());