From 790f8426ac870fda1cc7889fe48fcc00f074f6c3 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 14 Jan 2021 06:53:18 -0400 Subject: [PATCH] Fix issue when single user leaves ParticipantCollection. --- .../collections/ParticipantCollection.java | 2 +- .../ParticipantCollectionTest.java | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/collections/ParticipantCollection.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/collections/ParticipantCollection.java index fa32e7d992..6e2a65a90e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/collections/ParticipantCollection.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/collections/ParticipantCollection.java @@ -62,7 +62,7 @@ public class ParticipantCollection { .indexOf(oldId); if (newIndex != -1 && newIndex != i) { - Collections.swap(newParticipants, newIndex, i); + Collections.swap(newParticipants, newIndex, Math.min(i, newParticipants.size() - 1)); } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/service/webrtc/collections/ParticipantCollectionTest.java b/app/src/test/java/org/thoughtcrime/securesms/service/webrtc/collections/ParticipantCollectionTest.java index 46963fc98d..bd805cd357 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/service/webrtc/collections/ParticipantCollectionTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/service/webrtc/collections/ParticipantCollectionTest.java @@ -87,6 +87,37 @@ public class ParticipantCollectionTest { assertThat(result.getGridParticipants(), Matchers.contains(id(1), id(2), id(3))); } + @Test + public void givenACollection_whenSomeoneLeaves_thenIDoNotExpectToSeeThemInTheNewList() { + // GIVEN + List initial = Arrays.asList(participant(1, 1, 2), participant(2, 1, 3), participant(3, 1, 4)); + ParticipantCollection initialCollection = testSubject.getNext(initial); + List next = Arrays.asList(participant(2, 2, 3), participant(3, 1, 4)); + + // WHEN + ParticipantCollection result = initialCollection.getNext(next); + + // THEN + assertThat(result.getGridParticipants(), Matchers.contains(id(2), id(3))); + } + + @Test + public void givenACollection_whenMultipleLeave_thenIDoNotExpectToSeeThemInTheNewList() { + // GIVEN + ParticipantCollection testSubject = new ParticipantCollection(4); + List initial = Arrays.asList(participant(1, 1, 2), participant(2, 1, 3), participant(3, 1, 4), participant(4, 1, 5)); + ParticipantCollection initialCollection = testSubject.getNext(initial); + List next = Arrays.asList(participant(3, 1, 4), participant(2, 1, 3)); + + // WHEN + ParticipantCollection result = initialCollection.getNext(next); + + // THEN + assertThat(result.getGridParticipants(), Matchers.contains(id(2), id(3))); + } + + + @Test public void bigTest() {