@stream-io/video-react-native-sdk 1.30.5 → 1.31.1-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/CHANGELOG.md +11 -0
- 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 +127 -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/android/src/main/java/com/streamvideo/reactnative/screenshare/ScreenAudioCapture.kt +111 -0
- package/dist/commonjs/components/Call/CallControls/ScreenShareToggleButton.js +3 -2
- package/dist/commonjs/components/Call/CallControls/ScreenShareToggleButton.js.map +1 -1
- package/dist/commonjs/hooks/index.js +11 -0
- package/dist/commonjs/hooks/index.js.map +1 -1
- 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 +144 -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/hooks/useScreenShareAudioMixing.js +126 -0
- package/dist/commonjs/hooks/useScreenShareAudioMixing.js.map +1 -0
- package/dist/commonjs/hooks/useScreenShareButton.js +57 -3
- package/dist/commonjs/hooks/useScreenShareButton.js.map +1 -1
- package/dist/commonjs/index.js +1 -0
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/modules/ScreenShareAudioManager.js +54 -0
- package/dist/commonjs/modules/ScreenShareAudioManager.js.map +1 -0
- 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 +16 -6
- package/dist/commonjs/providers/StreamCall/index.js.map +1 -1
- package/dist/commonjs/utils/StreamVideoRN/index.js +35 -21
- package/dist/commonjs/utils/StreamVideoRN/index.js.map +1 -1
- package/dist/commonjs/utils/internal/callingx/audioSessionPromise.js +68 -0
- package/dist/commonjs/utils/internal/callingx/audioSessionPromise.js.map +1 -0
- package/dist/commonjs/utils/internal/callingx/callingx.js +150 -0
- package/dist/commonjs/utils/internal/callingx/callingx.js.map +1 -0
- package/dist/commonjs/utils/internal/registerSDKGlobals.js +53 -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 +135 -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 +71 -53
- 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 +105 -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/components/Call/CallControls/ScreenShareToggleButton.js +3 -2
- package/dist/module/components/Call/CallControls/ScreenShareToggleButton.js.map +1 -1
- package/dist/module/hooks/index.js +1 -0
- package/dist/module/hooks/index.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 +137 -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/hooks/useScreenShareAudioMixing.js +119 -0
- package/dist/module/hooks/useScreenShareAudioMixing.js.map +1 -0
- package/dist/module/hooks/useScreenShareButton.js +57 -3
- package/dist/module/hooks/useScreenShareButton.js.map +1 -1
- package/dist/module/index.js +1 -0
- package/dist/module/index.js.map +1 -1
- package/dist/module/modules/ScreenShareAudioManager.js +47 -0
- package/dist/module/modules/ScreenShareAudioManager.js.map +1 -0
- 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 +16 -6
- package/dist/module/providers/StreamCall/index.js.map +1 -1
- package/dist/module/utils/StreamVideoRN/index.js +35 -21
- package/dist/module/utils/StreamVideoRN/index.js.map +1 -1
- package/dist/module/utils/internal/callingx/audioSessionPromise.js +61 -0
- package/dist/module/utils/internal/callingx/audioSessionPromise.js.map +1 -0
- package/dist/module/utils/internal/callingx/callingx.js +140 -0
- package/dist/module/utils/internal/callingx/callingx.js.map +1 -0
- package/dist/module/utils/internal/registerSDKGlobals.js +53 -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 +137 -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 +67 -50
- 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 +99 -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/components/Call/CallControls/ScreenShareToggleButton.d.ts +6 -1
- package/dist/typescript/components/Call/CallControls/ScreenShareToggleButton.d.ts.map +1 -1
- package/dist/typescript/hooks/index.d.ts +1 -0
- package/dist/typescript/hooks/index.d.ts.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/hooks/useScreenShareAudioMixing.d.ts +14 -0
- package/dist/typescript/hooks/useScreenShareAudioMixing.d.ts.map +1 -0
- package/dist/typescript/hooks/useScreenShareButton.d.ts +39 -2
- package/dist/typescript/hooks/useScreenShareButton.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/ScreenShareAudioManager.d.ts +28 -0
- package/dist/typescript/modules/ScreenShareAudioManager.d.ts.map +1 -0
- 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/providers/StreamCall/index.d.ts.map +1 -1
- package/dist/typescript/utils/StreamVideoRN/index.d.ts +22 -2
- package/dist/typescript/utils/StreamVideoRN/index.d.ts.map +1 -1
- package/dist/typescript/utils/StreamVideoRN/types.d.ts +59 -25
- 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 +18 -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 +14 -8
- 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/firebaseMessaging/index.d.ts +16 -2
- package/dist/typescript/utils/push/libs/firebaseMessaging/index.d.ts.map +1 -1
- 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 +282 -86
- package/package.json +13 -18
- package/src/components/Call/CallControls/ScreenShareToggleButton.tsx +11 -1
- package/src/hooks/index.ts +1 -0
- package/src/hooks/push/index.ts +0 -2
- package/src/hooks/push/useCallingExpWithCallingStateEffect.ts +189 -0
- package/src/hooks/push/useIosVoipPushEventsSetupEffect.ts +21 -34
- package/src/hooks/useAndroidKeepCallAliveEffect.ts +94 -120
- package/src/hooks/useScreenShareAudioMixing.ts +130 -0
- package/src/hooks/useScreenShareButton.ts +87 -2
- package/src/index.ts +1 -0
- package/src/modules/ScreenShareAudioManager.ts +49 -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 +17 -6
- package/src/utils/StreamVideoRN/index.ts +42 -30
- package/src/utils/StreamVideoRN/types.ts +61 -25
- package/src/utils/internal/callingx/audioSessionPromise.ts +65 -0
- package/src/utils/internal/callingx/callingx.ts +194 -0
- package/src/utils/internal/registerSDKGlobals.ts +52 -4
- package/src/utils/keepCallAliveHeadlessTask.ts +54 -0
- package/src/utils/push/android.ts +198 -311
- 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 +108 -64
- package/src/utils/push/ios.ts +1 -6
- package/src/utils/push/libs/callingx.ts +89 -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 +135 -0
- package/src/utils/push/setupIosVoipPushEvents.ts +11 -7
- package/src/version.ts +1 -1
- 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
|
@@ -9,91 +9,56 @@ var _react = require("react");
|
|
|
9
9
|
var _utils = require("../utils");
|
|
10
10
|
var _reactNative = require("react-native");
|
|
11
11
|
var _videoClient = require("@stream-io/video-client");
|
|
12
|
+
var _keepCallAliveHeadlessTask = require("../utils/keepCallAliveHeadlessTask");
|
|
12
13
|
var _notifee = require("../utils/push/libs/notifee");
|
|
14
|
+
var _libs = require("../utils/push/libs");
|
|
13
15
|
const notifeeLib = (0, _notifee.getNotifeeLibNoThrowForKeepCallAlive)();
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const logger = _videoClient.videoLoggerSystem.getLogger('setForegroundService method');
|
|
22
|
-
logger.info('KeepCallAlive is not configured. Skipping foreground service setup.');
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
notifeeLib.default.registerForegroundService(() => {
|
|
26
|
-
const task = new Promise(resolve => {
|
|
27
|
-
const logger = _videoClient.videoLoggerSystem.getLogger('setForegroundService method');
|
|
28
|
-
logger.info('Foreground service running for call in progress');
|
|
29
|
-
// any task to run from SDK in the foreground service must be added
|
|
30
|
-
resolve(true);
|
|
31
|
-
});
|
|
32
|
-
const videoConfig = _utils.StreamVideoRN.getConfig();
|
|
33
|
-
const foregroundServiceConfig = videoConfig.foregroundService;
|
|
34
|
-
const {
|
|
35
|
-
taskToRun
|
|
36
|
-
} = foregroundServiceConfig.android;
|
|
37
|
-
const call = callToPassToForegroundService.current;
|
|
38
|
-
if (!call) {
|
|
39
|
-
const logger = _videoClient.videoLoggerSystem.getLogger('setForegroundService method');
|
|
40
|
-
logger.warn('No call to pass to foreground service');
|
|
41
|
-
return task.then(() => new Promise(() => {}));
|
|
42
|
-
}
|
|
43
|
-
callToPassToForegroundService.current = undefined;
|
|
44
|
-
return task.then(() => taskToRun(call));
|
|
45
|
-
});
|
|
46
|
-
});
|
|
16
|
+
async function stopForegroundServiceNoThrow() {
|
|
17
|
+
const logger = _videoClient.videoLoggerSystem.getLogger('stopForegroundServiceNoThrow');
|
|
18
|
+
try {
|
|
19
|
+
await _reactNative.NativeModules.StreamVideoReactNative.stopKeepCallAliveService();
|
|
20
|
+
} catch (e) {
|
|
21
|
+
logger.warn('Failed to stop keep-call-alive foreground service', e);
|
|
22
|
+
}
|
|
47
23
|
}
|
|
48
24
|
async function startForegroundService(call_cid) {
|
|
49
|
-
const
|
|
25
|
+
const logger = _videoClient.videoLoggerSystem.getLogger('startForegroundService');
|
|
26
|
+
const isCallAliveConfigured = await (async () => {
|
|
27
|
+
try {
|
|
28
|
+
return await _reactNative.NativeModules.StreamVideoReactNative.isCallAliveConfigured();
|
|
29
|
+
} catch (e) {
|
|
30
|
+
logger.warn('Failed to check whether KeepCallAlive is configured', e);
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
})();
|
|
50
34
|
if (!isCallAliveConfigured) {
|
|
51
|
-
const logger = _videoClient.videoLoggerSystem.getLogger('startForegroundService');
|
|
52
35
|
logger.info('KeepCallAlive is not configured. Skipping foreground service setup.');
|
|
53
36
|
return;
|
|
54
37
|
}
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (settings.authorizationStatus !== notifeeLib.AuthorizationStatus.AUTHORIZED) {
|
|
59
|
-
const logger = _videoClient.videoLoggerSystem.getLogger('startForegroundService');
|
|
38
|
+
// Check for notification permission (Android 13+) before starting the service.
|
|
39
|
+
const hasPostNotificationsPermission = Number(_reactNative.Platform.Version) < 33 || (await _reactNative.PermissionsAndroid.check(_reactNative.PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS));
|
|
40
|
+
if (!hasPostNotificationsPermission) {
|
|
60
41
|
logger.info('Notification permission not granted, can not start foreground service to keep the call alive');
|
|
61
42
|
return;
|
|
62
43
|
}
|
|
63
44
|
const videoConfig = _utils.StreamVideoRN.getConfig();
|
|
64
45
|
const foregroundServiceConfig = videoConfig.foregroundService;
|
|
65
46
|
const notificationTexts = foregroundServiceConfig.android.notificationTexts;
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
47
|
+
const channel = foregroundServiceConfig.android.channel;
|
|
48
|
+
const smallIconName = videoConfig.push?.android.smallIcon;
|
|
49
|
+
|
|
69
50
|
// NOTE: we use requestAnimationFrame to ensure that the foreground service is started after all the current UI operations are done
|
|
70
51
|
// this is a workaround for the crash - android.app.RemoteServiceException$ForegroundServiceDidNotStartInTimeException: Context.startForegroundService() did not then call Service.startForeground()
|
|
71
52
|
// this crash was reproducible only in some android devices
|
|
72
|
-
requestAnimationFrame(() => {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
channelId,
|
|
79
|
-
smallIcon: videoConfig.push?.android.smallIcon,
|
|
80
|
-
foregroundServiceTypes,
|
|
81
|
-
asForegroundService: true,
|
|
82
|
-
ongoing: true,
|
|
83
|
-
// user cannot dismiss the notification
|
|
84
|
-
colorized: true,
|
|
85
|
-
pressAction: {
|
|
86
|
-
id: 'default',
|
|
87
|
-
launchActivity: 'default' // open the app when the notification is pressed
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
});
|
|
53
|
+
requestAnimationFrame(async () => {
|
|
54
|
+
try {
|
|
55
|
+
await _reactNative.NativeModules.StreamVideoReactNative.startKeepCallAliveService(call_cid, channel.id, channel.name, notificationTexts.title, notificationTexts.body, smallIconName ?? null);
|
|
56
|
+
} catch (e) {
|
|
57
|
+
logger.warn('Failed to start keep-call-alive foreground service', e);
|
|
58
|
+
}
|
|
91
59
|
});
|
|
92
60
|
}
|
|
93
61
|
|
|
94
|
-
// flag to check if setForegroundService has already been run once
|
|
95
|
-
let isSetForegroundServiceRan = false;
|
|
96
|
-
|
|
97
62
|
/**
|
|
98
63
|
* This hook is used to keep the call alive in the background for Android.
|
|
99
64
|
* It starts a foreground service to keep the call alive as soon as the call is joined
|
|
@@ -103,7 +68,7 @@ let isSetForegroundServiceRan = false;
|
|
|
103
68
|
const useAndroidKeepCallAliveEffect = () => {
|
|
104
69
|
const foregroundServiceStartedRef = (0, _react.useRef)(false);
|
|
105
70
|
const call = (0, _videoReactBindings.useCall)();
|
|
106
|
-
|
|
71
|
+
_keepCallAliveHeadlessTask.keepCallAliveCallRef.current = call;
|
|
107
72
|
const activeCallCid = call?.cid;
|
|
108
73
|
const {
|
|
109
74
|
useCallCallingState
|
|
@@ -111,12 +76,16 @@ const useAndroidKeepCallAliveEffect = () => {
|
|
|
111
76
|
const callingState = useCallCallingState();
|
|
112
77
|
const isOutgoingCall = callingState === _videoClient.CallingState.RINGING && call?.isCreatedByMe;
|
|
113
78
|
const isCallJoined = callingState === _videoClient.CallingState.JOINED;
|
|
79
|
+
const isRingingCall = call?.ringing;
|
|
114
80
|
const shouldStartForegroundService = !foregroundServiceStartedRef.current && (isOutgoingCall || isCallJoined);
|
|
115
81
|
(0, _react.useEffect)(() => {
|
|
116
82
|
if (_reactNative.Platform.OS === 'ios' || !activeCallCid) {
|
|
117
83
|
return undefined;
|
|
118
84
|
}
|
|
119
|
-
|
|
85
|
+
const callingx = (0, _libs.getCallingxLibIfAvailable)();
|
|
86
|
+
if (callingx?.isSetup && (isRingingCall || !isRingingCall && callingx?.isOngoingCallsEnabled)) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
120
89
|
|
|
121
90
|
// start foreground service as soon as the call is joined
|
|
122
91
|
if (shouldStartForegroundService) {
|
|
@@ -124,21 +93,18 @@ const useAndroidKeepCallAliveEffect = () => {
|
|
|
124
93
|
if (foregroundServiceStartedRef.current) {
|
|
125
94
|
return;
|
|
126
95
|
}
|
|
127
|
-
if
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
notifee.cancelDisplayedNotification(activeCallCid);
|
|
96
|
+
// Optional compatibility cleanup: if the app uses Notifee for ringing push,
|
|
97
|
+
// we might have an incoming call notification running as a foreground service.
|
|
98
|
+
if (notifeeLib) {
|
|
99
|
+
const notifee = notifeeLib.default;
|
|
100
|
+
const displayedNotifications = await notifee.getDisplayedNotifications();
|
|
101
|
+
const activeCallNotification = displayedNotifications.find(notification => notification.id === activeCallCid);
|
|
102
|
+
if (activeCallNotification) {
|
|
103
|
+
// this means that we have a incoming call notification shown as foreground service and we must stop it
|
|
104
|
+
notifee.stopForegroundService();
|
|
105
|
+
notifee.cancelDisplayedNotification(activeCallCid);
|
|
106
|
+
}
|
|
139
107
|
}
|
|
140
|
-
// check for notification permission and then start the foreground service
|
|
141
|
-
|
|
142
108
|
await startForegroundService(activeCallCid);
|
|
143
109
|
foregroundServiceStartedRef.current = true;
|
|
144
110
|
};
|
|
@@ -146,7 +112,6 @@ const useAndroidKeepCallAliveEffect = () => {
|
|
|
146
112
|
// ensure that app is active before running the function
|
|
147
113
|
if (_reactNative.AppState.currentState === 'active') {
|
|
148
114
|
run();
|
|
149
|
-
return undefined;
|
|
150
115
|
}
|
|
151
116
|
const sub = _reactNative.AppState.addEventListener('change', nextAppState => {
|
|
152
117
|
if (nextAppState === 'active') {
|
|
@@ -161,34 +126,36 @@ const useAndroidKeepCallAliveEffect = () => {
|
|
|
161
126
|
return () => {
|
|
162
127
|
// cancel any notifee displayed notification when the call has transitioned out of ringing
|
|
163
128
|
// NOTE: cancels only the non fg service notifications
|
|
164
|
-
notifeeLib
|
|
129
|
+
if (notifeeLib) {
|
|
130
|
+
notifeeLib.default.cancelDisplayedNotification(activeCallCid);
|
|
131
|
+
}
|
|
165
132
|
};
|
|
166
133
|
} else if (callingState === _videoClient.CallingState.IDLE || callingState === _videoClient.CallingState.LEFT) {
|
|
167
134
|
if (foregroundServiceStartedRef.current) {
|
|
168
|
-
|
|
135
|
+
_keepCallAliveHeadlessTask.keepCallAliveCallRef.current = undefined;
|
|
169
136
|
// stop foreground service when the call is not active
|
|
170
|
-
|
|
137
|
+
stopForegroundServiceNoThrow();
|
|
171
138
|
foregroundServiceStartedRef.current = false;
|
|
172
139
|
} else {
|
|
173
|
-
notifeeLib
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
140
|
+
if (notifeeLib) {
|
|
141
|
+
notifeeLib.default.getDisplayedNotifications().then(displayedNotifications => {
|
|
142
|
+
const activeCallNotification = displayedNotifications.find(notification => notification.id === activeCallCid);
|
|
143
|
+
if (activeCallNotification) {
|
|
144
|
+
// this means that we have a incoming call notification shown as foreground service and we must stop it
|
|
145
|
+
notifeeLib.default.stopForegroundService();
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
181
149
|
}
|
|
182
150
|
}
|
|
183
151
|
return undefined;
|
|
184
|
-
}, [activeCallCid, callingState, shouldStartForegroundService]);
|
|
152
|
+
}, [activeCallCid, callingState, shouldStartForegroundService, isRingingCall]);
|
|
185
153
|
(0, _react.useEffect)(() => {
|
|
186
154
|
return () => {
|
|
187
155
|
// stop foreground service when this effect is unmounted
|
|
188
156
|
if (foregroundServiceStartedRef.current) {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
notifeeLib.default.stopForegroundService();
|
|
157
|
+
_keepCallAliveHeadlessTask.keepCallAliveCallRef.current = undefined;
|
|
158
|
+
stopForegroundServiceNoThrow();
|
|
192
159
|
foregroundServiceStartedRef.current = false;
|
|
193
160
|
}
|
|
194
161
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_videoReactBindings","require","_react","_utils","_reactNative","_videoClient","
|
|
1
|
+
{"version":3,"names":["_videoReactBindings","require","_react","_utils","_reactNative","_videoClient","_keepCallAliveHeadlessTask","_notifee","_libs","notifeeLib","getNotifeeLibNoThrowForKeepCallAlive","stopForegroundServiceNoThrow","logger","videoLoggerSystem","getLogger","NativeModules","StreamVideoReactNative","stopKeepCallAliveService","e","warn","startForegroundService","call_cid","isCallAliveConfigured","info","hasPostNotificationsPermission","Number","Platform","Version","PermissionsAndroid","check","PERMISSIONS","POST_NOTIFICATIONS","videoConfig","StreamVideoRN","getConfig","foregroundServiceConfig","foregroundService","notificationTexts","android","channel","smallIconName","push","smallIcon","requestAnimationFrame","startKeepCallAliveService","id","name","title","body","useAndroidKeepCallAliveEffect","foregroundServiceStartedRef","useRef","call","useCall","keepCallAliveCallRef","current","activeCallCid","cid","useCallCallingState","useCallStateHooks","callingState","isOutgoingCall","CallingState","RINGING","isCreatedByMe","isCallJoined","JOINED","isRingingCall","ringing","shouldStartForegroundService","useEffect","OS","undefined","callingx","getCallingxLibIfAvailable","isSetup","isOngoingCallsEnabled","run","notifee","default","displayedNotifications","getDisplayedNotifications","activeCallNotification","find","notification","stopForegroundService","cancelDisplayedNotification","AppState","currentState","sub","addEventListener","nextAppState","remove","IDLE","LEFT","then","exports"],"sourceRoot":"../../../src","sources":["hooks/useAndroidKeepCallAliveEffect.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useScreenShareAudioMixing = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _videoClient = require("@stream-io/video-client");
|
|
9
|
+
var _videoReactBindings = require("@stream-io/video-react-bindings");
|
|
10
|
+
var _ScreenShareAudioManager = require("../modules/ScreenShareAudioManager");
|
|
11
|
+
var _lib = require("../providers/NoiseCancellation/lib");
|
|
12
|
+
const logger = _videoClient.videoLoggerSystem.getLogger('useScreenShareAudioMixing');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Tries to disable noise cancellation so screen audio passes through
|
|
16
|
+
* unfiltered. Returns true if NC was disabled (and should be re-enabled later).
|
|
17
|
+
*/
|
|
18
|
+
async function disableNoiseCancellation() {
|
|
19
|
+
try {
|
|
20
|
+
const nc = _lib.NoiseCancellationWrapper.getInstance();
|
|
21
|
+
const wasEnabled = await nc.isEnabled();
|
|
22
|
+
if (wasEnabled) {
|
|
23
|
+
await nc.disable();
|
|
24
|
+
logger.info('Noise cancellation disabled for screen share audio');
|
|
25
|
+
}
|
|
26
|
+
return wasEnabled;
|
|
27
|
+
} catch {
|
|
28
|
+
// NC module not installed or not configured — nothing to do
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Re-enables noise cancellation if it was previously disabled.
|
|
35
|
+
*/
|
|
36
|
+
async function restoreNoiseCancellation() {
|
|
37
|
+
try {
|
|
38
|
+
const nc = _lib.NoiseCancellationWrapper.getInstance();
|
|
39
|
+
await nc.enable();
|
|
40
|
+
logger.info('Noise cancellation re-enabled after screen share audio');
|
|
41
|
+
} catch {
|
|
42
|
+
// NC module not installed — nothing to do
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Hook that manages the lifecycle of screen share audio mixing.
|
|
48
|
+
*
|
|
49
|
+
* When screen share is active and audio mixing is enabled
|
|
50
|
+
* (via `call.screenShare.enableScreenShareAudio()`), this hook
|
|
51
|
+
* calls the native module to mix captured screen/app audio
|
|
52
|
+
* into the microphone audio track.
|
|
53
|
+
*
|
|
54
|
+
* Noise cancellation is temporarily disabled while screen audio mixing
|
|
55
|
+
* is active so that all captured sounds (music, game audio, etc.)
|
|
56
|
+
* pass through without being filtered.
|
|
57
|
+
*/
|
|
58
|
+
const useScreenShareAudioMixing = () => {
|
|
59
|
+
const call = (0, _videoReactBindings.useCall)();
|
|
60
|
+
const {
|
|
61
|
+
useLocalParticipant
|
|
62
|
+
} = (0, _videoReactBindings.useCallStateHooks)();
|
|
63
|
+
const localParticipant = useLocalParticipant();
|
|
64
|
+
const isScreenSharing = localParticipant != null && (0, _videoClient.hasScreenShare)(localParticipant);
|
|
65
|
+
const [audioEnabled, setAudioEnabled] = (0, _react.useState)(() => call?.screenShare.state.audioEnabled ?? false);
|
|
66
|
+
const isMixingActiveRef = (0, _react.useRef)(false);
|
|
67
|
+
const ncWasEnabledRef = (0, _react.useRef)(false);
|
|
68
|
+
(0, _react.useEffect)(() => {
|
|
69
|
+
if (!call) return;
|
|
70
|
+
const sub = call.screenShare.state.audioEnabled$.subscribe(setAudioEnabled);
|
|
71
|
+
return () => sub.unsubscribe();
|
|
72
|
+
}, [call]);
|
|
73
|
+
const startMixing = (0, _react.useCallback)(async () => {
|
|
74
|
+
if (isMixingActiveRef.current) return;
|
|
75
|
+
try {
|
|
76
|
+
// Disable NC before starting mixing so screen audio is not filtered
|
|
77
|
+
ncWasEnabledRef.current = await disableNoiseCancellation();
|
|
78
|
+
logger.info('Starting screen share audio mixing');
|
|
79
|
+
await _ScreenShareAudioManager.screenShareAudioMixingManager.startScreenShareAudioMixing();
|
|
80
|
+
isMixingActiveRef.current = true;
|
|
81
|
+
} catch (error) {
|
|
82
|
+
logger.warn('Failed to start screen share audio mixing', error);
|
|
83
|
+
if (ncWasEnabledRef.current) {
|
|
84
|
+
restoreNoiseCancellation().catch(() => {});
|
|
85
|
+
ncWasEnabledRef.current = false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}, []);
|
|
89
|
+
const stopMixing = (0, _react.useCallback)(async () => {
|
|
90
|
+
if (!isMixingActiveRef.current) return;
|
|
91
|
+
try {
|
|
92
|
+
logger.info('Stopping screen share audio mixing');
|
|
93
|
+
await _ScreenShareAudioManager.screenShareAudioMixingManager.stopScreenShareAudioMixing();
|
|
94
|
+
isMixingActiveRef.current = false;
|
|
95
|
+
if (ncWasEnabledRef.current) {
|
|
96
|
+
await restoreNoiseCancellation();
|
|
97
|
+
ncWasEnabledRef.current = false;
|
|
98
|
+
}
|
|
99
|
+
} catch (error) {
|
|
100
|
+
logger.warn('Failed to stop screen share audio mixing', error);
|
|
101
|
+
}
|
|
102
|
+
}, []);
|
|
103
|
+
|
|
104
|
+
// Start/stop audio mixing based on screen share status and audio preference
|
|
105
|
+
(0, _react.useEffect)(() => {
|
|
106
|
+
if (isScreenSharing && audioEnabled) {
|
|
107
|
+
startMixing();
|
|
108
|
+
} else {
|
|
109
|
+
stopMixing();
|
|
110
|
+
}
|
|
111
|
+
}, [isScreenSharing, audioEnabled, startMixing, stopMixing]);
|
|
112
|
+
(0, _react.useEffect)(() => {
|
|
113
|
+
return () => {
|
|
114
|
+
if (isMixingActiveRef.current) {
|
|
115
|
+
_ScreenShareAudioManager.screenShareAudioMixingManager.stopScreenShareAudioMixing().catch(() => {});
|
|
116
|
+
isMixingActiveRef.current = false;
|
|
117
|
+
if (ncWasEnabledRef.current) {
|
|
118
|
+
restoreNoiseCancellation().catch(() => {});
|
|
119
|
+
ncWasEnabledRef.current = false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}, []);
|
|
124
|
+
};
|
|
125
|
+
exports.useScreenShareAudioMixing = useScreenShareAudioMixing;
|
|
126
|
+
//# sourceMappingURL=useScreenShareAudioMixing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_videoClient","_videoReactBindings","_ScreenShareAudioManager","_lib","logger","videoLoggerSystem","getLogger","disableNoiseCancellation","nc","NoiseCancellationWrapper","getInstance","wasEnabled","isEnabled","disable","info","restoreNoiseCancellation","enable","useScreenShareAudioMixing","call","useCall","useLocalParticipant","useCallStateHooks","localParticipant","isScreenSharing","hasScreenShare","audioEnabled","setAudioEnabled","useState","screenShare","state","isMixingActiveRef","useRef","ncWasEnabledRef","useEffect","sub","audioEnabled$","subscribe","unsubscribe","startMixing","useCallback","current","screenShareAudioMixingManager","startScreenShareAudioMixing","error","warn","catch","stopMixing","stopScreenShareAudioMixing","exports"],"sourceRoot":"../../../src","sources":["hooks/useScreenShareAudioMixing.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,wBAAA,GAAAH,OAAA;AACA,IAAAI,IAAA,GAAAJ,OAAA;AAEA,MAAMK,MAAM,GAAGC,8BAAiB,CAACC,SAAS,CAAC,2BAA2B,CAAC;;AAEvE;AACA;AACA;AACA;AACA,eAAeC,wBAAwBA,CAAA,EAAqB;EAC1D,IAAI;IACF,MAAMC,EAAE,GAAGC,6BAAwB,CAACC,WAAW,CAAC,CAAC;IACjD,MAAMC,UAAU,GAAG,MAAMH,EAAE,CAACI,SAAS,CAAC,CAAC;IACvC,IAAID,UAAU,EAAE;MACd,MAAMH,EAAE,CAACK,OAAO,CAAC,CAAC;MAClBT,MAAM,CAACU,IAAI,CAAC,oDAAoD,CAAC;IACnE;IACA,OAAOH,UAAU;EACnB,CAAC,CAAC,MAAM;IACN;IACA,OAAO,KAAK;EACd;AACF;;AAEA;AACA;AACA;AACA,eAAeI,wBAAwBA,CAAA,EAAG;EACxC,IAAI;IACF,MAAMP,EAAE,GAAGC,6BAAwB,CAACC,WAAW,CAAC,CAAC;IACjD,MAAMF,EAAE,CAACQ,MAAM,CAAC,CAAC;IACjBZ,MAAM,CAACU,IAAI,CAAC,wDAAwD,CAAC;EACvE,CAAC,CAAC,MAAM;IACN;EAAA;AAEJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,yBAAyB,GAAGA,CAAA,KAAM;EAC7C,MAAMC,IAAI,GAAG,IAAAC,2BAAO,EAAC,CAAC;EACtB,MAAM;IAAEC;EAAoB,CAAC,GAAG,IAAAC,qCAAiB,EAAC,CAAC;EACnD,MAAMC,gBAAgB,GAAGF,mBAAmB,CAAC,CAAC;EAC9C,MAAMG,eAAe,GACnBD,gBAAgB,IAAI,IAAI,IAAI,IAAAE,2BAAc,EAACF,gBAAgB,CAAC;EAE9D,MAAM,CAACG,YAAY,EAAEC,eAAe,CAAC,GAAG,IAAAC,eAAQ,EAC9C,MAAMT,IAAI,EAAEU,WAAW,CAACC,KAAK,CAACJ,YAAY,IAAI,KAChD,CAAC;EAED,MAAMK,iBAAiB,GAAG,IAAAC,aAAM,EAAC,KAAK,CAAC;EACvC,MAAMC,eAAe,GAAG,IAAAD,aAAM,EAAC,KAAK,CAAC;EAErC,IAAAE,gBAAS,EAAC,MAAM;IACd,IAAI,CAACf,IAAI,EAAE;IACX,MAAMgB,GAAG,GAAGhB,IAAI,CAACU,WAAW,CAACC,KAAK,CAACM,aAAa,CAACC,SAAS,CAACV,eAAe,CAAC;IAC3E,OAAO,MAAMQ,GAAG,CAACG,WAAW,CAAC,CAAC;EAChC,CAAC,EAAE,CAACnB,IAAI,CAAC,CAAC;EAEV,MAAMoB,WAAW,GAAG,IAAAC,kBAAW,EAAC,YAAY;IAC1C,IAAIT,iBAAiB,CAACU,OAAO,EAAE;IAC/B,IAAI;MACF;MACAR,eAAe,CAACQ,OAAO,GAAG,MAAMjC,wBAAwB,CAAC,CAAC;MAE1DH,MAAM,CAACU,IAAI,CAAC,oCAAoC,CAAC;MACjD,MAAM2B,sDAA6B,CAACC,2BAA2B,CAAC,CAAC;MACjEZ,iBAAiB,CAACU,OAAO,GAAG,IAAI;IAClC,CAAC,CAAC,OAAOG,KAAK,EAAE;MACdvC,MAAM,CAACwC,IAAI,CAAC,2CAA2C,EAAED,KAAK,CAAC;MAC/D,IAAIX,eAAe,CAACQ,OAAO,EAAE;QAC3BzB,wBAAwB,CAAC,CAAC,CAAC8B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1Cb,eAAe,CAACQ,OAAO,GAAG,KAAK;MACjC;IACF;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMM,UAAU,GAAG,IAAAP,kBAAW,EAAC,YAAY;IACzC,IAAI,CAACT,iBAAiB,CAACU,OAAO,EAAE;IAChC,IAAI;MACFpC,MAAM,CAACU,IAAI,CAAC,oCAAoC,CAAC;MACjD,MAAM2B,sDAA6B,CAACM,0BAA0B,CAAC,CAAC;MAChEjB,iBAAiB,CAACU,OAAO,GAAG,KAAK;MAEjC,IAAIR,eAAe,CAACQ,OAAO,EAAE;QAC3B,MAAMzB,wBAAwB,CAAC,CAAC;QAChCiB,eAAe,CAACQ,OAAO,GAAG,KAAK;MACjC;IACF,CAAC,CAAC,OAAOG,KAAK,EAAE;MACdvC,MAAM,CAACwC,IAAI,CAAC,0CAA0C,EAAED,KAAK,CAAC;IAChE;EACF,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,IAAAV,gBAAS,EAAC,MAAM;IACd,IAAIV,eAAe,IAAIE,YAAY,EAAE;MACnCa,WAAW,CAAC,CAAC;IACf,CAAC,MAAM;MACLQ,UAAU,CAAC,CAAC;IACd;EACF,CAAC,EAAE,CAACvB,eAAe,EAAEE,YAAY,EAAEa,WAAW,EAAEQ,UAAU,CAAC,CAAC;EAE5D,IAAAb,gBAAS,EAAC,MAAM;IACd,OAAO,MAAM;MACX,IAAIH,iBAAiB,CAACU,OAAO,EAAE;QAC7BC,sDAA6B,CAC1BM,0BAA0B,CAAC,CAAC,CAC5BF,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAClBf,iBAAiB,CAACU,OAAO,GAAG,KAAK;QACjC,IAAIR,eAAe,CAACQ,OAAO,EAAE;UAC3BzB,wBAAwB,CAAC,CAAC,CAAC8B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;UAC1Cb,eAAe,CAACQ,OAAO,GAAG,KAAK;QACjC;MACF;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;AAACQ,OAAA,CAAA/B,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|
|
@@ -10,9 +10,25 @@ var _react = require("react");
|
|
|
10
10
|
var _reactNative = require("react-native");
|
|
11
11
|
var _hooks = require("../utils/hooks");
|
|
12
12
|
var _useIsIosScreenshareBroadcastStarted = require("./useIsIosScreenshareBroadcastStarted");
|
|
13
|
+
var _ScreenShareAudioManager = require("../modules/ScreenShareAudioManager");
|
|
14
|
+
/**
|
|
15
|
+
* The type of screen sharing to use on iOS.
|
|
16
|
+
*
|
|
17
|
+
* - `'broadcast'` — Uses a Broadcast Upload Extension (RPSystemBroadcastPickerView).
|
|
18
|
+
* Captures the entire device screen, works across all apps. Requires an extension target.
|
|
19
|
+
* - `'inApp'` — Uses RPScreenRecorder.startCapture to capture the current app's screen.
|
|
20
|
+
* Only captures the current app. Supports `.audioApp` sample buffers for audio mixing.
|
|
21
|
+
*
|
|
22
|
+
* On Android, this option is ignored — the system screen capture dialog is always used.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Options for screen share behavior.
|
|
27
|
+
*/
|
|
28
|
+
|
|
13
29
|
// ios >= 14.0 or android - platform restrictions
|
|
14
30
|
const CanDeviceScreenShare = _reactNative.Platform.OS === 'ios' && Number.parseInt(_reactNative.Platform.Version?.split('.')[0] ?? '0', 10) >= 14 || _reactNative.Platform.OS === 'android';
|
|
15
|
-
const useScreenShareButton = (screenCapturePickerViewiOSRef, onScreenShareStartedHandler, onScreenShareStoppedHandler, onMissingScreenShareStreamPermission) => {
|
|
31
|
+
const useScreenShareButton = (screenCapturePickerViewiOSRef, onScreenShareStartedHandler, onScreenShareStoppedHandler, onMissingScreenShareStreamPermission, screenShareOptions) => {
|
|
16
32
|
const call = (0, _videoReactBindings.useCall)();
|
|
17
33
|
const {
|
|
18
34
|
useLocalParticipant,
|
|
@@ -23,6 +39,8 @@ const useScreenShareButton = (screenCapturePickerViewiOSRef, onScreenShareStarte
|
|
|
23
39
|
const ownCapabilities = useOwnCapabilities();
|
|
24
40
|
const hasScreenSharingPermissions = ownCapabilities?.includes(_videoClient.OwnCapability.SCREENSHARE);
|
|
25
41
|
const isScreenSharingEnabledInCall = callSettings?.screensharing.enabled;
|
|
42
|
+
const screenShareType = screenShareOptions?.type ?? 'broadcast';
|
|
43
|
+
const includeAudio = screenShareOptions?.includeAudio ?? false;
|
|
26
44
|
const onScreenShareStartedHandlerRef = (0, _react.useRef)(onScreenShareStartedHandler);
|
|
27
45
|
onScreenShareStartedHandlerRef.current = onScreenShareStartedHandler;
|
|
28
46
|
const onScreenShareStoppedHandlerRef = (0, _react.useRef)(onScreenShareStoppedHandler);
|
|
@@ -33,31 +51,63 @@ const useScreenShareButton = (screenCapturePickerViewiOSRef, onScreenShareStarte
|
|
|
33
51
|
const hasPublishedScreenShare = localParticipant && (0, _videoClient.hasScreenShare)(localParticipant);
|
|
34
52
|
|
|
35
53
|
// listens to iOS screen share broadcast started event from the system
|
|
54
|
+
// (only relevant for broadcast mode)
|
|
36
55
|
(0, _react.useEffect)(() => {
|
|
37
56
|
if (_reactNative.Platform.OS !== 'ios') {
|
|
38
57
|
return;
|
|
39
58
|
}
|
|
59
|
+
if (screenShareType !== 'broadcast') {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
40
62
|
if (iosScreenShareStartedFromSystem && !prevIosScreenShareStartedFromSystem) {
|
|
41
63
|
onScreenShareStartedHandlerRef.current?.();
|
|
64
|
+
if (includeAudio) {
|
|
65
|
+
call?.screenShare.enableScreenShareAudio();
|
|
66
|
+
}
|
|
42
67
|
call?.screenShare.enable();
|
|
43
68
|
} else if (!iosScreenShareStartedFromSystem && prevIosScreenShareStartedFromSystem) {
|
|
44
69
|
onScreenShareStoppedHandlerRef.current?.();
|
|
45
70
|
call?.screenShare.disable(true);
|
|
46
71
|
}
|
|
47
|
-
}, [call, iosScreenShareStartedFromSystem, prevIosScreenShareStartedFromSystem]);
|
|
72
|
+
}, [call, includeAudio, screenShareType, iosScreenShareStartedFromSystem, prevIosScreenShareStartedFromSystem]);
|
|
48
73
|
const onPress = async () => {
|
|
49
74
|
if (!hasScreenSharingPermissions) {
|
|
50
75
|
const logger = _videoClient.videoLoggerSystem.getLogger('useScreenShareButton');
|
|
51
76
|
logger.info('User does not have permissions to stream the screen share media, calling onMissingScreenShareStreamPermission handler if present');
|
|
52
77
|
onMissingScreenShareStreamPermission?.();
|
|
78
|
+
return;
|
|
53
79
|
}
|
|
54
80
|
if (!hasPublishedScreenShare) {
|
|
55
|
-
|
|
81
|
+
// Set audio mixing preference before starting screen share
|
|
82
|
+
if (includeAudio) {
|
|
83
|
+
call?.screenShare.enableScreenShareAudio();
|
|
84
|
+
} else {
|
|
85
|
+
try {
|
|
86
|
+
await call?.screenShare.disableScreenShareAudio();
|
|
87
|
+
} catch (error) {
|
|
88
|
+
const logger = _videoClient.videoLoggerSystem.getLogger('useScreenShareButton');
|
|
89
|
+
logger.warn('Failed to disable screen share audio', error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (_reactNative.Platform.OS === 'ios' && screenShareType === 'inApp') {
|
|
93
|
+
// In-app screen sharing on iOS — uses RPScreenRecorder directly
|
|
94
|
+
try {
|
|
95
|
+
await _ScreenShareAudioManager.screenShareAudioMixingManager.startInAppScreenCapture(includeAudio);
|
|
96
|
+
await call?.screenShare.enable();
|
|
97
|
+
onScreenShareStartedHandler?.();
|
|
98
|
+
} catch (error) {
|
|
99
|
+
await _ScreenShareAudioManager.screenShareAudioMixingManager.stopInAppScreenCapture();
|
|
100
|
+
const logger = _videoClient.videoLoggerSystem.getLogger('useScreenShareButton');
|
|
101
|
+
logger.warn('Failed to start in-app screen capture', error);
|
|
102
|
+
}
|
|
103
|
+
} else if (_reactNative.Platform.OS === 'ios') {
|
|
104
|
+
// Broadcast screen sharing on iOS — shows the system picker
|
|
56
105
|
const reactTag = (0, _reactNative.findNodeHandle)(screenCapturePickerViewiOSRef.current);
|
|
57
106
|
await _reactNative.NativeModules.ScreenCapturePickerViewManager.show(reactTag);
|
|
58
107
|
// After this the iOS screen share broadcast started/stopped event will be triggered
|
|
59
108
|
// and the useEffect listener will handle the rest
|
|
60
109
|
} else {
|
|
110
|
+
// Android screen sharing
|
|
61
111
|
try {
|
|
62
112
|
await call?.screenShare.enable();
|
|
63
113
|
onScreenShareStartedHandler?.();
|
|
@@ -69,6 +119,10 @@ const useScreenShareButton = (screenCapturePickerViewiOSRef, onScreenShareStarte
|
|
|
69
119
|
}
|
|
70
120
|
} else if (hasPublishedScreenShare) {
|
|
71
121
|
onScreenShareStoppedHandler?.();
|
|
122
|
+
// Stop in-app screen capture if it was active (iOS only)
|
|
123
|
+
if (_reactNative.Platform.OS === 'ios' && screenShareType === 'inApp') {
|
|
124
|
+
await _ScreenShareAudioManager.screenShareAudioMixingManager.stopInAppScreenCapture();
|
|
125
|
+
}
|
|
72
126
|
await call?.screenShare.disable(true);
|
|
73
127
|
}
|
|
74
128
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_videoClient","require","_videoReactBindings","_react","_reactNative","_hooks","_useIsIosScreenshareBroadcastStarted","CanDeviceScreenShare","Platform","OS","Number","parseInt","Version","split","useScreenShareButton","screenCapturePickerViewiOSRef","onScreenShareStartedHandler","onScreenShareStoppedHandler","onMissingScreenShareStreamPermission","call","useCall","useLocalParticipant","useCallSettings","useOwnCapabilities","useCallStateHooks","callSettings","ownCapabilities","hasScreenSharingPermissions","includes","OwnCapability","SCREENSHARE","isScreenSharingEnabledInCall","screensharing","enabled","onScreenShareStartedHandlerRef","useRef","current","onScreenShareStoppedHandlerRef","iosScreenShareStartedFromSystem","useIsIosScreenshareBroadcastStarted","prevIosScreenShareStartedFromSystem","usePrevious","localParticipant","hasPublishedScreenShare","hasScreenShare","useEffect","screenShare","enable","disable","onPress","logger","videoLoggerSystem","getLogger","info","reactTag","findNodeHandle","NativeModules","ScreenCapturePickerViewManager","show","
|
|
1
|
+
{"version":3,"names":["_videoClient","require","_videoReactBindings","_react","_reactNative","_hooks","_useIsIosScreenshareBroadcastStarted","_ScreenShareAudioManager","CanDeviceScreenShare","Platform","OS","Number","parseInt","Version","split","useScreenShareButton","screenCapturePickerViewiOSRef","onScreenShareStartedHandler","onScreenShareStoppedHandler","onMissingScreenShareStreamPermission","screenShareOptions","call","useCall","useLocalParticipant","useCallSettings","useOwnCapabilities","useCallStateHooks","callSettings","ownCapabilities","hasScreenSharingPermissions","includes","OwnCapability","SCREENSHARE","isScreenSharingEnabledInCall","screensharing","enabled","screenShareType","type","includeAudio","onScreenShareStartedHandlerRef","useRef","current","onScreenShareStoppedHandlerRef","iosScreenShareStartedFromSystem","useIsIosScreenshareBroadcastStarted","prevIosScreenShareStartedFromSystem","usePrevious","localParticipant","hasPublishedScreenShare","hasScreenShare","useEffect","screenShare","enableScreenShareAudio","enable","disable","onPress","logger","videoLoggerSystem","getLogger","info","disableScreenShareAudio","error","warn","screenShareAudioMixingManager","startInAppScreenCapture","stopInAppScreenCapture","reactTag","findNodeHandle","NativeModules","ScreenCapturePickerViewManager","show","undefined","exports"],"sourceRoot":"../../../src","sources":["hooks/useScreenShareButton.ts"],"mappings":"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","ignoreList":[]}
|
package/dist/commonjs/index.js
CHANGED
|
@@ -27,6 +27,7 @@ var _reactNativeWebrtc = require("@stream-io/react-native-webrtc");
|
|
|
27
27
|
var _Logger = _interopRequireDefault(require("@stream-io/react-native-webrtc/src/Logger"));
|
|
28
28
|
var _reactNative = require("react-native");
|
|
29
29
|
var _registerSDKGlobals = require("./utils/internal/registerSDKGlobals");
|
|
30
|
+
require("./utils/keepCallAliveHeadlessTask");
|
|
30
31
|
var _videoClient = require("@stream-io/video-client");
|
|
31
32
|
Object.keys(_videoClient).forEach(function (key) {
|
|
32
33
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_setClientDetails","require","_reactNativeWebrtc","_Logger","_interopRequireDefault","_reactNative","_registerSDKGlobals","_videoClient","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_videoReactBindings","_components","_contexts","_hooks","_theme","_utils","_translations","_callManager","_StreamVideo","_StreamCall","_NoiseCancellation","e","__esModule","default","Platform","OS","registerGlobals","registerSDKGlobals","Logger","enable","ROOT_PREFIX","setClientDetails"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["_setClientDetails","require","_reactNativeWebrtc","_Logger","_interopRequireDefault","_reactNative","_registerSDKGlobals","_videoClient","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_videoReactBindings","_components","_contexts","_hooks","_theme","_utils","_translations","_callManager","_StreamVideo","_StreamCall","_NoiseCancellation","e","__esModule","default","Platform","OS","registerGlobals","registerSDKGlobals","Logger","enable","ROOT_PREFIX","setClientDetails"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|