@stream-io/video-react-native-sdk 0.8.9 → 0.9.0
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 +11 -0
- package/dist/commonjs/hooks/useAndroidKeepCallAliveEffect.js +6 -14
- package/dist/commonjs/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
- package/dist/commonjs/hooks/useIsInPiPMode.js +9 -8
- package/dist/commonjs/hooks/useIsInPiPMode.js.map +1 -1
- package/dist/commonjs/utils/StreamVideoRN/index.js +0 -8
- package/dist/commonjs/utils/StreamVideoRN/index.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/module/hooks/useAndroidKeepCallAliveEffect.js +6 -14
- package/dist/module/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
- package/dist/module/hooks/useIsInPiPMode.js +9 -8
- package/dist/module/hooks/useIsInPiPMode.js.map +1 -1
- package/dist/module/utils/StreamVideoRN/index.js +0 -8
- package/dist/module/utils/StreamVideoRN/index.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/typescript/hooks/useAndroidKeepCallAliveEffect.d.ts.map +1 -1
- package/dist/typescript/hooks/useIsInPiPMode.d.ts.map +1 -1
- package/dist/typescript/utils/StreamVideoRN/index.d.ts.map +1 -1
- package/dist/typescript/utils/StreamVideoRN/types.d.ts +3 -5
- package/dist/typescript/utils/StreamVideoRN/types.d.ts.map +1 -1
- package/dist/typescript/version.d.ts +1 -1
- package/expo-config-plugin/dist/withAndroidManifest.js +5 -6
- package/expo-config-plugin/dist/withAndroidPermissions.js +1 -1
- package/package.json +2 -2
- package/src/hooks/useAndroidKeepCallAliveEffect.ts +7 -14
- package/src/hooks/useIsInPiPMode.tsx +15 -10
- package/src/utils/StreamVideoRN/index.ts +0 -8
- package/src/utils/StreamVideoRN/types.ts +3 -5
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [0.9.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.8.9...@stream-io/video-react-native-sdk-0.9.0) (2024-07-05)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### ⚠ BREAKING CHANGES
|
|
9
|
+
|
|
10
|
+
* **react-native:** support targetSdk android 14 (#1432)
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
* **react-native:** support targetSdk android 14 ([#1432](https://github.com/GetStream/stream-video-js/issues/1432)) ([2e98fbe](https://github.com/GetStream/stream-video-js/commit/2e98fbe5000161088030d553fc38cd5243327dd1))
|
|
15
|
+
|
|
5
16
|
### [0.8.9](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.8.8...@stream-io/video-react-native-sdk-0.8.9) (2024-07-02)
|
|
6
17
|
|
|
7
18
|
### Dependency Updates
|
|
@@ -12,10 +12,9 @@ var _reactNative2 = require("react-native");
|
|
|
12
12
|
var _videoClient = require("@stream-io/video-client");
|
|
13
13
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
14
14
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
15
|
+
const isAndroid7OrBelow = _reactNative2.Platform.OS === 'android' && _reactNative2.Platform.Version < 26;
|
|
15
16
|
function setForegroundService() {
|
|
16
|
-
if (
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
17
|
+
if (!isAndroid7OrBelow) return;
|
|
19
18
|
_reactNative.default.registerForegroundService(() => {
|
|
20
19
|
return new Promise(() => {
|
|
21
20
|
const logger = (0, _videoClient.getLogger)(['setForegroundService method']);
|
|
@@ -24,15 +23,12 @@ function setForegroundService() {
|
|
|
24
23
|
});
|
|
25
24
|
}
|
|
26
25
|
async function startForegroundService(call_cid) {
|
|
27
|
-
if (
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
26
|
+
if (!isAndroid7OrBelow) return;
|
|
30
27
|
const foregroundServiceConfig = _utils.StreamVideoRN.getConfig().foregroundService;
|
|
31
28
|
const {
|
|
32
29
|
title,
|
|
33
30
|
body
|
|
34
31
|
} = foregroundServiceConfig.android.notificationTexts;
|
|
35
|
-
const channelId = foregroundServiceConfig.android.channel.id;
|
|
36
32
|
|
|
37
33
|
// request for notification permission and then start the foreground service
|
|
38
34
|
const settings = await _reactNative.default.getNotificationSettings();
|
|
@@ -41,13 +37,11 @@ async function startForegroundService(call_cid) {
|
|
|
41
37
|
logger('info', 'Notification permission not granted, can not start foreground service to keep the call alive');
|
|
42
38
|
return;
|
|
43
39
|
}
|
|
44
|
-
await _reactNative.default.createChannel(foregroundServiceConfig.android.channel);
|
|
45
40
|
await _reactNative.default.displayNotification({
|
|
46
41
|
id: call_cid,
|
|
47
42
|
title,
|
|
48
43
|
body,
|
|
49
44
|
android: {
|
|
50
|
-
channelId,
|
|
51
45
|
asForegroundService: true,
|
|
52
46
|
ongoing: true,
|
|
53
47
|
// user cannot dismiss the notification
|
|
@@ -60,9 +54,7 @@ async function startForegroundService(call_cid) {
|
|
|
60
54
|
});
|
|
61
55
|
}
|
|
62
56
|
async function stopForegroundService() {
|
|
63
|
-
if (
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
57
|
+
if (!isAndroid7OrBelow) return;
|
|
66
58
|
await _reactNative.default.stopForegroundService();
|
|
67
59
|
}
|
|
68
60
|
|
|
@@ -76,7 +68,7 @@ let isSetForegroundServiceRan = false;
|
|
|
76
68
|
* Additonally: also responsible for cancelling any notifee displayed notification when the call has transitioned out of ringing
|
|
77
69
|
*/
|
|
78
70
|
const useAndroidKeepCallAliveEffect = () => {
|
|
79
|
-
if (!isSetForegroundServiceRan &&
|
|
71
|
+
if (!isSetForegroundServiceRan && isAndroid7OrBelow) {
|
|
80
72
|
isSetForegroundServiceRan = true;
|
|
81
73
|
setForegroundService();
|
|
82
74
|
}
|
|
@@ -87,7 +79,7 @@ const useAndroidKeepCallAliveEffect = () => {
|
|
|
87
79
|
} = (0, _videoReactBindings.useCallStateHooks)();
|
|
88
80
|
const callingState = useCallCallingState();
|
|
89
81
|
(0, _react.useEffect)(() => {
|
|
90
|
-
if (
|
|
82
|
+
if (!isAndroid7OrBelow || !activeCallCid) {
|
|
91
83
|
return;
|
|
92
84
|
}
|
|
93
85
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_videoReactBindings","require","_react","_reactNative","_interopRequireWildcard","_utils","_reactNative2","_videoClient","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","
|
|
1
|
+
{"version":3,"names":["_videoReactBindings","require","_react","_reactNative","_interopRequireWildcard","_utils","_reactNative2","_videoClient","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","isAndroid7OrBelow","Platform","OS","Version","setForegroundService","notifee","registerForegroundService","Promise","logger","getLogger","startForegroundService","call_cid","foregroundServiceConfig","StreamVideoRN","getConfig","foregroundService","title","body","android","notificationTexts","settings","getNotificationSettings","authorizationStatus","AuthorizationStatus","AUTHORIZED","displayNotification","id","asForegroundService","ongoing","colorized","pressAction","launchActivity","stopForegroundService","isSetForegroundServiceRan","useAndroidKeepCallAliveEffect","foregroundServiceStartedRef","useRef","activeCallCid","useCall","cid","useCallCallingState","useCallStateHooks","callingState","useEffect","CallingState","JOINED","run","current","getDisplayedNotifications","then","displayedNotifications","activeCallNotification","find","notification","cancelDisplayedNotification","RINGING","IDLE","LEFT","exports"],"sourceRoot":"../../../src","sources":["hooks/useAndroidKeepCallAliveEffect.ts"],"mappings":";;;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAC,uBAAA,CAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AACA,IAAAM,YAAA,GAAAN,OAAA;AAAkE,SAAAO,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAL,wBAAAK,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAElE,MAAMW,iBAAiB,GAAGC,sBAAQ,CAACC,EAAE,KAAK,SAAS,IAAID,sBAAQ,CAACE,OAAO,GAAG,EAAE;AAE5E,SAASC,oBAAoBA,CAAA,EAAG;EAC9B,IAAI,CAACJ,iBAAiB,EAAE;EACxBK,oBAAO,CAACC,yBAAyB,CAAC,MAAM;IACtC,OAAO,IAAIC,OAAO,CAAC,MAAM;MACvB,MAAMC,MAAM,GAAG,IAAAC,sBAAS,EAAC,CAAC,6BAA6B,CAAC,CAAC;MACzDD,MAAM,CAAC,MAAM,EAAE,iDAAiD,CAAC;IACnE,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ;AAEA,eAAeE,sBAAsBA,CAACC,QAAgB,EAAE;EACtD,IAAI,CAACX,iBAAiB,EAAE;EACxB,MAAMY,uBAAuB,GAAGC,oBAAa,CAACC,SAAS,CAAC,CAAC,CAACC,iBAAiB;EAC3E,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGL,uBAAuB,CAACM,OAAO,CAACC,iBAAiB;;EAEzE;EACA,MAAMC,QAAQ,GAAG,MAAMf,oBAAO,CAACgB,uBAAuB,CAAC,CAAC;EACxD,IAAID,QAAQ,CAACE,mBAAmB,KAAKC,gCAAmB,CAACC,UAAU,EAAE;IACnE,MAAMhB,MAAM,GAAG,IAAAC,sBAAS,EAAC,CAAC,wBAAwB,CAAC,CAAC;IACpDD,MAAM,CACJ,MAAM,EACN,8FACF,CAAC;IACD;EACF;EACA,MAAMH,oBAAO,CAACoB,mBAAmB,CAAC;IAChCC,EAAE,EAAEf,QAAQ;IACZK,KAAK;IACLC,IAAI;IACJC,OAAO,EAAE;MACPS,mBAAmB,EAAE,IAAI;MACzBC,OAAO,EAAE,IAAI;MAAE;MACfC,SAAS,EAAE,IAAI;MACfC,WAAW,EAAE;QACXJ,EAAE,EAAE,SAAS;QACbK,cAAc,EAAE,SAAS,CAAE;MAC7B;IACF;EACF,CAAC,CAAC;AACJ;AAEA,eAAeC,qBAAqBA,CAAA,EAAG;EACrC,IAAI,CAAChC,iBAAiB,EAAE;EACxB,MAAMK,oBAAO,CAAC2B,qBAAqB,CAAC,CAAC;AACvC;;AAEA;AACA,IAAIC,yBAAyB,GAAG,KAAK;;AAErC;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,6BAA6B,GAAGA,CAAA,KAAM;EACjD,IAAI,CAACD,yBAAyB,IAAIjC,iBAAiB,EAAE;IACnDiC,yBAAyB,GAAG,IAAI;IAChC7B,oBAAoB,CAAC,CAAC;EACxB;EACA,MAAM+B,2BAA2B,GAAG,IAAAC,aAAM,EAAC,KAAK,CAAC;EAEjD,MAAMC,aAAa,GAAG,IAAAC,2BAAO,EAAC,CAAC,EAAEC,GAAG;EACpC,MAAM;IAAEC;EAAoB,CAAC,GAAG,IAAAC,qCAAiB,EAAC,CAAC;EACnD,MAAMC,YAAY,GAAGF,mBAAmB,CAAC,CAAC;EAE1C,IAAAG,gBAAS,EAAC,MAAgC;IACxC,IAAI,CAAC3C,iBAAiB,IAAI,CAACqC,aAAa,EAAE;MACxC;IACF;;IAEA;IACA,IAAIK,YAAY,KAAKE,yBAAY,CAACC,MAAM,EAAE;MACxC,MAAMC,GAAG,GAAG,MAAAA,CAAA,KAAY;QACtB,IAAIX,2BAA2B,CAACY,OAAO,EAAE;UACvC;QACF;QACA1C,oBAAO,CAAC2C,yBAAyB,CAAC,CAAC,CAACC,IAAI,CAAEC,sBAAsB,IAAK;UACnE,MAAMC,sBAAsB,GAAGD,sBAAsB,CAACE,IAAI,CACvDC,YAAY,IAAKA,YAAY,CAAC3B,EAAE,KAAKW,aACxC,CAAC;UACD,IAAIc,sBAAsB,EAAE;YAC1B;YACA9C,oBAAO,CAAC2B,qBAAqB,CAAC,CAAC;YAC/B3B,oBAAO,CAACiD,2BAA2B,CAACjB,aAAa,CAAC;UACpD;UACA;UACA3B,sBAAsB,CAAC2B,aAAa,CAAC,CAACY,IAAI,CAAC,MAAM;YAC/Cd,2BAA2B,CAACY,OAAO,GAAG,IAAI;UAC5C,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC;MACDD,GAAG,CAAC,CAAC;IACP,CAAC,MAAM,IAAIJ,YAAY,KAAKE,yBAAY,CAACW,OAAO,EAAE;MAChD;MACA,OAAO,MAAM;QACX;QACAlD,oBAAO,CAACiD,2BAA2B,CAACjB,aAAa,CAAC;MACpD,CAAC;IACH,CAAC,MAAM,IACLK,YAAY,KAAKE,yBAAY,CAACY,IAAI,IAClCd,YAAY,KAAKE,yBAAY,CAACa,IAAI,EAClC;MACA,IAAItB,2BAA2B,CAACY,OAAO,EAAE;QACvC;QACAf,qBAAqB,CAAC,CAAC;QACvBG,2BAA2B,CAACY,OAAO,GAAG,KAAK;MAC7C,CAAC,MAAM;QACL1C,oBAAO,CAAC2C,yBAAyB,CAAC,CAAC,CAACC,IAAI,CAAEC,sBAAsB,IAAK;UACnE,MAAMC,sBAAsB,GAAGD,sBAAsB,CAACE,IAAI,CACvDC,YAAY,IAAKA,YAAY,CAAC3B,EAAE,KAAKW,aACxC,CAAC;UACD,IAAIc,sBAAsB,EAAE;YAC1B;YACA9C,oBAAO,CAAC2B,qBAAqB,CAAC,CAAC;UACjC;QACF,CAAC,CAAC;MACJ;IACF;EACF,CAAC,EAAE,CAACK,aAAa,EAAEK,YAAY,CAAC,CAAC;EAEjC,IAAAC,gBAAS,EAAC,MAAM;IACd,OAAO,MAAM;MACX;MACA,IAAIR,2BAA2B,CAACY,OAAO,EAAE;QACvCf,qBAAqB,CAAC,CAAC;QACvBG,2BAA2B,CAACY,OAAO,GAAG,KAAK;MAC7C;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;AAACW,OAAA,CAAAxB,6BAAA,GAAAA,6BAAA","ignoreList":[]}
|
|
@@ -7,26 +7,27 @@ exports.useIsInPiPMode = useIsInPiPMode;
|
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
9
|
const PIP_CHANGE_EVENT = 'StreamVideoReactNative_PIP_CHANGE_EVENT';
|
|
10
|
+
const isAndroid8OrAbove = _reactNative.Platform.OS === 'android' && _reactNative.Platform.Version >= 26;
|
|
10
11
|
function useIsInPiPMode() {
|
|
11
|
-
const [isInPiPMode, setIsInPiPMode] = (0, _react.useState)(
|
|
12
|
+
const [isInPiPMode, setIsInPiPMode] = (0, _react.useState)(isAndroid8OrAbove && _reactNative.AppState.currentState === 'background');
|
|
12
13
|
(0, _react.useEffect)(() => {
|
|
13
|
-
if (
|
|
14
|
+
if (!isAndroid8OrAbove) {
|
|
14
15
|
return;
|
|
15
16
|
}
|
|
16
17
|
const eventEmitter = new _reactNative.NativeEventEmitter(_reactNative.NativeModules.StreamVideoReactNative);
|
|
17
18
|
const subscriptionPiPChange = eventEmitter.addListener(PIP_CHANGE_EVENT, setIsInPiPMode);
|
|
19
|
+
const setFromNativeMethod = async () => {
|
|
20
|
+
const isInPiPNativeMethod = await _reactNative.NativeModules?.StreamVideoReactNative?.isInPiPMode();
|
|
21
|
+
setIsInPiPMode(!!isInPiPNativeMethod);
|
|
22
|
+
};
|
|
18
23
|
const subscriptionAppState = _reactNative.AppState.addEventListener('change', nextAppState => {
|
|
19
24
|
if (nextAppState === 'background') {
|
|
20
25
|
setIsInPiPMode(true); // set with an assumption that its enabled so that UI disabling happens faster
|
|
21
26
|
// if PiP was not enabled anyway, then in the next code we ll set it to false and UI wont be shown anyway
|
|
22
27
|
}
|
|
23
|
-
|
|
24
|
-
// this can be faster than event emitter at times
|
|
25
|
-
// also in new arch this can be made a synchronous method
|
|
26
|
-
_reactNative.NativeModules?.StreamVideoReactNative?.isInPiPMode().then(isInPiPNativeMethod => {
|
|
27
|
-
setIsInPiPMode(!!isInPiPNativeMethod);
|
|
28
|
-
});
|
|
28
|
+
setFromNativeMethod();
|
|
29
29
|
});
|
|
30
|
+
setFromNativeMethod();
|
|
30
31
|
return () => {
|
|
31
32
|
subscriptionPiPChange.remove();
|
|
32
33
|
subscriptionAppState.remove();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","PIP_CHANGE_EVENT","useIsInPiPMode","isInPiPMode","setIsInPiPMode","useState","
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","PIP_CHANGE_EVENT","isAndroid8OrAbove","Platform","OS","Version","useIsInPiPMode","isInPiPMode","setIsInPiPMode","useState","AppState","currentState","useEffect","eventEmitter","NativeEventEmitter","NativeModules","StreamVideoReactNative","subscriptionPiPChange","addListener","setFromNativeMethod","isInPiPNativeMethod","subscriptionAppState","addEventListener","nextAppState","remove"],"sourceRoot":"../../../src","sources":["hooks/useIsInPiPMode.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAOA,MAAME,gBAAgB,GAAG,yCAAyC;AAElE,MAAMC,iBAAiB,GAAGC,qBAAQ,CAACC,EAAE,KAAK,SAAS,IAAID,qBAAQ,CAACE,OAAO,IAAI,EAAE;AAEtE,SAASC,cAAcA,CAAA,EAAG;EAC/B,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAC,eAAQ,EAC5CP,iBAAiB,IAAIQ,qBAAQ,CAACC,YAAY,KAAK,YACjD,CAAC;EAED,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAI,CAACV,iBAAiB,EAAE;MACtB;IACF;IAEA,MAAMW,YAAY,GAAG,IAAIC,+BAAkB,CACzCC,0BAAa,CAACC,sBAChB,CAAC;IAED,MAAMC,qBAAqB,GAAGJ,YAAY,CAACK,WAAW,CACpDjB,gBAAgB,EAChBO,cACF,CAAC;IAED,MAAMW,mBAAmB,GAAG,MAAAA,CAAA,KAAY;MACtC,MAAMC,mBAA+C,GACnD,MAAML,0BAAa,EAAEC,sBAAsB,EAAET,WAAW,CAAC,CAAC;MAC5DC,cAAc,CAAC,CAAC,CAACY,mBAAmB,CAAC;IACvC,CAAC;IAED,MAAMC,oBAAoB,GAAGX,qBAAQ,CAACY,gBAAgB,CACpD,QAAQ,EACPC,YAAY,IAAK;MAChB,IAAIA,YAAY,KAAK,YAAY,EAAE;QACjCf,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QACtB;MACF;MACAW,mBAAmB,CAAC,CAAC;IACvB,CACF,CAAC;IAEDA,mBAAmB,CAAC,CAAC;IAErB,OAAO,MAAM;MACXF,qBAAqB,CAACO,MAAM,CAAC,CAAC;MAC9BH,oBAAoB,CAACG,MAAM,CAAC,CAAC;IAC/B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOjB,WAAW;AACpB","ignoreList":[]}
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.StreamVideoRN = void 0;
|
|
7
|
-
var _reactNative = require("@notifee/react-native");
|
|
8
7
|
var _android = require("../push/android");
|
|
9
8
|
var _pushLogoutCallback = _interopRequireDefault(require("../internal/pushLogoutCallback"));
|
|
10
9
|
var _ios = require("../push/ios");
|
|
@@ -13,13 +12,6 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
13
12
|
const DEFAULT_STREAM_VIDEO_CONFIG = {
|
|
14
13
|
foregroundService: {
|
|
15
14
|
android: {
|
|
16
|
-
channel: {
|
|
17
|
-
id: 'stream_call_foreground_service',
|
|
18
|
-
name: 'Notification Service to keep call alive',
|
|
19
|
-
lights: false,
|
|
20
|
-
vibration: false,
|
|
21
|
-
importance: _reactNative.AndroidImportance.DEFAULT
|
|
22
|
-
},
|
|
23
15
|
notificationTexts: {
|
|
24
16
|
title: 'Call in progress',
|
|
25
17
|
body: 'Tap to return to the call'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_android","require","_pushLogoutCallback","_interopRequireDefault","_ios","_newNotificationCallbacks","e","__esModule","default","DEFAULT_STREAM_VIDEO_CONFIG","foregroundService","android","notificationTexts","title","body","StreamVideoRN","config","updateConfig","updateAndroidIncomingCallChannel","updateChannel","prevChannel","push","incomingCallChannel","setPushConfig","pushConfig","setupFirebaseHandlerAndroid","setupRemoteNotificationsHandleriOS","getConfig","onPushLogout","pushLogoutCallbacks","current","Promise","all","map","callback","then","resolve","addOnNewCallNotificationListener","newNotificationCallbacks","filter","cb","exports"],"sourceRoot":"../../../../src","sources":["utils/StreamVideoRN/index.ts"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,mBAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,IAAA,GAAAH,OAAA;AACA,IAAAI,yBAAA,GAAAF,sBAAA,CAAAF,OAAA;AAE8C,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9C,MAAMG,2BAA8C,GAAG;EACrDC,iBAAiB,EAAE;IACjBC,OAAO,EAAE;MACPC,iBAAiB,EAAE;QACjBC,KAAK,EAAE,kBAAkB;QACzBC,IAAI,EAAE;MACR;IACF;EACF;AACF,CAAC;AAEM,MAAMC,aAAa,CAAC;EACzB,OAAeC,MAAM,GAAGP,2BAA2B;;EAEnD;AACF;AACA;AACA;AACA;EACE,OAAOQ,YAAYA,CAACA,YAAsD,EAAE;IAC1E,IAAI,CAACD,MAAM,GAAG;MACZ,GAAG,IAAI,CAACA,MAAM;MACd,GAAGC;IACL,CAAC;EACH;EAEA,OAAOC,gCAAgCA,CACrCC,aAEC,EACD;IACA,MAAMC,WAAW,GAAG,IAAI,CAACJ,MAAM,CAACK,IAAI,EAAEV,OAAO,EAAEW,mBAAmB;IAClE,IAAIF,WAAW,EAAE;MACf,IAAI,CAACJ,MAAM,CAACK,IAAI,CAAEV,OAAO,CAACW,mBAAmB,GAAG;QAC9C,GAAGF,WAAW;QACd,GAAGD;MACL,CAAC;IACH;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOI,aAAaA,CAACC,UAAkD,EAAE;IACvE,IAAI,IAAI,CAACR,MAAM,CAACK,IAAI,EAAE;MACpB;MACA;IACF;IACA,IAAI,CAACL,MAAM,CAACK,IAAI,GAAGG,UAAU;IAC7B;IACA,IAAAC,oCAA2B,EAACD,UAAU,CAAC;IACvC;IACA,IAAAE,uCAAkC,EAACF,UAAU,CAAC;EAChD;EAEA,OAAOG,SAASA,CAAA,EAAG;IACjB,OAAO,IAAI,CAACX,MAAM;EACpB;;EAEA;AACF;AACA;AACA;EACE,OAAOY,YAAYA,CAAA,EAAG;IACpB,IAAIC,2BAAmB,CAACC,OAAO,EAAE;MAC/B,OAAOC,OAAO,CAACC,GAAG,CAChBH,2BAAmB,CAACC,OAAO,CAACG,GAAG,CAAEC,QAAQ,IAAKA,QAAQ,CAAC,CAAC,CAC1D,CAAC,CAACC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAClB;IACA,OAAOJ,OAAO,CAACK,OAAO,CAAC,CAAC;EAC1B;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOC,gCAAgCA,CACrCH,QAAqC,EACrC;IACA,IAAI,CAACI,iCAAwB,CAACR,OAAO,EAAE;MACrCQ,iCAAwB,CAACR,OAAO,GAAG,CAACI,QAAQ,CAAC;IAC/C,CAAC,MAAM;MACLI,iCAAwB,CAACR,OAAO,CAACT,IAAI,CAACa,QAAQ,CAAC;IACjD;IACA,OAAO,MAAM;MACXI,iCAAwB,CAACR,OAAO,GAC9BQ,iCAAwB,CAACR,OAAO,EAAES,MAAM,CAAEC,EAAE,IAAKA,EAAE,KAAKN,QAAQ,CAAC;IACrE,CAAC;EACH;AACF;AAACO,OAAA,CAAA1B,aAAA,GAAAA,aAAA","ignoreList":[]}
|
package/dist/commonjs/version.js
CHANGED
|
@@ -4,10 +4,9 @@ import notifee, { AuthorizationStatus } from '@notifee/react-native';
|
|
|
4
4
|
import { StreamVideoRN } from '../utils';
|
|
5
5
|
import { Platform } from 'react-native';
|
|
6
6
|
import { CallingState, getLogger } from '@stream-io/video-client';
|
|
7
|
+
const isAndroid7OrBelow = Platform.OS === 'android' && Platform.Version < 26;
|
|
7
8
|
function setForegroundService() {
|
|
8
|
-
if (
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
9
|
+
if (!isAndroid7OrBelow) return;
|
|
11
10
|
notifee.registerForegroundService(() => {
|
|
12
11
|
return new Promise(() => {
|
|
13
12
|
const logger = getLogger(['setForegroundService method']);
|
|
@@ -16,15 +15,12 @@ function setForegroundService() {
|
|
|
16
15
|
});
|
|
17
16
|
}
|
|
18
17
|
async function startForegroundService(call_cid) {
|
|
19
|
-
if (
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
18
|
+
if (!isAndroid7OrBelow) return;
|
|
22
19
|
const foregroundServiceConfig = StreamVideoRN.getConfig().foregroundService;
|
|
23
20
|
const {
|
|
24
21
|
title,
|
|
25
22
|
body
|
|
26
23
|
} = foregroundServiceConfig.android.notificationTexts;
|
|
27
|
-
const channelId = foregroundServiceConfig.android.channel.id;
|
|
28
24
|
|
|
29
25
|
// request for notification permission and then start the foreground service
|
|
30
26
|
const settings = await notifee.getNotificationSettings();
|
|
@@ -33,13 +29,11 @@ async function startForegroundService(call_cid) {
|
|
|
33
29
|
logger('info', 'Notification permission not granted, can not start foreground service to keep the call alive');
|
|
34
30
|
return;
|
|
35
31
|
}
|
|
36
|
-
await notifee.createChannel(foregroundServiceConfig.android.channel);
|
|
37
32
|
await notifee.displayNotification({
|
|
38
33
|
id: call_cid,
|
|
39
34
|
title,
|
|
40
35
|
body,
|
|
41
36
|
android: {
|
|
42
|
-
channelId,
|
|
43
37
|
asForegroundService: true,
|
|
44
38
|
ongoing: true,
|
|
45
39
|
// user cannot dismiss the notification
|
|
@@ -52,9 +46,7 @@ async function startForegroundService(call_cid) {
|
|
|
52
46
|
});
|
|
53
47
|
}
|
|
54
48
|
async function stopForegroundService() {
|
|
55
|
-
if (
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
49
|
+
if (!isAndroid7OrBelow) return;
|
|
58
50
|
await notifee.stopForegroundService();
|
|
59
51
|
}
|
|
60
52
|
|
|
@@ -68,7 +60,7 @@ let isSetForegroundServiceRan = false;
|
|
|
68
60
|
* Additonally: also responsible for cancelling any notifee displayed notification when the call has transitioned out of ringing
|
|
69
61
|
*/
|
|
70
62
|
export const useAndroidKeepCallAliveEffect = () => {
|
|
71
|
-
if (!isSetForegroundServiceRan &&
|
|
63
|
+
if (!isSetForegroundServiceRan && isAndroid7OrBelow) {
|
|
72
64
|
isSetForegroundServiceRan = true;
|
|
73
65
|
setForegroundService();
|
|
74
66
|
}
|
|
@@ -79,7 +71,7 @@ export const useAndroidKeepCallAliveEffect = () => {
|
|
|
79
71
|
} = useCallStateHooks();
|
|
80
72
|
const callingState = useCallCallingState();
|
|
81
73
|
useEffect(() => {
|
|
82
|
-
if (
|
|
74
|
+
if (!isAndroid7OrBelow || !activeCallCid) {
|
|
83
75
|
return;
|
|
84
76
|
}
|
|
85
77
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCall","useCallStateHooks","useEffect","useRef","notifee","AuthorizationStatus","StreamVideoRN","Platform","CallingState","getLogger","
|
|
1
|
+
{"version":3,"names":["useCall","useCallStateHooks","useEffect","useRef","notifee","AuthorizationStatus","StreamVideoRN","Platform","CallingState","getLogger","isAndroid7OrBelow","OS","Version","setForegroundService","registerForegroundService","Promise","logger","startForegroundService","call_cid","foregroundServiceConfig","getConfig","foregroundService","title","body","android","notificationTexts","settings","getNotificationSettings","authorizationStatus","AUTHORIZED","displayNotification","id","asForegroundService","ongoing","colorized","pressAction","launchActivity","stopForegroundService","isSetForegroundServiceRan","useAndroidKeepCallAliveEffect","foregroundServiceStartedRef","activeCallCid","cid","useCallCallingState","callingState","JOINED","run","current","getDisplayedNotifications","then","displayedNotifications","activeCallNotification","find","notification","cancelDisplayedNotification","RINGING","IDLE","LEFT"],"sourceRoot":"../../../src","sources":["hooks/useAndroidKeepCallAliveEffect.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
2
|
import { AppState, NativeEventEmitter, NativeModules, Platform } from 'react-native';
|
|
3
3
|
const PIP_CHANGE_EVENT = 'StreamVideoReactNative_PIP_CHANGE_EVENT';
|
|
4
|
+
const isAndroid8OrAbove = Platform.OS === 'android' && Platform.Version >= 26;
|
|
4
5
|
export function useIsInPiPMode() {
|
|
5
|
-
const [isInPiPMode, setIsInPiPMode] = useState(
|
|
6
|
+
const [isInPiPMode, setIsInPiPMode] = useState(isAndroid8OrAbove && AppState.currentState === 'background');
|
|
6
7
|
useEffect(() => {
|
|
7
|
-
if (
|
|
8
|
+
if (!isAndroid8OrAbove) {
|
|
8
9
|
return;
|
|
9
10
|
}
|
|
10
11
|
const eventEmitter = new NativeEventEmitter(NativeModules.StreamVideoReactNative);
|
|
11
12
|
const subscriptionPiPChange = eventEmitter.addListener(PIP_CHANGE_EVENT, setIsInPiPMode);
|
|
13
|
+
const setFromNativeMethod = async () => {
|
|
14
|
+
const isInPiPNativeMethod = await NativeModules?.StreamVideoReactNative?.isInPiPMode();
|
|
15
|
+
setIsInPiPMode(!!isInPiPNativeMethod);
|
|
16
|
+
};
|
|
12
17
|
const subscriptionAppState = AppState.addEventListener('change', nextAppState => {
|
|
13
18
|
if (nextAppState === 'background') {
|
|
14
19
|
setIsInPiPMode(true); // set with an assumption that its enabled so that UI disabling happens faster
|
|
15
20
|
// if PiP was not enabled anyway, then in the next code we ll set it to false and UI wont be shown anyway
|
|
16
21
|
}
|
|
17
|
-
|
|
18
|
-
// this can be faster than event emitter at times
|
|
19
|
-
// also in new arch this can be made a synchronous method
|
|
20
|
-
NativeModules?.StreamVideoReactNative?.isInPiPMode().then(isInPiPNativeMethod => {
|
|
21
|
-
setIsInPiPMode(!!isInPiPNativeMethod);
|
|
22
|
-
});
|
|
22
|
+
setFromNativeMethod();
|
|
23
23
|
});
|
|
24
|
+
setFromNativeMethod();
|
|
24
25
|
return () => {
|
|
25
26
|
subscriptionPiPChange.remove();
|
|
26
27
|
subscriptionAppState.remove();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useState","AppState","NativeEventEmitter","NativeModules","Platform","PIP_CHANGE_EVENT","useIsInPiPMode","isInPiPMode","setIsInPiPMode","
|
|
1
|
+
{"version":3,"names":["useEffect","useState","AppState","NativeEventEmitter","NativeModules","Platform","PIP_CHANGE_EVENT","isAndroid8OrAbove","OS","Version","useIsInPiPMode","isInPiPMode","setIsInPiPMode","currentState","eventEmitter","StreamVideoReactNative","subscriptionPiPChange","addListener","setFromNativeMethod","isInPiPNativeMethod","subscriptionAppState","addEventListener","nextAppState","remove"],"sourceRoot":"../../../src","sources":["hooks/useIsInPiPMode.tsx"],"mappings":"AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SACEC,QAAQ,EACRC,kBAAkB,EAClBC,aAAa,EACbC,QAAQ,QACH,cAAc;AAErB,MAAMC,gBAAgB,GAAG,yCAAyC;AAElE,MAAMC,iBAAiB,GAAGF,QAAQ,CAACG,EAAE,KAAK,SAAS,IAAIH,QAAQ,CAACI,OAAO,IAAI,EAAE;AAE7E,OAAO,SAASC,cAAcA,CAAA,EAAG;EAC/B,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGX,QAAQ,CAC5CM,iBAAiB,IAAIL,QAAQ,CAACW,YAAY,KAAK,YACjD,CAAC;EAEDb,SAAS,CAAC,MAAM;IACd,IAAI,CAACO,iBAAiB,EAAE;MACtB;IACF;IAEA,MAAMO,YAAY,GAAG,IAAIX,kBAAkB,CACzCC,aAAa,CAACW,sBAChB,CAAC;IAED,MAAMC,qBAAqB,GAAGF,YAAY,CAACG,WAAW,CACpDX,gBAAgB,EAChBM,cACF,CAAC;IAED,MAAMM,mBAAmB,GAAG,MAAAA,CAAA,KAAY;MACtC,MAAMC,mBAA+C,GACnD,MAAMf,aAAa,EAAEW,sBAAsB,EAAEJ,WAAW,CAAC,CAAC;MAC5DC,cAAc,CAAC,CAAC,CAACO,mBAAmB,CAAC;IACvC,CAAC;IAED,MAAMC,oBAAoB,GAAGlB,QAAQ,CAACmB,gBAAgB,CACpD,QAAQ,EACPC,YAAY,IAAK;MAChB,IAAIA,YAAY,KAAK,YAAY,EAAE;QACjCV,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QACtB;MACF;MACAM,mBAAmB,CAAC,CAAC;IACvB,CACF,CAAC;IAEDA,mBAAmB,CAAC,CAAC;IAErB,OAAO,MAAM;MACXF,qBAAqB,CAACO,MAAM,CAAC,CAAC;MAC9BH,oBAAoB,CAACG,MAAM,CAAC,CAAC;IAC/B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOZ,WAAW;AACpB","ignoreList":[]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { AndroidImportance } from '@notifee/react-native';
|
|
2
1
|
import { setupFirebaseHandlerAndroid } from '../push/android';
|
|
3
2
|
import pushLogoutCallbacks from '../internal/pushLogoutCallback';
|
|
4
3
|
import { setupRemoteNotificationsHandleriOS } from '../push/ios';
|
|
@@ -6,13 +5,6 @@ import newNotificationCallbacks from '../internal/newNotificationCallbacks';
|
|
|
6
5
|
const DEFAULT_STREAM_VIDEO_CONFIG = {
|
|
7
6
|
foregroundService: {
|
|
8
7
|
android: {
|
|
9
|
-
channel: {
|
|
10
|
-
id: 'stream_call_foreground_service',
|
|
11
|
-
name: 'Notification Service to keep call alive',
|
|
12
|
-
lights: false,
|
|
13
|
-
vibration: false,
|
|
14
|
-
importance: AndroidImportance.DEFAULT
|
|
15
|
-
},
|
|
16
8
|
notificationTexts: {
|
|
17
9
|
title: 'Call in progress',
|
|
18
10
|
body: 'Tap to return to the call'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["setupFirebaseHandlerAndroid","pushLogoutCallbacks","setupRemoteNotificationsHandleriOS","newNotificationCallbacks","DEFAULT_STREAM_VIDEO_CONFIG","foregroundService","android","notificationTexts","title","body","StreamVideoRN","config","updateConfig","updateAndroidIncomingCallChannel","updateChannel","prevChannel","push","incomingCallChannel","setPushConfig","pushConfig","getConfig","onPushLogout","current","Promise","all","map","callback","then","resolve","addOnNewCallNotificationListener","filter","cb"],"sourceRoot":"../../../../src","sources":["utils/StreamVideoRN/index.ts"],"mappings":"AAAA,SAASA,2BAA2B,QAAQ,iBAAiB;AAE7D,OAAOC,mBAAmB,MAAM,gCAAgC;AAChE,SAASC,kCAAkC,QAAQ,aAAa;AAChE,OAAOC,wBAAwB,MAExB,sCAAsC;AAE7C,MAAMC,2BAA8C,GAAG;EACrDC,iBAAiB,EAAE;IACjBC,OAAO,EAAE;MACPC,iBAAiB,EAAE;QACjBC,KAAK,EAAE,kBAAkB;QACzBC,IAAI,EAAE;MACR;IACF;EACF;AACF,CAAC;AAED,OAAO,MAAMC,aAAa,CAAC;EACzB,OAAeC,MAAM,GAAGP,2BAA2B;;EAEnD;AACF;AACA;AACA;AACA;EACE,OAAOQ,YAAYA,CAACA,YAAsD,EAAE;IAC1E,IAAI,CAACD,MAAM,GAAG;MACZ,GAAG,IAAI,CAACA,MAAM;MACd,GAAGC;IACL,CAAC;EACH;EAEA,OAAOC,gCAAgCA,CACrCC,aAEC,EACD;IACA,MAAMC,WAAW,GAAG,IAAI,CAACJ,MAAM,CAACK,IAAI,EAAEV,OAAO,EAAEW,mBAAmB;IAClE,IAAIF,WAAW,EAAE;MACf,IAAI,CAACJ,MAAM,CAACK,IAAI,CAAEV,OAAO,CAACW,mBAAmB,GAAG;QAC9C,GAAGF,WAAW;QACd,GAAGD;MACL,CAAC;IACH;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOI,aAAaA,CAACC,UAAkD,EAAE;IACvE,IAAI,IAAI,CAACR,MAAM,CAACK,IAAI,EAAE;MACpB;MACA;IACF;IACA,IAAI,CAACL,MAAM,CAACK,IAAI,GAAGG,UAAU;IAC7B;IACAnB,2BAA2B,CAACmB,UAAU,CAAC;IACvC;IACAjB,kCAAkC,CAACiB,UAAU,CAAC;EAChD;EAEA,OAAOC,SAASA,CAAA,EAAG;IACjB,OAAO,IAAI,CAACT,MAAM;EACpB;;EAEA;AACF;AACA;AACA;EACE,OAAOU,YAAYA,CAAA,EAAG;IACpB,IAAIpB,mBAAmB,CAACqB,OAAO,EAAE;MAC/B,OAAOC,OAAO,CAACC,GAAG,CAChBvB,mBAAmB,CAACqB,OAAO,CAACG,GAAG,CAAEC,QAAQ,IAAKA,QAAQ,CAAC,CAAC,CAC1D,CAAC,CAACC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAClB;IACA,OAAOJ,OAAO,CAACK,OAAO,CAAC,CAAC;EAC1B;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOC,gCAAgCA,CACrCH,QAAqC,EACrC;IACA,IAAI,CAACvB,wBAAwB,CAACmB,OAAO,EAAE;MACrCnB,wBAAwB,CAACmB,OAAO,GAAG,CAACI,QAAQ,CAAC;IAC/C,CAAC,MAAM;MACLvB,wBAAwB,CAACmB,OAAO,CAACN,IAAI,CAACU,QAAQ,CAAC;IACjD;IACA,OAAO,MAAM;MACXvB,wBAAwB,CAACmB,OAAO,GAC9BnB,wBAAwB,CAACmB,OAAO,EAAEQ,MAAM,CAAEC,EAAE,IAAKA,EAAE,KAAKL,QAAQ,CAAC;IACrE,CAAC;EACH;AACF","ignoreList":[]}
|
package/dist/module/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '0.
|
|
1
|
+
export const version = '0.9.0';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAndroidKeepCallAliveEffect.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAndroidKeepCallAliveEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAndroidKeepCallAliveEffect.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAndroidKeepCallAliveEffect.ts"],"names":[],"mappings":"AA0DA;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,YA2EzC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIsInPiPMode.d.ts","sourceRoot":"","sources":["../../../src/hooks/useIsInPiPMode.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useIsInPiPMode.d.ts","sourceRoot":"","sources":["../../../src/hooks/useIsInPiPMode.tsx"],"names":[],"mappings":"AAYA,wBAAgB,cAAc,YA6C7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/StreamVideoRN/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/StreamVideoRN/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAG5C,OAAiC,EAC/B,2BAA2B,EAC5B,MAAM,sCAAsC,CAAC;AAa9C,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,MAAM,CAA+B;IAEpD;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAO1E,MAAM,CAAC,gCAAgC,CACrC,aAAa,EAAE,OAAO,CACpB,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CACzE;IAWH;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAYvE,MAAM,CAAC,SAAS;IAIhB;;;OAGG;IACH,MAAM,CAAC,YAAY;IASnB;;;;OAIG;IACH,MAAM,CAAC,gCAAgC,CACrC,QAAQ,EAAE,2BAA2B;CAYxC"}
|
|
@@ -105,11 +105,9 @@ export type StreamVideoConfig = {
|
|
|
105
105
|
foregroundService: {
|
|
106
106
|
android: {
|
|
107
107
|
/**
|
|
108
|
-
* The notification
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* The texts shown in the notification to keep call alive in the background for Android using a foreground service.
|
|
108
|
+
* The texts shown in the notification to keep call alive in the background
|
|
109
|
+
* for Android 24 and 25 platforms using a foreground service.
|
|
110
|
+
* On Android 26 and above, Picture in Picture mode is used to keep the call alive.
|
|
113
111
|
*/
|
|
114
112
|
notificationTexts: {
|
|
115
113
|
title: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/utils/StreamVideoRN/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAE5E,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;OAIG;IACH,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,GAAG,EAAE;YACH;;;;eAIG;YACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;SAC3B,CAAC;QACF,OAAO,EAAE;YACP;;;;eAIG;YACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B;;;;;;;;;eASG;YACH,WAAW,CAAC,EAAE,cAAc,CAAC;YAC7B;;;;;;;;;eASG;YACH,mBAAmB,CAAC,EAAE,cAAc,CAAC;YACrC;;;;;;;eAOG;YACH,mCAAmC,CAAC,EAAE;gBACpC,QAAQ,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;gBAC9C,OAAO,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;aAC9C,CAAC;YACF;;;;;;;;;;;;;eAaG;YACH,2BAA2B,CAAC,EAAE;gBAC5B,QAAQ,EAAE,CACR,IAAI,EAAE,mBAAmB,EACzB,eAAe,EAAE,MAAM,KACpB,MAAM,CAAC;gBACZ,OAAO,EAAE,CAAC,IAAI,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;aACzE,CAAC;SACH,CAAC;QACF;;;;;;;;;;;;;;;;WAgBG;QACH,uBAAuB,EAAE,MAAM,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAC;QACtE,+EAA+E;QAC/E,kBAAkB,EAAE,MAAM,IAAI,CAAC;QAC/B,mIAAmI;QACnI,sBAAsB,EAAE,MAAM,IAAI,CAAC;QACnC,8EAA8E;QAC9E,+BAA+B,CAAC,EAAE,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,mBAAmB,KACtB,IAAI,CAAC;KACX,CAAC;IACF,iBAAiB,EAAE;QACjB,OAAO,EAAE;YACP
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/utils/StreamVideoRN/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAE5E,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;OAIG;IACH,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,GAAG,EAAE;YACH;;;;eAIG;YACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;SAC3B,CAAC;QACF,OAAO,EAAE;YACP;;;;eAIG;YACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B;;;;;;;;;eASG;YACH,WAAW,CAAC,EAAE,cAAc,CAAC;YAC7B;;;;;;;;;eASG;YACH,mBAAmB,CAAC,EAAE,cAAc,CAAC;YACrC;;;;;;;eAOG;YACH,mCAAmC,CAAC,EAAE;gBACpC,QAAQ,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;gBAC9C,OAAO,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;aAC9C,CAAC;YACF;;;;;;;;;;;;;eAaG;YACH,2BAA2B,CAAC,EAAE;gBAC5B,QAAQ,EAAE,CACR,IAAI,EAAE,mBAAmB,EACzB,eAAe,EAAE,MAAM,KACpB,MAAM,CAAC;gBACZ,OAAO,EAAE,CAAC,IAAI,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;aACzE,CAAC;SACH,CAAC;QACF;;;;;;;;;;;;;;;;WAgBG;QACH,uBAAuB,EAAE,MAAM,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAC;QACtE,+EAA+E;QAC/E,kBAAkB,EAAE,MAAM,IAAI,CAAC;QAC/B,mIAAmI;QACnI,sBAAsB,EAAE,MAAM,IAAI,CAAC;QACnC,8EAA8E;QAC9E,+BAA+B,CAAC,EAAE,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,mBAAmB,KACtB,IAAI,CAAC;KACX,CAAC;IACF,iBAAiB,EAAE;QACjB,OAAO,EAAE;YACP;;;;eAIG;YACH,iBAAiB,EAAE;gBACjB,KAAK,EAAE,MAAM,CAAC;gBACd,IAAI,EAAE,MAAM,CAAC;aACd,CAAC;SACH,CAAC;KACH,CAAC;CACH,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "0.
|
|
1
|
+
export declare const version = "0.9.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -3,21 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const config_plugins_1 = require("@expo/config-plugins");
|
|
4
4
|
const { prefixAndroidKeys, getMainApplicationOrThrow, getMainActivityOrThrow } = config_plugins_1.AndroidConfig.Manifest;
|
|
5
5
|
function getNotifeeService() {
|
|
6
|
-
/*
|
|
6
|
+
/* Example:
|
|
7
7
|
<service
|
|
8
8
|
android:name="app.notifee.core.ForegroundService"
|
|
9
9
|
android:stopWithTask="true"
|
|
10
|
+
|
|
10
11
|
android:foregroundServiceType="mediaProjection" />
|
|
11
12
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// foregroundServiceType = 'mediaProjection|' + foregroundServiceType;
|
|
15
|
-
// }
|
|
16
|
-
const head = prefixAndroidKeys({
|
|
13
|
+
const foregroundServiceType = 'dataSync';
|
|
14
|
+
let head = prefixAndroidKeys({
|
|
17
15
|
name: 'app.notifee.core.ForegroundService',
|
|
18
16
|
stopWithTask: 'true',
|
|
19
17
|
foregroundServiceType,
|
|
20
18
|
});
|
|
19
|
+
head = { ...head, 'tools:replace': 'android:foregroundServiceType' };
|
|
21
20
|
return {
|
|
22
21
|
$: head,
|
|
23
22
|
};
|
|
@@ -4,7 +4,7 @@ const config_plugins_1 = require("@expo/config-plugins");
|
|
|
4
4
|
const withStreamVideoReactNativeSDKAndroidPermissions = (configuration, props) => {
|
|
5
5
|
const foregroundServicePermissions = [
|
|
6
6
|
'android.permission.FOREGROUND_SERVICE',
|
|
7
|
-
'android.permission.
|
|
7
|
+
'android.permission.FOREGROUND_SERVICE_DATA_SYNC',
|
|
8
8
|
];
|
|
9
9
|
if (props?.enableScreenshare) {
|
|
10
10
|
foregroundServicePermissions.push('android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/video-react-native-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"packageManager": "yarn@3.2.4",
|
|
5
5
|
"main": "dist/commonjs/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"react-native": ">=0.67.0",
|
|
70
70
|
"react-native-callkeep": ">=4.3.11",
|
|
71
71
|
"react-native-gesture-handler": ">=2.8.0",
|
|
72
|
-
"react-native-incall-manager": ">=4.
|
|
72
|
+
"react-native-incall-manager": ">=4.2.0",
|
|
73
73
|
"react-native-reanimated": ">=2.7.0",
|
|
74
74
|
"react-native-svg": ">=13.6.0",
|
|
75
75
|
"react-native-voip-push-notification": ">=3.3.1"
|
|
@@ -5,10 +5,10 @@ import { StreamVideoRN } from '../utils';
|
|
|
5
5
|
import { Platform } from 'react-native';
|
|
6
6
|
import { CallingState, getLogger } from '@stream-io/video-client';
|
|
7
7
|
|
|
8
|
+
const isAndroid7OrBelow = Platform.OS === 'android' && Platform.Version < 26;
|
|
9
|
+
|
|
8
10
|
function setForegroundService() {
|
|
9
|
-
if (
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
11
|
+
if (!isAndroid7OrBelow) return;
|
|
12
12
|
notifee.registerForegroundService(() => {
|
|
13
13
|
return new Promise(() => {
|
|
14
14
|
const logger = getLogger(['setForegroundService method']);
|
|
@@ -18,12 +18,9 @@ function setForegroundService() {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
async function startForegroundService(call_cid: string) {
|
|
21
|
-
if (
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
21
|
+
if (!isAndroid7OrBelow) return;
|
|
24
22
|
const foregroundServiceConfig = StreamVideoRN.getConfig().foregroundService;
|
|
25
23
|
const { title, body } = foregroundServiceConfig.android.notificationTexts;
|
|
26
|
-
const channelId = foregroundServiceConfig.android.channel.id;
|
|
27
24
|
|
|
28
25
|
// request for notification permission and then start the foreground service
|
|
29
26
|
const settings = await notifee.getNotificationSettings();
|
|
@@ -35,13 +32,11 @@ async function startForegroundService(call_cid: string) {
|
|
|
35
32
|
);
|
|
36
33
|
return;
|
|
37
34
|
}
|
|
38
|
-
await notifee.createChannel(foregroundServiceConfig.android.channel);
|
|
39
35
|
await notifee.displayNotification({
|
|
40
36
|
id: call_cid,
|
|
41
37
|
title,
|
|
42
38
|
body,
|
|
43
39
|
android: {
|
|
44
|
-
channelId,
|
|
45
40
|
asForegroundService: true,
|
|
46
41
|
ongoing: true, // user cannot dismiss the notification
|
|
47
42
|
colorized: true,
|
|
@@ -54,9 +49,7 @@ async function startForegroundService(call_cid: string) {
|
|
|
54
49
|
}
|
|
55
50
|
|
|
56
51
|
async function stopForegroundService() {
|
|
57
|
-
if (
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
52
|
+
if (!isAndroid7OrBelow) return;
|
|
60
53
|
await notifee.stopForegroundService();
|
|
61
54
|
}
|
|
62
55
|
|
|
@@ -70,7 +63,7 @@ let isSetForegroundServiceRan = false;
|
|
|
70
63
|
* Additonally: also responsible for cancelling any notifee displayed notification when the call has transitioned out of ringing
|
|
71
64
|
*/
|
|
72
65
|
export const useAndroidKeepCallAliveEffect = () => {
|
|
73
|
-
if (!isSetForegroundServiceRan &&
|
|
66
|
+
if (!isSetForegroundServiceRan && isAndroid7OrBelow) {
|
|
74
67
|
isSetForegroundServiceRan = true;
|
|
75
68
|
setForegroundService();
|
|
76
69
|
}
|
|
@@ -81,7 +74,7 @@ export const useAndroidKeepCallAliveEffect = () => {
|
|
|
81
74
|
const callingState = useCallCallingState();
|
|
82
75
|
|
|
83
76
|
useEffect((): (() => void) | undefined => {
|
|
84
|
-
if (
|
|
77
|
+
if (!isAndroid7OrBelow || !activeCallCid) {
|
|
85
78
|
return;
|
|
86
79
|
}
|
|
87
80
|
|
|
@@ -8,11 +8,15 @@ import {
|
|
|
8
8
|
|
|
9
9
|
const PIP_CHANGE_EVENT = 'StreamVideoReactNative_PIP_CHANGE_EVENT';
|
|
10
10
|
|
|
11
|
+
const isAndroid8OrAbove = Platform.OS === 'android' && Platform.Version >= 26;
|
|
12
|
+
|
|
11
13
|
export function useIsInPiPMode() {
|
|
12
|
-
const [isInPiPMode, setIsInPiPMode] = useState(
|
|
14
|
+
const [isInPiPMode, setIsInPiPMode] = useState(
|
|
15
|
+
isAndroid8OrAbove && AppState.currentState === 'background'
|
|
16
|
+
);
|
|
13
17
|
|
|
14
18
|
useEffect(() => {
|
|
15
|
-
if (
|
|
19
|
+
if (!isAndroid8OrAbove) {
|
|
16
20
|
return;
|
|
17
21
|
}
|
|
18
22
|
|
|
@@ -25,6 +29,12 @@ export function useIsInPiPMode() {
|
|
|
25
29
|
setIsInPiPMode
|
|
26
30
|
);
|
|
27
31
|
|
|
32
|
+
const setFromNativeMethod = async () => {
|
|
33
|
+
const isInPiPNativeMethod: boolean | null | undefined =
|
|
34
|
+
await NativeModules?.StreamVideoReactNative?.isInPiPMode();
|
|
35
|
+
setIsInPiPMode(!!isInPiPNativeMethod);
|
|
36
|
+
};
|
|
37
|
+
|
|
28
38
|
const subscriptionAppState = AppState.addEventListener(
|
|
29
39
|
'change',
|
|
30
40
|
(nextAppState) => {
|
|
@@ -32,17 +42,12 @@ export function useIsInPiPMode() {
|
|
|
32
42
|
setIsInPiPMode(true); // set with an assumption that its enabled so that UI disabling happens faster
|
|
33
43
|
// if PiP was not enabled anyway, then in the next code we ll set it to false and UI wont be shown anyway
|
|
34
44
|
}
|
|
35
|
-
|
|
36
|
-
// this can be faster than event emitter at times
|
|
37
|
-
// also in new arch this can be made a synchronous method
|
|
38
|
-
NativeModules?.StreamVideoReactNative?.isInPiPMode().then(
|
|
39
|
-
(isInPiPNativeMethod: boolean | null | undefined) => {
|
|
40
|
-
setIsInPiPMode(!!isInPiPNativeMethod);
|
|
41
|
-
}
|
|
42
|
-
);
|
|
45
|
+
setFromNativeMethod();
|
|
43
46
|
}
|
|
44
47
|
);
|
|
45
48
|
|
|
49
|
+
setFromNativeMethod();
|
|
50
|
+
|
|
46
51
|
return () => {
|
|
47
52
|
subscriptionPiPChange.remove();
|
|
48
53
|
subscriptionAppState.remove();
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { AndroidImportance } from '@notifee/react-native';
|
|
2
1
|
import { setupFirebaseHandlerAndroid } from '../push/android';
|
|
3
2
|
import { StreamVideoConfig } from './types';
|
|
4
3
|
import pushLogoutCallbacks from '../internal/pushLogoutCallback';
|
|
@@ -10,13 +9,6 @@ import newNotificationCallbacks, {
|
|
|
10
9
|
const DEFAULT_STREAM_VIDEO_CONFIG: StreamVideoConfig = {
|
|
11
10
|
foregroundService: {
|
|
12
11
|
android: {
|
|
13
|
-
channel: {
|
|
14
|
-
id: 'stream_call_foreground_service',
|
|
15
|
-
name: 'Notification Service to keep call alive',
|
|
16
|
-
lights: false,
|
|
17
|
-
vibration: false,
|
|
18
|
-
importance: AndroidImportance.DEFAULT,
|
|
19
|
-
},
|
|
20
12
|
notificationTexts: {
|
|
21
13
|
title: 'Call in progress',
|
|
22
14
|
body: 'Tap to return to the call',
|
|
@@ -113,11 +113,9 @@ export type StreamVideoConfig = {
|
|
|
113
113
|
foregroundService: {
|
|
114
114
|
android: {
|
|
115
115
|
/**
|
|
116
|
-
* The notification
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* The texts shown in the notification to keep call alive in the background for Android using a foreground service.
|
|
116
|
+
* The texts shown in the notification to keep call alive in the background
|
|
117
|
+
* for Android 24 and 25 platforms using a foreground service.
|
|
118
|
+
* On Android 26 and above, Picture in Picture mode is used to keep the call alive.
|
|
121
119
|
*/
|
|
122
120
|
notificationTexts: {
|
|
123
121
|
title: string;
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '0.
|
|
1
|
+
export const version = '0.9.0';
|