diff options
author | Tim Krüger <t@timkrueger.me> | 2022-10-11 10:23:25 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-11 10:23:25 +0300 |
commit | 9d8f0a073ddeb9592b1a4a62cbdea9509e1e71c2 (patch) | |
tree | f4f1be9e1c7eafc9bc53a077ea4dfe11499fa24b | |
parent | 03dd67dbed7fd049e3648b1b5768f1d431c567ec (diff) | |
parent | 404ddc8c2790e37dad015ed4cf7e519641df4c89 (diff) |
Merge pull request #2479 from nextcloud/backport/2477/stable-15.0v15.0.0rc4
[stable-15.0] Fix crash when setting layout for call participants
-rw-r--r-- | app/src/main/java/com/nextcloud/talk/activities/CallActivity.java | 35 |
1 files changed, 27 insertions, 8 deletions
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 9085f6abe..4b65a8fb1 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -1835,6 +1835,7 @@ public class CallActivity extends CallBaseActivity { Log.d(TAG, "processUsersInRoom"); List<String> newSessions = new ArrayList<>(); Set<String> oldSessions = new HashSet<>(); + Map<String, String> userIdsBySessionId = new HashMap<>(); hasMCU = hasExternalSignalingServer && webSocketClient != null && webSocketClient.hasMCU(); Log.d(TAG, " hasMCU is " + hasMCU); @@ -1862,6 +1863,15 @@ public class CallActivity extends CallBaseActivity { } else { oldSessions.add(participant.get("sessionId").toString()); } + + // The property is "userId" when not using the external signaling server and "userid" when using it. + String userId = null; + if (participant.get("userId") != null) { + userId = participant.get("userId").toString(); + } else if (participant.get("userid") != null) { + userId = participant.get("userid").toString(); + } + userIdsBySessionId.put(participant.get("sessionId").toString(), userId); } else { Log.d(TAG, " inCallFlag of currentSessionId: " + inCallFlag); if (inCallFlag == 0 && !CallStatus.LEAVING.equals(currentCallStatus) && ApplicationWideCurrentRoomHolder.getInstance().isInCall()) { @@ -1900,10 +1910,13 @@ public class CallActivity extends CallBaseActivity { Log.d(TAG, " newSession joined: " + sessionId); getOrCreatePeerConnectionWrapperForSessionIdAndType(sessionId, VIDEO_STREAM_TYPE_VIDEO, false); + String userId = userIdsBySessionId.get(sessionId); + runOnUiThread(() -> { setupVideoStreamForLayout( null, sessionId, + userId, false, VIDEO_STREAM_TYPE_VIDEO); }); @@ -2243,12 +2256,14 @@ public class CallActivity extends CallBaseActivity { setupVideoStreamForLayout( mediaStreamEvent.getMediaStream(), mediaStreamEvent.getSession(), + null, hasAtLeastOneVideoStream, mediaStreamEvent.getVideoStreamType()); } else { setupVideoStreamForLayout( null, mediaStreamEvent.getSession(), + null, false, mediaStreamEvent.getVideoStreamType()); } @@ -2339,6 +2354,7 @@ public class CallActivity extends CallBaseActivity { private void setupVideoStreamForLayout(@Nullable MediaStream mediaStream, String session, + String userId, boolean videoStreamEnabled, String videoStreamType) { PeerConnectionWrapper peerConnectionWrapper = getPeerConnectionWrapperForSessionIdAndType(session, @@ -2358,17 +2374,20 @@ public class CallActivity extends CallBaseActivity { nick = peerConnectionWrapper != null ? peerConnectionWrapper.getNick() : ""; } - String userId = ""; - if (hasMCU) { - userId = webSocketClient.getUserIdForSession(session); - } else if (participantMap.get(session).getCalculatedActorType() == Participant.ActorType.USERS) { - userId = participantMap.get(session).getCalculatedActorId(); + String userId4Usage = userId; + + if (userId4Usage == null) { + if (hasMCU) { + userId4Usage = webSocketClient.getUserIdForSession(session); + } else if (participantMap.get(session) != null && participantMap.get(session).getCalculatedActorType() == Participant.ActorType.USERS) { + userId4Usage = participantMap.get(session).getCalculatedActorId(); + } } String urlForAvatar; - if (!TextUtils.isEmpty(userId)) { + if (!TextUtils.isEmpty(userId4Usage)) { urlForAvatar = ApiUtils.getUrlForAvatar(baseUrl, - userId, + userId4Usage, true); } else { urlForAvatar = ApiUtils.getUrlForGuestAvatar(baseUrl, @@ -2376,7 +2395,7 @@ public class CallActivity extends CallBaseActivity { true); } - ParticipantDisplayItem participantDisplayItem = new ParticipantDisplayItem(userId, + ParticipantDisplayItem participantDisplayItem = new ParticipantDisplayItem(userId4Usage, session, connected, nick, |