@stream-io/video-react-native-sdk 1.27.3 → 1.28.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/android/build.gradle +1 -0
  3. package/android/src/main/java/com/streamvideo/reactnative/StreamVideoAppLifecycleModule.kt +86 -0
  4. package/android/src/main/java/com/streamvideo/reactnative/StreamVideoReactNativePackage.kt +5 -1
  5. package/android/src/main/java/com/streamvideo/reactnative/audio/AudioDeviceManager.kt +19 -11
  6. package/android/src/main/java/com/streamvideo/reactnative/audio/utils/AudioFocusUtil.kt +23 -9
  7. package/android/src/main/java/com/streamvideo/reactnative/callmanager/StreamInCallManagerModule.kt +48 -14
  8. package/dist/commonjs/index.js +2 -0
  9. package/dist/commonjs/index.js.map +1 -1
  10. package/dist/commonjs/modules/call-manager/CallManager.js +5 -0
  11. package/dist/commonjs/modules/call-manager/CallManager.js.map +1 -1
  12. package/dist/commonjs/providers/StreamCall/AppStateListener.js +74 -16
  13. package/dist/commonjs/providers/StreamCall/AppStateListener.js.map +1 -1
  14. package/dist/commonjs/utils/internal/registerSDKGlobals.js +34 -0
  15. package/dist/commonjs/utils/internal/registerSDKGlobals.js.map +1 -0
  16. package/dist/commonjs/version.js +1 -1
  17. package/dist/module/index.js +2 -0
  18. package/dist/module/index.js.map +1 -1
  19. package/dist/module/modules/call-manager/CallManager.js +5 -0
  20. package/dist/module/modules/call-manager/CallManager.js.map +1 -1
  21. package/dist/module/providers/StreamCall/AppStateListener.js +74 -16
  22. package/dist/module/providers/StreamCall/AppStateListener.js.map +1 -1
  23. package/dist/module/utils/internal/registerSDKGlobals.js +28 -0
  24. package/dist/module/utils/internal/registerSDKGlobals.js.map +1 -0
  25. package/dist/module/version.js +1 -1
  26. package/dist/typescript/index.d.ts.map +1 -1
  27. package/dist/typescript/modules/call-manager/CallManager.d.ts +2 -0
  28. package/dist/typescript/modules/call-manager/CallManager.d.ts.map +1 -1
  29. package/dist/typescript/modules/call-manager/types.d.ts +1 -0
  30. package/dist/typescript/modules/call-manager/types.d.ts.map +1 -1
  31. package/dist/typescript/providers/StreamCall/AppStateListener.d.ts.map +1 -1
  32. package/dist/typescript/utils/internal/registerSDKGlobals.d.ts +2 -0
  33. package/dist/typescript/utils/internal/registerSDKGlobals.d.ts.map +1 -0
  34. package/dist/typescript/version.d.ts +1 -1
  35. package/ios/StreamInCallManager.m +4 -0
  36. package/ios/StreamInCallManager.swift +213 -88
  37. package/package.json +7 -7
  38. package/src/index.ts +2 -0
  39. package/src/modules/call-manager/CallManager.ts +5 -0
  40. package/src/modules/call-manager/native-module.d.ts +11 -0
  41. package/src/modules/call-manager/types.ts +1 -0
  42. package/src/providers/StreamCall/AppStateListener.tsx +116 -17
  43. package/src/utils/internal/registerSDKGlobals.ts +30 -0
  44. package/src/version.ts +1 -1
  45. package/android/src/main/java/com/streamvideo/reactnative/audio/utils/AudioSetupStoreUtil.kt +0 -41
