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:
authorDaniel Calviño Sánchez <danxuliu@gmail.com>2022-10-17 13:25:03 +0300
committerTim Krüger (Rebase PR Action) <t@timkrueger.me>2022-11-11 17:52:49 +0300
commitd7706b608295629509080bee9e0e11a531de5177 (patch)
tree4792e61ba5983f587d8d9fc2a83101b35045ad4d
parent263edbc1d0fa4329fb02775d26f2ca8544a8b181 (diff)
Fix remote participants display with both video and screen sharefix-remote-participants-display-with-both-video-and-screen-share
ParticipantDisplayItems are not associated to a full participant but to each of the single connections that the participant may have (video and screen). However, when they are added to the map only the session ID is used as key. Due to this when a participant starts a screen share the ParticipantDisplayItem for the screen share overwrites the item for the video, and once the screen share is stopped the old item is not restored. Moreover, if a participant is already sharing a screen when the local participant joins whether the video or the screen share is shown is undefined and depends on which connection is established first. To solve that the ParticipantDisplayItems are now associated with both the session ID and the video stream type ("video" or "screen"). Due to this both the video and the screen share of the remote participant are shown in the grid view; in the future it might be better to only show the screen share, or allow switching between screen share and video, or show the screen share in full screen and hide the grid... but for now, as a quick fix, this is good enough :-) Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
-rw-r--r--app/src/main/java/com/nextcloud/talk/activities/CallActivity.java11
1 files changed, 6 insertions, 5 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 ecdefcfae..01e339d28 100644
--- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
+++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
@@ -2087,8 +2087,9 @@ public class CallActivity extends CallBaseActivity {
if (!(peerConnectionWrappers = getPeerConnectionWrapperListForSessionId(sessionId)).isEmpty()) {
for (PeerConnectionWrapper peerConnectionWrapper : peerConnectionWrappers) {
if (peerConnectionWrapper.getSessionId().equals(sessionId)) {
- if (VIDEO_STREAM_TYPE_SCREEN.equals(peerConnectionWrapper.getVideoStreamType()) || !justScreen) {
- runOnUiThread(() -> removeMediaStream(sessionId));
+ String videoStreamType = peerConnectionWrapper.getVideoStreamType();
+ if (VIDEO_STREAM_TYPE_SCREEN.equals(videoStreamType) || !justScreen) {
+ runOnUiThread(() -> removeMediaStream(sessionId, videoStreamType));
deletePeerConnection(peerConnectionWrapper);
}
}
@@ -2096,9 +2097,9 @@ public class CallActivity extends CallBaseActivity {
}
}
- private void removeMediaStream(String sessionId) {
+ private void removeMediaStream(String sessionId, String videoStreamType) {
Log.d(TAG, "removeMediaStream");
- participantDisplayItems.remove(sessionId);
+ participantDisplayItems.remove(sessionId + "-" + videoStreamType);
if (!isDestroyed()) {
initGridAdapter();
@@ -2409,7 +2410,7 @@ public class CallActivity extends CallBaseActivity {
videoStreamType,
videoStreamEnabled,
rootEglBase);
- participantDisplayItems.put(session, participantDisplayItem);
+ participantDisplayItems.put(session + "-" + videoStreamType, participantDisplayItem);
initGridAdapter();
}