@stream-io/video-react-native-sdk 0.7.27 → 0.7.29
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 +13 -0
- package/dist/commonjs/providers/StreamCall.js +34 -22
- package/dist/commonjs/providers/StreamCall.js.map +1 -1
- package/dist/commonjs/utils/hooks/index.js +0 -11
- package/dist/commonjs/utils/hooks/index.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/module/providers/StreamCall.js +36 -24
- package/dist/module/providers/StreamCall.js.map +1 -1
- package/dist/module/utils/hooks/index.js +0 -1
- package/dist/module/utils/hooks/index.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/typescript/providers/StreamCall.d.ts.map +1 -1
- package/dist/typescript/utils/hooks/index.d.ts +0 -1
- package/dist/typescript/utils/hooks/index.d.ts.map +1 -1
- package/dist/typescript/version.d.ts +1 -1
- package/package.json +3 -3
- package/src/providers/StreamCall.tsx +36 -24
- package/src/utils/hooks/index.ts +0 -1
- package/src/version.ts +1 -1
- package/dist/commonjs/utils/hooks/useAppStateListener.js +0 -43
- package/dist/commonjs/utils/hooks/useAppStateListener.js.map +0 -1
- package/dist/module/utils/hooks/useAppStateListener.js +0 -36
- package/dist/module/utils/hooks/useAppStateListener.js.map +0 -1
- package/dist/typescript/utils/hooks/useAppStateListener.d.ts +0 -2
- package/dist/typescript/utils/hooks/useAppStateListener.d.ts.map +0 -1
- package/src/utils/hooks/useAppStateListener.ts +0 -48
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
### [0.7.29](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.7.28...@stream-io/video-react-native-sdk-0.7.29) (2024-06-12)
|
|
6
|
+
|
|
7
|
+
### Dependency Updates
|
|
8
|
+
|
|
9
|
+
* `@stream-io/video-client` updated to version `1.3.1`
|
|
10
|
+
* `@stream-io/video-react-bindings` updated to version `0.4.43`
|
|
11
|
+
### [0.7.28](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.7.27...@stream-io/video-react-native-sdk-0.7.28) (2024-06-10)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* **ios:** do not disable camera on inactive state ([#1396](https://github.com/GetStream/stream-video-js/issues/1396)) ([741f0bc](https://github.com/GetStream/stream-video-js/commit/741f0bc2dc54db0f95211eea3b558b16a45d40f3))
|
|
17
|
+
|
|
5
18
|
### [0.7.27](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.7.26...@stream-io/video-react-native-sdk-0.7.27) (2024-06-07)
|
|
6
19
|
|
|
7
20
|
### Dependency Updates
|
|
@@ -9,7 +9,6 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
9
9
|
var _useIosCallkeepWithCallingStateEffect = require("../hooks/push/useIosCallkeepWithCallingStateEffect");
|
|
10
10
|
var _utils = require("../utils/push/utils");
|
|
11
11
|
var _useAndroidKeepCallAliveEffect = require("../hooks/useAndroidKeepCallAliveEffect");
|
|
12
|
-
var _hooks = require("../utils/hooks");
|
|
13
12
|
var _reactNative = require("react-native");
|
|
14
13
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
14
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -28,31 +27,44 @@ const StreamCall = ({
|
|
|
28
27
|
call: call
|
|
29
28
|
}, /*#__PURE__*/_react.default.createElement(AppStateListener, null), /*#__PURE__*/_react.default.createElement(AndroidKeepCallAlive, null), /*#__PURE__*/_react.default.createElement(IosInformCallkeepCallEnd, null), /*#__PURE__*/_react.default.createElement(ClearPushWSSubscriptions, null), children);
|
|
30
29
|
};
|
|
30
|
+
|
|
31
|
+
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
32
|
+
// To save on CPU resources
|
|
31
33
|
exports.StreamCall = StreamCall;
|
|
32
34
|
const AppStateListener = () => {
|
|
33
35
|
const call = (0, _videoReactBindings.useCall)();
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
36
|
+
const appState = (0, _react.useRef)(_reactNative.AppState.currentState);
|
|
37
|
+
(0, _react.useEffect)(() => {
|
|
38
|
+
// due to strange behavior in iOS when app goes to "inactive" state
|
|
39
|
+
// we dont check for inactive states
|
|
40
|
+
// ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
|
|
41
|
+
const subscription = _reactNative.AppState.addEventListener('change', nextAppState => {
|
|
42
|
+
if (appState.current.match(/background/) && nextAppState === 'active') {
|
|
43
|
+
var _call$camera;
|
|
44
|
+
call === null || call === void 0 || (_call$camera = call.camera) === null || _call$camera === void 0 || _call$camera.resume();
|
|
45
|
+
appState.current = nextAppState;
|
|
46
|
+
} else if (appState.current === 'active' && nextAppState.match(/background/)) {
|
|
47
|
+
if (_reactNative.Platform.OS === 'android') {
|
|
48
|
+
var _NativeModules$Stream;
|
|
49
|
+
// in Android, we need to check if we are in PiP mode
|
|
50
|
+
// in PiP mode, we don't want to disable the camera
|
|
51
|
+
_reactNative.NativeModules === null || _reactNative.NativeModules === void 0 || (_NativeModules$Stream = _reactNative.NativeModules.StreamVideoReactNative) === null || _NativeModules$Stream === void 0 || _NativeModules$Stream.isInPiPMode().then(async isInPiP => {
|
|
52
|
+
if (!isInPiP) {
|
|
53
|
+
var _call$camera2;
|
|
54
|
+
await (call === null || call === void 0 || (_call$camera2 = call.camera) === null || _call$camera2 === void 0 ? void 0 : _call$camera2.disable());
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
} else {
|
|
58
|
+
var _call$camera3;
|
|
59
|
+
call === null || call === void 0 || (_call$camera3 = call.camera) === null || _call$camera3 === void 0 || _call$camera3.disable();
|
|
49
60
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
61
|
+
appState.current = nextAppState;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return () => {
|
|
65
|
+
subscription.remove();
|
|
66
|
+
};
|
|
67
|
+
}, [call]);
|
|
56
68
|
return null;
|
|
57
69
|
};
|
|
58
70
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_videoReactBindings","require","_react","_interopRequireWildcard","_useIosCallkeepWithCallingStateEffect","_utils","_useAndroidKeepCallAliveEffect","
|
|
1
|
+
{"version":3,"names":["_videoReactBindings","require","_react","_interopRequireWildcard","_useIosCallkeepWithCallingStateEffect","_utils","_useAndroidKeepCallAliveEffect","_reactNative","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","StreamCall","children","createElement","StreamCallProvider","AppStateListener","AndroidKeepCallAlive","IosInformCallkeepCallEnd","ClearPushWSSubscriptions","exports","useCall","appState","useRef","AppState","currentState","useEffect","subscription","addEventListener","nextAppState","current","match","_call$camera","camera","resume","Platform","OS","_NativeModules$Stream","NativeModules","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","remove","useAndroidKeepCallAliveEffect","useIosCallkeepWithCallingStateEffect","clearPushWSEventSubscriptions","canAddPushWSSubscriptionsRef"],"sourceRoot":"../../../src","sources":["providers/StreamCall.tsx"],"mappings":"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"}
|
|
@@ -3,17 +3,6 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
var _useAppStateListener = require("./useAppStateListener");
|
|
7
|
-
Object.keys(_useAppStateListener).forEach(function (key) {
|
|
8
|
-
if (key === "default" || key === "__esModule") return;
|
|
9
|
-
if (key in exports && exports[key] === _useAppStateListener[key]) return;
|
|
10
|
-
Object.defineProperty(exports, key, {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function () {
|
|
13
|
-
return _useAppStateListener[key];
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
6
|
var _useDebouncedValue = require("./useDebouncedValue");
|
|
18
7
|
Object.keys(_useDebouncedValue).forEach(function (key) {
|
|
19
8
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_useDebouncedValue","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_usePrevious"],"sourceRoot":"../../../../src","sources":["utils/hooks/index.ts"],"mappings":";;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,kBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,kBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,kBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,YAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,YAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,YAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,YAAA,CAAAL,GAAA;IAAA;EAAA;AAAA"}
|
package/dist/commonjs/version.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { StreamCallProvider, useCall } from '@stream-io/video-react-bindings';
|
|
2
|
-
import React, { useEffect } from 'react';
|
|
2
|
+
import React, { useEffect, useRef } from 'react';
|
|
3
3
|
import { useIosCallkeepWithCallingStateEffect } from '../hooks/push/useIosCallkeepWithCallingStateEffect';
|
|
4
4
|
import { canAddPushWSSubscriptionsRef, clearPushWSEventSubscriptions } from '../utils/push/utils';
|
|
5
5
|
import { useAndroidKeepCallAliveEffect } from '../hooks/useAndroidKeepCallAliveEffect';
|
|
6
|
-
import {
|
|
7
|
-
import { NativeModules, Platform } from 'react-native';
|
|
6
|
+
import { AppState, NativeModules, Platform } from 'react-native';
|
|
8
7
|
/**
|
|
9
8
|
* StreamCall is a wrapper component that orchestrates the call life cycle logic and
|
|
10
9
|
* provides the call object to the children components.
|
|
@@ -20,30 +19,43 @@ export const StreamCall = ({
|
|
|
20
19
|
call: call
|
|
21
20
|
}, /*#__PURE__*/React.createElement(AppStateListener, null), /*#__PURE__*/React.createElement(AndroidKeepCallAlive, null), /*#__PURE__*/React.createElement(IosInformCallkeepCallEnd, null), /*#__PURE__*/React.createElement(ClearPushWSSubscriptions, null), children);
|
|
22
21
|
};
|
|
22
|
+
|
|
23
|
+
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
24
|
+
// To save on CPU resources
|
|
23
25
|
const AppStateListener = () => {
|
|
24
26
|
const call = useCall();
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
27
|
+
const appState = useRef(AppState.currentState);
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
// due to strange behavior in iOS when app goes to "inactive" state
|
|
30
|
+
// we dont check for inactive states
|
|
31
|
+
// ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
|
|
32
|
+
const subscription = AppState.addEventListener('change', nextAppState => {
|
|
33
|
+
if (appState.current.match(/background/) && nextAppState === 'active') {
|
|
34
|
+
var _call$camera;
|
|
35
|
+
call === null || call === void 0 || (_call$camera = call.camera) === null || _call$camera === void 0 || _call$camera.resume();
|
|
36
|
+
appState.current = nextAppState;
|
|
37
|
+
} else if (appState.current === 'active' && nextAppState.match(/background/)) {
|
|
38
|
+
if (Platform.OS === 'android') {
|
|
39
|
+
var _NativeModules$Stream;
|
|
40
|
+
// in Android, we need to check if we are in PiP mode
|
|
41
|
+
// in PiP mode, we don't want to disable the camera
|
|
42
|
+
NativeModules === null || NativeModules === void 0 || (_NativeModules$Stream = NativeModules.StreamVideoReactNative) === null || _NativeModules$Stream === void 0 || _NativeModules$Stream.isInPiPMode().then(async isInPiP => {
|
|
43
|
+
if (!isInPiP) {
|
|
44
|
+
var _call$camera2;
|
|
45
|
+
await (call === null || call === void 0 || (_call$camera2 = call.camera) === null || _call$camera2 === void 0 ? void 0 : _call$camera2.disable());
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
} else {
|
|
49
|
+
var _call$camera3;
|
|
50
|
+
call === null || call === void 0 || (_call$camera3 = call.camera) === null || _call$camera3 === void 0 || _call$camera3.disable();
|
|
40
51
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
52
|
+
appState.current = nextAppState;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return () => {
|
|
56
|
+
subscription.remove();
|
|
57
|
+
};
|
|
58
|
+
}, [call]);
|
|
47
59
|
return null;
|
|
48
60
|
};
|
|
49
61
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StreamCallProvider","useCall","React","useEffect","useIosCallkeepWithCallingStateEffect","canAddPushWSSubscriptionsRef","clearPushWSEventSubscriptions","useAndroidKeepCallAliveEffect","
|
|
1
|
+
{"version":3,"names":["StreamCallProvider","useCall","React","useEffect","useRef","useIosCallkeepWithCallingStateEffect","canAddPushWSSubscriptionsRef","clearPushWSEventSubscriptions","useAndroidKeepCallAliveEffect","AppState","NativeModules","Platform","StreamCall","call","children","createElement","AppStateListener","AndroidKeepCallAlive","IosInformCallkeepCallEnd","ClearPushWSSubscriptions","appState","currentState","subscription","addEventListener","nextAppState","current","match","_call$camera","camera","resume","OS","_NativeModules$Stream","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","remove"],"sourceRoot":"../../../src","sources":["providers/StreamCall.tsx"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["utils/hooks/index.ts"],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["utils/hooks/index.ts"],"mappings":"AAAA,cAAc,qBAAqB;AACnC,cAAc,eAAe"}
|
package/dist/module/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '0.7.
|
|
1
|
+
export const version = '0.7.29';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamCall.d.ts","sourceRoot":"","sources":["../../../src/providers/StreamCall.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"StreamCall.d.ts","sourceRoot":"","sources":["../../../src/providers/StreamCall.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAqB,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAS/C,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AACF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,wBAGpB,kBAAkB,eAAe,CAAC,sBAUpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "0.7.
|
|
1
|
+
export declare const version = "0.7.29";
|
|
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": "0.7.
|
|
3
|
+
"version": "0.7.29",
|
|
4
4
|
"packageManager": "yarn@3.2.4",
|
|
5
5
|
"main": "dist/commonjs/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"!**/.*"
|
|
47
47
|
],
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@stream-io/video-client": "^1.3.
|
|
50
|
-
"@stream-io/video-react-bindings": "^0.4.
|
|
49
|
+
"@stream-io/video-client": "^1.3.1",
|
|
50
|
+
"@stream-io/video-react-bindings": "^0.4.43",
|
|
51
51
|
"intl-pluralrules": "2.0.1",
|
|
52
52
|
"lodash.merge": "^4.6.2",
|
|
53
53
|
"react-native-url-polyfill": "1.3.0",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { StreamCallProvider, useCall } from '@stream-io/video-react-bindings';
|
|
2
|
-
import React, { PropsWithChildren, useEffect } from 'react';
|
|
2
|
+
import React, { PropsWithChildren, useEffect, useRef } from 'react';
|
|
3
3
|
import { Call } from '@stream-io/video-client';
|
|
4
4
|
import { useIosCallkeepWithCallingStateEffect } from '../hooks/push/useIosCallkeepWithCallingStateEffect';
|
|
5
5
|
import {
|
|
@@ -7,8 +7,7 @@ import {
|
|
|
7
7
|
clearPushWSEventSubscriptions,
|
|
8
8
|
} from '../utils/push/utils';
|
|
9
9
|
import { useAndroidKeepCallAliveEffect } from '../hooks/useAndroidKeepCallAliveEffect';
|
|
10
|
-
import {
|
|
11
|
-
import { NativeModules, Platform } from 'react-native';
|
|
10
|
+
import { AppState, NativeModules, Platform } from 'react-native';
|
|
12
11
|
|
|
13
12
|
export type StreamCallProps = {
|
|
14
13
|
/**
|
|
@@ -39,31 +38,44 @@ export const StreamCall = ({
|
|
|
39
38
|
);
|
|
40
39
|
};
|
|
41
40
|
|
|
41
|
+
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
42
|
+
// To save on CPU resources
|
|
42
43
|
const AppStateListener = () => {
|
|
43
44
|
const call = useCall();
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
45
|
+
const appState = useRef(AppState.currentState);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
// due to strange behavior in iOS when app goes to "inactive" state
|
|
48
|
+
// we dont check for inactive states
|
|
49
|
+
// ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
|
|
50
|
+
const subscription = AppState.addEventListener('change', (nextAppState) => {
|
|
51
|
+
if (appState.current.match(/background/) && nextAppState === 'active') {
|
|
52
|
+
call?.camera?.resume();
|
|
53
|
+
appState.current = nextAppState;
|
|
54
|
+
} else if (
|
|
55
|
+
appState.current === 'active' &&
|
|
56
|
+
nextAppState.match(/background/)
|
|
57
|
+
) {
|
|
58
|
+
if (Platform.OS === 'android') {
|
|
59
|
+
// in Android, we need to check if we are in PiP mode
|
|
60
|
+
// in PiP mode, we don't want to disable the camera
|
|
61
|
+
NativeModules?.StreamVideoReactNative?.isInPiPMode().then(
|
|
62
|
+
async (isInPiP: boolean | null | undefined) => {
|
|
63
|
+
if (!isInPiP) {
|
|
64
|
+
await call?.camera?.disable();
|
|
65
|
+
}
|
|
59
66
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
);
|
|
68
|
+
} else {
|
|
69
|
+
call?.camera?.disable();
|
|
70
|
+
}
|
|
71
|
+
appState.current = nextAppState;
|
|
64
72
|
}
|
|
65
|
-
}
|
|
66
|
-
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
return () => {
|
|
76
|
+
subscription.remove();
|
|
77
|
+
};
|
|
78
|
+
}, [call]);
|
|
67
79
|
|
|
68
80
|
return null;
|
|
69
81
|
};
|
package/src/utils/hooks/index.ts
CHANGED
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '0.7.
|
|
1
|
+
export const version = '0.7.29';
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useAppStateListener = void 0;
|
|
7
|
-
var _react = require("react");
|
|
8
|
-
var _reactNative = require("react-native");
|
|
9
|
-
const useAppStateListener = (onForeground, onBackground) => {
|
|
10
|
-
const appStateRef = (0, _react.useRef)(_reactNative.AppState.currentState);
|
|
11
|
-
const onForegroundRef = (0, _react.useRef)(onForeground);
|
|
12
|
-
const onBackgroundRef = (0, _react.useRef)(onBackground);
|
|
13
|
-
|
|
14
|
-
// setting refs to avoid passing the functions as dependencies to useEffect
|
|
15
|
-
onForegroundRef.current = onForeground;
|
|
16
|
-
onBackgroundRef.current = onBackground;
|
|
17
|
-
(0, _react.useEffect)(() => {
|
|
18
|
-
const handleAppStateChange = nextAppState => {
|
|
19
|
-
const prevAppState = appStateRef.current;
|
|
20
|
-
if (prevAppState.match(/inactive|background/) && nextAppState === 'active') {
|
|
21
|
-
var _onForegroundRef$curr;
|
|
22
|
-
(_onForegroundRef$curr = onForegroundRef.current) === null || _onForegroundRef$curr === void 0 || _onForegroundRef$curr.call(onForegroundRef);
|
|
23
|
-
} else if (prevAppState === 'active' && nextAppState.match(/inactive|background/)) {
|
|
24
|
-
var _onBackgroundRef$curr;
|
|
25
|
-
(_onBackgroundRef$curr = onBackgroundRef.current) === null || _onBackgroundRef$curr === void 0 || _onBackgroundRef$curr.call(onBackgroundRef);
|
|
26
|
-
}
|
|
27
|
-
appStateRef.current = nextAppState;
|
|
28
|
-
};
|
|
29
|
-
const subscription = _reactNative.AppState.addEventListener('change', handleAppStateChange);
|
|
30
|
-
return () => {
|
|
31
|
-
// Following if-else logic is to support RN >= 0.65 and RN < 0.65 versions.
|
|
32
|
-
// https://github.com/react-native-community/releases/blob/master/CHANGELOG.md#:~:text=EventEmitter%23removeSubscription%20is%20now%20deprecated.%20(cb6cbd12f8%20by%20%40yungsters)
|
|
33
|
-
if (subscription !== null && subscription !== void 0 && subscription.remove) {
|
|
34
|
-
subscription.remove();
|
|
35
|
-
} else {
|
|
36
|
-
// @ts-ignore
|
|
37
|
-
_reactNative.AppState.removeEventListener('change', handleAppStateChange);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
}, []);
|
|
41
|
-
};
|
|
42
|
-
exports.useAppStateListener = useAppStateListener;
|
|
43
|
-
//# sourceMappingURL=useAppStateListener.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","useAppStateListener","onForeground","onBackground","appStateRef","useRef","AppState","currentState","onForegroundRef","onBackgroundRef","current","useEffect","handleAppStateChange","nextAppState","prevAppState","match","_onForegroundRef$curr","call","_onBackgroundRef$curr","subscription","addEventListener","remove","removeEventListener","exports"],"sourceRoot":"../../../../src","sources":["utils/hooks/useAppStateListener.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEO,MAAME,mBAAmB,GAAGA,CACjCC,YAAyB,EACzBC,YAAyB,KACtB;EACH,MAAMC,WAAW,GAAG,IAAAC,aAAM,EAACC,qBAAQ,CAACC,YAAY,CAAC;EACjD,MAAMC,eAAe,GAAG,IAAAH,aAAM,EAACH,YAAY,CAAC;EAC5C,MAAMO,eAAe,GAAG,IAAAJ,aAAM,EAACF,YAAY,CAAC;;EAE5C;EACAK,eAAe,CAACE,OAAO,GAAGR,YAAY;EACtCO,eAAe,CAACC,OAAO,GAAGP,YAAY;EAEtC,IAAAQ,gBAAS,EAAC,MAAM;IACd,MAAMC,oBAAoB,GAAIC,YAA4B,IAAK;MAC7D,MAAMC,YAAY,GAAGV,WAAW,CAACM,OAAO;MACxC,IACEI,YAAY,CAACC,KAAK,CAAC,qBAAqB,CAAC,IACzCF,YAAY,KAAK,QAAQ,EACzB;QAAA,IAAAG,qBAAA;QACA,CAAAA,qBAAA,GAAAR,eAAe,CAACE,OAAO,cAAAM,qBAAA,eAAvBA,qBAAA,CAAAC,IAAA,CAAAT,eAA0B,CAAC;MAC7B,CAAC,MAAM,IACLM,YAAY,KAAK,QAAQ,IACzBD,YAAY,CAACE,KAAK,CAAC,qBAAqB,CAAC,EACzC;QAAA,IAAAG,qBAAA;QACA,CAAAA,qBAAA,GAAAT,eAAe,CAACC,OAAO,cAAAQ,qBAAA,eAAvBA,qBAAA,CAAAD,IAAA,CAAAR,eAA0B,CAAC;MAC7B;MACAL,WAAW,CAACM,OAAO,GAAGG,YAAY;IACpC,CAAC;IACD,MAAMM,YAAY,GAAGb,qBAAQ,CAACc,gBAAgB,CAC5C,QAAQ,EACRR,oBACF,CAAC;IAED,OAAO,MAAM;MACX;MACA;MACA,IAAIO,YAAY,aAAZA,YAAY,eAAZA,YAAY,CAAEE,MAAM,EAAE;QACxBF,YAAY,CAACE,MAAM,CAAC,CAAC;MACvB,CAAC,MAAM;QACL;QACAf,qBAAQ,CAACgB,mBAAmB,CAAC,QAAQ,EAAEV,oBAAoB,CAAC;MAC9D;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;AAACW,OAAA,CAAAtB,mBAAA,GAAAA,mBAAA"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { useEffect, useRef } from 'react';
|
|
2
|
-
import { AppState } from 'react-native';
|
|
3
|
-
export const useAppStateListener = (onForeground, onBackground) => {
|
|
4
|
-
const appStateRef = useRef(AppState.currentState);
|
|
5
|
-
const onForegroundRef = useRef(onForeground);
|
|
6
|
-
const onBackgroundRef = useRef(onBackground);
|
|
7
|
-
|
|
8
|
-
// setting refs to avoid passing the functions as dependencies to useEffect
|
|
9
|
-
onForegroundRef.current = onForeground;
|
|
10
|
-
onBackgroundRef.current = onBackground;
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
const handleAppStateChange = nextAppState => {
|
|
13
|
-
const prevAppState = appStateRef.current;
|
|
14
|
-
if (prevAppState.match(/inactive|background/) && nextAppState === 'active') {
|
|
15
|
-
var _onForegroundRef$curr;
|
|
16
|
-
(_onForegroundRef$curr = onForegroundRef.current) === null || _onForegroundRef$curr === void 0 || _onForegroundRef$curr.call(onForegroundRef);
|
|
17
|
-
} else if (prevAppState === 'active' && nextAppState.match(/inactive|background/)) {
|
|
18
|
-
var _onBackgroundRef$curr;
|
|
19
|
-
(_onBackgroundRef$curr = onBackgroundRef.current) === null || _onBackgroundRef$curr === void 0 || _onBackgroundRef$curr.call(onBackgroundRef);
|
|
20
|
-
}
|
|
21
|
-
appStateRef.current = nextAppState;
|
|
22
|
-
};
|
|
23
|
-
const subscription = AppState.addEventListener('change', handleAppStateChange);
|
|
24
|
-
return () => {
|
|
25
|
-
// Following if-else logic is to support RN >= 0.65 and RN < 0.65 versions.
|
|
26
|
-
// https://github.com/react-native-community/releases/blob/master/CHANGELOG.md#:~:text=EventEmitter%23removeSubscription%20is%20now%20deprecated.%20(cb6cbd12f8%20by%20%40yungsters)
|
|
27
|
-
if (subscription !== null && subscription !== void 0 && subscription.remove) {
|
|
28
|
-
subscription.remove();
|
|
29
|
-
} else {
|
|
30
|
-
// @ts-ignore
|
|
31
|
-
AppState.removeEventListener('change', handleAppStateChange);
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
}, []);
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=useAppStateListener.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","AppState","useAppStateListener","onForeground","onBackground","appStateRef","currentState","onForegroundRef","onBackgroundRef","current","handleAppStateChange","nextAppState","prevAppState","match","_onForegroundRef$curr","call","_onBackgroundRef$curr","subscription","addEventListener","remove","removeEventListener"],"sourceRoot":"../../../../src","sources":["utils/hooks/useAppStateListener.ts"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAASC,QAAQ,QAAwB,cAAc;AAEvD,OAAO,MAAMC,mBAAmB,GAAGA,CACjCC,YAAyB,EACzBC,YAAyB,KACtB;EACH,MAAMC,WAAW,GAAGL,MAAM,CAACC,QAAQ,CAACK,YAAY,CAAC;EACjD,MAAMC,eAAe,GAAGP,MAAM,CAACG,YAAY,CAAC;EAC5C,MAAMK,eAAe,GAAGR,MAAM,CAACI,YAAY,CAAC;;EAE5C;EACAG,eAAe,CAACE,OAAO,GAAGN,YAAY;EACtCK,eAAe,CAACC,OAAO,GAAGL,YAAY;EAEtCL,SAAS,CAAC,MAAM;IACd,MAAMW,oBAAoB,GAAIC,YAA4B,IAAK;MAC7D,MAAMC,YAAY,GAAGP,WAAW,CAACI,OAAO;MACxC,IACEG,YAAY,CAACC,KAAK,CAAC,qBAAqB,CAAC,IACzCF,YAAY,KAAK,QAAQ,EACzB;QAAA,IAAAG,qBAAA;QACA,CAAAA,qBAAA,GAAAP,eAAe,CAACE,OAAO,cAAAK,qBAAA,eAAvBA,qBAAA,CAAAC,IAAA,CAAAR,eAA0B,CAAC;MAC7B,CAAC,MAAM,IACLK,YAAY,KAAK,QAAQ,IACzBD,YAAY,CAACE,KAAK,CAAC,qBAAqB,CAAC,EACzC;QAAA,IAAAG,qBAAA;QACA,CAAAA,qBAAA,GAAAR,eAAe,CAACC,OAAO,cAAAO,qBAAA,eAAvBA,qBAAA,CAAAD,IAAA,CAAAP,eAA0B,CAAC;MAC7B;MACAH,WAAW,CAACI,OAAO,GAAGE,YAAY;IACpC,CAAC;IACD,MAAMM,YAAY,GAAGhB,QAAQ,CAACiB,gBAAgB,CAC5C,QAAQ,EACRR,oBACF,CAAC;IAED,OAAO,MAAM;MACX;MACA;MACA,IAAIO,YAAY,aAAZA,YAAY,eAAZA,YAAY,CAAEE,MAAM,EAAE;QACxBF,YAAY,CAACE,MAAM,CAAC,CAAC;MACvB,CAAC,MAAM;QACL;QACAlB,QAAQ,CAACmB,mBAAmB,CAAC,QAAQ,EAAEV,oBAAoB,CAAC;MAC9D;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAppStateListener.d.ts","sourceRoot":"","sources":["../../../../src/utils/hooks/useAppStateListener.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB,kBACf,MAAM,IAAI,iBACV,MAAM,IAAI,SA0C1B,CAAC"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { useEffect, useRef } from 'react';
|
|
2
|
-
import { AppState, AppStateStatus } from 'react-native';
|
|
3
|
-
|
|
4
|
-
export const useAppStateListener = (
|
|
5
|
-
onForeground?: () => void,
|
|
6
|
-
onBackground?: () => void
|
|
7
|
-
) => {
|
|
8
|
-
const appStateRef = useRef(AppState.currentState);
|
|
9
|
-
const onForegroundRef = useRef(onForeground);
|
|
10
|
-
const onBackgroundRef = useRef(onBackground);
|
|
11
|
-
|
|
12
|
-
// setting refs to avoid passing the functions as dependencies to useEffect
|
|
13
|
-
onForegroundRef.current = onForeground;
|
|
14
|
-
onBackgroundRef.current = onBackground;
|
|
15
|
-
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
const handleAppStateChange = (nextAppState: AppStateStatus) => {
|
|
18
|
-
const prevAppState = appStateRef.current;
|
|
19
|
-
if (
|
|
20
|
-
prevAppState.match(/inactive|background/) &&
|
|
21
|
-
nextAppState === 'active'
|
|
22
|
-
) {
|
|
23
|
-
onForegroundRef.current?.();
|
|
24
|
-
} else if (
|
|
25
|
-
prevAppState === 'active' &&
|
|
26
|
-
nextAppState.match(/inactive|background/)
|
|
27
|
-
) {
|
|
28
|
-
onBackgroundRef.current?.();
|
|
29
|
-
}
|
|
30
|
-
appStateRef.current = nextAppState;
|
|
31
|
-
};
|
|
32
|
-
const subscription = AppState.addEventListener(
|
|
33
|
-
'change',
|
|
34
|
-
handleAppStateChange
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
return () => {
|
|
38
|
-
// Following if-else logic is to support RN >= 0.65 and RN < 0.65 versions.
|
|
39
|
-
// https://github.com/react-native-community/releases/blob/master/CHANGELOG.md#:~:text=EventEmitter%23removeSubscription%20is%20now%20deprecated.%20(cb6cbd12f8%20by%20%40yungsters)
|
|
40
|
-
if (subscription?.remove) {
|
|
41
|
-
subscription.remove();
|
|
42
|
-
} else {
|
|
43
|
-
// @ts-ignore
|
|
44
|
-
AppState.removeEventListener('change', handleAppStateChange);
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
}, []);
|
|
48
|
-
};
|