From c41896af27cbb62f9f25f227dad60ba292478fc2 Mon Sep 17 00:00:00 2001 From: Calin-Teodor Date: Thu, 14 Nov 2024 15:37:47 +0200 Subject: [PATCH] feat(filmstrip): force visibility for visible remote participants when appState changes --- modules/UI/videolayout/LargeVideoManager.js | 1 - react/features/filmstrip/reducer.ts | 17 +++++++++++++++-- react/features/video-quality/subscriber.ts | 9 +++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/modules/UI/videolayout/LargeVideoManager.js b/modules/UI/videolayout/LargeVideoManager.js index 3895e48740df..f140d9be7edd 100644 --- a/modules/UI/videolayout/LargeVideoManager.js +++ b/modules/UI/videolayout/LargeVideoManager.js @@ -11,7 +11,6 @@ import { createScreenSharingIssueEvent } from '../../../react/features/analytics import { sendAnalytics } from '../../../react/features/analytics/functions'; import Avatar from '../../../react/features/base/avatar/components/Avatar'; import theme from '../../../react/features/base/components/themes/participantsPaneTheme.json'; -import { getSsrcRewritingFeatureFlag } from '../../../react/features/base/config/functions.any'; import i18next from '../../../react/features/base/i18n/i18next'; import { JitsiTrackEvents } from '../../../react/features/base/lib-jitsi-meet'; import { VIDEO_TYPE } from '../../../react/features/base/media/constants'; diff --git a/react/features/filmstrip/reducer.ts b/react/features/filmstrip/reducer.ts index bd718835387d..8f737a00124b 100644 --- a/react/features/filmstrip/reducer.ts +++ b/react/features/filmstrip/reducer.ts @@ -1,3 +1,5 @@ +import { Platform } from 'react-native'; + import { PARTICIPANT_LEFT } from '../base/participants/actionTypes'; import ReducerRegistry from '../base/redux/ReducerRegistry'; @@ -301,9 +303,20 @@ ReducerRegistry.register( } }; case SET_VISIBLE_REMOTE_PARTICIPANTS: { - const { endIndex, startIndex } = action; + let { endIndex, startIndex } = action; const { remoteParticipants } = state; - const visibleRemoteParticipants = new Set(remoteParticipants.slice(startIndex, endIndex + 1)); + let visibleRemoteParticipants = new Set(remoteParticipants.slice(startIndex, endIndex + 1)); + + // RN > 0.73 made us add this: + // Hack alert for iOS where we force visible remote participants + // _onViewableItemsChanged gets set to >= 1 when appState transitions from background to active. + if (navigator.product === 'ReactNative' && Platform.OS === 'ios') { + if (remoteParticipants.length > 1 && visibleRemoteParticipants.size >= 1) { + startIndex = 0; + endIndex = remoteParticipants.length; + visibleRemoteParticipants = new Set(remoteParticipants); + } + } return { ...state, diff --git a/react/features/video-quality/subscriber.ts b/react/features/video-quality/subscriber.ts index 66299d99e951..725a1f55dc9d 100644 --- a/react/features/video-quality/subscriber.ts +++ b/react/features/video-quality/subscriber.ts @@ -87,6 +87,15 @@ StateListenerRegistry.register( _updateReceiverVideoConstraints(store); }); +/** + * Handles the use case when the reducedUI is enabled. + */ +StateListenerRegistry.register( + /* selector */ state => state['features/base/responsive-ui'].reducedUI, + /* listener */ (reducedUI, store) => { + _updateReceiverVideoConstraints(store); + }); + /** * Updates the receiver constraints when the stage participants change. */