mirror of
https://github.com/nextcloud/talk-android.git
synced 2024-11-27 08:55:54 +03:00
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:
commit
57fe34c14a
1 changed files with 27 additions and 8 deletions
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue