Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/talk-android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Krüger <t@timkrueger.me>2022-10-11 10:23:25 +0300
committerGitHub <noreply@github.com>2022-10-11 10:23:25 +0300
commit9d8f0a073ddeb9592b1a4a62cbdea9509e1e71c2 (patch)
treef4f1be9e1c7eafc9bc53a077ea4dfe11499fa24b
parent03dd67dbed7fd049e3648b1b5768f1d431c567ec (diff)
parent404ddc8c2790e37dad015ed4cf7e519641df4c89 (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.java35
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,