@stream-io/video-react-native-sdk 1.10.6 → 1.10.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/commonjs/components/Call/CallContent/CallContent.js +5 -6
- package/dist/commonjs/components/Call/CallContent/CallContent.js.map +1 -1
- package/dist/commonjs/hooks/internal/useCallMediaStreamCleanup.js +1 -0
- package/dist/commonjs/hooks/internal/useCallMediaStreamCleanup.js.map +1 -1
- package/dist/commonjs/providers/StreamCall/AppStateListener.js +19 -11
- package/dist/commonjs/providers/StreamCall/AppStateListener.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/module/components/Call/CallContent/CallContent.js +6 -7
- package/dist/module/components/Call/CallContent/CallContent.js.map +1 -1
- package/dist/module/hooks/internal/useCallMediaStreamCleanup.js +2 -1
- package/dist/module/hooks/internal/useCallMediaStreamCleanup.js.map +1 -1
- package/dist/module/providers/StreamCall/AppStateListener.js +20 -12
- package/dist/module/providers/StreamCall/AppStateListener.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/typescript/components/Call/CallContent/CallContent.d.ts +9 -1
- package/dist/typescript/components/Call/CallContent/CallContent.d.ts.map +1 -1
- package/dist/typescript/hooks/internal/useCallMediaStreamCleanup.d.ts.map +1 -1
- package/dist/typescript/providers/StreamCall/AppStateListener.d.ts.map +1 -1
- package/dist/typescript/version.d.ts +1 -1
- package/package.json +2 -2
- package/src/components/Call/CallContent/CallContent.tsx +13 -6
- package/src/hooks/internal/useCallMediaStreamCleanup.ts +9 -1
- package/src/providers/StreamCall/AppStateListener.tsx +30 -13
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [1.10.8](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.10.7...@stream-io/video-react-native-sdk-1.10.8) (2025-02-27)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* do not stop incall manager on change of audio settings ([#1702](https://github.com/GetStream/stream-video-js/issues/1702)) ([e35194d](https://github.com/GetStream/stream-video-js/commit/e35194dc4a789cc281b9f2d4488ffe11840986f7))
|
|
11
|
+
|
|
12
|
+
## [1.10.7](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.10.6...@stream-io/video-react-native-sdk-1.10.7) (2025-02-26)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
* pinning rn dev dep for sdk ([0e78ddc](https://github.com/GetStream/stream-video-js/commit/0e78ddcfabdd7f42849cad47efa0da623c2021cb))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* pip race condition ([#1700](https://github.com/GetStream/stream-video-js/issues/1700)) ([60c8aa6](https://github.com/GetStream/stream-video-js/commit/60c8aa6c5651072f15da1770e9840d3f2b8c11c0))
|
|
21
|
+
|
|
5
22
|
## [1.10.6](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.10.5...@stream-io/video-react-native-sdk-1.10.6) (2025-02-26)
|
|
6
23
|
|
|
7
24
|
### Dependency Updates
|
|
@@ -37,7 +37,8 @@ const CallContent = ({
|
|
|
37
37
|
landscape = false,
|
|
38
38
|
supportedReactions,
|
|
39
39
|
iOSPiPIncludeLocalParticipantVideo,
|
|
40
|
-
disablePictureInPicture
|
|
40
|
+
disablePictureInPicture,
|
|
41
|
+
initialInCallManagerAudioMode = 'video'
|
|
41
42
|
}) => {
|
|
42
43
|
const [showRemoteParticipantInFloatingView, setShowRemoteParticipantInFloatingView] = (0, _react.useState)(false);
|
|
43
44
|
const styles = useStyles();
|
|
@@ -47,14 +48,12 @@ const CallContent = ({
|
|
|
47
48
|
}
|
|
48
49
|
} = (0, _contexts.useTheme)();
|
|
49
50
|
const {
|
|
50
|
-
useCallSettings,
|
|
51
51
|
useHasOngoingScreenShare,
|
|
52
52
|
useRemoteParticipants,
|
|
53
53
|
useLocalParticipant
|
|
54
54
|
} = (0, _videoReactBindings.useCallStateHooks)();
|
|
55
55
|
(0, _hooks2.useAutoEnterPiPEffect)(disablePictureInPicture);
|
|
56
|
-
const
|
|
57
|
-
const isVideoEnabledInCall = callSettings?.video.enabled;
|
|
56
|
+
const incallManagerModeRef = (0, _react.useRef)(initialInCallManagerAudioMode);
|
|
58
57
|
const _remoteParticipants = useRemoteParticipants();
|
|
59
58
|
const remoteParticipants = (0, _hooks.useDebouncedValue)(_remoteParticipants, 300); // we debounce the remote participants to avoid unnecessary rerenders that happen when participant tracks are all subscribed simultaneously
|
|
60
59
|
const localParticipant = useLocalParticipant();
|
|
@@ -69,10 +68,10 @@ const CallContent = ({
|
|
|
69
68
|
*/
|
|
70
69
|
(0, _react.useEffect)(() => {
|
|
71
70
|
_reactNativeIncallManager.default.start({
|
|
72
|
-
media:
|
|
71
|
+
media: incallManagerModeRef.current
|
|
73
72
|
});
|
|
74
73
|
return () => _reactNativeIncallManager.default.stop();
|
|
75
|
-
}, [
|
|
74
|
+
}, []);
|
|
76
75
|
const handleFloatingViewParticipantSwitch = () => {
|
|
77
76
|
if (remoteParticipants.length !== 1) {
|
|
78
77
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeIncallManager","_interopRequireDefault","_CallLayout","_CallControls","_videoReactBindings","_constants","_hooks","_Participant","_contexts","_hooks2","_ScreenShareOverlay","_RTCViewPipIOS","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","CallContent","onHangupCallHandler","CallParticipantsList","CallControls","DefaultCallControls","FloatingParticipantView","DefaultFloatingParticipantView","ScreenShareOverlay","DefaultScreenShareOverlay","ParticipantLabel","ParticipantNetworkQualityIndicator","ParticipantReaction","ParticipantVideoFallback","ParticipantView","VideoRenderer","layout","landscape","supportedReactions","iOSPiPIncludeLocalParticipantVideo","disablePictureInPicture","showRemoteParticipantInFloatingView","setShowRemoteParticipantInFloatingView","useState","styles","useStyles","theme","callContent","useTheme","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeIncallManager","_interopRequireDefault","_CallLayout","_CallControls","_videoReactBindings","_constants","_hooks","_Participant","_contexts","_hooks2","_ScreenShareOverlay","_RTCViewPipIOS","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","CallContent","onHangupCallHandler","CallParticipantsList","CallControls","DefaultCallControls","FloatingParticipantView","DefaultFloatingParticipantView","ScreenShareOverlay","DefaultScreenShareOverlay","ParticipantLabel","ParticipantNetworkQualityIndicator","ParticipantReaction","ParticipantVideoFallback","ParticipantView","VideoRenderer","layout","landscape","supportedReactions","iOSPiPIncludeLocalParticipantVideo","disablePictureInPicture","initialInCallManagerAudioMode","showRemoteParticipantInFloatingView","setShowRemoteParticipantInFloatingView","useState","styles","useStyles","theme","callContent","useTheme","useHasOngoingScreenShare","useRemoteParticipants","useLocalParticipant","useCallStateHooks","useAutoEnterPiPEffect","incallManagerModeRef","useRef","_remoteParticipants","remoteParticipants","useDebouncedValue","localParticipant","isInPiPMode","useIsInPiPMode","hasScreenShare","showSpotlightLayout","showFloatingView","isRemoteParticipantInFloatingView","useEffect","InCallManager","start","media","current","stop","handleFloatingViewParticipantSwitch","prevState","participantViewProps","callParticipantsGridProps","showLocalParticipant","callParticipantsSpotlightProps","landscapeStyles","flexDirection","createElement","Fragment","includeLocalParticipantVideo","View","style","container","content","callParticipantsContainer","view","topContainer","pointerEvents","participant","onPressHandler","CallParticipantsSpotlight","CallParticipantsGrid","exports","useMemo","StyleSheet","create","flex","paddingBottom","variants","insets","bottom","paddingLeft","left","paddingRight","right","paddingTop","top","backgroundColor","colors","sheetPrimary","absoluteFillObject","zIndex","Z_INDEX","IN_FRONT"],"sourceRoot":"../../../../../src","sources":["components/Call/CallContent/CallContent.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -20,6 +20,7 @@ const useCallMediaStreamCleanup = () => {
|
|
|
20
20
|
return () => {
|
|
21
21
|
const mediaStream = callRef.current?.camera.state.mediaStream;
|
|
22
22
|
if (mediaStream && !(callRef.current?.state.callingState === _videoClient.CallingState.JOINED || callRef.current?.state.callingState === _videoClient.CallingState.JOINING)) {
|
|
23
|
+
(0, _videoClient.getLogger)(['useCallMediaStreamCleanup'])('debug', 'Cleaning up camera media stream');
|
|
23
24
|
// we cleanup media stream only if call is not joined or joining
|
|
24
25
|
// @ts-ignore Due to DOM typing incompatible with RN
|
|
25
26
|
(0, _videoClient.disposeOfMediaStream)(mediaStream);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_videoClient","require","_videoReactBindings","_react","useCallMediaStreamCleanup","call","useCall","callRef","useRef","current","useEffect","mediaStream","camera","state","callingState","CallingState","JOINED","JOINING","disposeOfMediaStream","exports"],"sourceRoot":"../../../../src","sources":["hooks/internal/useCallMediaStreamCleanup.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["_videoClient","require","_videoReactBindings","_react","useCallMediaStreamCleanup","call","useCall","callRef","useRef","current","useEffect","mediaStream","camera","state","callingState","CallingState","JOINED","JOINING","getLogger","disposeOfMediaStream","exports"],"sourceRoot":"../../../../src","sources":["hooks/internal/useCallMediaStreamCleanup.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAKA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACO,MAAMG,yBAAyB,GAAGA,CAAA,KAAM;EAC7C,MAAMC,IAAI,GAAG,IAAAC,2BAAO,EAAC,CAAC;EACtB;EACA,MAAMC,OAAO,GAAG,IAAAC,aAAM,EAACH,IAAI,CAAC;EAC5BE,OAAO,CAACE,OAAO,GAAGJ,IAAI;EAEtB,IAAAK,gBAAS,EAAC,MAAM;IACd,OAAO,MAAM;MACX,MAAMC,WAAW,GAAGJ,OAAO,CAACE,OAAO,EAAEG,MAAM,CAACC,KAAK,CAACF,WAErC;MACb,IACEA,WAAW,IACX,EACEJ,OAAO,CAACE,OAAO,EAAEI,KAAK,CAACC,YAAY,KAAKC,yBAAY,CAACC,MAAM,IAC3DT,OAAO,CAACE,OAAO,EAAEI,KAAK,CAACC,YAAY,KAAKC,yBAAY,CAACE,OAAO,CAC7D,EACD;QACA,IAAAC,sBAAS,EAAC,CAAC,2BAA2B,CAAC,CAAC,CACtC,OAAO,EACP,iCACF,CAAC;QACD;QACA;QACA,IAAAC,iCAAoB,EAACR,WAAW,CAAC;MACnC;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;AAACS,OAAA,CAAAhB,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|
|
@@ -27,7 +27,14 @@ const AppStateListener = () => {
|
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
29
29
|
const disablePiP = _videoClient.RxUtils.getCurrentValue(_rxSubjects.disablePiPMode$);
|
|
30
|
-
|
|
30
|
+
const logger = (0, _videoClient.getLogger)(['AppStateListener']);
|
|
31
|
+
const initialPipMode = !disablePiP && _reactNative.AppState.currentState === 'background';
|
|
32
|
+
_rxSubjects.isInPiPModeAndroid$.next(initialPipMode);
|
|
33
|
+
logger('debug', 'Initial PiP mode on mount set to ', initialPipMode);
|
|
34
|
+
_reactNative.NativeModules?.StreamVideoReactNative?.isInPiPMode().then(isInPiP => {
|
|
35
|
+
_rxSubjects.isInPiPModeAndroid$.next(!!isInPiP);
|
|
36
|
+
logger('debug', 'Initial PiP mode on mount (after asking native module) set to ', !!isInPiP);
|
|
37
|
+
});
|
|
31
38
|
const eventEmitter = new _reactNative.NativeEventEmitter(_reactNative.NativeModules.StreamVideoReactNative);
|
|
32
39
|
const subscriptionPiPChange = eventEmitter.addListener(PIP_CHANGE_EVENT, isInPiPMode => {
|
|
33
40
|
_rxSubjects.isInPiPModeAndroid$.next(isInPiPMode);
|
|
@@ -41,6 +48,7 @@ const AppStateListener = () => {
|
|
|
41
48
|
// we dont check for inactive states
|
|
42
49
|
// ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
|
|
43
50
|
const subscription = _reactNative.AppState.addEventListener('change', nextAppState => {
|
|
51
|
+
const logger = (0, _videoClient.getLogger)(['AppStateListener']);
|
|
44
52
|
if (appState.current.match(/background/) && nextAppState === 'active') {
|
|
45
53
|
if (call?.camera?.state.status === 'enabled' && _reactNative.Platform.OS === 'android') {
|
|
46
54
|
// when device is locked and resumed, the status isnt made disabled but stays enabled
|
|
@@ -48,23 +56,26 @@ const AppStateListener = () => {
|
|
|
48
56
|
call?.camera?.disable(true).then(() => {
|
|
49
57
|
call?.camera?.enable();
|
|
50
58
|
});
|
|
59
|
+
logger('debug', 'Disable and reenable camera as app came to foreground');
|
|
51
60
|
} else {
|
|
52
61
|
if (cameraDisabledByAppState.current) {
|
|
53
62
|
call?.camera?.resume();
|
|
54
63
|
cameraDisabledByAppState.current = false;
|
|
64
|
+
logger('debug', 'Resume camera as app came to foreground');
|
|
55
65
|
}
|
|
56
66
|
}
|
|
57
67
|
appState.current = nextAppState;
|
|
58
68
|
} else if (appState.current === 'active' && nextAppState.match(/background/)) {
|
|
69
|
+
const disableCameraIfNeeded = () => {
|
|
70
|
+
if (call?.camera?.state.status === 'enabled') {
|
|
71
|
+
cameraDisabledByAppState.current = true;
|
|
72
|
+
call?.camera?.disable();
|
|
73
|
+
logger('debug', 'Camera disabled by app going to background');
|
|
74
|
+
}
|
|
75
|
+
};
|
|
59
76
|
if (_reactNative.Platform.OS === 'android') {
|
|
60
77
|
// in Android, we need to check if we are in PiP mode
|
|
61
78
|
// in PiP mode, we don't want to disable the camera
|
|
62
|
-
const disableCameraIfNeeded = () => {
|
|
63
|
-
if (call?.camera?.state.status === 'enabled') {
|
|
64
|
-
cameraDisabledByAppState.current = true;
|
|
65
|
-
call?.camera?.disable();
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
79
|
if (isAndroid8OrAbove) {
|
|
69
80
|
// set with an assumption that its enabled so that UI disabling happens faster
|
|
70
81
|
const disablePiP = _videoClient.RxUtils.getCurrentValue(_rxSubjects.disablePiPMode$);
|
|
@@ -88,10 +99,7 @@ const AppStateListener = () => {
|
|
|
88
99
|
} else {
|
|
89
100
|
// shouldDisableIOSLocalVideoOnBackgroundRef is false, if local video is enabled on PiP
|
|
90
101
|
if (_shouldDisableIOSLocalVideoOnBackground.shouldDisableIOSLocalVideoOnBackgroundRef.current) {
|
|
91
|
-
|
|
92
|
-
cameraDisabledByAppState.current = true;
|
|
93
|
-
call?.camera?.disable();
|
|
94
|
-
}
|
|
102
|
+
disableCameraIfNeeded();
|
|
95
103
|
}
|
|
96
104
|
}
|
|
97
105
|
appState.current = nextAppState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_videoReactBindings","require","_react","_reactNative","_shouldDisableIOSLocalVideoOnBackground","_rxSubjects","_videoClient","PIP_CHANGE_EVENT","isAndroid8OrAbove","Platform","OS","Version","AppStateListener","call","useCall","appState","useRef","AppState","currentState","cameraDisabledByAppState","useEffect","disablePiP","RxUtils","getCurrentValue","disablePiPMode$","isInPiPModeAndroid$","next","
|
|
1
|
+
{"version":3,"names":["_videoReactBindings","require","_react","_reactNative","_shouldDisableIOSLocalVideoOnBackground","_rxSubjects","_videoClient","PIP_CHANGE_EVENT","isAndroid8OrAbove","Platform","OS","Version","AppStateListener","call","useCall","appState","useRef","AppState","currentState","cameraDisabledByAppState","useEffect","disablePiP","RxUtils","getCurrentValue","disablePiPMode$","logger","getLogger","initialPipMode","isInPiPModeAndroid$","next","NativeModules","StreamVideoReactNative","isInPiPMode","then","isInPiP","eventEmitter","NativeEventEmitter","subscriptionPiPChange","addListener","remove","subscription","addEventListener","nextAppState","current","match","camera","state","status","disable","enable","resume","disableCameraIfNeeded","shouldDisableIOSLocalVideoOnBackgroundRef","exports"],"sourceRoot":"../../../../src","sources":["providers/StreamCall/AppStateListener.tsx"],"mappings":"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","ignoreList":[]}
|
package/dist/commonjs/version.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
-
import React, { useEffect, useState, useMemo } from 'react';
|
|
2
|
+
import React, { useEffect, useState, useMemo, useRef } from 'react';
|
|
3
3
|
import { StyleSheet, View } from 'react-native';
|
|
4
4
|
import InCallManager from 'react-native-incall-manager';
|
|
5
5
|
import { CallParticipantsGrid, CallParticipantsSpotlight } from '../CallLayout';
|
|
@@ -28,7 +28,8 @@ export const CallContent = ({
|
|
|
28
28
|
landscape = false,
|
|
29
29
|
supportedReactions,
|
|
30
30
|
iOSPiPIncludeLocalParticipantVideo,
|
|
31
|
-
disablePictureInPicture
|
|
31
|
+
disablePictureInPicture,
|
|
32
|
+
initialInCallManagerAudioMode = 'video'
|
|
32
33
|
}) => {
|
|
33
34
|
const [showRemoteParticipantInFloatingView, setShowRemoteParticipantInFloatingView] = useState(false);
|
|
34
35
|
const styles = useStyles();
|
|
@@ -38,14 +39,12 @@ export const CallContent = ({
|
|
|
38
39
|
}
|
|
39
40
|
} = useTheme();
|
|
40
41
|
const {
|
|
41
|
-
useCallSettings,
|
|
42
42
|
useHasOngoingScreenShare,
|
|
43
43
|
useRemoteParticipants,
|
|
44
44
|
useLocalParticipant
|
|
45
45
|
} = useCallStateHooks();
|
|
46
46
|
useAutoEnterPiPEffect(disablePictureInPicture);
|
|
47
|
-
const
|
|
48
|
-
const isVideoEnabledInCall = callSettings?.video.enabled;
|
|
47
|
+
const incallManagerModeRef = useRef(initialInCallManagerAudioMode);
|
|
49
48
|
const _remoteParticipants = useRemoteParticipants();
|
|
50
49
|
const remoteParticipants = useDebouncedValue(_remoteParticipants, 300); // we debounce the remote participants to avoid unnecessary rerenders that happen when participant tracks are all subscribed simultaneously
|
|
51
50
|
const localParticipant = useLocalParticipant();
|
|
@@ -60,10 +59,10 @@ export const CallContent = ({
|
|
|
60
59
|
*/
|
|
61
60
|
useEffect(() => {
|
|
62
61
|
InCallManager.start({
|
|
63
|
-
media:
|
|
62
|
+
media: incallManagerModeRef.current
|
|
64
63
|
});
|
|
65
64
|
return () => InCallManager.stop();
|
|
66
|
-
}, [
|
|
65
|
+
}, []);
|
|
67
66
|
const handleFloatingViewParticipantSwitch = () => {
|
|
68
67
|
if (remoteParticipants.length !== 1) {
|
|
69
68
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useState","useMemo","StyleSheet","View","InCallManager","CallParticipantsGrid","CallParticipantsSpotlight","CallControls","DefaultCallControls","useCallStateHooks","Z_INDEX","useDebouncedValue","FloatingParticipantView","DefaultFloatingParticipantView","useTheme","useIsInPiPMode","useAutoEnterPiPEffect","ScreenShareOverlay","DefaultScreenShareOverlay","RTCViewPipIOS","CallContent","onHangupCallHandler","CallParticipantsList","ParticipantLabel","ParticipantNetworkQualityIndicator","ParticipantReaction","ParticipantVideoFallback","ParticipantView","VideoRenderer","layout","landscape","supportedReactions","iOSPiPIncludeLocalParticipantVideo","disablePictureInPicture","showRemoteParticipantInFloatingView","setShowRemoteParticipantInFloatingView","styles","useStyles","theme","callContent","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useState","useMemo","useRef","StyleSheet","View","InCallManager","CallParticipantsGrid","CallParticipantsSpotlight","CallControls","DefaultCallControls","useCallStateHooks","Z_INDEX","useDebouncedValue","FloatingParticipantView","DefaultFloatingParticipantView","useTheme","useIsInPiPMode","useAutoEnterPiPEffect","ScreenShareOverlay","DefaultScreenShareOverlay","RTCViewPipIOS","CallContent","onHangupCallHandler","CallParticipantsList","ParticipantLabel","ParticipantNetworkQualityIndicator","ParticipantReaction","ParticipantVideoFallback","ParticipantView","VideoRenderer","layout","landscape","supportedReactions","iOSPiPIncludeLocalParticipantVideo","disablePictureInPicture","initialInCallManagerAudioMode","showRemoteParticipantInFloatingView","setShowRemoteParticipantInFloatingView","styles","useStyles","theme","callContent","useHasOngoingScreenShare","useRemoteParticipants","useLocalParticipant","incallManagerModeRef","_remoteParticipants","remoteParticipants","localParticipant","isInPiPMode","hasScreenShare","showSpotlightLayout","showFloatingView","length","isRemoteParticipantInFloatingView","start","media","current","stop","handleFloatingViewParticipantSwitch","prevState","participantViewProps","callParticipantsGridProps","showLocalParticipant","callParticipantsSpotlightProps","landscapeStyles","flexDirection","createElement","Fragment","includeLocalParticipantVideo","style","container","content","callParticipantsContainer","view","topContainer","pointerEvents","_extends","participant","onPressHandler","create","flex","paddingBottom","variants","insets","bottom","paddingLeft","left","paddingRight","right","paddingTop","top","backgroundColor","colors","sheetPrimary","absoluteFillObject","zIndex","IN_FRONT"],"sourceRoot":"../../../../../src","sources":["components/Call/CallContent/CallContent.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CallingState, disposeOfMediaStream } from '@stream-io/video-client';
|
|
1
|
+
import { CallingState, disposeOfMediaStream, getLogger } from '@stream-io/video-client';
|
|
2
2
|
import { useCall } from '@stream-io/video-react-bindings';
|
|
3
3
|
import { useEffect, useRef } from 'react';
|
|
4
4
|
|
|
@@ -15,6 +15,7 @@ export const useCallMediaStreamCleanup = () => {
|
|
|
15
15
|
return () => {
|
|
16
16
|
const mediaStream = callRef.current?.camera.state.mediaStream;
|
|
17
17
|
if (mediaStream && !(callRef.current?.state.callingState === CallingState.JOINED || callRef.current?.state.callingState === CallingState.JOINING)) {
|
|
18
|
+
getLogger(['useCallMediaStreamCleanup'])('debug', 'Cleaning up camera media stream');
|
|
18
19
|
// we cleanup media stream only if call is not joined or joining
|
|
19
20
|
// @ts-ignore Due to DOM typing incompatible with RN
|
|
20
21
|
disposeOfMediaStream(mediaStream);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CallingState","disposeOfMediaStream","useCall","useEffect","useRef","useCallMediaStreamCleanup","call","callRef","current","mediaStream","camera","state","callingState","JOINED","JOINING"],"sourceRoot":"../../../../src","sources":["hooks/internal/useCallMediaStreamCleanup.ts"],"mappings":"AACA,
|
|
1
|
+
{"version":3,"names":["CallingState","disposeOfMediaStream","getLogger","useCall","useEffect","useRef","useCallMediaStreamCleanup","call","callRef","current","mediaStream","camera","state","callingState","JOINED","JOINING"],"sourceRoot":"../../../../src","sources":["hooks/internal/useCallMediaStreamCleanup.ts"],"mappings":"AACA,SACEA,YAAY,EACZC,oBAAoB,EACpBC,SAAS,QACJ,yBAAyB;AAChC,SAASC,OAAO,QAAQ,iCAAiC;AACzD,SAASC,SAAS,EAAEC,MAAM,QAAQ,OAAO;;AAEzC;AACA;AACA;AACA;AACA,OAAO,MAAMC,yBAAyB,GAAGA,CAAA,KAAM;EAC7C,MAAMC,IAAI,GAAGJ,OAAO,CAAC,CAAC;EACtB;EACA,MAAMK,OAAO,GAAGH,MAAM,CAACE,IAAI,CAAC;EAC5BC,OAAO,CAACC,OAAO,GAAGF,IAAI;EAEtBH,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MACX,MAAMM,WAAW,GAAGF,OAAO,CAACC,OAAO,EAAEE,MAAM,CAACC,KAAK,CAACF,WAErC;MACb,IACEA,WAAW,IACX,EACEF,OAAO,CAACC,OAAO,EAAEG,KAAK,CAACC,YAAY,KAAKb,YAAY,CAACc,MAAM,IAC3DN,OAAO,CAACC,OAAO,EAAEG,KAAK,CAACC,YAAY,KAAKb,YAAY,CAACe,OAAO,CAC7D,EACD;QACAb,SAAS,CAAC,CAAC,2BAA2B,CAAC,CAAC,CACtC,OAAO,EACP,iCACF,CAAC;QACD;QACA;QACAD,oBAAoB,CAACS,WAAW,CAAC;MACnC;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@ import { useEffect, useRef } from 'react';
|
|
|
3
3
|
import { AppState, NativeEventEmitter, NativeModules, Platform } from 'react-native';
|
|
4
4
|
import { shouldDisableIOSLocalVideoOnBackgroundRef } from '../../utils/internal/shouldDisableIOSLocalVideoOnBackground';
|
|
5
5
|
import { disablePiPMode$, isInPiPModeAndroid$ } from '../../utils/internal/rxSubjects';
|
|
6
|
-
import { RxUtils } from '@stream-io/video-client';
|
|
6
|
+
import { getLogger, RxUtils } from '@stream-io/video-client';
|
|
7
7
|
const PIP_CHANGE_EVENT = 'StreamVideoReactNative_PIP_CHANGE_EVENT';
|
|
8
8
|
const isAndroid8OrAbove = Platform.OS === 'android' && Platform.Version >= 26;
|
|
9
9
|
|
|
@@ -21,7 +21,14 @@ export const AppStateListener = () => {
|
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
23
|
const disablePiP = RxUtils.getCurrentValue(disablePiPMode$);
|
|
24
|
-
|
|
24
|
+
const logger = getLogger(['AppStateListener']);
|
|
25
|
+
const initialPipMode = !disablePiP && AppState.currentState === 'background';
|
|
26
|
+
isInPiPModeAndroid$.next(initialPipMode);
|
|
27
|
+
logger('debug', 'Initial PiP mode on mount set to ', initialPipMode);
|
|
28
|
+
NativeModules?.StreamVideoReactNative?.isInPiPMode().then(isInPiP => {
|
|
29
|
+
isInPiPModeAndroid$.next(!!isInPiP);
|
|
30
|
+
logger('debug', 'Initial PiP mode on mount (after asking native module) set to ', !!isInPiP);
|
|
31
|
+
});
|
|
25
32
|
const eventEmitter = new NativeEventEmitter(NativeModules.StreamVideoReactNative);
|
|
26
33
|
const subscriptionPiPChange = eventEmitter.addListener(PIP_CHANGE_EVENT, isInPiPMode => {
|
|
27
34
|
isInPiPModeAndroid$.next(isInPiPMode);
|
|
@@ -35,6 +42,7 @@ export const AppStateListener = () => {
|
|
|
35
42
|
// we dont check for inactive states
|
|
36
43
|
// ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
|
|
37
44
|
const subscription = AppState.addEventListener('change', nextAppState => {
|
|
45
|
+
const logger = getLogger(['AppStateListener']);
|
|
38
46
|
if (appState.current.match(/background/) && nextAppState === 'active') {
|
|
39
47
|
if (call?.camera?.state.status === 'enabled' && Platform.OS === 'android') {
|
|
40
48
|
// when device is locked and resumed, the status isnt made disabled but stays enabled
|
|
@@ -42,23 +50,26 @@ export const AppStateListener = () => {
|
|
|
42
50
|
call?.camera?.disable(true).then(() => {
|
|
43
51
|
call?.camera?.enable();
|
|
44
52
|
});
|
|
53
|
+
logger('debug', 'Disable and reenable camera as app came to foreground');
|
|
45
54
|
} else {
|
|
46
55
|
if (cameraDisabledByAppState.current) {
|
|
47
56
|
call?.camera?.resume();
|
|
48
57
|
cameraDisabledByAppState.current = false;
|
|
58
|
+
logger('debug', 'Resume camera as app came to foreground');
|
|
49
59
|
}
|
|
50
60
|
}
|
|
51
61
|
appState.current = nextAppState;
|
|
52
62
|
} else if (appState.current === 'active' && nextAppState.match(/background/)) {
|
|
63
|
+
const disableCameraIfNeeded = () => {
|
|
64
|
+
if (call?.camera?.state.status === 'enabled') {
|
|
65
|
+
cameraDisabledByAppState.current = true;
|
|
66
|
+
call?.camera?.disable();
|
|
67
|
+
logger('debug', 'Camera disabled by app going to background');
|
|
68
|
+
}
|
|
69
|
+
};
|
|
53
70
|
if (Platform.OS === 'android') {
|
|
54
71
|
// in Android, we need to check if we are in PiP mode
|
|
55
72
|
// in PiP mode, we don't want to disable the camera
|
|
56
|
-
const disableCameraIfNeeded = () => {
|
|
57
|
-
if (call?.camera?.state.status === 'enabled') {
|
|
58
|
-
cameraDisabledByAppState.current = true;
|
|
59
|
-
call?.camera?.disable();
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
73
|
if (isAndroid8OrAbove) {
|
|
63
74
|
// set with an assumption that its enabled so that UI disabling happens faster
|
|
64
75
|
const disablePiP = RxUtils.getCurrentValue(disablePiPMode$);
|
|
@@ -82,10 +93,7 @@ export const AppStateListener = () => {
|
|
|
82
93
|
} else {
|
|
83
94
|
// shouldDisableIOSLocalVideoOnBackgroundRef is false, if local video is enabled on PiP
|
|
84
95
|
if (shouldDisableIOSLocalVideoOnBackgroundRef.current) {
|
|
85
|
-
|
|
86
|
-
cameraDisabledByAppState.current = true;
|
|
87
|
-
call?.camera?.disable();
|
|
88
|
-
}
|
|
96
|
+
disableCameraIfNeeded();
|
|
89
97
|
}
|
|
90
98
|
}
|
|
91
99
|
appState.current = nextAppState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCall","useEffect","useRef","AppState","NativeEventEmitter","NativeModules","Platform","shouldDisableIOSLocalVideoOnBackgroundRef","disablePiPMode$","isInPiPModeAndroid$","RxUtils","PIP_CHANGE_EVENT","isAndroid8OrAbove","OS","Version","AppStateListener","call","appState","currentState","cameraDisabledByAppState","disablePiP","getCurrentValue","
|
|
1
|
+
{"version":3,"names":["useCall","useEffect","useRef","AppState","NativeEventEmitter","NativeModules","Platform","shouldDisableIOSLocalVideoOnBackgroundRef","disablePiPMode$","isInPiPModeAndroid$","getLogger","RxUtils","PIP_CHANGE_EVENT","isAndroid8OrAbove","OS","Version","AppStateListener","call","appState","currentState","cameraDisabledByAppState","disablePiP","getCurrentValue","logger","initialPipMode","next","StreamVideoReactNative","isInPiPMode","then","isInPiP","eventEmitter","subscriptionPiPChange","addListener","remove","subscription","addEventListener","nextAppState","current","match","camera","state","status","disable","enable","resume","disableCameraIfNeeded"],"sourceRoot":"../../../../src","sources":["providers/StreamCall/AppStateListener.tsx"],"mappings":"AAAA,SAASA,OAAO,QAAQ,iCAAiC;AACzD,SAASC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SACEC,QAAQ,EACRC,kBAAkB,EAClBC,aAAa,EACbC,QAAQ,QACH,cAAc;AACrB,SAASC,yCAAyC,QAAQ,6DAA6D;AACvH,SACEC,eAAe,EACfC,mBAAmB,QACd,iCAAiC;AACxC,SAASC,SAAS,EAAEC,OAAO,QAAQ,yBAAyB;AAE5D,MAAMC,gBAAgB,GAAG,yCAAyC;AAElE,MAAMC,iBAAiB,GAAGP,QAAQ,CAACQ,EAAE,KAAK,SAAS,IAAIR,QAAQ,CAACS,OAAO,IAAI,EAAE;;AAE7E;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAAM;EACpC,MAAMC,IAAI,GAAGjB,OAAO,CAAC,CAAC;EACtB,MAAMkB,QAAQ,GAAGhB,MAAM,CAACC,QAAQ,CAACgB,YAAY,CAAC;EAC9C,MAAMC,wBAAwB,GAAGlB,MAAM,CAAU,KAAK,CAAC;;EAEvD;EACAD,SAAS,CAAC,MAAM;IACd,IAAI,CAACY,iBAAiB,EAAE;MACtB;IACF;IAEA,MAAMQ,UAAU,GAAGV,OAAO,CAACW,eAAe,CAACd,eAAe,CAAC;IAC3D,MAAMe,MAAM,GAAGb,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC9C,MAAMc,cAAc,GAClB,CAACH,UAAU,IAAIlB,QAAQ,CAACgB,YAAY,KAAK,YAAY;IACvDV,mBAAmB,CAACgB,IAAI,CAACD,cAAc,CAAC;IACxCD,MAAM,CAAC,OAAO,EAAE,mCAAmC,EAAEC,cAAc,CAAC;IAEpEnB,aAAa,EAAEqB,sBAAsB,EAAEC,WAAW,CAAC,CAAC,CAACC,IAAI,CACtDC,OAAmC,IAAK;MACvCpB,mBAAmB,CAACgB,IAAI,CAAC,CAAC,CAACI,OAAO,CAAC;MACnCN,MAAM,CACJ,OAAO,EACP,gEAAgE,EAChE,CAAC,CAACM,OACJ,CAAC;IACH,CACF,CAAC;IAED,MAAMC,YAAY,GAAG,IAAI1B,kBAAkB,CACzCC,aAAa,CAACqB,sBAChB,CAAC;IAED,MAAMK,qBAAqB,GAAGD,YAAY,CAACE,WAAW,CACpDpB,gBAAgB,EACfe,WAAoB,IAAK;MACxBlB,mBAAmB,CAACgB,IAAI,CAACE,WAAW,CAAC;IACvC,CACF,CAAC;IAED,OAAO,MAAM;MACXI,qBAAqB,CAACE,MAAM,CAAC,CAAC;IAChC,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAENhC,SAAS,CAAC,MAAM;IACd;IACA;IACA;IACA,MAAMiC,YAAY,GAAG/B,QAAQ,CAACgC,gBAAgB,CAAC,QAAQ,EAAGC,YAAY,IAAK;MACzE,MAAMb,MAAM,GAAGb,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;MAC9C,IAAIQ,QAAQ,CAACmB,OAAO,CAACC,KAAK,CAAC,YAAY,CAAC,IAAIF,YAAY,KAAK,QAAQ,EAAE;QACrE,IACEnB,IAAI,EAAEsB,MAAM,EAAEC,KAAK,CAACC,MAAM,KAAK,SAAS,IACxCnC,QAAQ,CAACQ,EAAE,KAAK,SAAS,EACzB;UACA;UACA;UACAG,IAAI,EAAEsB,MAAM,EAAEG,OAAO,CAAC,IAAI,CAAC,CAACd,IAAI,CAAC,MAAM;YACrCX,IAAI,EAAEsB,MAAM,EAAEI,MAAM,CAAC,CAAC;UACxB,CAAC,CAAC;UACFpB,MAAM,CACJ,OAAO,EACP,uDACF,CAAC;QACH,CAAC,MAAM;UACL,IAAIH,wBAAwB,CAACiB,OAAO,EAAE;YACpCpB,IAAI,EAAEsB,MAAM,EAAEK,MAAM,CAAC,CAAC;YACtBxB,wBAAwB,CAACiB,OAAO,GAAG,KAAK;YACxCd,MAAM,CAAC,OAAO,EAAE,yCAAyC,CAAC;UAC5D;QACF;QACAL,QAAQ,CAACmB,OAAO,GAAGD,YAAY;MACjC,CAAC,MAAM,IACLlB,QAAQ,CAACmB,OAAO,KAAK,QAAQ,IAC7BD,YAAY,CAACE,KAAK,CAAC,YAAY,CAAC,EAChC;QACA,MAAMO,qBAAqB,GAAGA,CAAA,KAAM;UAClC,IAAI5B,IAAI,EAAEsB,MAAM,EAAEC,KAAK,CAACC,MAAM,KAAK,SAAS,EAAE;YAC5CrB,wBAAwB,CAACiB,OAAO,GAAG,IAAI;YACvCpB,IAAI,EAAEsB,MAAM,EAAEG,OAAO,CAAC,CAAC;YACvBnB,MAAM,CAAC,OAAO,EAAE,4CAA4C,CAAC;UAC/D;QACF,CAAC;QACD,IAAIjB,QAAQ,CAACQ,EAAE,KAAK,SAAS,EAAE;UAC7B;UACA;UACA,IAAID,iBAAiB,EAAE;YACrB;YACA,MAAMQ,UAAU,GAAGV,OAAO,CAACW,eAAe,CAACd,eAAe,CAAC;YAC3DC,mBAAmB,CAACgB,IAAI,CAAC,CAACJ,UAAU,CAAC;YACrC;YACAhB,aAAa,EAAEqB,sBAAsB,EAAEC,WAAW,CAAC,CAAC,CAACC,IAAI,CACtDC,OAAmC,IAAK;cACvCpB,mBAAmB,CAACgB,IAAI,CAAC,CAAC,CAACI,OAAO,CAAC;cACnC,IAAI,CAACA,OAAO,EAAE;gBACZ,IAAI1B,QAAQ,CAACgB,YAAY,KAAK,QAAQ,EAAE;kBACtC;kBACA;kBACA;kBACA;gBACF;gBACA0B,qBAAqB,CAAC,CAAC;cACzB;YACF,CACF,CAAC;UACH,CAAC,MAAM;YACLA,qBAAqB,CAAC,CAAC;UACzB;QACF,CAAC,MAAM;UACL;UACA,IAAItC,yCAAyC,CAAC8B,OAAO,EAAE;YACrDQ,qBAAqB,CAAC,CAAC;UACzB;QACF;QACA3B,QAAQ,CAACmB,OAAO,GAAGD,YAAY;MACjC;IACF,CAAC,CAAC;IAEF,OAAO,MAAM;MACXF,YAAY,CAACD,MAAM,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAAChB,IAAI,CAAC,CAAC;EAEV,OAAO,IAAI;AACb,CAAC","ignoreList":[]}
|
package/dist/module/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '1.10.
|
|
1
|
+
export const version = '1.10.8';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -40,7 +40,15 @@ export type CallContentProps = Pick<HangUpCallButtonProps, 'onHangupCallHandler'
|
|
|
40
40
|
* If true, disables the Picture-in-Picture mode for iOS and Android
|
|
41
41
|
*/
|
|
42
42
|
disablePictureInPicture?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Props to set the audio mode for the InCallManager.
|
|
45
|
+
* If media type is video, audio is routed by default to speaker, otherwise it is routed to earpiece.
|
|
46
|
+
* Changing the mode on the fly is not supported.
|
|
47
|
+
* Manually invoke `InCallManager.start({ media })` to achieve this.
|
|
48
|
+
* @default 'video'
|
|
49
|
+
*/
|
|
50
|
+
initialInCallManagerAudioMode?: 'video' | 'audio';
|
|
43
51
|
};
|
|
44
|
-
export declare const CallContent: ({ onHangupCallHandler, CallParticipantsList, CallControls, FloatingParticipantView, ScreenShareOverlay, ParticipantLabel, ParticipantNetworkQualityIndicator, ParticipantReaction, ParticipantVideoFallback, ParticipantView, VideoRenderer, layout, landscape, supportedReactions, iOSPiPIncludeLocalParticipantVideo, disablePictureInPicture, }: CallContentProps) => React.JSX.Element;
|
|
52
|
+
export declare const CallContent: ({ onHangupCallHandler, CallParticipantsList, CallControls, FloatingParticipantView, ScreenShareOverlay, ParticipantLabel, ParticipantNetworkQualityIndicator, ParticipantReaction, ParticipantVideoFallback, ParticipantView, VideoRenderer, layout, landscape, supportedReactions, iOSPiPIncludeLocalParticipantVideo, disablePictureInPicture, initialInCallManagerAudioMode, }: CallContentProps) => React.JSX.Element;
|
|
45
53
|
export {};
|
|
46
54
|
//# sourceMappingURL=CallContent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallContent.d.ts","sourceRoot":"","sources":["../../../../../src/components/Call/CallContent/CallContent.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"CallContent.d.ts","sourceRoot":"","sources":["../../../../../src/components/Call/CallContent/CallContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AASpE,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,qBAAqB,EAC3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAI9D,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EACnC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,kCAAkC,EACvC,KAAK,yBAAyB,EAC/B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,kCAAkC,CAAC;AAG1C,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG;IAChD,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,yBAAyB,GAAG,6BAA6B,GAC5D,IAAI,CAAC,kCAAkC,EAAE,iBAAiB,CAAC,GAAG;IAC5D;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAC5D;;OAEG;IACH,uBAAuB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,4BAA4B,CAAC,GAAG,IAAI,CAAC;IACnF;;OAEG;IACH,oBAAoB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC;IAC7E;;OAEG;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC;CAC1E,CAAC;AAEJ,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,qBAAqB,EACrB,qBAAqB,CACtB,GACC,yBAAyB,GAAG;IAC1B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC9B;;OAEG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAK1C,SAAS,CAAC,EAAE,OAAO,CAAC;IAIpB,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;;;OAMG;IACH,6BAA6B,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CACnD,CAAC;AAEJ,eAAO,MAAM,WAAW,sXAkBrB,gBAAgB,sBAiIlB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCallMediaStreamCleanup.d.ts","sourceRoot":"","sources":["../../../../src/hooks/internal/useCallMediaStreamCleanup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useCallMediaStreamCleanup.d.ts","sourceRoot":"","sources":["../../../../src/hooks/internal/useCallMediaStreamCleanup.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,yBAAyB,YA4BrC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppStateListener.d.ts","sourceRoot":"","sources":["../../../../src/providers/StreamCall/AppStateListener.tsx"],"names":[],"mappings":"AAsBA,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"AppStateListener.d.ts","sourceRoot":"","sources":["../../../../src/providers/StreamCall/AppStateListener.tsx"],"names":[],"mappings":"AAsBA,eAAO,MAAM,gBAAgB,YA6H5B,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "1.10.
|
|
1
|
+
export declare const version = "1.10.8";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/video-react-native-sdk",
|
|
3
|
-
"version": "1.10.
|
|
3
|
+
"version": "1.10.8",
|
|
4
4
|
"packageManager": "yarn@3.2.4",
|
|
5
5
|
"description": "Stream Video SDK for React Native",
|
|
6
6
|
"author": "https://getstream.io",
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
"expo-modules-core": "1.12.16",
|
|
139
139
|
"expo-notifications": "~0.29.11",
|
|
140
140
|
"jest": "^29.7.0",
|
|
141
|
-
"react-native": "
|
|
141
|
+
"react-native": "~0.73",
|
|
142
142
|
"react-native-builder-bob": "~0.23",
|
|
143
143
|
"react-native-callkeep": "4.3.11",
|
|
144
144
|
"react-native-gesture-handler": "2.16.2",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useEffect, useState, useMemo } from 'react';
|
|
1
|
+
import React, { useEffect, useState, useMemo, useRef } from 'react';
|
|
2
2
|
import { StyleSheet, View, type ViewStyle } from 'react-native';
|
|
3
3
|
import InCallManager from 'react-native-incall-manager';
|
|
4
4
|
import {
|
|
@@ -84,6 +84,14 @@ export type CallContentProps = Pick<
|
|
|
84
84
|
* If true, disables the Picture-in-Picture mode for iOS and Android
|
|
85
85
|
*/
|
|
86
86
|
disablePictureInPicture?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Props to set the audio mode for the InCallManager.
|
|
89
|
+
* If media type is video, audio is routed by default to speaker, otherwise it is routed to earpiece.
|
|
90
|
+
* Changing the mode on the fly is not supported.
|
|
91
|
+
* Manually invoke `InCallManager.start({ media })` to achieve this.
|
|
92
|
+
* @default 'video'
|
|
93
|
+
*/
|
|
94
|
+
initialInCallManagerAudioMode?: 'video' | 'audio';
|
|
87
95
|
};
|
|
88
96
|
|
|
89
97
|
export const CallContent = ({
|
|
@@ -103,6 +111,7 @@ export const CallContent = ({
|
|
|
103
111
|
supportedReactions,
|
|
104
112
|
iOSPiPIncludeLocalParticipantVideo,
|
|
105
113
|
disablePictureInPicture,
|
|
114
|
+
initialInCallManagerAudioMode = 'video',
|
|
106
115
|
}: CallContentProps) => {
|
|
107
116
|
const [
|
|
108
117
|
showRemoteParticipantInFloatingView,
|
|
@@ -113,7 +122,6 @@ export const CallContent = ({
|
|
|
113
122
|
theme: { callContent },
|
|
114
123
|
} = useTheme();
|
|
115
124
|
const {
|
|
116
|
-
useCallSettings,
|
|
117
125
|
useHasOngoingScreenShare,
|
|
118
126
|
useRemoteParticipants,
|
|
119
127
|
useLocalParticipant,
|
|
@@ -121,8 +129,7 @@ export const CallContent = ({
|
|
|
121
129
|
|
|
122
130
|
useAutoEnterPiPEffect(disablePictureInPicture);
|
|
123
131
|
|
|
124
|
-
const
|
|
125
|
-
const isVideoEnabledInCall = callSettings?.video.enabled;
|
|
132
|
+
const incallManagerModeRef = useRef(initialInCallManagerAudioMode);
|
|
126
133
|
|
|
127
134
|
const _remoteParticipants = useRemoteParticipants();
|
|
128
135
|
const remoteParticipants = useDebouncedValue(_remoteParticipants, 300); // we debounce the remote participants to avoid unnecessary rerenders that happen when participant tracks are all subscribed simultaneously
|
|
@@ -146,10 +153,10 @@ export const CallContent = ({
|
|
|
146
153
|
* This hook is used to handle IncallManager specs of the application.
|
|
147
154
|
*/
|
|
148
155
|
useEffect(() => {
|
|
149
|
-
InCallManager.start({ media:
|
|
156
|
+
InCallManager.start({ media: incallManagerModeRef.current });
|
|
150
157
|
|
|
151
158
|
return () => InCallManager.stop();
|
|
152
|
-
}, [
|
|
159
|
+
}, []);
|
|
153
160
|
|
|
154
161
|
const handleFloatingViewParticipantSwitch = () => {
|
|
155
162
|
if (remoteParticipants.length !== 1) {
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { MediaStream } from '@stream-io/react-native-webrtc';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
CallingState,
|
|
4
|
+
disposeOfMediaStream,
|
|
5
|
+
getLogger,
|
|
6
|
+
} from '@stream-io/video-client';
|
|
3
7
|
import { useCall } from '@stream-io/video-react-bindings';
|
|
4
8
|
import { useEffect, useRef } from 'react';
|
|
5
9
|
|
|
@@ -25,6 +29,10 @@ export const useCallMediaStreamCleanup = () => {
|
|
|
25
29
|
callRef.current?.state.callingState === CallingState.JOINING
|
|
26
30
|
)
|
|
27
31
|
) {
|
|
32
|
+
getLogger(['useCallMediaStreamCleanup'])(
|
|
33
|
+
'debug',
|
|
34
|
+
'Cleaning up camera media stream'
|
|
35
|
+
);
|
|
28
36
|
// we cleanup media stream only if call is not joined or joining
|
|
29
37
|
// @ts-ignore Due to DOM typing incompatible with RN
|
|
30
38
|
disposeOfMediaStream(mediaStream);
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
disablePiPMode$,
|
|
12
12
|
isInPiPModeAndroid$,
|
|
13
13
|
} from '../../utils/internal/rxSubjects';
|
|
14
|
-
import { RxUtils } from '@stream-io/video-client';
|
|
14
|
+
import { getLogger, RxUtils } from '@stream-io/video-client';
|
|
15
15
|
|
|
16
16
|
const PIP_CHANGE_EVENT = 'StreamVideoReactNative_PIP_CHANGE_EVENT';
|
|
17
17
|
|
|
@@ -32,8 +32,21 @@ export const AppStateListener = () => {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
const disablePiP = RxUtils.getCurrentValue(disablePiPMode$);
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
const logger = getLogger(['AppStateListener']);
|
|
36
|
+
const initialPipMode =
|
|
37
|
+
!disablePiP && AppState.currentState === 'background';
|
|
38
|
+
isInPiPModeAndroid$.next(initialPipMode);
|
|
39
|
+
logger('debug', 'Initial PiP mode on mount set to ', initialPipMode);
|
|
40
|
+
|
|
41
|
+
NativeModules?.StreamVideoReactNative?.isInPiPMode().then(
|
|
42
|
+
(isInPiP: boolean | null | undefined) => {
|
|
43
|
+
isInPiPModeAndroid$.next(!!isInPiP);
|
|
44
|
+
logger(
|
|
45
|
+
'debug',
|
|
46
|
+
'Initial PiP mode on mount (after asking native module) set to ',
|
|
47
|
+
!!isInPiP
|
|
48
|
+
);
|
|
49
|
+
}
|
|
37
50
|
);
|
|
38
51
|
|
|
39
52
|
const eventEmitter = new NativeEventEmitter(
|
|
@@ -57,6 +70,7 @@ export const AppStateListener = () => {
|
|
|
57
70
|
// we dont check for inactive states
|
|
58
71
|
// ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
|
|
59
72
|
const subscription = AppState.addEventListener('change', (nextAppState) => {
|
|
73
|
+
const logger = getLogger(['AppStateListener']);
|
|
60
74
|
if (appState.current.match(/background/) && nextAppState === 'active') {
|
|
61
75
|
if (
|
|
62
76
|
call?.camera?.state.status === 'enabled' &&
|
|
@@ -67,10 +81,15 @@ export const AppStateListener = () => {
|
|
|
67
81
|
call?.camera?.disable(true).then(() => {
|
|
68
82
|
call?.camera?.enable();
|
|
69
83
|
});
|
|
84
|
+
logger(
|
|
85
|
+
'debug',
|
|
86
|
+
'Disable and reenable camera as app came to foreground'
|
|
87
|
+
);
|
|
70
88
|
} else {
|
|
71
89
|
if (cameraDisabledByAppState.current) {
|
|
72
90
|
call?.camera?.resume();
|
|
73
91
|
cameraDisabledByAppState.current = false;
|
|
92
|
+
logger('debug', 'Resume camera as app came to foreground');
|
|
74
93
|
}
|
|
75
94
|
}
|
|
76
95
|
appState.current = nextAppState;
|
|
@@ -78,15 +97,16 @@ export const AppStateListener = () => {
|
|
|
78
97
|
appState.current === 'active' &&
|
|
79
98
|
nextAppState.match(/background/)
|
|
80
99
|
) {
|
|
100
|
+
const disableCameraIfNeeded = () => {
|
|
101
|
+
if (call?.camera?.state.status === 'enabled') {
|
|
102
|
+
cameraDisabledByAppState.current = true;
|
|
103
|
+
call?.camera?.disable();
|
|
104
|
+
logger('debug', 'Camera disabled by app going to background');
|
|
105
|
+
}
|
|
106
|
+
};
|
|
81
107
|
if (Platform.OS === 'android') {
|
|
82
108
|
// in Android, we need to check if we are in PiP mode
|
|
83
109
|
// in PiP mode, we don't want to disable the camera
|
|
84
|
-
const disableCameraIfNeeded = () => {
|
|
85
|
-
if (call?.camera?.state.status === 'enabled') {
|
|
86
|
-
cameraDisabledByAppState.current = true;
|
|
87
|
-
call?.camera?.disable();
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
110
|
if (isAndroid8OrAbove) {
|
|
91
111
|
// set with an assumption that its enabled so that UI disabling happens faster
|
|
92
112
|
const disablePiP = RxUtils.getCurrentValue(disablePiPMode$);
|
|
@@ -112,10 +132,7 @@ export const AppStateListener = () => {
|
|
|
112
132
|
} else {
|
|
113
133
|
// shouldDisableIOSLocalVideoOnBackgroundRef is false, if local video is enabled on PiP
|
|
114
134
|
if (shouldDisableIOSLocalVideoOnBackgroundRef.current) {
|
|
115
|
-
|
|
116
|
-
cameraDisabledByAppState.current = true;
|
|
117
|
-
call?.camera?.disable();
|
|
118
|
-
}
|
|
135
|
+
disableCameraIfNeeded();
|
|
119
136
|
}
|
|
120
137
|
}
|
|
121
138
|
appState.current = nextAppState;
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '1.10.
|
|
1
|
+
export const version = '1.10.8';
|