Merge pull request #2477 from nextcloud/fix-crash-when-setting-layout-for-call-participants

Fix crash when setting layout for call participants
This commit is contained in:
Tim Krüger 2022-10-11 08:44:38 +02:00 committed by GitHub
commit 57fe34c14a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1835,6 +1835,7 @@ public class CallActivity extends CallBaseActivity {
Log.d(TAG, "processUsersInRoom"); Log.d(TAG, "processUsersInRoom");
List<String> newSessions = new ArrayList<>(); List<String> newSessions = new ArrayList<>();
Set<String> oldSessions = new HashSet<>(); Set<String> oldSessions = new HashSet<>();
Map<String, String> userIdsBySessionId = new HashMap<>();
hasMCU = hasExternalSignalingServer && webSocketClient != null && webSocketClient.hasMCU(); hasMCU = hasExternalSignalingServer && webSocketClient != null && webSocketClient.hasMCU();
Log.d(TAG, " hasMCU is " + hasMCU); Log.d(TAG, " hasMCU is " + hasMCU);
@ -1862,6 +1863,15 @@ public class CallActivity extends CallBaseActivity {
} else { } else {
oldSessions.add(participant.get("sessionId").toString()); 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 { } else {
Log.d(TAG, " inCallFlag of currentSessionId: " + inCallFlag); Log.d(TAG, " inCallFlag of currentSessionId: " + inCallFlag);
if (inCallFlag == 0 && !CallStatus.LEAVING.equals(currentCallStatus) && ApplicationWideCurrentRoomHolder.getInstance().isInCall()) { 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); Log.d(TAG, " newSession joined: " + sessionId);
getOrCreatePeerConnectionWrapperForSessionIdAndType(sessionId, VIDEO_STREAM_TYPE_VIDEO, false); getOrCreatePeerConnectionWrapperForSessionIdAndType(sessionId, VIDEO_STREAM_TYPE_VIDEO, false);
String userId = userIdsBySessionId.get(sessionId);
runOnUiThread(() -> { runOnUiThread(() -> {
setupVideoStreamForLayout( setupVideoStreamForLayout(
null, null,
sessionId, sessionId,
userId,
false, false,
VIDEO_STREAM_TYPE_VIDEO); VIDEO_STREAM_TYPE_VIDEO);
}); });
@ -2243,12 +2256,14 @@ public class CallActivity extends CallBaseActivity {
setupVideoStreamForLayout( setupVideoStreamForLayout(
mediaStreamEvent.getMediaStream(), mediaStreamEvent.getMediaStream(),
mediaStreamEvent.getSession(), mediaStreamEvent.getSession(),
null,
hasAtLeastOneVideoStream, hasAtLeastOneVideoStream,
mediaStreamEvent.getVideoStreamType()); mediaStreamEvent.getVideoStreamType());
} else { } else {
setupVideoStreamForLayout( setupVideoStreamForLayout(
null, null,
mediaStreamEvent.getSession(), mediaStreamEvent.getSession(),
null,
false, false,
mediaStreamEvent.getVideoStreamType()); mediaStreamEvent.getVideoStreamType());
} }
@ -2339,6 +2354,7 @@ public class CallActivity extends CallBaseActivity {
private void setupVideoStreamForLayout(@Nullable MediaStream mediaStream, private void setupVideoStreamForLayout(@Nullable MediaStream mediaStream,
String session, String session,
String userId,
boolean videoStreamEnabled, boolean videoStreamEnabled,
String videoStreamType) { String videoStreamType) {
PeerConnectionWrapper peerConnectionWrapper = getPeerConnectionWrapperForSessionIdAndType(session, PeerConnectionWrapper peerConnectionWrapper = getPeerConnectionWrapperForSessionIdAndType(session,
@ -2358,17 +2374,20 @@ public class CallActivity extends CallBaseActivity {
nick = peerConnectionWrapper != null ? peerConnectionWrapper.getNick() : ""; nick = peerConnectionWrapper != null ? peerConnectionWrapper.getNick() : "";
} }
String userId = ""; String userId4Usage = userId;
if (hasMCU) {
userId = webSocketClient.getUserIdForSession(session); if (userId4Usage == null) {
} else if (participantMap.get(session).getCalculatedActorType() == Participant.ActorType.USERS) { if (hasMCU) {
userId = participantMap.get(session).getCalculatedActorId(); userId4Usage = webSocketClient.getUserIdForSession(session);
} else if (participantMap.get(session) != null && participantMap.get(session).getCalculatedActorType() == Participant.ActorType.USERS) {
userId4Usage = participantMap.get(session).getCalculatedActorId();
}
} }
String urlForAvatar; String urlForAvatar;
if (!TextUtils.isEmpty(userId)) { if (!TextUtils.isEmpty(userId4Usage)) {
urlForAvatar = ApiUtils.getUrlForAvatar(baseUrl, urlForAvatar = ApiUtils.getUrlForAvatar(baseUrl,
userId, userId4Usage,
true); true);
} else { } else {
urlForAvatar = ApiUtils.getUrlForGuestAvatar(baseUrl, urlForAvatar = ApiUtils.getUrlForGuestAvatar(baseUrl,
@ -2376,7 +2395,7 @@ public class CallActivity extends CallBaseActivity {
true); true);
} }
ParticipantDisplayItem participantDisplayItem = new ParticipantDisplayItem(userId, ParticipantDisplayItem participantDisplayItem = new ParticipantDisplayItem(userId4Usage,
session, session,
connected, connected,
nick, nick,