mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-19 11:39:42 +01:00
Fix avatar when setting participant layout before receiving the data
When a new participant is found and the layout for that participant is set up the participant data might have not been fetched yet. If that happens the user ID can not be got from the data and therefore a guest avatar would be shown for that participant, even if that participant is a normal user. However, the signaling message that is used to find new participants already includes the user ID, so it is now explicitly given and, if not, then it is got from the participant data (which is needed when handling the establishment of a connection, as in that case the event does not contain the user ID). Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
parent
4f01cb855a
commit
7f86593bca
@ -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) != null && 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,
|
||||
|
Loading…
Reference in New Issue
Block a user