Skip to content

Commit 481b9a6

Browse files
authored
feat(tracks): add/remove "ended" listener when screen sharing
* Listen to the MediaStreamTrack "ended" event so local screen-share state is toggled off when capture is terminated externally.
1 parent fb3bc3c commit 481b9a6

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

react/features/base/tracks/actions.any.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
TRACK_UPDATED,
3030
TRACK_WILL_CREATE
3131
} from './actionTypes';
32+
import { toggleScreensharing } from './actions';
3233
import {
3334
createLocalTracksF,
3435
getCameraFacingMode,
@@ -385,8 +386,22 @@ export function trackAdded(track: any) {
385386
const mediaType = track.getVideoType() === VIDEO_TYPE.DESKTOP
386387
? MEDIA_TYPE.SCREENSHARE
387388
: track.getType();
389+
388390
let isReceivingData, noDataFromSourceNotificationInfo, participantId;
389391

392+
// Make screen share toggle off listen to MediaStreamTrack "ended" event
393+
// when it's terminated via Android status bar chip.
394+
if (navigator.product === 'ReactNative') {
395+
const mediaStreamTrack = track?.getTrack?.();
396+
397+
if (mediaType === MEDIA_TYPE.SCREENSHARE) {
398+
const onEnded = () => dispatch(toggleScreensharing(false));
399+
400+
mediaStreamTrack.addEventListener('ended', onEnded);
401+
track._onEnded = onEnded;
402+
}
403+
}
404+
390405
if (local) {
391406
// Reset the no data from src notification state when we change the track, as it's context is set
392407
// on a per device basis.
@@ -568,6 +583,16 @@ export function trackRemoved(track: any): {
568583
track.removeAllListeners(JitsiTrackEvents.TRACK_VIDEOTYPE_CHANGED);
569584
track.removeAllListeners(JitsiTrackEvents.NO_DATA_FROM_SOURCE);
570585

586+
// Remove MediaStreamTrack "ended" event.
587+
if (navigator.product === 'ReactNative') {
588+
const mediaStreamTrack = track?.getTrack?.();
589+
590+
if (track._onEnded) {
591+
mediaStreamTrack.removeEventListener('ended', track._onEnded);
592+
delete track._onEnded;
593+
}
594+
}
595+
571596
return {
572597
type: TRACK_REMOVED,
573598
track: {

0 commit comments

Comments
 (0)