Просмотр исходного кода

Create ParticipantDisplayItem on media event if it does not exist yet

Instead of creating a new ParticipantDisplayItem from scratch, which
resets the full grid, now the existing one is updated; a new one is
created only if no item existed already for the session and video stream
type of the media event.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Daniel Calviño Sánchez 2 лет назад
Родитель
Сommit
29d0574667
1 измененных файлов с 15 добавлено и 11 удалено
  1. 15 11
      app/src/main/java/com/nextcloud/talk/activities/CallActivity.java

+ 15 - 11
app/src/main/java/com/nextcloud/talk/activities/CallActivity.java

@@ -2225,17 +2225,10 @@ public class CallActivity extends CallBaseActivity {
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onMessageEvent(MediaStreamEvent mediaStreamEvent) {
-        if (mediaStreamEvent.getMediaStream() != null) {
-            boolean hasAtLeastOneVideoStream = mediaStreamEvent.getMediaStream().videoTracks != null
-                && mediaStreamEvent.getMediaStream().videoTracks.size() > 0;
-
-            setupVideoStreamForLayout(
-                mediaStreamEvent.getMediaStream(),
-                mediaStreamEvent.getSession(),
-                null,
-                hasAtLeastOneVideoStream,
-                mediaStreamEvent.getVideoStreamType());
-        } else {
+        String participantDisplayItemId = mediaStreamEvent.getSession() + "-" + mediaStreamEvent.getVideoStreamType();
+        if (participantDisplayItems.get(participantDisplayItemId) == null) {
+            // Initial setup, ignore media related properties as they will be set after it.
+            // userId is unknown from the event, but it will be got based on the session id.
             setupVideoStreamForLayout(
                 null,
                 mediaStreamEvent.getSession(),
@@ -2243,6 +2236,17 @@ public class CallActivity extends CallBaseActivity {
                 false,
                 mediaStreamEvent.getVideoStreamType());
         }
+
+        boolean hasAtLeastOneVideoStream = false;
+        if (mediaStreamEvent.getMediaStream() != null) {
+            hasAtLeastOneVideoStream = mediaStreamEvent.getMediaStream().videoTracks != null
+                && mediaStreamEvent.getMediaStream().videoTracks.size() > 0;
+        }
+
+        ParticipantDisplayItem participantDisplayItem = participantDisplayItems.get(participantDisplayItemId);
+        participantDisplayItem.setMediaStream(mediaStreamEvent.getMediaStream());
+        participantDisplayItem.setStreamEnabled(hasAtLeastOneVideoStream);
+        participantsAdapter.notifyDataSetChanged();
     }
 
     @Override