package/CHANGELOG.md CHANGED
@@ -2,6 +2,30 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [1.28.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.27.4...@stream-io/video-react-native-sdk-1.28.0) (2026-01-20)
6
+
7
+ ### Dependency Updates
8
+
9
+ - `@stream-io/noise-cancellation-react-native` updated to version `0.5.0`
10
+ - `@stream-io/video-filters-react-native` updated to version `0.10.0`
11
+ - `@stream-io/video-client` updated to version `1.41.0`
12
+ - `@stream-io/video-react-bindings` updated to version `1.13.0`
13
+
14
+ ### Features
15
+
16
+ - stereo audio output support RN-332 ([#2038](https://github.com/GetStream/stream-video-js/issues/2038)) ([2938037](https://github.com/GetStream/stream-video-js/commit/2938037d18e70ccf112a089eb3ec44cb034aed1d))
17
+
18
+ ## [1.27.4](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.27.3...@stream-io/video-react-native-sdk-1.27.4) (2026-01-16)
19
+
20
+ ### Dependency Updates
21
+
22
+ - `@stream-io/video-client` updated to version `1.40.3`
23
+ - `@stream-io/video-react-bindings` updated to version `1.12.10`
24
+
25
+ ### Bug Fixes
26
+
27
+ - do not disable camera on Android unnecessarily RN-335 ([#2085](https://github.com/GetStream/stream-video-js/issues/2085)) ([e4dfa39](https://github.com/GetStream/stream-video-js/commit/e4dfa39b7a001e60fee73db01d717ed8eb05d9b0))
28
+
5
29
  ## [1.27.3](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.27.2...@stream-io/video-react-native-sdk-1.27.3) (2026-01-15)
6
30
 
7
31
  ### Dependency Updates
@@ -97,4 +97,5 @@ dependencies {
97
97
  implementation project(':stream-io_react-native-webrtc')
98
98
  implementation "io.github.crow-misia.libyuv:libyuv-android:0.36.0"
99
99
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
100
+ implementation "androidx.lifecycle:lifecycle-process:2.10.0"
100
101
  }
@@ -0,0 +1,86 @@
1
+ package com.streamvideo.reactnative
2
+
3
+ import androidx.lifecycle.Lifecycle
4
+ import androidx.lifecycle.LifecycleEventObserver
5
+ import androidx.lifecycle.ProcessLifecycleOwner
6
+ import com.facebook.react.bridge.Promise
7
+ import com.facebook.react.bridge.ReactApplicationContext
8
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
9
+ import com.facebook.react.bridge.ReactMethod
10
+ import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter
11
+
12
+ /**
13
+ * Emits application *process* lifecycle changes using ProcessLifecycleOwner.
14
+ *
15
+ * Based on:
16
+ * https://developer.android.com/reference/androidx/lifecycle/ProcessLifecycleOwner
17
+ *
18
+ * Notes:
19
+ * - ON_CREATE is dispatched once and ON_DESTROY is never dispatched.
20
+ * - ON_STOP / ON_PAUSE are dispatched with a delay after the last activity stops/pauses.
21
+ */
22
+ class StreamVideoAppLifecycleModule(reactContext: ReactApplicationContext) :
23
+ ReactContextBaseJavaModule(reactContext) {
24
+
25
+ override fun getName(): String = NAME
26
+
27
+ private var observer: LifecycleEventObserver? = null
28
+
29
+ override fun initialize() {
30
+ super.initialize()
31
+
32
+ val lifecycle = ProcessLifecycleOwner.get().lifecycle
33
+ val lifecycleObserver = LifecycleEventObserver { _, event ->
34
+ when (event) {
35
+ Lifecycle.Event.ON_START -> emitAppState("active")
36
+ Lifecycle.Event.ON_STOP -> emitAppState("background")
37
+ else -> Unit
38
+ }
39
+ }
40
+ observer = lifecycleObserver
41
+ reactApplicationContext.runOnUiQueueThread {
42
+ lifecycle.addObserver(lifecycleObserver)
43
+ }
44
+ }
45
+
46
+ override fun invalidate() {
47
+ observer?.let {
48
+ reactApplicationContext.runOnUiQueueThread {
49
+ ProcessLifecycleOwner.get().lifecycle.removeObserver(it)
50
+ }
51
+ }
52
+ observer = null
53
+ super.invalidate()
54
+ }
55
+
56
+ private fun emitAppState(appState: String) {
57
+ reactApplicationContext
58
+ .getJSModule(RCTDeviceEventEmitter::class.java)
59
+ .emit(APP_STATE_CHANGED_EVENT, appState)
60
+ }
61
+
62
+ @ReactMethod
63
+ fun getCurrentAppState(promise: Promise) {
64
+ val state = ProcessLifecycleOwner.get().lifecycle.currentState
65
+ val appState = if (state.isAtLeast(Lifecycle.State.STARTED)) "active" else "background"
66
+ promise.resolve(appState)
67
+ }
68
+
69
+ @Suppress("UNUSED_PARAMETER")
70
+ @ReactMethod
71
+ fun addListener(eventName: String?) {
72
+ // Required for RN NativeEventEmitter
73
+ }
74
+
75
+ @Suppress("UNUSED_PARAMETER")
76
+ @ReactMethod
77
+ fun removeListeners(count: Int) {
78
+ // Required for RN NativeEventEmitter
79
+ }
80
+
81
+ companion object {
82
+ private const val NAME = "StreamVideoAppLifecycle"
83
+ private const val APP_STATE_CHANGED_EVENT = NAME + "_APP_STATE_CHANGED"
84
+ }
85
+ }
86
+
@@ -9,7 +9,11 @@ import com.streamvideo.reactnative.callmanager.StreamInCallManagerModule
9
9
 
10
10
  class StreamVideoReactNativePackage : ReactPackage {
11
11
  override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
12
- return listOf(StreamVideoReactNativeModule(reactContext), StreamInCallManagerModule(reactContext))
12
+ return listOf(
13
+ StreamVideoReactNativeModule(reactContext),
14
+ StreamVideoAppLifecycleModule(reactContext),
15
+ StreamInCallManagerModule(reactContext),
16
+ )
13
17
  }
14
18
 
15
19
  override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
@@ -31,7 +31,6 @@ import com.streamvideo.reactnative.audio.utils.AudioDeviceEndpointUtils
31
31
  import com.streamvideo.reactnative.audio.utils.AudioFocusUtil
32
32
  import com.streamvideo.reactnative.audio.utils.AudioManagerUtil
33
33
  import com.streamvideo.reactnative.audio.utils.AudioManagerUtil.Companion.getAvailableAudioDevices
34
- import com.streamvideo.reactnative.audio.utils.AudioSetupStoreUtil
35
34
  import com.streamvideo.reactnative.audio.utils.CallAudioRole
36
35
  import com.streamvideo.reactnative.callmanager.ProximityManager
37
36
  import com.streamvideo.reactnative.callmanager.StreamInCallManagerModule
@@ -90,6 +89,8 @@ class AudioDeviceManager(
90
89
  @EndpointType
91
90
  private var userSelectedAudioDevice: Int? = null
92
91
 
92
+ var enableStereo: Boolean = false
93
+
93
94
  private val mAudioManager =
94
95
  mReactContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager
95
96
 
@@ -99,7 +100,6 @@ class AudioDeviceManager(
99
100
  private var audioFocusLost = false
100
101
 
101
102
  private var audioFocusUtil = AudioFocusUtil(mAudioManager, this)
102
- private var audioSetupStoreUtil = AudioSetupStoreUtil(mReactContext, mAudioManager, this)
103
103
 
104
104
  var callAudioRole: CallAudioRole = CallAudioRole.Communicator
105
105
 
@@ -113,33 +113,38 @@ class AudioDeviceManager(
113
113
  mAudioManager.registerAudioDeviceCallback(this, null)
114
114
  }
115
115
 
116
+ fun setup() {
117
+ if (callAudioRole == CallAudioRole.Communicator) {
118
+ mAudioManager.mode = AudioManager.MODE_IN_COMMUNICATION
119
+ } else {
120
+ // Audio routing is handled automatically by the system in normal media mode
121
+ // and bluetooth microphones may not work on some devices.
122
+ mAudioManager.mode = AudioManager.MODE_NORMAL
123
+ }
124
+ audioFocusUtil.setup(callAudioRole, mReactContext)
125
+ }
126
+
116
127
  fun start(activity: Activity) {
117
128
  runInAudioThread {
129
+ setup()
118
130
  userSelectedAudioDevice = null
119
131
  selectedAudioDeviceEndpoint = null
120
- audioSetupStoreUtil.storeOriginalAudioSetup()
121
132
  if (callAudioRole == CallAudioRole.Communicator) {
122
133
  // Audio routing is manually controlled by the SDK in communication media mode
123
134
  // and local microphone can be published
124
- mAudioManager.mode = AudioManager.MODE_IN_COMMUNICATION
125
135
  activity.volumeControlStream = AudioManager.STREAM_VOICE_CALL
126
136
  bluetoothManager.start()
127
137
  mAudioManager.registerAudioDeviceCallback(this, null)
128
138
  updateAudioDeviceState()
129
139
  proximityManager.start()
130
140
  } else {
131
- // Audio routing is handled automatically by the system in normal media mode
132
- // and bluetooth microphones may not work on some devices.
133
- mAudioManager.mode = AudioManager.MODE_NORMAL
134
141
  activity.volumeControlStream = AudioManager.USE_DEFAULT_STREAM_TYPE
135
142
  }
136
-
137
- audioSetupStoreUtil.storeOriginalAudioSetup()
138
143
  audioFocusUtil.requestFocus(callAudioRole, mReactContext)
139
144
  }
140
145
  }
141
146
 
142
- fun stop() {
147
+ fun stop(activity: Activity) {
143
148
  runInAudioThread {
144
149
  if (callAudioRole == CallAudioRole.Communicator) {
145
150
  if (Build.VERSION.SDK_INT >= 31) {
@@ -147,10 +152,13 @@ class AudioDeviceManager(
147
152
  } else {
148
153
  mAudioManager.setSpeakerphoneOn(false)
149
154
  }
155
+ callAudioRole = CallAudioRole.Communicator
156
+ enableStereo = false
157
+ defaultAudioDevice = AudioDeviceEndpoint.TYPE_SPEAKER
150
158
  bluetoothManager.stop()
151
159
  proximityManager.stop()
152
160
  }
153
- audioSetupStoreUtil.restoreOriginalAudioSetup()
161
+ activity.volumeControlStream = AudioManager.USE_DEFAULT_STREAM_TYPE
154
162
  audioFocusUtil.abandonFocus()
155
163
  }
156
164
  }
@@ -4,6 +4,7 @@ import android.media.AudioAttributes
4
4
  import android.media.AudioFocusRequest
5
5
  import android.media.AudioManager
6
6
  import android.os.Build
7
+ import androidx.annotation.RequiresApi
7
8
  import com.facebook.react.bridge.ReactContext
8
9
  import com.oney.WebRTCModule.WebRTCModule
9
10
  import org.webrtc.audio.JavaAudioDeviceModule
@@ -25,18 +26,31 @@ class AudioFocusUtil(
25
26
  private lateinit var request: AudioFocusRequest
26
27
 
27
28
 
29
+ @RequiresApi(26)
30
+ private fun getAudioAttributes(mode: CallAudioRole): AudioAttributes {
31
+ return AudioAttributes.Builder()
32
+ .setUsage(if (mode == CallAudioRole.Communicator) AudioAttributes.USAGE_VOICE_COMMUNICATION else AudioAttributes.USAGE_MEDIA)
33
+ .setContentType(if (mode == CallAudioRole.Communicator) AudioAttributes.CONTENT_TYPE_SPEECH else AudioAttributes.CONTENT_TYPE_MUSIC)
34
+ .build()
35
+ }
36
+
37
+ private fun setup(audioAttributes: AudioAttributes, reactContext: ReactContext) {
38
+ val webRTCModule = reactContext.getNativeModule(WebRTCModule::class.java)!!
39
+ val adm = webRTCModule.audioDeviceModule as JavaAudioDeviceModule
40
+ WebRtcAudioTrackHelper.setAudioOutputAttributes(adm, audioAttributes)
41
+ }
42
+
43
+ fun setup(mode: CallAudioRole, reactContext: ReactContext) {
44
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
45
+ val audioAttributes = getAudioAttributes(mode)
46
+ setup(audioAttributes, reactContext)
47
+ }
48
+ }
28
49
 
29
50
  fun requestFocus(mode: CallAudioRole, reactContext: ReactContext) {
30
51
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
31
- val audioAttributes = AudioAttributes.Builder()
32
- .setUsage(if (mode == CallAudioRole.Communicator) AudioAttributes.USAGE_VOICE_COMMUNICATION else AudioAttributes.USAGE_MEDIA)
33
- .setContentType(if (mode == CallAudioRole.Communicator) AudioAttributes.CONTENT_TYPE_SPEECH else AudioAttributes.CONTENT_TYPE_MUSIC)
34
- .build()
35
-
36
- // 1. set audio attributes to webrtc
37
- val webRTCModule = reactContext.getNativeModule(WebRTCModule::class.java)!!
38
- val adm = webRTCModule.audioDeviceModule as JavaAudioDeviceModule
39
- WebRtcAudioTrackHelper.setAudioOutputAttributes(adm, audioAttributes)
52
+ val audioAttributes = getAudioAttributes(mode)
53
+ setup(audioAttributes, reactContext)
40
54
 
41
55
  // 2. request the audio focus with the audio attributes
42
56
  request = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT)
@@ -80,6 +80,24 @@ class StreamInCallManagerModule(reactContext: ReactApplicationContext) :
80
80
  }
81
81
  }
82
82
 
83
+ @ReactMethod
84
+ fun setEnableStereoAudioOutput(enabled: Boolean) {
85
+ AudioDeviceManager.runInAudioThread {
86
+ if (audioManagerActivated) {
87
+ Log.e(TAG, "setEnableStereoAudioOutput(): AudioManager is already activated and so enabling stereo audio output cannot be changed")
88
+ return@runInAudioThread
89
+ }
90
+ mAudioDeviceManager.enableStereo = enabled
91
+ }
92
+ }
93
+
94
+ @ReactMethod
95
+ fun setup() {
96
+ AudioDeviceManager.runInAudioThread {
97
+ mAudioDeviceManager.setup()
98
+ }
99
+ }
100
+
83
101
  @ReactMethod
84
102
  fun start() {
85
103
  AudioDeviceManager.runInAudioThread {
@@ -99,10 +117,12 @@ class StreamInCallManagerModule(reactContext: ReactApplicationContext) :
99
117
  AudioDeviceManager.runInAudioThread {
100
118
  if (audioManagerActivated) {
101
119
  Log.d(TAG, "stop() mAudioDeviceManager")
102
- mAudioDeviceManager.stop()
120
+ reactApplicationContext.currentActivity?.let {
121
+ mAudioDeviceManager.stop(it)
122
+ audioManagerActivated = false
123
+ }
103
124
  setMicrophoneMute(false)
104
125
  setKeepScreenOn(false)
105
- audioManagerActivated = false
106
126
  }
107
127
  }
108
128
  }
@@ -124,11 +144,16 @@ class StreamInCallManagerModule(reactContext: ReactApplicationContext) :
124
144
  @Suppress("unused")
125
145
  @ReactMethod
126
146
  fun setForceSpeakerphoneOn(enable: Boolean) {
127
- if (mAudioDeviceManager.callAudioRole !== CallAudioRole.Communicator) {
128
- Log.e(TAG, "setForceSpeakerphoneOn() is not supported when audio role is not Communicator")
129
- return
147
+ AudioDeviceManager.runInAudioThread {
148
+ if (mAudioDeviceManager.callAudioRole !== CallAudioRole.Communicator) {
149
+ Log.e(
150
+ TAG,
151
+ "setForceSpeakerphoneOn() is not supported when audio role is not Communicator"
152
+ )
153
+ return@runInAudioThread
154
+ }
155
+ mAudioDeviceManager.setSpeakerphoneOn(enable)
130
156
  }
131
- mAudioDeviceManager.setSpeakerphoneOn(enable)
132
157
  }
133
158
 
134
159
  @ReactMethod
@@ -152,23 +177,32 @@ class StreamInCallManagerModule(reactContext: ReactApplicationContext) :
152
177
  @Suppress("unused")
153
178
  @ReactMethod
154
179
  fun chooseAudioDeviceEndpoint(endpointDeviceName: String) {
155
- if (mAudioDeviceManager.callAudioRole !== CallAudioRole.Communicator) {
156
- Log.e(TAG, "chooseAudioDeviceEndpoint() is not supported when audio role is not Communicator")
157
- return
180
+ AudioDeviceManager.runInAudioThread {
181
+ if (mAudioDeviceManager.callAudioRole !== CallAudioRole.Communicator) {
182
+ Log.e(
183
+ TAG,
184
+ "chooseAudioDeviceEndpoint() is not supported when audio role is not Communicator"
185
+ )
186
+ return@runInAudioThread
187
+ }
188
+ mAudioDeviceManager.switchDeviceFromDeviceName(
189
+ endpointDeviceName
190
+ )
158
191
  }
159
- mAudioDeviceManager.switchDeviceFromDeviceName(
160
- endpointDeviceName
161
- )
162
192
  }
163
193
 
164
194
  @ReactMethod
165
195
  fun muteAudioOutput() {
166
- mAudioDeviceManager.muteAudioOutput()
196
+ AudioDeviceManager.runInAudioThread {
197
+ mAudioDeviceManager.muteAudioOutput()
198
+ }
167
199
  }
168
200
 
169
201
  @ReactMethod
170
202
  fun unmuteAudioOutput() {
171
- mAudioDeviceManager.unmuteAudioOutput()
203
+ AudioDeviceManager.runInAudioThread {
204
+ mAudioDeviceManager.unmuteAudioOutput()
205
+ }
172
206
  }
173
207
 
174
208
 
@@ -26,6 +26,7 @@ require("intl-pluralrules");
26
26
  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
+ var _registerSDKGlobals = require("./utils/internal/registerSDKGlobals");
29
30
  var _videoClient = require("@stream-io/video-client");
30
31
  Object.keys(_videoClient).forEach(function (key) {
31
32
  if (key === "default" || key === "__esModule") return;
@@ -160,6 +161,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
160
161
  // Reference: https://github.com/react-native-webrtc/react-native-webrtc/blob/16cff1523da457dbcc27bb0744ee2bad3a987c41/Documentation/BasicUsage.md#registering-globals
161
162
  if (_reactNative.Platform.OS !== 'web') {
162
163
  (0, _reactNativeWebrtc.registerGlobals)();
164
+ (0, _registerSDKGlobals.registerSDKGlobals)();
163
165
  }
164
166
 
165
167
  // only enable warning and error logs from webrtc library
@@ -1 +1 @@
1
- {"version":3,"names":["_setClientDetails","require","_reactNativeWebrtc","_Logger","_interopRequireDefault","_reactNative","_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","Logger","enable","ROOT_PREFIX","setClientDetails"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
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":[]}
@@ -86,6 +86,8 @@ class CallManager {
86
86
  * @param config.deviceEndpointType The default audio device endpoint type to set. It can be one of the following:
87
87
  * - `'speaker'`: (Default) For normal video or voice calls.
88
88
  * - `'earpiece'`: For voice-only mobile call type scenarios.
89
+ *
90
+ * @param config.enableStereoAudioOutput Whether to enable stereo audio output. Only supported for listener audio role.
89
91
  */
90
92
  start = config => {
91
93
  NativeManager.setAudioRole(config?.audioRole ?? 'communicator');
@@ -93,6 +95,9 @@ class CallManager {
93
95
  const type = config.deviceEndpointType ?? 'speaker';
94
96
  NativeManager.setDefaultAudioDeviceEndpointType(type);
95
97
  }
98
+ if (config?.audioRole === 'listener' && config.enableStereoAudioOutput) {
99
+ NativeManager.setEnableStereoAudioOutput(true);
100
+ }
96
101
  NativeManager.start();
97
102
  };
98
103
 
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","NativeManager","NativeModules","StreamInCallManager","invariant","condition","message","Error","AndroidCallManager","getAudioDeviceStatus","Platform","OS","selectAudioDevice","endpointName","chooseAudioDeviceEndpoint","addAudioDeviceChangeListener","onChange","eventEmitter","NativeEventEmitter","s","addListener","remove","IOSCallManager","showDeviceSelector","showAudioRoutePicker","SpeakerManager","setMute","mute","muteAudioOutput","unmuteAudioOutput","setForceSpeakerphoneOn","force","CallManager","android","ios","speaker","start","config","setAudioRole","audioRole","type","deviceEndpointType","setDefaultAudioDeviceEndpointType","stop","logAudioState","exports"],"sourceRoot":"../../../../src","sources":["modules/call-manager/CallManager.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","NativeManager","NativeModules","StreamInCallManager","invariant","condition","message","Error","AndroidCallManager","getAudioDeviceStatus","Platform","OS","selectAudioDevice","endpointName","chooseAudioDeviceEndpoint","addAudioDeviceChangeListener","onChange","eventEmitter","NativeEventEmitter","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","exports"],"sourceRoot":"../../../../src","sources":["modules/call-manager/CallManager.ts"],"mappings":"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","ignoreList":[]}
@@ -11,6 +11,7 @@ var _shouldDisableIOSLocalVideoOnBackground = require("../../utils/internal/shou
11
11
  var _rxSubjects = require("../../utils/internal/rxSubjects");
12
12
  var _videoClient = require("@stream-io/video-client");
13
13
  const PIP_CHANGE_EVENT = 'StreamVideoReactNative_PIP_CHANGE_EVENT';
14
+ const ANDROID_APP_STATE_CHANGED_EVENT = 'StreamVideoAppLifecycle_APP_STATE_CHANGED';
14
15
  const isAndroid8OrAbove = _reactNative.Platform.OS === 'android' && _reactNative.Platform.Version >= 26;
15
16
 
16
17
  // Does 2 functionalities:
@@ -44,34 +45,55 @@ const AppStateListener = () => {
44
45
  };
45
46
  }, []);
46
47
  (0, _react.useEffect)(() => {
47
- // due to strange behavior in iOS when app goes to "inactive" state
48
- // we dont check for inactive states
49
- // ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
50
- const subscription = _reactNative.AppState.addEventListener('change', nextAppState => {
51
- const logger = _videoClient.videoLoggerSystem.getLogger('AppStateListener');
48
+ const logger = _videoClient.videoLoggerSystem.getLogger('AppStateListener');
49
+ const handleAppStateChange = nextAppState => {
50
+ logger.debug('AppState changed to ', nextAppState, ' from ', appState.current);
51
+
52
+ // due to strange behavior in iOS when app goes to "inactive" state
53
+ // we dont check for inactive states
54
+ // ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
52
55
  if (appState.current.match(/background/) && nextAppState === 'active') {
53
56
  if (call?.camera?.state.status === 'enabled') {
57
+ logger.debug('attempt to Disable and reenable camera as app came to foreground');
54
58
  // Android: when device is locked and resumed, the status isnt made disabled but stays enabled
55
59
  // iOS PiP: when local track was replaced by remote track, the local track shown is blank
56
60
  // as a workaround we stop the track and enable again if its already in enabled state
57
- call?.camera?.disable(true).then(() => {
58
- call?.camera?.enable();
59
- });
60
- logger.debug('Disable and reenable camera as app came to foreground');
61
+ const renableCamera = () => {
62
+ const camera = call?.camera;
63
+ if (!camera) return Promise.resolve();
64
+ return camera.disable(true).then(() => camera.enable()).catch(e => {
65
+ logger.warn('Failed to disable+reenable camera as app came to foreground', e);
66
+ });
67
+ };
68
+ if (_reactNative.Platform.OS === 'android') {
69
+ _reactNative.NativeModules.StreamVideoReactNative.isCallAliveConfigured().then(isCallAliveConfigured => {
70
+ if (!isCallAliveConfigured) {
71
+ renableCamera();
72
+ }
73
+ });
74
+ } else {
75
+ renableCamera();
76
+ }
61
77
  } else {
62
78
  if (cameraDisabledByAppState.current) {
63
- call?.camera?.resume();
64
- cameraDisabledByAppState.current = false;
65
- logger.debug('Resume camera as app came to foreground');
79
+ call?.camera?.resume().then(() => {
80
+ cameraDisabledByAppState.current = false;
81
+ logger.debug('Camera resumed as app came to foreground');
82
+ }).catch(e => {
83
+ logger.warn('Failed to resume camera as app came to foreground', e);
84
+ });
66
85
  }
67
86
  }
68
87
  appState.current = nextAppState;
69
88
  } else if (appState.current === 'active' && nextAppState.match(/background/)) {
70
89
  const disableCameraIfNeeded = () => {
71
90
  if (call?.camera?.state.status === 'enabled') {
72
- cameraDisabledByAppState.current = true;
73
- call?.camera?.disable();
74
- logger.debug('Camera disabled by app going to background');
91
+ call?.camera?.disable().then(() => {
92
+ cameraDisabledByAppState.current = true;
93
+ logger.debug('Camera disabled by app going to background');
94
+ }).catch(e => {
95
+ logger.warn('Failed to disable camera as app went to background', e);
96
+ });
75
97
  }
76
98
  };
77
99
  if (_reactNative.Platform.OS === 'android') {
@@ -91,7 +113,13 @@ const AppStateListener = () => {
91
113
  // this happens on foreground push notifications
92
114
  return;
93
115
  }
94
- disableCameraIfNeeded();
116
+ // check if keep call alive is configured
117
+ // if not, then disable the camera as we are not able to keep the call alive in the background
118
+ _reactNative.NativeModules.StreamVideoReactNative.isCallAliveConfigured().then(isCallAliveConfigured => {
119
+ if (!isCallAliveConfigured) {
120
+ disableCameraIfNeeded();
121
+ }
122
+ });
95
123
  }
96
124
  });
97
125
  } else {
@@ -105,6 +133,36 @@ const AppStateListener = () => {
105
133
  }
106
134
  appState.current = nextAppState;
107
135
  }
136
+ };
137
+
138
+ // for Android use our custom native module to listen to app state changes
139
+ // because the default react-native AppState listener works for activity and ours works for application process
140
+ if (_reactNative.Platform.OS === 'android') {
141
+ const nativeModule = _reactNative.NativeModules.StreamVideoAppLifecycle;
142
+ const eventEmitter = new _reactNative.NativeEventEmitter(nativeModule);
143
+ let cancelled = false;
144
+ nativeModule.getCurrentAppState().then(initialState => {
145
+ if (cancelled) return;
146
+ if (initialState === 'active' || initialState === 'background') {
147
+ appState.current = initialState;
148
+ }
149
+ }).catch(() => {
150
+ logger.warn('Failed to get current app state from native module');
151
+ });
152
+ const subscription = eventEmitter.addListener(ANDROID_APP_STATE_CHANGED_EVENT, nextAppState => {
153
+ if (nextAppState === 'active' || nextAppState === 'background') {
154
+ handleAppStateChange(nextAppState);
155
+ }
156
+ });
157
+ return () => {
158
+ cancelled = true;
159
+ subscription.remove();
160
+ };
161
+ }
162
+
163
+ // for iOS use the default react-native AppState listener
164
+ const subscription = _reactNative.AppState.addEventListener('change', nextAppState => {
165
+ handleAppStateChange(nextAppState);
108
166
  });
109
167
  return () => {
110
168
  subscription.remove();
@@ -1 +1 @@
1
- {"version":3,"names":["_videoReactBindings","require","_react","_reactNative","_shouldDisableIOSLocalVideoOnBackground","_rxSubjects","_videoClient","PIP_CHANGE_EVENT","isAndroid8OrAbove","Platform","OS","Version","AppStateListener","call","useCall","appState","useRef","AppState","currentState","cameraDisabledByAppState","useEffect","disablePiP","RxUtils","getCurrentValue","disablePiPMode$","logger","videoLoggerSystem","getLogger","initialPipMode","isInPiPMode$","next","debug","NativeModules","StreamVideoReactNative","isInPiPMode","then","isInPiP","eventEmitter","NativeEventEmitter","subscriptionPiPChange","addListener","remove","subscription","addEventListener","nextAppState","current","match","camera","state","status","disable","enable","resume","disableCameraIfNeeded","shouldDisableIOSLocalVideoOnBackgroundRef","exports"],"sourceRoot":"../../../../src","sources":["providers/StreamCall/AppStateListener.tsx"],"mappings":";;;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAMA,IAAAG,uCAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,YAAA,GAAAL,OAAA;AAEA,MAAMM,gBAAgB,GAAG,yCAAyC;AAElE,MAAMC,iBAAiB,GAAGC,qBAAQ,CAACC,EAAE,KAAK,SAAS,IAAID,qBAAQ,CAACE,OAAO,IAAI,EAAE;;AAE7E;AACA;AACA;AACO,MAAMC,gBAAgB,GAAGA,CAAA,KAAM;EACpC,MAAMC,IAAI,GAAG,IAAAC,2BAAO,EAAC,CAAC;EACtB,MAAMC,QAAQ,GAAG,IAAAC,aAAM,EAACC,qBAAQ,CAACC,YAAY,CAAC;EAC9C,MAAMC,wBAAwB,GAAG,IAAAH,aAAM,EAAU,KAAK,CAAC;;EAEvD;EACA,IAAAI,gBAAS,EAAC,MAAM;IACd,IAAI,CAACZ,iBAAiB,EAAE;MACtB;IACF;IAEA,MAAMa,UAAU,GAAGC,oBAAO,CAACC,eAAe,CAACC,2BAAe,CAAC;IAC3D,MAAMC,MAAM,GAAGC,8BAAiB,CAACC,SAAS,CAAC,kBAAkB,CAAC;IAC9D,MAAMC,cAAc,GAClB,CAACP,UAAU,IAAIJ,qBAAQ,CAACC,YAAY,KAAK,YAAY;IACvDW,wBAAY,CAACC,IAAI,CAACF,cAAc,CAAC;IACjCH,MAAM,CAACM,KAAK,CAAC,mCAAmC,EAAEH,cAAc,CAAC;IAEjEI,0BAAa,EAAEC,sBAAsB,EAAEC,WAAW,CAAC,CAAC,CAACC,IAAI,CACtDC,OAAmC,IAAK;MACvCP,wBAAY,CAACC,IAAI,CAAC,CAAC,CAACM,OAAO,CAAC;MAC5BX,MAAM,CAACM,KAAK,CACV,gEAAgE,EAChE,CAAC,CAACK,OACJ,CAAC;IACH,CACF,CAAC;IAED,MAAMC,YAAY,GAAG,IAAIC,+BAAkB,CACzCN,0BAAa,CAACC,sBAChB,CAAC;IAED,MAAMM,qBAAqB,GAAGF,YAAY,CAACG,WAAW,CACpDjC,gBAAgB,EACf2B,WAAoB,IAAK;MACxBL,wBAAY,CAACC,IAAI,CAACI,WAAW,CAAC;IAChC,CACF,CAAC;IAED,OAAO,MAAM;MACXK,qBAAqB,CAACE,MAAM,CAAC,CAAC;IAChC,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,IAAArB,gBAAS,EAAC,MAAM;IACd;IACA;IACA;IACA,MAAMsB,YAAY,GAAGzB,qBAAQ,CAAC0B,gBAAgB,CAAC,QAAQ,EAAGC,YAAY,IAAK;MACzE,MAAMnB,MAAM,GAAGC,8BAAiB,CAACC,SAAS,CAAC,kBAAkB,CAAC;MAC9D,IAAIZ,QAAQ,CAAC8B,OAAO,CAACC,KAAK,CAAC,YAAY,CAAC,IAAIF,YAAY,KAAK,QAAQ,EAAE;QACrE,IAAI/B,IAAI,EAAEkC,MAAM,EAAEC,KAAK,CAACC,MAAM,KAAK,SAAS,EAAE;UAC5C;UACA;UACA;UACApC,IAAI,EAAEkC,MAAM,EAAEG,OAAO,CAAC,IAAI,CAAC,CAACf,IAAI,CAAC,MAAM;YACrCtB,IAAI,EAAEkC,MAAM,EAAEI,MAAM,CAAC,CAAC;UACxB,CAAC,CAAC;UACF1B,MAAM,CAACM,KAAK,CAAC,uDAAuD,CAAC;QACvE,CAAC,MAAM;UACL,IAAIZ,wBAAwB,CAAC0B,OAAO,EAAE;YACpChC,IAAI,EAAEkC,MAAM,EAAEK,MAAM,CAAC,CAAC;YACtBjC,wBAAwB,CAAC0B,OAAO,GAAG,KAAK;YACxCpB,MAAM,CAACM,KAAK,CAAC,yCAAyC,CAAC;UACzD;QACF;QACAhB,QAAQ,CAAC8B,OAAO,GAAGD,YAAY;MACjC,CAAC,MAAM,IACL7B,QAAQ,CAAC8B,OAAO,KAAK,QAAQ,IAC7BD,YAAY,CAACE,KAAK,CAAC,YAAY,CAAC,EAChC;QACA,MAAMO,qBAAqB,GAAGA,CAAA,KAAM;UAClC,IAAIxC,IAAI,EAAEkC,MAAM,EAAEC,KAAK,CAACC,MAAM,KAAK,SAAS,EAAE;YAC5C9B,wBAAwB,CAAC0B,OAAO,GAAG,IAAI;YACvChC,IAAI,EAAEkC,MAAM,EAAEG,OAAO,CAAC,CAAC;YACvBzB,MAAM,CAACM,KAAK,CAAC,4CAA4C,CAAC;UAC5D;QACF,CAAC;QACD,IAAItB,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;UAC7B;UACA;UACA,IAAIF,iBAAiB,EAAE;YACrB;YACA,MAAMa,UAAU,GAAGC,oBAAO,CAACC,eAAe,CAACC,2BAAe,CAAC;YAC3DK,wBAAY,CAACC,IAAI,CAAC,CAACT,UAAU,CAAC;YAC9B;YACAW,0BAAa,EAAEC,sBAAsB,EAAEC,WAAW,CAAC,CAAC,CAACC,IAAI,CACtDC,OAAmC,IAAK;cACvCP,wBAAY,CAACC,IAAI,CAAC,CAAC,CAACM,OAAO,CAAC;cAC5B,IAAI,CAACA,OAAO,EAAE;gBACZ,IAAInB,qBAAQ,CAACC,YAAY,KAAK,QAAQ,EAAE;kBACtC;kBACA;kBACA;kBACA;gBACF;gBACAmC,qBAAqB,CAAC,CAAC;cACzB;YACF,CACF,CAAC;UACH,CAAC,MAAM;YACLA,qBAAqB,CAAC,CAAC;UACzB;QACF,CAAC,MAAM;UACL;UACA,IAAIC,iFAAyC,CAACT,OAAO,EAAE;YACrDQ,qBAAqB,CAAC,CAAC;UACzB;QACF;QACAtC,QAAQ,CAAC8B,OAAO,GAAGD,YAAY;MACjC;IACF,CAAC,CAAC;IAEF,OAAO,MAAM;MACXF,YAAY,CAACD,MAAM,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAAC5B,IAAI,CAAC,CAAC;EAEV,OAAO,IAAI;AACb,CAAC;AAAC0C,OAAA,CAAA3C,gBAAA,GAAAA,gBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_videoReactBindings","require","_react","_reactNative","_shouldDisableIOSLocalVideoOnBackground","_rxSubjects","_videoClient","PIP_CHANGE_EVENT","ANDROID_APP_STATE_CHANGED_EVENT","isAndroid8OrAbove","Platform","OS","Version","AppStateListener","call","useCall","appState","useRef","AppState","currentState","cameraDisabledByAppState","useEffect","disablePiP","RxUtils","getCurrentValue","disablePiPMode$","logger","videoLoggerSystem","getLogger","initialPipMode","isInPiPMode$","next","debug","NativeModules","StreamVideoReactNative","isInPiPMode","then","isInPiP","eventEmitter","NativeEventEmitter","subscriptionPiPChange","addListener","remove","handleAppStateChange","nextAppState","current","match","camera","state","status","renableCamera","Promise","resolve","disable","enable","catch","e","warn","isCallAliveConfigured","resume","disableCameraIfNeeded","shouldDisableIOSLocalVideoOnBackgroundRef","nativeModule","StreamVideoAppLifecycle","cancelled","getCurrentAppState","initialState","subscription","addEventListener","exports"],"sourceRoot":"../../../../src","sources":["providers/StreamCall/AppStateListener.tsx"],"mappings":"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","ignoreList":[]}