@stream-io/video-react-native-sdk 1.29.3 → 1.29.4-beta.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/android/src/main/AndroidManifest.xml +8 -1
- package/android/src/main/AndroidManifestNew.xml +11 -0
- package/android/src/main/java/com/streamvideo/reactnative/StreamVideoReactNativeModule.kt +42 -5
- package/android/src/main/java/com/streamvideo/reactnative/audio/utils/WebRtcAudioUtils.kt +70 -6
- package/android/src/main/java/com/streamvideo/reactnative/callmanager/StreamInCallManagerModule.kt +6 -4
- package/android/src/main/java/com/streamvideo/reactnative/keepalive/KeepAliveNotification.kt +83 -0
- package/android/src/main/java/com/streamvideo/reactnative/keepalive/StreamCallKeepAliveHeadlessService.kt +149 -0
- package/dist/commonjs/hooks/push/index.js +0 -2
- package/dist/commonjs/hooks/push/index.js.map +1 -1
- package/dist/commonjs/hooks/push/useCallingExpWithCallingStateEffect.js +121 -0
- package/dist/commonjs/hooks/push/useCallingExpWithCallingStateEffect.js.map +1 -0
- package/dist/commonjs/hooks/push/useIosVoipPushEventsSetupEffect.js +18 -31
- package/dist/commonjs/hooks/push/useIosVoipPushEventsSetupEffect.js.map +1 -1
- package/dist/commonjs/hooks/useAndroidKeepCallAliveEffect.js +64 -97
- package/dist/commonjs/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
- package/dist/commonjs/index.js +1 -0
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/modules/call-manager/CallManager.js +26 -0
- package/dist/commonjs/modules/call-manager/CallManager.js.map +1 -1
- package/dist/commonjs/providers/StreamCall/index.js +6 -6
- package/dist/commonjs/providers/StreamCall/index.js.map +1 -1
- package/dist/commonjs/utils/StreamVideoRN/index.js +33 -21
- package/dist/commonjs/utils/StreamVideoRN/index.js.map +1 -1
- package/dist/commonjs/utils/internal/callingx/audioSessionPromise.js +58 -0
- package/dist/commonjs/utils/internal/callingx/audioSessionPromise.js.map +1 -0
- package/dist/commonjs/utils/internal/callingx/callingx.js +109 -0
- package/dist/commonjs/utils/internal/callingx/callingx.js.map +1 -0
- package/dist/commonjs/utils/internal/registerSDKGlobals.js +52 -3
- package/dist/commonjs/utils/internal/registerSDKGlobals.js.map +1 -1
- package/dist/commonjs/utils/keepCallAliveHeadlessTask.js +48 -0
- package/dist/commonjs/utils/keepCallAliveHeadlessTask.js.map +1 -0
- package/dist/commonjs/utils/push/android.js +151 -202
- package/dist/commonjs/utils/push/android.js.map +1 -1
- package/dist/commonjs/utils/push/internal/ios.js +17 -34
- package/dist/commonjs/utils/push/internal/ios.js.map +1 -1
- package/dist/commonjs/utils/push/internal/rxSubjects.js +1 -45
- package/dist/commonjs/utils/push/internal/rxSubjects.js.map +1 -1
- package/dist/commonjs/utils/push/internal/utils.js +32 -20
- package/dist/commonjs/utils/push/internal/utils.js.map +1 -1
- package/dist/commonjs/utils/push/ios.js.map +1 -1
- package/dist/commonjs/utils/push/libs/callingx.js +75 -0
- package/dist/commonjs/utils/push/libs/callingx.js.map +1 -0
- package/dist/commonjs/utils/push/libs/index.js +8 -19
- package/dist/commonjs/utils/push/libs/index.js.map +1 -1
- package/dist/commonjs/utils/push/libs/notifee/index.js +0 -19
- package/dist/commonjs/utils/push/libs/notifee/index.js.map +1 -1
- package/dist/commonjs/utils/push/setupCallingExpEvents.js +108 -0
- package/dist/commonjs/utils/push/setupCallingExpEvents.js.map +1 -0
- package/dist/commonjs/utils/push/setupIosVoipPushEvents.js +7 -6
- package/dist/commonjs/utils/push/setupIosVoipPushEvents.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/commonjs/version.js.map +1 -1
- package/dist/module/hooks/push/index.js +0 -2
- package/dist/module/hooks/push/index.js.map +1 -1
- package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js +114 -0
- package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js.map +1 -0
- package/dist/module/hooks/push/useIosVoipPushEventsSetupEffect.js +18 -31
- package/dist/module/hooks/push/useIosVoipPushEventsSetupEffect.js.map +1 -1
- package/dist/module/hooks/useAndroidKeepCallAliveEffect.js +66 -99
- package/dist/module/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
- package/dist/module/index.js +1 -0
- package/dist/module/index.js.map +1 -1
- package/dist/module/modules/call-manager/CallManager.js +26 -0
- package/dist/module/modules/call-manager/CallManager.js.map +1 -1
- package/dist/module/providers/StreamCall/index.js +6 -6
- package/dist/module/providers/StreamCall/index.js.map +1 -1
- package/dist/module/utils/StreamVideoRN/index.js +33 -21
- package/dist/module/utils/StreamVideoRN/index.js.map +1 -1
- package/dist/module/utils/internal/callingx/audioSessionPromise.js +51 -0
- package/dist/module/utils/internal/callingx/audioSessionPromise.js.map +1 -0
- package/dist/module/utils/internal/callingx/callingx.js +100 -0
- package/dist/module/utils/internal/callingx/callingx.js.map +1 -0
- package/dist/module/utils/internal/registerSDKGlobals.js +52 -3
- package/dist/module/utils/internal/registerSDKGlobals.js.map +1 -1
- package/dist/module/utils/keepCallAliveHeadlessTask.js +42 -0
- package/dist/module/utils/keepCallAliveHeadlessTask.js.map +1 -0
- package/dist/module/utils/push/android.js +153 -204
- package/dist/module/utils/push/android.js.map +1 -1
- package/dist/module/utils/push/internal/ios.js +17 -34
- package/dist/module/utils/push/internal/ios.js.map +1 -1
- package/dist/module/utils/push/internal/rxSubjects.js +0 -44
- package/dist/module/utils/push/internal/rxSubjects.js.map +1 -1
- package/dist/module/utils/push/internal/utils.js +29 -19
- package/dist/module/utils/push/internal/utils.js.map +1 -1
- package/dist/module/utils/push/ios.js.map +1 -1
- package/dist/module/utils/push/libs/callingx.js +67 -0
- package/dist/module/utils/push/libs/callingx.js.map +1 -0
- package/dist/module/utils/push/libs/index.js +1 -2
- package/dist/module/utils/push/libs/index.js.map +1 -1
- package/dist/module/utils/push/libs/notifee/index.js +0 -18
- package/dist/module/utils/push/libs/notifee/index.js.map +1 -1
- package/dist/module/utils/push/setupCallingExpEvents.js +102 -0
- package/dist/module/utils/push/setupCallingExpEvents.js.map +1 -0
- package/dist/module/utils/push/setupIosVoipPushEvents.js +7 -6
- package/dist/module/utils/push/setupIosVoipPushEvents.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/module/version.js.map +1 -1
- package/dist/typescript/hooks/push/index.d.ts.map +1 -1
- package/dist/typescript/hooks/push/useCallingExpWithCallingStateEffect.d.ts +5 -0
- package/dist/typescript/hooks/push/useCallingExpWithCallingStateEffect.d.ts.map +1 -0
- package/dist/typescript/hooks/push/useIosVoipPushEventsSetupEffect.d.ts.map +1 -1
- package/dist/typescript/hooks/useAndroidKeepCallAliveEffect.d.ts.map +1 -1
- package/dist/typescript/index.d.ts +1 -0
- package/dist/typescript/index.d.ts.map +1 -1
- package/dist/typescript/modules/call-manager/CallManager.d.ts +5 -0
- package/dist/typescript/modules/call-manager/CallManager.d.ts.map +1 -1
- package/dist/typescript/utils/StreamVideoRN/index.d.ts +20 -2
- package/dist/typescript/utils/StreamVideoRN/index.d.ts.map +1 -1
- package/dist/typescript/utils/StreamVideoRN/types.d.ts +54 -29
- package/dist/typescript/utils/StreamVideoRN/types.d.ts.map +1 -1
- package/dist/typescript/utils/internal/callingx/audioSessionPromise.d.ts +16 -0
- package/dist/typescript/utils/internal/callingx/audioSessionPromise.d.ts.map +1 -0
- package/dist/typescript/utils/internal/callingx/callingx.d.ts +14 -0
- package/dist/typescript/utils/internal/callingx/callingx.d.ts.map +1 -0
- package/dist/typescript/utils/internal/registerSDKGlobals.d.ts.map +1 -1
- package/dist/typescript/utils/keepCallAliveHeadlessTask.d.ts +10 -0
- package/dist/typescript/utils/keepCallAliveHeadlessTask.d.ts.map +1 -0
- package/dist/typescript/utils/push/android.d.ts +1 -2
- package/dist/typescript/utils/push/android.d.ts.map +1 -1
- package/dist/typescript/utils/push/internal/ios.d.ts.map +1 -1
- package/dist/typescript/utils/push/internal/rxSubjects.d.ts +0 -33
- package/dist/typescript/utils/push/internal/rxSubjects.d.ts.map +1 -1
- package/dist/typescript/utils/push/internal/utils.d.ts +8 -1
- package/dist/typescript/utils/push/internal/utils.d.ts.map +1 -1
- package/dist/typescript/utils/push/ios.d.ts +1 -2
- package/dist/typescript/utils/push/ios.d.ts.map +1 -1
- package/dist/typescript/utils/push/libs/callingx.d.ts +9 -0
- package/dist/typescript/utils/push/libs/callingx.d.ts.map +1 -0
- package/dist/typescript/utils/push/libs/index.d.ts +1 -2
- package/dist/typescript/utils/push/libs/index.d.ts.map +1 -1
- package/dist/typescript/utils/push/libs/notifee/index.d.ts +0 -1
- package/dist/typescript/utils/push/libs/notifee/index.d.ts.map +1 -1
- package/dist/typescript/utils/push/setupCallingExpEvents.d.ts +8 -0
- package/dist/typescript/utils/push/setupCallingExpEvents.d.ts.map +1 -0
- package/dist/typescript/utils/push/setupIosVoipPushEvents.d.ts.map +1 -1
- package/dist/typescript/version.d.ts +1 -1
- package/dist/typescript/version.d.ts.map +1 -1
- package/expo-config-plugin/dist/withAndroidManifest.js +1 -33
- package/expo-config-plugin/dist/withAndroidPermissions.js +2 -7
- package/expo-config-plugin/dist/withAppDelegate.js +19 -197
- package/expo-config-plugin/dist/withMainActivity.js +1 -1
- package/expo-config-plugin/dist/withiOSInfoPlist.js +2 -3
- package/ios/StreamInCallManager.m +2 -0
- package/ios/StreamInCallManager.swift +19 -7
- package/ios/StreamVideoReactNative.h +7 -4
- package/ios/StreamVideoReactNative.m +189 -82
- package/package.json +13 -18
- package/src/hooks/push/index.ts +0 -2
- package/src/hooks/push/useCallingExpWithCallingStateEffect.ts +147 -0
- package/src/hooks/push/useIosVoipPushEventsSetupEffect.ts +21 -34
- package/src/hooks/useAndroidKeepCallAliveEffect.ts +94 -120
- package/src/index.ts +1 -0
- package/src/modules/call-manager/CallManager.ts +36 -0
- package/src/modules/call-manager/native-module.d.ts +7 -0
- package/src/providers/StreamCall/index.tsx +6 -6
- package/src/utils/StreamVideoRN/index.ts +40 -30
- package/src/utils/StreamVideoRN/types.ts +56 -29
- package/src/utils/internal/callingx/audioSessionPromise.ts +53 -0
- package/src/utils/internal/callingx/callingx.ts +146 -0
- package/src/utils/internal/registerSDKGlobals.ts +47 -4
- package/src/utils/keepCallAliveHeadlessTask.ts +54 -0
- package/src/utils/push/android.ts +227 -309
- package/src/utils/push/internal/ios.ts +28 -44
- package/src/utils/push/internal/rxSubjects.ts +0 -61
- package/src/utils/push/internal/utils.ts +45 -26
- package/src/utils/push/ios.ts +1 -6
- package/src/utils/push/libs/callingx.ts +90 -0
- package/src/utils/push/libs/index.ts +1 -2
- package/src/utils/push/libs/notifee/index.ts +0 -27
- package/src/utils/push/setupCallingExpEvents.ts +130 -0
- package/src/utils/push/setupIosVoipPushEvents.ts +11 -7
- package/src/version.ts +1 -1
- package/CHANGELOG.md +0 -3144
- package/android/src/main/java/com/streamvideo/reactnative/util/CallAliveServiceChecker.kt +0 -95
- package/dist/commonjs/hooks/push/useIosCallkeepWithCallingStateEffect.js +0 -160
- package/dist/commonjs/hooks/push/useIosCallkeepWithCallingStateEffect.js.map +0 -1
- package/dist/commonjs/hooks/push/useProcessPushCallEffect.js +0 -67
- package/dist/commonjs/hooks/push/useProcessPushCallEffect.js.map +0 -1
- package/dist/commonjs/utils/push/libs/callkeep.js +0 -17
- package/dist/commonjs/utils/push/libs/callkeep.js.map +0 -1
- package/dist/commonjs/utils/push/libs/voipPushNotification.js +0 -17
- package/dist/commonjs/utils/push/libs/voipPushNotification.js.map +0 -1
- package/dist/commonjs/utils/push/setupIosCallKeepEvents.js +0 -205
- package/dist/commonjs/utils/push/setupIosCallKeepEvents.js.map +0 -1
- package/dist/module/hooks/push/useIosCallkeepWithCallingStateEffect.js +0 -153
- package/dist/module/hooks/push/useIosCallkeepWithCallingStateEffect.js.map +0 -1
- package/dist/module/hooks/push/useProcessPushCallEffect.js +0 -60
- package/dist/module/hooks/push/useProcessPushCallEffect.js.map +0 -1
- package/dist/module/utils/push/libs/callkeep.js +0 -11
- package/dist/module/utils/push/libs/callkeep.js.map +0 -1
- package/dist/module/utils/push/libs/voipPushNotification.js +0 -11
- package/dist/module/utils/push/libs/voipPushNotification.js.map +0 -1
- package/dist/module/utils/push/setupIosCallKeepEvents.js +0 -199
- package/dist/module/utils/push/setupIosCallKeepEvents.js.map +0 -1
- package/dist/typescript/hooks/push/useIosCallkeepWithCallingStateEffect.d.ts +0 -5
- package/dist/typescript/hooks/push/useIosCallkeepWithCallingStateEffect.d.ts.map +0 -1
- package/dist/typescript/hooks/push/useProcessPushCallEffect.d.ts +0 -8
- package/dist/typescript/hooks/push/useProcessPushCallEffect.d.ts.map +0 -1
- package/dist/typescript/utils/push/libs/callkeep.d.ts +0 -3
- package/dist/typescript/utils/push/libs/callkeep.d.ts.map +0 -1
- package/dist/typescript/utils/push/libs/voipPushNotification.d.ts +0 -3
- package/dist/typescript/utils/push/libs/voipPushNotification.d.ts.map +0 -1
- package/dist/typescript/utils/push/setupIosCallKeepEvents.d.ts +0 -6
- package/dist/typescript/utils/push/setupIosCallKeepEvents.d.ts.map +0 -1
- package/src/hooks/push/useIosCallkeepWithCallingStateEffect.ts +0 -235
- package/src/hooks/push/useProcessPushCallEffect.ts +0 -108
- package/src/utils/push/libs/callkeep.ts +0 -16
- package/src/utils/push/libs/voipPushNotification.ts +0 -17
- package/src/utils/push/setupIosCallKeepEvents.ts +0 -252
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
|
|
2
|
+
import { getCallingxLibIfAvailable } from '../../utils/push/libs/callingx';
|
|
3
|
+
import { videoLoggerSystem } from '@stream-io/video-client';
|
|
2
4
|
const NativeManager = NativeModules.StreamInCallManager;
|
|
5
|
+
const CallingxModule = getCallingxLibIfAvailable();
|
|
3
6
|
const invariant = (condition, message) => {
|
|
4
7
|
if (!condition) throw new Error(message);
|
|
5
8
|
};
|
|
@@ -61,6 +64,15 @@ class SpeakerManager {
|
|
|
61
64
|
NativeManager.setForceSpeakerphoneOn(force);
|
|
62
65
|
};
|
|
63
66
|
}
|
|
67
|
+
const shouldBypassForCallKit = () => {
|
|
68
|
+
if (Platform.OS !== 'ios') {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
if (!CallingxModule) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return CallingxModule.isSetup && (CallingxModule.hasRegisteredCall() || CallingxModule.isOngoingCallsEnabled);
|
|
75
|
+
};
|
|
64
76
|
export class CallManager {
|
|
65
77
|
android = new AndroidCallManager();
|
|
66
78
|
ios = new IOSCallManager();
|
|
@@ -84,6 +96,10 @@ export class CallManager {
|
|
|
84
96
|
* @param config.enableStereoAudioOutput Whether to enable stereo audio output. Only supported for listener audio role.
|
|
85
97
|
*/
|
|
86
98
|
start = config => {
|
|
99
|
+
if (shouldBypassForCallKit()) {
|
|
100
|
+
videoLoggerSystem.getLogger('CallManager').debug('start: skipping start as callkit is handling the audio session');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
87
103
|
NativeManager.setAudioRole(config?.audioRole ?? 'communicator');
|
|
88
104
|
if (config?.audioRole === 'communicator') {
|
|
89
105
|
const type = config.deviceEndpointType ?? 'speaker';
|
|
@@ -99,6 +115,10 @@ export class CallManager {
|
|
|
99
115
|
* Stops the in call manager.
|
|
100
116
|
*/
|
|
101
117
|
stop = () => {
|
|
118
|
+
if (shouldBypassForCallKit()) {
|
|
119
|
+
videoLoggerSystem.getLogger('CallManager').debug('stop: skipping stop as callkit is handling the audio session');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
102
122
|
NativeManager.stop();
|
|
103
123
|
};
|
|
104
124
|
|
|
@@ -107,5 +127,11 @@ export class CallManager {
|
|
|
107
127
|
* in the native layer.
|
|
108
128
|
*/
|
|
109
129
|
logAudioState = () => NativeManager.logAudioState();
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* For debugging purposes, returns the current audio state as a string.
|
|
133
|
+
* @returns A string containing the current audio state information.
|
|
134
|
+
*/
|
|
135
|
+
getAudioStateLog = () => NativeManager.getAudioStateLog();
|
|
110
136
|
}
|
|
111
137
|
//# sourceMappingURL=CallManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeEventEmitter","NativeModules","Platform","NativeManager","StreamInCallManager","invariant","condition","message","Error","AndroidCallManager","getAudioDeviceStatus","OS","selectAudioDevice","endpointName","chooseAudioDeviceEndpoint","addAudioDeviceChangeListener","onChange","eventEmitter","s","addListener","remove","IOSCallManager","showDeviceSelector","showAudioRoutePicker","SpeakerManager","setMute","mute","muteAudioOutput","unmuteAudioOutput","setForceSpeakerphoneOn","force","CallManager","android","ios","speaker","start","config","setAudioRole","audioRole","type","deviceEndpointType","setDefaultAudioDeviceEndpointType","enableStereoAudioOutput","setEnableStereoAudioOutput","stop","logAudioState"],"sourceRoot":"../../../../src","sources":["modules/call-manager/CallManager.ts"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,aAAa,EAAEC,QAAQ,QAAQ,cAAc;
|
|
1
|
+
{"version":3,"names":["NativeEventEmitter","NativeModules","Platform","getCallingxLibIfAvailable","videoLoggerSystem","NativeManager","StreamInCallManager","CallingxModule","invariant","condition","message","Error","AndroidCallManager","getAudioDeviceStatus","OS","selectAudioDevice","endpointName","chooseAudioDeviceEndpoint","addAudioDeviceChangeListener","onChange","eventEmitter","s","addListener","remove","IOSCallManager","showDeviceSelector","showAudioRoutePicker","SpeakerManager","setMute","mute","muteAudioOutput","unmuteAudioOutput","setForceSpeakerphoneOn","force","shouldBypassForCallKit","isSetup","hasRegisteredCall","isOngoingCallsEnabled","CallManager","android","ios","speaker","start","config","getLogger","debug","setAudioRole","audioRole","type","deviceEndpointType","setDefaultAudioDeviceEndpointType","enableStereoAudioOutput","setEnableStereoAudioOutput","stop","logAudioState","getAudioStateLog"],"sourceRoot":"../../../../src","sources":["modules/call-manager/CallManager.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { StreamCallProvider } from '@stream-io/video-react-bindings';
|
|
2
2
|
import React, { useEffect } from 'react';
|
|
3
|
-
import { useIosCallkeepWithCallingStateEffect } from '../../hooks/push/useIosCallkeepWithCallingStateEffect';
|
|
4
3
|
import { canAddPushWSSubscriptionsRef } from '../../utils/push/internal/utils';
|
|
5
4
|
import { useAndroidKeepCallAliveEffect } from '../../hooks/useAndroidKeepCallAliveEffect';
|
|
6
5
|
import { AppStateListener } from './AppStateListener';
|
|
7
6
|
import { DeviceStats } from './DeviceStats';
|
|
8
7
|
import { pushUnsubscriptionCallbacks } from '../../utils/push/internal/constants';
|
|
8
|
+
import { useCallingExpWithCallingStateEffect } from '../../hooks/push/useCallingExpWithCallingStateEffect';
|
|
9
9
|
|
|
10
10
|
// const PIP_CHANGE_EVENT = 'StreamVideoReactNative_PIP_CHANGE_EVENT';
|
|
11
11
|
|
|
@@ -24,7 +24,7 @@ export const StreamCall = ({
|
|
|
24
24
|
}) => {
|
|
25
25
|
return /*#__PURE__*/React.createElement(StreamCallProvider, {
|
|
26
26
|
call: call
|
|
27
|
-
}, /*#__PURE__*/React.createElement(AppStateListener, null), /*#__PURE__*/React.createElement(AndroidKeepCallAlive, null), /*#__PURE__*/React.createElement(
|
|
27
|
+
}, /*#__PURE__*/React.createElement(AppStateListener, null), /*#__PURE__*/React.createElement(AndroidKeepCallAlive, null), /*#__PURE__*/React.createElement(CallingExpWithCallingState, null), /*#__PURE__*/React.createElement(ClearPushWSSubscriptions, null), /*#__PURE__*/React.createElement(DeviceStats, null), children);
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
/**
|
|
@@ -37,11 +37,11 @@ const AndroidKeepCallAlive = () => {
|
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
|
-
* This is a renderless component to
|
|
41
|
-
*
|
|
40
|
+
* This is a renderless component to sync state between stream call and CallKit/Telecom.
|
|
41
|
+
* useCallingExpWithCallingStateEffect needs to called inside a child of StreamCallProvider.
|
|
42
42
|
*/
|
|
43
|
-
const
|
|
44
|
-
|
|
43
|
+
const CallingExpWithCallingState = () => {
|
|
44
|
+
useCallingExpWithCallingStateEffect();
|
|
45
45
|
return null;
|
|
46
46
|
};
|
|
47
47
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StreamCallProvider","React","useEffect","
|
|
1
|
+
{"version":3,"names":["StreamCallProvider","React","useEffect","canAddPushWSSubscriptionsRef","useAndroidKeepCallAliveEffect","AppStateListener","DeviceStats","pushUnsubscriptionCallbacks","useCallingExpWithCallingStateEffect","StreamCall","call","children","createElement","AndroidKeepCallAlive","CallingExpWithCallingState","ClearPushWSSubscriptions","forEach","cbArray","cb","clear","current"],"sourceRoot":"../../../../src","sources":["providers/StreamCall/index.tsx"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,iCAAiC;AACpE,OAAOC,KAAK,IAA4BC,SAAS,QAAQ,OAAO;AAEhE,SAASC,4BAA4B,QAAQ,iCAAiC;AAC9E,SAASC,6BAA6B,QAAQ,2CAA2C;AACzF,SAASC,gBAAgB,QAAQ,oBAAoB;AACrD,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,2BAA2B,QAAQ,qCAAqC;AACjF,SAASC,mCAAmC,QAAQ,sDAAsD;;AAE1G;;AAEA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAGA,CAAC;EACzBC,IAAI;EACJC;AACkC,CAAC,KAAK;EACxC,oBACEV,KAAA,CAAAW,aAAA,CAACZ,kBAAkB;IAACU,IAAI,EAAEA;EAAK,gBAC7BT,KAAA,CAAAW,aAAA,CAACP,gBAAgB,MAAE,CAAC,eACpBJ,KAAA,CAAAW,aAAA,CAACC,oBAAoB,MAAE,CAAC,eACxBZ,KAAA,CAAAW,aAAA,CAACE,0BAA0B,MAAE,CAAC,eAC9Bb,KAAA,CAAAW,aAAA,CAACG,wBAAwB,MAAE,CAAC,eAC5Bd,KAAA,CAAAW,aAAA,CAACN,WAAW,MAAE,CAAC,EACdK,QACiB,CAAC;AAEzB,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAME,oBAAoB,GAAGA,CAAA,KAAM;EACjCT,6BAA6B,CAAC,CAAC;EAC/B,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMU,0BAA0B,GAAGA,CAAA,KAAM;EACvCN,mCAAmC,CAAC,CAAC;EACrC,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMO,wBAAwB,GAAGA,CAAA,KAAM;EACrCb,SAAS,CAAC,MAAM;IACd;IACAK,2BAA2B,CAACS,OAAO,CAAEC,OAAO,IAC1CA,OAAO,CAACD,OAAO,CAAEE,EAAE,IAAKA,EAAE,CAAC,CAAC,CAC9B,CAAC;IACDX,2BAA2B,CAACY,KAAK,CAAC,CAAC;IACnChB,4BAA4B,CAACiB,OAAO,GAAG,KAAK;IAC5C,OAAO,MAAM;MACXjB,4BAA4B,CAACiB,OAAO,GAAG,IAAI;IAC7C,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EACN,OAAO,IAAI;AACb,CAAC","ignoreList":[]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import pushLogoutCallbacks from '../internal/pushLogoutCallback';
|
|
2
2
|
import newNotificationCallbacks from '../internal/newNotificationCallbacks';
|
|
3
|
-
import { setupIosCallKeepEvents } from '../push/setupIosCallKeepEvents';
|
|
4
3
|
import { setupIosVoipPushEvents } from '../push/setupIosVoipPushEvents';
|
|
4
|
+
import { setupCallingExpEvents } from '../push/setupCallingExpEvents';
|
|
5
|
+
import { extractCallingExpOptions, getCallingxLib } from '../push/libs/callingx';
|
|
5
6
|
import { NativeModules, Platform } from 'react-native';
|
|
7
|
+
import { videoLoggerSystem } from '@stream-io/video-client';
|
|
6
8
|
|
|
7
9
|
// Utility type for deep partial
|
|
8
10
|
|
|
@@ -27,10 +29,7 @@ const DEFAULT_STREAM_VIDEO_CONFIG = {
|
|
|
27
29
|
android: {
|
|
28
30
|
channel: {
|
|
29
31
|
id: 'stream_call_foreground_service',
|
|
30
|
-
name: '
|
|
31
|
-
lights: false,
|
|
32
|
-
vibration: false,
|
|
33
|
-
importance: 3
|
|
32
|
+
name: 'Ongoing calls'
|
|
34
33
|
},
|
|
35
34
|
notificationTexts: {
|
|
36
35
|
title: 'Call in progress',
|
|
@@ -52,15 +51,6 @@ export class StreamVideoRN {
|
|
|
52
51
|
static updateConfig(updateConfig) {
|
|
53
52
|
this.config = deepMerge(this.config, updateConfig);
|
|
54
53
|
}
|
|
55
|
-
static updateAndroidIncomingCallChannel(updateChannel) {
|
|
56
|
-
const prevChannel = this.config.push?.android?.incomingCallChannel;
|
|
57
|
-
if (prevChannel) {
|
|
58
|
-
this.config.push.android.incomingCallChannel = {
|
|
59
|
-
...prevChannel,
|
|
60
|
-
...updateChannel
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
54
|
|
|
65
55
|
/**
|
|
66
56
|
* Set the push config for StreamVideoRN.
|
|
@@ -74,7 +64,26 @@ export class StreamVideoRN {
|
|
|
74
64
|
* import App from './App';
|
|
75
65
|
* // Set push config
|
|
76
66
|
* const pushConfig = {}; // construct your config
|
|
77
|
-
*
|
|
67
|
+
* // Set CallKit/Android Telecom API integration options. All params are optional. If not provided, the default values will be used.
|
|
68
|
+
* const callingExpOptions = {
|
|
69
|
+
* ios: {
|
|
70
|
+
* callsHistory: true,
|
|
71
|
+
* displayCallTimeout: 60000,
|
|
72
|
+
* sound: 'ringtone',
|
|
73
|
+
* imageName: 'callkit_icon',
|
|
74
|
+
* },
|
|
75
|
+
* android: {
|
|
76
|
+
* incomingChannel: {
|
|
77
|
+
* id: 'stream_incoming_call_notifications',
|
|
78
|
+
* name: 'Call notifications',
|
|
79
|
+
* vibration: true,
|
|
80
|
+
* sound: 'default',
|
|
81
|
+
* },
|
|
82
|
+
* titleTransformer: (text: string) => text,
|
|
83
|
+
* subtitleTransformer: (text: string) => text,
|
|
84
|
+
* },
|
|
85
|
+
* };
|
|
86
|
+
* StreamVideoRN.setPushConfig(pushConfig, callingExpOptions);
|
|
78
87
|
* AppRegistry.registerComponent('app', () => App);
|
|
79
88
|
*/
|
|
80
89
|
static setPushConfig(pushConfig) {
|
|
@@ -82,13 +91,16 @@ export class StreamVideoRN {
|
|
|
82
91
|
// Ignoring this config as push config was already set
|
|
83
92
|
return;
|
|
84
93
|
}
|
|
85
|
-
if (__DEV__ && (pushConfig.navigateAcceptCall || pushConfig.navigateToIncomingCall)) {
|
|
86
|
-
throw new Error(`Support for navigateAcceptCall or navigateToIncomingCall in pushConfig has been removed.
|
|
87
|
-
Please watch for incoming and outgoing calls in the root component of your app.
|
|
88
|
-
Please see https://getstream.io/video/docs/react-native/advanced/ringing-calls/#watch-for-incoming-and-outgoing-calls for more information.`);
|
|
89
|
-
}
|
|
90
94
|
this.config.push = pushConfig;
|
|
91
|
-
|
|
95
|
+
try {
|
|
96
|
+
const callingx = getCallingxLib();
|
|
97
|
+
videoLoggerSystem.getLogger('StreamVideoRN.setPushConfig').info(JSON.stringify(this.config));
|
|
98
|
+
const options = extractCallingExpOptions(this.config);
|
|
99
|
+
callingx.setup(options);
|
|
100
|
+
} catch {
|
|
101
|
+
throw new Error('react-native-callingx library is not installed. Please check the installation instructions: https://getstream.io/video/docs/react-native/incoming-calls/ringing-setup/react-native/.');
|
|
102
|
+
}
|
|
103
|
+
setupCallingExpEvents(pushConfig);
|
|
92
104
|
setupIosVoipPushEvents(pushConfig);
|
|
93
105
|
}
|
|
94
106
|
static getConfig() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["pushLogoutCallbacks","newNotificationCallbacks","
|
|
1
|
+
{"version":3,"names":["pushLogoutCallbacks","newNotificationCallbacks","setupIosVoipPushEvents","setupCallingExpEvents","extractCallingExpOptions","getCallingxLib","NativeModules","Platform","videoLoggerSystem","deepMerge","target","source","result","key","undefined","Array","isArray","DEFAULT_STREAM_VIDEO_CONFIG","foregroundService","android","channel","id","name","notificationTexts","title","body","taskToRun","Promise","StreamVideoRN","config","busyToneTimeout","updateConfig","setPushConfig","pushConfig","push","callingx","getLogger","info","JSON","stringify","options","setup","Error","getConfig","onPushLogout","current","all","map","callback","then","resolve","clearPushLogoutCallbacks","addOnNewCallNotificationListener","filter","cb","playBusyTone","StreamVideoReactNative","stopBusyTone","androidHasAudioOutputHardware","OS","hasAudioOutputHardware","androidHasMicrophoneHardware","hasMicrophoneHardware","androidHasCameraHardware","hasCameraHardware"],"sourceRoot":"../../../../src","sources":["utils/StreamVideoRN/index.ts"],"mappings":"AACA,OAAOA,mBAAmB,MAAM,gCAAgC;AAChE,OAAOC,wBAAwB,MAExB,sCAAsC;AAC7C,SAASC,sBAAsB,QAAQ,gCAAgC;AACvE,SAASC,qBAAqB,QAAQ,+BAA+B;AACrE,SACEC,wBAAwB,EACxBC,cAAc,QACT,uBAAuB;AAC9B,SAASC,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AACtD,SAASC,iBAAiB,QAAQ,yBAAyB;;AAE3D;;AAKA;AACA,SAASC,SAASA,CAChBC,MAAS,EACTC,MAAsB,EACnB;EACH,MAAMC,MAAM,GAAG;IAAE,GAAGF;EAAO,CAAC;EAE5B,KAAK,MAAMG,GAAG,IAAIF,MAAM,EAAE;IACxB,IAAIA,MAAM,CAACE,GAAG,CAAC,KAAKC,SAAS,EAAE;MAC7B,IACE,OAAOH,MAAM,CAACE,GAAG,CAAC,KAAK,QAAQ,IAC/BF,MAAM,CAACE,GAAG,CAAC,KAAK,IAAI,IACpB,CAACE,KAAK,CAACC,OAAO,CAACL,MAAM,CAACE,GAAG,CAAC,CAAC,IAC3B,OAAOH,MAAM,CAACG,GAAG,CAAC,KAAK,QAAQ,IAC/BH,MAAM,CAACG,GAAG,CAAC,KAAK,IAAI,IACpB,CAACE,KAAK,CAACC,OAAO,CAACN,MAAM,CAACG,GAAG,CAAC,CAAC,EAC3B;QACAD,MAAM,CAACC,GAAG,CAAC,GAAGJ,SAAS,CACrBC,MAAM,CAACG,GAAG,CAAC,EACXF,MAAM,CAACE,GAAG,CACZ,CAAC;MACH,CAAC,MAAM;QACLD,MAAM,CAACC,GAAG,CAAC,GAAGF,MAAM,CAACE,GAAG,CAAkB;MAC5C;IACF;EACF;EAEA,OAAOD,MAAM;AACf;AAEA,MAAMK,2BAA8C,GAAG;EACrDC,iBAAiB,EAAE;IACjBC,OAAO,EAAE;MACPC,OAAO,EAAE;QACPC,EAAE,EAAE,gCAAgC;QACpCC,IAAI,EAAE;MACR,CAAC;MACDC,iBAAiB,EAAE;QACjBC,KAAK,EAAE,kBAAkB;QACzBC,IAAI,EAAE;MACR,CAAC;MACDC,SAAS,EAAEA,CAAA,KAAM,IAAIC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC;EACF;AACF,CAAC;AAED,OAAO,MAAMC,aAAa,CAAC;EACzB,OAAeC,MAAM,GAAGZ,2BAA2B;EACnD,OAAea,eAAe,GAA0B,IAAI;;EAE5D;AACF;AACA;AACA;AACA;EACE,OAAOC,YAAYA,CACjBA,YAA0D,EAC1D;IACA,IAAI,CAACF,MAAM,GAAGpB,SAAS,CAAC,IAAI,CAACoB,MAAM,EAAEE,YAAY,CAAC;EACpD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOC,aAAaA,CAACC,UAAkD,EAAE;IACvE,IAAI,IAAI,CAACJ,MAAM,CAACK,IAAI,EAAE;MACpB;MACA;IACF;IAEA,IAAI,CAACL,MAAM,CAACK,IAAI,GAAGD,UAAU;IAE7B,IAAI;MACF,MAAME,QAAQ,GAAG9B,cAAc,CAAC,CAAC;MACjCG,iBAAiB,CACd4B,SAAS,CAAC,6BAA6B,CAAC,CACxCC,IAAI,CAACC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACV,MAAM,CAAC,CAAC;MACpC,MAAMW,OAAO,GAAGpC,wBAAwB,CAAC,IAAI,CAACyB,MAAM,CAAC;MACrDM,QAAQ,CAACM,KAAK,CAACD,OAAO,CAAC;IACzB,CAAC,CAAC,MAAM;MACN,MAAM,IAAIE,KAAK,CACb,sLACF,CAAC;IACH;IAEAvC,qBAAqB,CAAC8B,UAAU,CAAC;IACjC/B,sBAAsB,CAAC+B,UAAU,CAAC;EACpC;EAEA,OAAOU,SAASA,CAAA,EAAG;IACjB,OAAO,IAAI,CAACd,MAAM;EACpB;;EAEA;AACF;AACA;AACA;EACE,OAAOe,YAAYA,CAAA,EAAG;IACpB,IAAI5C,mBAAmB,CAAC6C,OAAO,EAAE;MAC/B,OAAOlB,OAAO,CAACmB,GAAG,CAChB9C,mBAAmB,CAAC6C,OAAO,CAACE,GAAG,CAAEC,QAAQ,IAAKA,QAAQ,CAAC,CAAC,CAC1D,CAAC,CAACC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAClB;IACA,OAAOtB,OAAO,CAACuB,OAAO,CAAC,CAAC;EAC1B;EAEA,OAAOC,wBAAwBA,CAAA,EAAG;IAChCnD,mBAAmB,CAAC6C,OAAO,GAAG,EAAE;EAClC;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOO,gCAAgCA,CACrCJ,QAAqC,EACrC;IACA,IAAI,CAAC/C,wBAAwB,CAAC4C,OAAO,EAAE;MACrC5C,wBAAwB,CAAC4C,OAAO,GAAG,CAACG,QAAQ,CAAC;IAC/C,CAAC,MAAM;MACL/C,wBAAwB,CAAC4C,OAAO,CAACX,IAAI,CAACc,QAAQ,CAAC;IACjD;IACA,OAAO,MAAM;MACX/C,wBAAwB,CAAC4C,OAAO,GAC9B5C,wBAAwB,CAAC4C,OAAO,EAAEQ,MAAM,CAAEC,EAAE,IAAKA,EAAE,KAAKN,QAAQ,CAAC;IACrE,CAAC;EACH;;EAEA;AACF;AACA;EACE,aAAaO,YAAYA,CAAA,EAAG;IAC1B,OAAOjD,aAAa,CAACkD,sBAAsB,CAACD,YAAY,CAAC,CAAC;EAC5D;;EAEA;AACF;AACA;EACE,aAAaE,YAAYA,CAAA,EAAG;IAC1B,OAAOnD,aAAa,CAACkD,sBAAsB,CAACC,YAAY,CAAC,CAAC;EAC5D;;EAEA;AACF;AACA;AACA;EACE,aAAaC,6BAA6BA,CAAA,EAAqB;IAC7D,IAAInD,QAAQ,CAACoD,EAAE,KAAK,SAAS,EAC3B,MAAM,IAAIjB,KAAK,CACb,qEACF,CAAC;IACH,OAAOpC,aAAa,CAACkD,sBAAsB,CAACI,sBAAsB,CAAC,CAAC;EACtE;;EAEA;AACF;AACA;AACA;EACE,aAAaC,4BAA4BA,CAAA,EAAqB;IAC5D,IAAItD,QAAQ,CAACoD,EAAE,KAAK,SAAS,EAC3B,MAAM,IAAIjB,KAAK,CACb,oEACF,CAAC;IACH,OAAOpC,aAAa,CAACkD,sBAAsB,CAACM,qBAAqB,CAAC,CAAC;EACrE;;EAEA;AACF;AACA;AACA;EACE,aAAaC,wBAAwBA,CAAA,EAAqB;IACxD,IAAIxD,QAAQ,CAACoD,EAAE,KAAK,SAAS,EAC3B,MAAM,IAAIjB,KAAK,CACb,gEACF,CAAC;IACH,OAAOpC,aAAa,CAACkD,sBAAsB,CAACQ,iBAAiB,CAAC,CAAC;EACjE;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module to manage pending promise for audio session activation.
|
|
3
|
+
* Used to wait for iOS CallKit's didActivateAudioSession event after starting a call.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
let pendingResolve = null;
|
|
7
|
+
let pendingTimeout = null;
|
|
8
|
+
/**
|
|
9
|
+
* Flag to check if the audio session is already activated.
|
|
10
|
+
* This solves race condition for a cold start case, when the audio session is activated before the promise is created.
|
|
11
|
+
*/
|
|
12
|
+
let isAudioSessionAlreadyActivated = false;
|
|
13
|
+
const AUDIO_SESSION_TIMEOUT_MS = 5000;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Creates a promise that resolves when the audio session is activated,
|
|
17
|
+
* or after a timeout to prevent hanging indefinitely.
|
|
18
|
+
* @returns Promise that resolves when audio session is activated or timeout occurs
|
|
19
|
+
*/
|
|
20
|
+
export function waitForAudioSessionActivation() {
|
|
21
|
+
if (isAudioSessionAlreadyActivated) {
|
|
22
|
+
isAudioSessionAlreadyActivated = false;
|
|
23
|
+
return Promise.resolve();
|
|
24
|
+
}
|
|
25
|
+
return new Promise(resolve => {
|
|
26
|
+
pendingResolve = resolve;
|
|
27
|
+
pendingTimeout = setTimeout(() => {
|
|
28
|
+
// Resolve on timeout to prevent hanging
|
|
29
|
+
resolvePendingAudioSession();
|
|
30
|
+
}, AUDIO_SESSION_TIMEOUT_MS);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Resolves the pending audio session activation promise.
|
|
36
|
+
* Called when the didActivateAudioSession event fires or on timeout.
|
|
37
|
+
*/
|
|
38
|
+
export function resolvePendingAudioSession() {
|
|
39
|
+
if (pendingTimeout) {
|
|
40
|
+
clearTimeout(pendingTimeout);
|
|
41
|
+
pendingTimeout = null;
|
|
42
|
+
}
|
|
43
|
+
if (pendingResolve) {
|
|
44
|
+
pendingResolve();
|
|
45
|
+
pendingResolve = null;
|
|
46
|
+
isAudioSessionAlreadyActivated = false;
|
|
47
|
+
} else {
|
|
48
|
+
isAudioSessionAlreadyActivated = true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=audioSessionPromise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["pendingResolve","pendingTimeout","isAudioSessionAlreadyActivated","AUDIO_SESSION_TIMEOUT_MS","waitForAudioSessionActivation","Promise","resolve","setTimeout","resolvePendingAudioSession","clearTimeout"],"sourceRoot":"../../../../../src","sources":["utils/internal/callingx/audioSessionPromise.ts"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA,IAAIA,cAAmC,GAAG,IAAI;AAC9C,IAAIC,cAAoD,GAAG,IAAI;AAC/D;AACA;AACA;AACA;AACA,IAAIC,8BAA8B,GAAG,KAAK;AAE1C,MAAMC,wBAAwB,GAAG,IAAI;;AAErC;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,6BAA6BA,CAAA,EAAkB;EAC7D,IAAIF,8BAA8B,EAAE;IAClCA,8BAA8B,GAAG,KAAK;IACtC,OAAOG,OAAO,CAACC,OAAO,CAAC,CAAC;EAC1B;EAEA,OAAO,IAAID,OAAO,CAAEC,OAAO,IAAK;IAC9BN,cAAc,GAAGM,OAAO;IACxBL,cAAc,GAAGM,UAAU,CAAC,MAAM;MAChC;MACAC,0BAA0B,CAAC,CAAC;IAC9B,CAAC,EAAEL,wBAAwB,CAAC;EAC9B,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASK,0BAA0BA,CAAA,EAAS;EACjD,IAAIP,cAAc,EAAE;IAClBQ,YAAY,CAACR,cAAc,CAAC;IAC5BA,cAAc,GAAG,IAAI;EACvB;EAEA,IAAID,cAAc,EAAE;IAClBA,cAAc,CAAC,CAAC;IAChBA,cAAc,GAAG,IAAI;IACrBE,8BAA8B,GAAG,KAAK;EACxC,CAAC,MAAM;IACLA,8BAA8B,GAAG,IAAI;EACvC;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/***
|
|
2
|
+
* Internal utils for callingx library usage from video-client.
|
|
3
|
+
* See @./registerSDKGlobals.ts for more usage details.
|
|
4
|
+
*/
|
|
5
|
+
import { Platform } from 'react-native';
|
|
6
|
+
import { getCallingxLibIfAvailable } from '../../push/libs/callingx';
|
|
7
|
+
import { waitForAudioSessionActivation } from './audioSessionPromise';
|
|
8
|
+
import { videoLoggerSystem } from '@stream-io/video-client';
|
|
9
|
+
const CallingxModule = getCallingxLibIfAvailable();
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Gets the call display name. To be used for display in native call screen.
|
|
13
|
+
*/
|
|
14
|
+
export function getCallDisplayName(callMembers, participants, currentUserId) {
|
|
15
|
+
if (!callMembers || !participants || !currentUserId) {
|
|
16
|
+
return 'Call';
|
|
17
|
+
}
|
|
18
|
+
let names = [];
|
|
19
|
+
if (callMembers.length > 0) {
|
|
20
|
+
// for ringing calls, members array contains all call members from the very early state and participants array is empty in the beginning
|
|
21
|
+
names = callMembers.filter(member => member.user.id !== currentUserId).map(member => member.user.name).filter(name => name !== undefined);
|
|
22
|
+
} else if (participants.length > 0) {
|
|
23
|
+
// for non-ringing calls, members array is empty and we rely on participants array there
|
|
24
|
+
names = participants.filter(participant => participant.userId !== currentUserId).map(participant => participant.name).filter(Boolean);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// if no names are found, we use the name of the current user
|
|
28
|
+
if (names.length === 0) {
|
|
29
|
+
names = [participants.find(participant => participant.userId === currentUserId)?.name ?? 'Call'];
|
|
30
|
+
}
|
|
31
|
+
return names.sort().join(', ');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Starts the call in the callingx library.
|
|
36
|
+
* Must be called for all outgoing calls
|
|
37
|
+
* and optionally for non-ringing calls when ongoing calls are enabled.
|
|
38
|
+
*/
|
|
39
|
+
export async function startCallingxCall(call) {
|
|
40
|
+
if (!CallingxModule || !CallingxModule.isSetup) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const logger = videoLoggerSystem.getLogger('callingx');
|
|
44
|
+
const isOutcomingCall = call.ringing && call.isCreatedByMe;
|
|
45
|
+
const isIncomingCall = call.ringing && !call.isCreatedByMe;
|
|
46
|
+
const callDisplayName = getCallDisplayName(call.state.members, call.state.participants, call.currentUserId);
|
|
47
|
+
if (!CallingxModule.isCallTracked(call.cid) && (isOutcomingCall || !call.ringing && CallingxModule.isOngoingCallsEnabled)) {
|
|
48
|
+
try {
|
|
49
|
+
await CallingxModule.startCall(call.cid,
|
|
50
|
+
// unique id for call
|
|
51
|
+
call.id,
|
|
52
|
+
// phone number for display in dialer (we use call id as phone number)
|
|
53
|
+
callDisplayName,
|
|
54
|
+
// display name for display in call screen
|
|
55
|
+
call.state.settings?.video?.enabled ?? false // is video call?
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
// Wait for audio session activation on iOS only
|
|
59
|
+
if (Platform.OS === 'ios') {
|
|
60
|
+
await waitForAudioSessionActivation();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// TODO: this must be done after join call is complete
|
|
64
|
+
CallingxModule.setCurrentCallActive(call.cid);
|
|
65
|
+
} catch (error) {
|
|
66
|
+
logger.error(`startCallingxCall: Error starting call in callingx: ${call.cid}`, error);
|
|
67
|
+
}
|
|
68
|
+
} else if (isIncomingCall) {
|
|
69
|
+
try {
|
|
70
|
+
// Awaits native CallKit/Telecom registration before answering.
|
|
71
|
+
// Safe to call even if the call is already registered (e.g. from VoIP push) --
|
|
72
|
+
// iOS early-returns with no error, Android sends the registered broadcast.
|
|
73
|
+
await CallingxModule.displayIncomingCall(call.cid,
|
|
74
|
+
// unique id for call
|
|
75
|
+
call.id,
|
|
76
|
+
// phone number for display in dialer (we use call id as phone number)
|
|
77
|
+
callDisplayName,
|
|
78
|
+
// display name for display in call screen
|
|
79
|
+
call.state.settings?.video?.enabled ?? false // is video call?
|
|
80
|
+
);
|
|
81
|
+
await CallingxModule.answerIncomingCall(call.cid);
|
|
82
|
+
if (Platform.OS === 'ios') {
|
|
83
|
+
await waitForAudioSessionActivation();
|
|
84
|
+
}
|
|
85
|
+
} catch (error) {
|
|
86
|
+
logger.error(`Error displaying incoming call in callingx: ${call.cid}`, error);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export async function endCallingxCall(call, reason) {
|
|
91
|
+
if (!CallingxModule || !CallingxModule.isSetup || !CallingxModule.isCallTracked(call.cid)) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
await CallingxModule.endCallWithReason(call.cid, reason ?? 'local');
|
|
96
|
+
} catch (error) {
|
|
97
|
+
videoLoggerSystem.getLogger('callingx').error(`endCallingxCall: Error ending call in callingx: ${call.cid}`, error);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=callingx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","getCallingxLibIfAvailable","waitForAudioSessionActivation","videoLoggerSystem","CallingxModule","getCallDisplayName","callMembers","participants","currentUserId","names","length","filter","member","user","id","map","name","undefined","participant","userId","Boolean","find","sort","join","startCallingxCall","call","isSetup","logger","getLogger","isOutcomingCall","ringing","isCreatedByMe","isIncomingCall","callDisplayName","state","members","isCallTracked","cid","isOngoingCallsEnabled","startCall","settings","video","enabled","OS","setCurrentCallActive","error","displayIncomingCall","answerIncomingCall","endCallingxCall","reason","endCallWithReason"],"sourceRoot":"../../../../../src","sources":["utils/internal/callingx/callingx.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,18 +1,67 @@
|
|
|
1
1
|
import { NativeModules, PermissionsAndroid, Platform } from 'react-native';
|
|
2
|
+
import { getCallingxLibIfAvailable } from '../push/libs/callingx';
|
|
3
|
+
import { endCallingxCall, startCallingxCall } from './callingx/callingx';
|
|
2
4
|
const StreamInCallManagerNativeModule = NativeModules.StreamInCallManager;
|
|
3
5
|
const StreamVideoReactNativeModule = NativeModules.StreamVideoReactNative;
|
|
6
|
+
const CallingxModule = getCallingxLibIfAvailable();
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Checks if StreamInCallManager should be bypassed because CallKit is handling
|
|
10
|
+
* the audio session via CallingX.
|
|
11
|
+
*
|
|
12
|
+
* On iOS, when CallingX is set up and has a registered call, the audio session
|
|
13
|
+
* is managed by CallKit through CallingxImpl.swift.
|
|
14
|
+
* In this case, StreamInCallManager should not run to avoid conflicting audio
|
|
15
|
+
* session configurations.
|
|
16
|
+
*/
|
|
17
|
+
const shouldBypassForCallKit = ({
|
|
18
|
+
isRingingTypeCall
|
|
19
|
+
}) => {
|
|
20
|
+
if (Platform.OS !== 'ios') {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
if (!CallingxModule) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
const bypass = CallingxModule.isSetup && (isRingingTypeCall || CallingxModule.isOngoingCallsEnabled);
|
|
27
|
+
return bypass;
|
|
28
|
+
};
|
|
4
29
|
const streamRNVideoSDKGlobals = {
|
|
30
|
+
callingX: {
|
|
31
|
+
startCall: startCallingxCall,
|
|
32
|
+
endCall: endCallingxCall
|
|
33
|
+
},
|
|
5
34
|
callManager: {
|
|
6
35
|
setup: ({
|
|
7
|
-
defaultDevice
|
|
36
|
+
defaultDevice,
|
|
37
|
+
isRingingTypeCall
|
|
8
38
|
}) => {
|
|
39
|
+
if (shouldBypassForCallKit({
|
|
40
|
+
isRingingTypeCall
|
|
41
|
+
})) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
9
44
|
StreamInCallManagerNativeModule.setDefaultAudioDeviceEndpointType(defaultDevice);
|
|
10
45
|
StreamInCallManagerNativeModule.setup();
|
|
11
46
|
},
|
|
12
|
-
start: (
|
|
47
|
+
start: ({
|
|
48
|
+
isRingingTypeCall
|
|
49
|
+
}) => {
|
|
50
|
+
if (shouldBypassForCallKit({
|
|
51
|
+
isRingingTypeCall
|
|
52
|
+
})) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
13
55
|
StreamInCallManagerNativeModule.start();
|
|
14
56
|
},
|
|
15
|
-
stop: (
|
|
57
|
+
stop: ({
|
|
58
|
+
isRingingTypeCall
|
|
59
|
+
}) => {
|
|
60
|
+
if (shouldBypassForCallKit({
|
|
61
|
+
isRingingTypeCall
|
|
62
|
+
})) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
16
65
|
StreamInCallManagerNativeModule.stop();
|
|
17
66
|
}
|
|
18
67
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","PermissionsAndroid","Platform","StreamInCallManagerNativeModule","StreamInCallManager","StreamVideoReactNativeModule","StreamVideoReactNative","streamRNVideoSDKGlobals","callManager","setup","defaultDevice","setDefaultAudioDeviceEndpointType","start","stop","permissions","check","permission","
|
|
1
|
+
{"version":3,"names":["NativeModules","PermissionsAndroid","Platform","getCallingxLibIfAvailable","endCallingxCall","startCallingxCall","StreamInCallManagerNativeModule","StreamInCallManager","StreamVideoReactNativeModule","StreamVideoReactNative","CallingxModule","shouldBypassForCallKit","isRingingTypeCall","OS","bypass","isSetup","isOngoingCallsEnabled","streamRNVideoSDKGlobals","callingX","startCall","endCall","callManager","setup","defaultDevice","setDefaultAudioDeviceEndpointType","start","stop","permissions","check","permission","nativeAndroidPermission","PERMISSIONS","CAMERA","RECORD_AUDIO","Boolean","checkPermission","registerSDKGlobals","global","streamRNVideoSDK"],"sourceRoot":"../../../../src","sources":["utils/internal/registerSDKGlobals.ts"],"mappings":"AACA,SAASA,aAAa,EAAEC,kBAAkB,EAAEC,QAAQ,QAAQ,cAAc;AAC1E,SAASC,yBAAyB,QAAQ,uBAAuB;AACjE,SAASC,eAAe,EAAEC,iBAAiB,QAAQ,qBAAqB;AAExE,MAAMC,+BAA+B,GAAGN,aAAa,CAACO,mBAAmB;AACzE,MAAMC,4BAA4B,GAAGR,aAAa,CAACS,sBAElD;AAED,MAAMC,cAAc,GAAGP,yBAAyB,CAAC,CAAC;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMQ,sBAAsB,GAAGA,CAAC;EAC9BC;AAGF,CAAC,KAAc;EACb,IAAIV,QAAQ,CAACW,EAAE,KAAK,KAAK,EAAE;IACzB,OAAO,KAAK;EACd;EACA,IAAI,CAACH,cAAc,EAAE;IACnB,OAAO,KAAK;EACd;EACA,MAAMI,MAAM,GACVJ,cAAc,CAACK,OAAO,KACrBH,iBAAiB,IAAIF,cAAc,CAACM,qBAAqB,CAAC;EAC7D,OAAOF,MAAM;AACf,CAAC;AAED,MAAMG,uBAAgD,GAAG;EACvDC,QAAQ,EAAE;IACRC,SAAS,EAAEd,iBAAiB;IAC5Be,OAAO,EAAEhB;EACX,CAAC;EACDiB,WAAW,EAAE;IACXC,KAAK,EAAEA,CAAC;MAAEC,aAAa;MAAEX;IAAkB,CAAC,KAAK;MAC/C,IAAID,sBAAsB,CAAC;QAAEC;MAAkB,CAAC,CAAC,EAAE;QACjD;MACF;MACAN,+BAA+B,CAACkB,iCAAiC,CAC/DD,aACF,CAAC;MACDjB,+BAA+B,CAACgB,KAAK,CAAC,CAAC;IACzC,CAAC;IACDG,KAAK,EAAEA,CAAC;MAAEb;IAAkB,CAAC,KAAK;MAChC,IAAID,sBAAsB,CAAC;QAAEC;MAAkB,CAAC,CAAC,EAAE;QACjD;MACF;MACAN,+BAA+B,CAACmB,KAAK,CAAC,CAAC;IACzC,CAAC;IACDC,IAAI,EAAEA,CAAC;MAAEd;IAAkB,CAAC,KAAK;MAC/B,IAAID,sBAAsB,CAAC;QAAEC;MAAkB,CAAC,CAAC,EAAE;QACjD;MACF;MACAN,+BAA+B,CAACoB,IAAI,CAAC,CAAC;IACxC;EACF,CAAC;EACDC,WAAW,EAAE;IACXC,KAAK,EAAE,MAAOC,UAAU,IAAK;MAC3B,IAAI3B,QAAQ,CAACW,EAAE,KAAK,SAAS,EAAE;QAC7B,MAAMiB,uBAAuB,GAC3BD,UAAU,KAAK,QAAQ,GACnB5B,kBAAkB,CAAC8B,WAAW,CAACC,MAAM,GACrC/B,kBAAkB,CAAC8B,WAAW,CAACE,YAAY;QACjD,OAAOhC,kBAAkB,CAAC2B,KAAK,CAACE,uBAAuB,CAAC;MAC1D;;MAEA;MACA,OAAOI,OAAO,CACZ,MAAM1B,4BAA4B,CAAC2B,eAAe,GAAGN,UAAU,CACjE,CAAC;IACH;EACF;AACF,CAAC;;AAED;AACA;AACA;AACA,OAAO,SAASO,kBAAkBA,CAAA,EAAG;EACnC,IAAI,CAACC,MAAM,CAACC,gBAAgB,EAAE;IAC5BD,MAAM,CAACC,gBAAgB,GAAGrB,uBAAuB;EACnD;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AppRegistry, Platform } from 'react-native';
|
|
2
|
+
import { videoLoggerSystem } from '@stream-io/video-client';
|
|
3
|
+
import { StreamVideoRN } from './StreamVideoRN';
|
|
4
|
+
export const KEEP_CALL_ALIVE_HEADLESS_TASK_NAME = 'StreamVideoKeepCallAlive';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The keep-alive headless task needs access to the active `Call` instance.
|
|
8
|
+
* The keep-alive hook will set this reference before starting the native service.
|
|
9
|
+
*/
|
|
10
|
+
export const keepCallAliveCallRef = {
|
|
11
|
+
current: undefined
|
|
12
|
+
};
|
|
13
|
+
function registerKeepCallAliveHeadlessTaskOnce() {
|
|
14
|
+
if (Platform.OS !== 'android') return;
|
|
15
|
+
AppRegistry.registerHeadlessTask(KEEP_CALL_ALIVE_HEADLESS_TASK_NAME, () => async data => {
|
|
16
|
+
const logger = videoLoggerSystem.getLogger('KEEP_CALL_ALIVE_HEADLESS_TASK');
|
|
17
|
+
const callCid = data?.callCid;
|
|
18
|
+
const call = keepCallAliveCallRef.current;
|
|
19
|
+
if (!call) {
|
|
20
|
+
logger.warn('No active call instance available for keep-alive task; skipping.', {
|
|
21
|
+
callCid
|
|
22
|
+
});
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (callCid && call.cid && call.cid !== callCid) {
|
|
26
|
+
logger.warn('Keep-alive task callCid does not match active call; skipping.', {
|
|
27
|
+
callCid,
|
|
28
|
+
activeCallCid: call.cid
|
|
29
|
+
});
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const config = StreamVideoRN.getConfig();
|
|
33
|
+
const taskToRun = config.foregroundService.android.taskToRun;
|
|
34
|
+
try {
|
|
35
|
+
await taskToRun(call);
|
|
36
|
+
} catch (e) {
|
|
37
|
+
logger.error('Keep-alive headless task failed', e);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
registerKeepCallAliveHeadlessTaskOnce();
|
|
42
|
+
//# sourceMappingURL=keepCallAliveHeadlessTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["AppRegistry","Platform","videoLoggerSystem","StreamVideoRN","KEEP_CALL_ALIVE_HEADLESS_TASK_NAME","keepCallAliveCallRef","current","undefined","registerKeepCallAliveHeadlessTaskOnce","OS","registerHeadlessTask","data","logger","getLogger","callCid","call","warn","cid","activeCallCid","config","getConfig","taskToRun","foregroundService","android","e","error"],"sourceRoot":"../../../src","sources":["utils/keepCallAliveHeadlessTask.ts"],"mappings":"AAAA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,cAAc;AAEpD,SAASC,iBAAiB,QAAQ,yBAAyB;AAC3D,SAASC,aAAa,QAAQ,iBAAiB;AAE/C,OAAO,MAAMC,kCAAkC,GAAG,0BAA0B;;AAE5E;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAmD,GAAG;EACjEC,OAAO,EAAEC;AACX,CAAC;AAED,SAASC,qCAAqCA,CAAA,EAAG;EAC/C,IAAIP,QAAQ,CAACQ,EAAE,KAAK,SAAS,EAAE;EAE/BT,WAAW,CAACU,oBAAoB,CAC9BN,kCAAkC,EAClC,MAAM,MAAOO,IAAsC,IAAK;IACtD,MAAMC,MAAM,GAAGV,iBAAiB,CAACW,SAAS,CACxC,+BACF,CAAC;IACD,MAAMC,OAAO,GAAGH,IAAI,EAAEG,OAAO;IAE7B,MAAMC,IAAI,GAAGV,oBAAoB,CAACC,OAAO;IACzC,IAAI,CAACS,IAAI,EAAE;MACTH,MAAM,CAACI,IAAI,CACT,kEAAkE,EAClE;QAAEF;MAAQ,CACZ,CAAC;MACD;IACF;IACA,IAAIA,OAAO,IAAIC,IAAI,CAACE,GAAG,IAAIF,IAAI,CAACE,GAAG,KAAKH,OAAO,EAAE;MAC/CF,MAAM,CAACI,IAAI,CACT,+DAA+D,EAC/D;QAAEF,OAAO;QAAEI,aAAa,EAAEH,IAAI,CAACE;MAAI,CACrC,CAAC;MACD;IACF;IAEA,MAAME,MAAM,GAAGhB,aAAa,CAACiB,SAAS,CAAC,CAAC;IACxC,MAAMC,SAAS,GAAGF,MAAM,CAACG,iBAAiB,CAACC,OAAO,CAACF,SAAS;IAC5D,IAAI;MACF,MAAMA,SAAS,CAACN,IAAI,CAAC;IACvB,CAAC,CAAC,OAAOS,CAAC,EAAE;MACVZ,MAAM,CAACa,KAAK,CAAC,iCAAiC,EAAED,CAAC,CAAC;IACpD;EACF,CACF,CAAC;AACH;AAEAhB,qCAAqC,CAAC,CAAC","ignoreList":[]}
|