@stream-io/video-react-native-sdk 1.10.6 → 1.10.7

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 CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [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)
6
+
7
+
8
+ * pinning rn dev dep for sdk ([0e78ddc](https://github.com/GetStream/stream-video-js/commit/0e78ddcfabdd7f42849cad47efa0da623c2021cb))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * pip race condition ([#1700](https://github.com/GetStream/stream-video-js/issues/1700)) ([60c8aa6](https://github.com/GetStream/stream-video-js/commit/60c8aa6c5651072f15da1770e9840d3f2b8c11c0))
14
+
5
15
  ## [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
16
 
7
17
  ### Dependency Updates
@@ -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;AACA,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;QACA;QACA,IAAAC,iCAAoB,EAACP,WAAW,CAAC;MACnC;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;AAACQ,OAAA,CAAAf,yBAAA,GAAAA,yBAAA","ignoreList":[]}
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
- _rxSubjects.isInPiPModeAndroid$.next(!disablePiP && _reactNative.AppState.currentState === 'background');
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
- if (call?.camera?.state.status === 'enabled') {
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","eventEmitter","NativeEventEmitter","NativeModules","StreamVideoReactNative","subscriptionPiPChange","addListener","isInPiPMode","remove","subscription","addEventListener","nextAppState","current","match","camera","state","status","disable","then","enable","resume","disableCameraIfNeeded","isInPiP","shouldDisableIOSLocalVideoOnBackgroundRef","exports"],"sourceRoot":"../../../../src","sources":["providers/StreamCall/AppStateListener.tsx"],"mappings":"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","ignoreList":[]}
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":[]}
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- const version = exports.version = '1.10.6';
7
+ const version = exports.version = '1.10.7';
8
8
  //# sourceMappingURL=version.js.map
@@ -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,SAASA,YAAY,EAAEC,oBAAoB,QAAQ,yBAAyB;AAC5E,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,KAAKZ,YAAY,CAACa,MAAM,IAC3DN,OAAO,CAACC,OAAO,EAAEG,KAAK,CAACC,YAAY,KAAKZ,YAAY,CAACc,OAAO,CAC7D,EACD;QACA;QACA;QACAb,oBAAoB,CAACQ,WAAW,CAAC;MACnC;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC","ignoreList":[]}
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
- isInPiPModeAndroid$.next(!disablePiP && AppState.currentState === 'background');
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
- if (call?.camera?.state.status === 'enabled') {
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","next","eventEmitter","StreamVideoReactNative","subscriptionPiPChange","addListener","isInPiPMode","remove","subscription","addEventListener","nextAppState","current","match","camera","state","status","disable","then","enable","resume","disableCameraIfNeeded","isInPiP"],"sourceRoot":"../../../../src","sources":["providers/StreamCall/AppStateListener.tsx"],"mappings":"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","ignoreList":[]}
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":[]}
@@ -1,2 +1,2 @@
1
- export const version = '1.10.6';
1
+ export const version = '1.10.7';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCallMediaStreamCleanup.d.ts","sourceRoot":"","sources":["../../../../src/hooks/internal/useCallMediaStreamCleanup.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,eAAO,MAAM,yBAAyB,YAwBrC,CAAC"}
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,YA4G5B,CAAC"}
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.6";
1
+ export declare const version = "1.10.7";
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.6",
3
+ "version": "1.10.7",
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": "^0.73",
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,5 +1,9 @@
1
1
  import { MediaStream } from '@stream-io/react-native-webrtc';
2
- import { CallingState, disposeOfMediaStream } from '@stream-io/video-client';
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
- isInPiPModeAndroid$.next(
36
- !disablePiP && AppState.currentState === 'background'
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
- if (call?.camera?.state.status === 'enabled') {
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.6';
1
+ export const version = '1.10.7';