@stream-io/video-react-native-sdk 1.26.4 → 1.26.6

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 CHANGED
@@ -2,6 +2,28 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [1.26.6](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.26.5...@stream-io/video-react-native-sdk-1.26.6) (2025-12-30)
6
+
7
+ ### Dependency Updates
8
+
9
+ - `@stream-io/video-client` updated to version `1.39.3`
10
+ - `@stream-io/video-react-bindings` updated to version `1.12.6`
11
+
12
+ ### Bug Fixes
13
+
14
+ - replace non-compliant foreground service types ([#2058](https://github.com/GetStream/stream-video-js/issues/2058)) ([d62ca2b](https://github.com/GetStream/stream-video-js/commit/d62ca2bb6defd58e44ed1ac135b95896b590d307))
15
+
16
+ ## [1.26.5](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.26.4...@stream-io/video-react-native-sdk-1.26.5) (2025-12-23)
17
+
18
+ ### Dependency Updates
19
+
20
+ - `@stream-io/video-client` updated to version `1.39.2`
21
+ - `@stream-io/video-react-bindings` updated to version `1.12.5`
22
+
23
+ ### Bug Fixes
24
+
25
+ - do not set invalid BT devices as communication device ([#2064](https://github.com/GetStream/stream-video-js/issues/2064)) ([fe41a34](https://github.com/GetStream/stream-video-js/commit/fe41a349df41c11e05b673e6107788203e94fae9))
26
+
5
27
  ## [1.26.4](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.26.3...@stream-io/video-react-native-sdk-1.26.4) (2025-12-18)
6
28
 
7
29
  ### Dependency Updates
@@ -44,7 +44,22 @@ internal class AudioDeviceEndpointUtils {
44
44
  val endpoints: MutableList<AudioDeviceEndpoint> = mutableListOf()
45
45
  var foundWiredHeadset = false
46
46
  val omittedDevices = StringBuilder("omitting devices =[")
47
- adiArr.toList().forEach { audioDeviceInfo ->
47
+ adiArr.forEach { audioDeviceInfo ->
48
+ /**
49
+ * Only devices in a sink role can be selected via AudioManager#setCommunicationDevice
50
+ * (API 31+). We enforce this at the endpoint construction level as a safety net
51
+ * because AudioDeviceCallback can surface devices that aren't valid call endpoints.
52
+ */
53
+ val isInvalidCallEndpoint = !audioDeviceInfo.isSink
54
+
55
+ if (isInvalidCallEndpoint) {
56
+ omittedDevices.append(
57
+ "(type=[${audioDeviceInfo.type}]," +
58
+ " name=[${audioDeviceInfo.productName}]),"
59
+ )
60
+ return@forEach
61
+ }
62
+
48
63
  val endpoint = getEndpointFromAudioDeviceInfo(audioDeviceInfo)
49
64
  if (endpoint.type != AudioDeviceEndpoint.TYPE_UNKNOWN) {
50
65
  if (endpoint.type == AudioDeviceEndpoint.TYPE_WIRED_HEADSET) {
@@ -115,11 +130,8 @@ internal class AudioDeviceEndpointUtils {
115
130
  AudioDeviceInfo.TYPE_USB_HEADSET -> AudioDeviceEndpoint.TYPE_WIRED_HEADSET
116
131
  // Bluetooth Devices
117
132
  AudioDeviceInfo.TYPE_BLUETOOTH_SCO,
118
- AudioDeviceInfo.TYPE_BLUETOOTH_A2DP,
119
133
  AudioDeviceInfo.TYPE_HEARING_AID,
120
- AudioDeviceInfo.TYPE_BLE_HEADSET,
121
- AudioDeviceInfo.TYPE_BLE_SPEAKER,
122
- AudioDeviceInfo.TYPE_BLE_BROADCAST -> AudioDeviceEndpoint.TYPE_BLUETOOTH
134
+ AudioDeviceInfo.TYPE_BLE_HEADSET -> AudioDeviceEndpoint.TYPE_BLUETOOTH
123
135
  // Everything else is defaulted to TYPE_UNKNOWN
124
136
  else -> AudioDeviceEndpoint.TYPE_UNKNOWN
125
137
  }
@@ -25,6 +25,39 @@ internal class AudioManagerUtil {
25
25
  }
26
26
  }
27
27
 
28
+ /**
29
+ * Safe wrapper around [AudioManager.setCommunicationDevice] to avoid crashing the app on
30
+ * OEM-specific edge cases. On API 31+, Android requires that:
31
+ * - the device is a sink (output), and
32
+ * - the device is among [AudioManager.availableCommunicationDevices].
33
+ */
34
+ @RequiresApi(31)
35
+ fun setCommunicationDeviceSafely(
36
+ audioManager: AudioManager,
37
+ deviceInfo: AudioDeviceInfo,
38
+ ): Boolean {
39
+
40
+ if (!deviceInfo.isSink) {
41
+ Log.w(TAG, "setCommunicationDeviceSafely: rejecting non-sink device type=${deviceInfo.type}, id=${deviceInfo.id}")
42
+ return false
43
+ }
44
+
45
+ val available = audioManager.availableCommunicationDevices
46
+ val isAvailable = available.any { it.id == deviceInfo.id }
47
+ if (!isAvailable) {
48
+ Log.w(TAG, "setCommunicationDeviceSafely: device not in availableCommunicationDevices type=${deviceInfo.type}, id=${deviceInfo.id}")
49
+ return false
50
+ }
51
+
52
+ return try {
53
+ audioManager.setCommunicationDevice(deviceInfo)
54
+ true
55
+ } catch (e: IllegalArgumentException) {
56
+ Log.w(TAG, "setCommunicationDeviceSafely: failed type=${deviceInfo.type}, id=${deviceInfo.id}", e)
57
+ false
58
+ }
59
+ }
60
+
28
61
  fun isSpeakerphoneOn(audioManager: AudioManager): Boolean {
29
62
  return if (Build.VERSION.SDK_INT >= 31) {
30
63
  AudioManager31PlusImpl.isSpeakerphoneOn(audioManager)
@@ -83,7 +116,7 @@ internal class AudioManagerUtil {
83
116
  endpointMaps.nonBluetoothEndpoints.values.firstOrNull {
84
117
  it.type == deviceType
85
118
  }?.let {
86
- audioManager.setCommunicationDevice(it.deviceInfo)
119
+ setCommunicationDeviceSafely(audioManager, it.deviceInfo)
87
120
  bluetoothManager.updateDevice()
88
121
  return endpointMaps.nonBluetoothEndpoints[deviceType]
89
122
  }
@@ -92,7 +125,7 @@ internal class AudioManagerUtil {
92
125
  AudioDeviceEndpoint.TYPE_SPEAKER -> {
93
126
  val speakerDevice = endpointMaps.nonBluetoothEndpoints[AudioDeviceEndpoint.TYPE_SPEAKER]
94
127
  speakerDevice?.let {
95
- audioManager.setCommunicationDevice(it.deviceInfo)
128
+ setCommunicationDeviceSafely(audioManager, it.deviceInfo)
96
129
  bluetoothManager.updateDevice()
97
130
  return speakerDevice
98
131
  }
@@ -23,8 +23,7 @@ object CallAlivePermissionsHelper {
23
23
  "android.permission.FOREGROUND_SERVICE",
24
24
  "android.permission.FOREGROUND_SERVICE_CAMERA",
25
25
  "android.permission.FOREGROUND_SERVICE_MICROPHONE",
26
- "android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE",
27
- "android.permission.FOREGROUND_SERVICE_DATA_SYNC"
26
+ "android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"
28
27
  )
29
28
 
30
29
  val missingPermissions =
@@ -26,14 +26,13 @@ object CallAliveServiceChecker {
26
26
 
27
27
  val expectedForegroundServiceTypes =
28
28
  ServiceInfo.FOREGROUND_SERVICE_TYPE_SHORT_SERVICE or
29
- ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC or
29
+ ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK or
30
30
  ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA or
31
- ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE or
32
- ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
31
+ ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE
33
32
 
34
- val actualForegroundServiceType = serviceInfo.foregroundServiceType
33
+ val actualForegroundServiceTypes = serviceInfo.foregroundServiceType
35
34
 
36
- if (actualForegroundServiceType == expectedForegroundServiceTypes) {
35
+ if (actualForegroundServiceTypes == expectedForegroundServiceTypes) {
37
36
  return true
38
37
  } else {
39
38
  Log.w(
@@ -42,7 +41,7 @@ object CallAliveServiceChecker {
42
41
  foregroundServiceTypeToString(
43
42
  expectedForegroundServiceTypes
44
43
  )
45
- }, actual=${foregroundServiceTypeToString(actualForegroundServiceType)}"
44
+ }, actual=${foregroundServiceTypeToString(actualForegroundServiceTypes)}"
46
45
  )
47
46
  return false
48
47
  }
@@ -43,7 +43,7 @@ function getNotifeeLibNoThrowForKeepCallAlive() {
43
43
  return _lib.lib;
44
44
  }
45
45
  async function getKeepCallAliveForegroundServiceTypes() {
46
- const types = [];
46
+ const types = [AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK];
47
47
  const hasCameraPermission = await _reactNative.PermissionsAndroid.check(_reactNative.PermissionsAndroid.PERMISSIONS.CAMERA);
48
48
  if (hasCameraPermission) {
49
49
  types.push(AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_CAMERA);
@@ -52,13 +52,6 @@ async function getKeepCallAliveForegroundServiceTypes() {
52
52
  if (hasMicrophonePermission) {
53
53
  types.push(AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_MICROPHONE);
54
54
  }
55
- const hasConnectionPermission = await _reactNative.PermissionsAndroid.check(_reactNative.PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT);
56
- if (hasConnectionPermission) {
57
- types.push(AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE);
58
- }
59
- if (types.length === 0) {
60
- types.push(AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_DATA_SYNC);
61
- }
62
55
  return types;
63
56
  }
64
57
  function getIncomingCallForegroundServiceTypes() {
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_lib","_videoClient","AndroidForegroundServiceType","INSTALLATION_INSTRUCTION","getNotifeeLibThrowIfNotInstalledForPush","lib","Error","getNotifeeLibNoThrowForKeepCallAlive","logger","videoLoggerSystem","getLogger","info","getKeepCallAliveForegroundServiceTypes","types","hasCameraPermission","PermissionsAndroid","check","PERMISSIONS","CAMERA","push","FOREGROUND_SERVICE_TYPE_CAMERA","hasMicrophonePermission","RECORD_AUDIO","FOREGROUND_SERVICE_TYPE_MICROPHONE","hasConnectionPermission","BLUETOOTH_CONNECT","FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE","length","FOREGROUND_SERVICE_TYPE_DATA_SYNC","getIncomingCallForegroundServiceTypes","FOREGROUND_SERVICE_TYPE_SHORT_SERVICE"],"sourceRoot":"../../../../../../src","sources":["utils/push/libs/notifee/index.ts"],"mappings":";;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAA4D,IAIvDG,4BAA4B,0BAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAAA,OAA5BA,4BAA4B;AAAA,EAA5BA,4BAA4B;AAkBjC,MAAMC,wBAAwB,GAC5B,6FAA6F;AAExF,SAASC,uCAAuCA,CAAA,EAAG;EACxD,IAAI,CAACC,QAAG,EAAE;IACR,MAAMC,KAAK,CACT,8FAA8F,GAC5FH,wBACJ,CAAC;EACH;EACA,OAAOE,QAAG;AACZ;AAEO,SAASE,oCAAoCA,CAAA,EAAG;EACrD,IAAI,CAACF,QAAG,EAAE;IACR,MAAMG,MAAM,GAAGC,8BAAiB,CAACC,SAAS,CAAC,sBAAsB,CAAC;IAClEF,MAAM,CAACG,IAAI,CACT,GAAG,gHAAgH,GAAGR,wBAAwB,EAChJ,CAAC;EACH;EACA,OAAOE,QAAG;AACZ;AAEO,eAAeO,sCAAsCA,CAAA,EAAG;EAC7D,MAAMC,KAAqC,GAAG,EAAE;EAChD,MAAMC,mBAAmB,GAAG,MAAMC,+BAAkB,CAACC,KAAK,CACxDD,+BAAkB,CAACE,WAAW,CAACC,MACjC,CAAC;EACD,IAAIJ,mBAAmB,EAAE;IACvBD,KAAK,CAACM,IAAI,CAACjB,4BAA4B,CAACkB,8BAA8B,CAAC;EACzE;EACA,MAAMC,uBAAuB,GAAG,MAAMN,+BAAkB,CAACC,KAAK,CAC5DD,+BAAkB,CAACE,WAAW,CAACK,YACjC,CAAC;EACD,IAAID,uBAAuB,EAAE;IAC3BR,KAAK,CAACM,IAAI,CAACjB,4BAA4B,CAACqB,kCAAkC,CAAC;EAC7E;EACA,MAAMC,uBAAuB,GAAG,MAAMT,+BAAkB,CAACC,KAAK,CAC5DD,+BAAkB,CAACE,WAAW,CAACQ,iBACjC,CAAC;EACD,IAAID,uBAAuB,EAAE;IAC3BX,KAAK,CAACM,IAAI,CACRjB,4BAA4B,CAACwB,wCAC/B,CAAC;EACH;EACA,IAAIb,KAAK,CAACc,MAAM,KAAK,CAAC,EAAE;IACtBd,KAAK,CAACM,IAAI,CAACjB,4BAA4B,CAAC0B,iCAAiC,CAAC;EAC5E;EACA,OAAOf,KAAK;AACd;AAEO,SAASgB,qCAAqCA,CAAA,EAAG;EACtD,MAAMhB,KAAqC,GAAG,CAC5CX,4BAA4B,CAAC4B,qCAAqC,CACnE;EACD,OAAOjB,KAAK;AACd","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_lib","_videoClient","AndroidForegroundServiceType","INSTALLATION_INSTRUCTION","getNotifeeLibThrowIfNotInstalledForPush","lib","Error","getNotifeeLibNoThrowForKeepCallAlive","logger","videoLoggerSystem","getLogger","info","getKeepCallAliveForegroundServiceTypes","types","FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK","hasCameraPermission","PermissionsAndroid","check","PERMISSIONS","CAMERA","push","FOREGROUND_SERVICE_TYPE_CAMERA","hasMicrophonePermission","RECORD_AUDIO","FOREGROUND_SERVICE_TYPE_MICROPHONE","getIncomingCallForegroundServiceTypes","FOREGROUND_SERVICE_TYPE_SHORT_SERVICE"],"sourceRoot":"../../../../../../src","sources":["utils/push/libs/notifee/index.ts"],"mappings":";;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAA4D,IAIvDG,4BAA4B,0BAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAAA,OAA5BA,4BAA4B;AAAA,EAA5BA,4BAA4B;AAkBjC,MAAMC,wBAAwB,GAC5B,6FAA6F;AAExF,SAASC,uCAAuCA,CAAA,EAAG;EACxD,IAAI,CAACC,QAAG,EAAE;IACR,MAAMC,KAAK,CACT,8FAA8F,GAC5FH,wBACJ,CAAC;EACH;EACA,OAAOE,QAAG;AACZ;AAEO,SAASE,oCAAoCA,CAAA,EAAG;EACrD,IAAI,CAACF,QAAG,EAAE;IACR,MAAMG,MAAM,GAAGC,8BAAiB,CAACC,SAAS,CAAC,sBAAsB,CAAC;IAClEF,MAAM,CAACG,IAAI,CACT,GAAG,gHAAgH,GAAGR,wBAAwB,EAChJ,CAAC;EACH;EACA,OAAOE,QAAG;AACZ;AAEO,eAAeO,sCAAsCA,CAAA,EAAG;EAC7D,MAAMC,KAAqC,GAAG,CAC5CX,4BAA4B,CAACY,sCAAsC,CACpE;EACD,MAAMC,mBAAmB,GAAG,MAAMC,+BAAkB,CAACC,KAAK,CACxDD,+BAAkB,CAACE,WAAW,CAACC,MACjC,CAAC;EACD,IAAIJ,mBAAmB,EAAE;IACvBF,KAAK,CAACO,IAAI,CAAClB,4BAA4B,CAACmB,8BAA8B,CAAC;EACzE;EACA,MAAMC,uBAAuB,GAAG,MAAMN,+BAAkB,CAACC,KAAK,CAC5DD,+BAAkB,CAACE,WAAW,CAACK,YACjC,CAAC;EACD,IAAID,uBAAuB,EAAE;IAC3BT,KAAK,CAACO,IAAI,CAAClB,4BAA4B,CAACsB,kCAAkC,CAAC;EAC7E;EACA,OAAOX,KAAK;AACd;AAEO,SAASY,qCAAqCA,CAAA,EAAG;EACtD,MAAMZ,KAAqC,GAAG,CAC5CX,4BAA4B,CAACwB,qCAAqC,CACnE;EACD,OAAOb,KAAK;AACd","ignoreList":[]}
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- const version = exports.version = '1.26.4';
7
+ const version = exports.version = '1.26.6';
8
8
  //# sourceMappingURL=version.js.map
@@ -34,7 +34,7 @@ export function getNotifeeLibNoThrowForKeepCallAlive() {
34
34
  return lib;
35
35
  }
36
36
  export async function getKeepCallAliveForegroundServiceTypes() {
37
- const types = [];
37
+ const types = [AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK];
38
38
  const hasCameraPermission = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.CAMERA);
39
39
  if (hasCameraPermission) {
40
40
  types.push(AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_CAMERA);
@@ -43,13 +43,6 @@ export async function getKeepCallAliveForegroundServiceTypes() {
43
43
  if (hasMicrophonePermission) {
44
44
  types.push(AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_MICROPHONE);
45
45
  }
46
- const hasConnectionPermission = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT);
47
- if (hasConnectionPermission) {
48
- types.push(AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE);
49
- }
50
- if (types.length === 0) {
51
- types.push(AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_DATA_SYNC);
52
- }
53
46
  return types;
54
47
  }
55
48
  export function getIncomingCallForegroundServiceTypes() {
@@ -1 +1 @@
1
- {"version":3,"names":["PermissionsAndroid","lib","videoLoggerSystem","AndroidForegroundServiceType","INSTALLATION_INSTRUCTION","getNotifeeLibThrowIfNotInstalledForPush","Error","getNotifeeLibNoThrowForKeepCallAlive","logger","getLogger","info","getKeepCallAliveForegroundServiceTypes","types","hasCameraPermission","check","PERMISSIONS","CAMERA","push","FOREGROUND_SERVICE_TYPE_CAMERA","hasMicrophonePermission","RECORD_AUDIO","FOREGROUND_SERVICE_TYPE_MICROPHONE","hasConnectionPermission","BLUETOOTH_CONNECT","FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE","length","FOREGROUND_SERVICE_TYPE_DATA_SYNC","getIncomingCallForegroundServiceTypes","FOREGROUND_SERVICE_TYPE_SHORT_SERVICE"],"sourceRoot":"../../../../../../src","sources":["utils/push/libs/notifee/index.ts"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,cAAc;AACjD,SAASC,GAAG,QAAmB,OAAO;AACtC,SAASC,iBAAiB,QAAQ,yBAAyB;AAAC,IAIvDC,4BAA4B,0BAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAAA,OAA5BA,4BAA4B;AAAA,EAA5BA,4BAA4B;AAkBjC,MAAMC,wBAAwB,GAC5B,6FAA6F;AAE/F,OAAO,SAASC,uCAAuCA,CAAA,EAAG;EACxD,IAAI,CAACJ,GAAG,EAAE;IACR,MAAMK,KAAK,CACT,8FAA8F,GAC5FF,wBACJ,CAAC;EACH;EACA,OAAOH,GAAG;AACZ;AAEA,OAAO,SAASM,oCAAoCA,CAAA,EAAG;EACrD,IAAI,CAACN,GAAG,EAAE;IACR,MAAMO,MAAM,GAAGN,iBAAiB,CAACO,SAAS,CAAC,sBAAsB,CAAC;IAClED,MAAM,CAACE,IAAI,CACT,GAAG,gHAAgH,GAAGN,wBAAwB,EAChJ,CAAC;EACH;EACA,OAAOH,GAAG;AACZ;AAEA,OAAO,eAAeU,sCAAsCA,CAAA,EAAG;EAC7D,MAAMC,KAAqC,GAAG,EAAE;EAChD,MAAMC,mBAAmB,GAAG,MAAMb,kBAAkB,CAACc,KAAK,CACxDd,kBAAkB,CAACe,WAAW,CAACC,MACjC,CAAC;EACD,IAAIH,mBAAmB,EAAE;IACvBD,KAAK,CAACK,IAAI,CAACd,4BAA4B,CAACe,8BAA8B,CAAC;EACzE;EACA,MAAMC,uBAAuB,GAAG,MAAMnB,kBAAkB,CAACc,KAAK,CAC5Dd,kBAAkB,CAACe,WAAW,CAACK,YACjC,CAAC;EACD,IAAID,uBAAuB,EAAE;IAC3BP,KAAK,CAACK,IAAI,CAACd,4BAA4B,CAACkB,kCAAkC,CAAC;EAC7E;EACA,MAAMC,uBAAuB,GAAG,MAAMtB,kBAAkB,CAACc,KAAK,CAC5Dd,kBAAkB,CAACe,WAAW,CAACQ,iBACjC,CAAC;EACD,IAAID,uBAAuB,EAAE;IAC3BV,KAAK,CAACK,IAAI,CACRd,4BAA4B,CAACqB,wCAC/B,CAAC;EACH;EACA,IAAIZ,KAAK,CAACa,MAAM,KAAK,CAAC,EAAE;IACtBb,KAAK,CAACK,IAAI,CAACd,4BAA4B,CAACuB,iCAAiC,CAAC;EAC5E;EACA,OAAOd,KAAK;AACd;AAEA,OAAO,SAASe,qCAAqCA,CAAA,EAAG;EACtD,MAAMf,KAAqC,GAAG,CAC5CT,4BAA4B,CAACyB,qCAAqC,CACnE;EACD,OAAOhB,KAAK;AACd","ignoreList":[]}
1
+ {"version":3,"names":["PermissionsAndroid","lib","videoLoggerSystem","AndroidForegroundServiceType","INSTALLATION_INSTRUCTION","getNotifeeLibThrowIfNotInstalledForPush","Error","getNotifeeLibNoThrowForKeepCallAlive","logger","getLogger","info","getKeepCallAliveForegroundServiceTypes","types","FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK","hasCameraPermission","check","PERMISSIONS","CAMERA","push","FOREGROUND_SERVICE_TYPE_CAMERA","hasMicrophonePermission","RECORD_AUDIO","FOREGROUND_SERVICE_TYPE_MICROPHONE","getIncomingCallForegroundServiceTypes","FOREGROUND_SERVICE_TYPE_SHORT_SERVICE"],"sourceRoot":"../../../../../../src","sources":["utils/push/libs/notifee/index.ts"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,cAAc;AACjD,SAASC,GAAG,QAAmB,OAAO;AACtC,SAASC,iBAAiB,QAAQ,yBAAyB;AAAC,IAIvDC,4BAA4B,0BAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAAA,OAA5BA,4BAA4B;AAAA,EAA5BA,4BAA4B;AAkBjC,MAAMC,wBAAwB,GAC5B,6FAA6F;AAE/F,OAAO,SAASC,uCAAuCA,CAAA,EAAG;EACxD,IAAI,CAACJ,GAAG,EAAE;IACR,MAAMK,KAAK,CACT,8FAA8F,GAC5FF,wBACJ,CAAC;EACH;EACA,OAAOH,GAAG;AACZ;AAEA,OAAO,SAASM,oCAAoCA,CAAA,EAAG;EACrD,IAAI,CAACN,GAAG,EAAE;IACR,MAAMO,MAAM,GAAGN,iBAAiB,CAACO,SAAS,CAAC,sBAAsB,CAAC;IAClED,MAAM,CAACE,IAAI,CACT,GAAG,gHAAgH,GAAGN,wBAAwB,EAChJ,CAAC;EACH;EACA,OAAOH,GAAG;AACZ;AAEA,OAAO,eAAeU,sCAAsCA,CAAA,EAAG;EAC7D,MAAMC,KAAqC,GAAG,CAC5CT,4BAA4B,CAACU,sCAAsC,CACpE;EACD,MAAMC,mBAAmB,GAAG,MAAMd,kBAAkB,CAACe,KAAK,CACxDf,kBAAkB,CAACgB,WAAW,CAACC,MACjC,CAAC;EACD,IAAIH,mBAAmB,EAAE;IACvBF,KAAK,CAACM,IAAI,CAACf,4BAA4B,CAACgB,8BAA8B,CAAC;EACzE;EACA,MAAMC,uBAAuB,GAAG,MAAMpB,kBAAkB,CAACe,KAAK,CAC5Df,kBAAkB,CAACgB,WAAW,CAACK,YACjC,CAAC;EACD,IAAID,uBAAuB,EAAE;IAC3BR,KAAK,CAACM,IAAI,CAACf,4BAA4B,CAACmB,kCAAkC,CAAC;EAC7E;EACA,OAAOV,KAAK;AACd;AAEA,OAAO,SAASW,qCAAqCA,CAAA,EAAG;EACtD,MAAMX,KAAqC,GAAG,CAC5CT,4BAA4B,CAACqB,qCAAqC,CACnE;EACD,OAAOZ,KAAK;AACd","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- export const version = '1.26.4';
1
+ export const version = '1.26.6';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/utils/push/libs/notifee/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,IAAI,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC;AAE9B,aAAK,4BAA4B;IAC/B,8BAA8B,KAAK;IACnC,wCAAwC,KAAK;IAC7C,iCAAiC,IAAI;IACrC,8BAA8B,MAAM;IACpC,gCAAgC,IAAI;IACpC,sCAAsC,IAAI;IAC1C,wCAAwC,KAAK;IAC7C,wCAAwC,OAAO;IAC/C,kCAAkC,MAAM;IACxC,kCAAkC,IAAI;IACtC,wCAAwC,MAAM;IAC9C,qCAAqC,OAAO;IAC5C,mCAAmC,aAAa;IAChD,uCAAuC,OAAO;IAC9C,gCAAgC,KAAK;CACtC;AAKD,wBAAgB,uCAAuC,2CAQtD;AAED,wBAAgB,oCAAoC,uDAQnD;AAED,wBAAsB,sCAAsC,4CA0B3D;AAED,wBAAgB,qCAAqC,mCAKpD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/utils/push/libs/notifee/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,IAAI,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC;AAE9B,aAAK,4BAA4B;IAC/B,8BAA8B,KAAK;IACnC,wCAAwC,KAAK;IAC7C,iCAAiC,IAAI;IACrC,8BAA8B,MAAM;IACpC,gCAAgC,IAAI;IACpC,sCAAsC,IAAI;IAC1C,wCAAwC,KAAK;IAC7C,wCAAwC,OAAO;IAC/C,kCAAkC,MAAM;IACxC,kCAAkC,IAAI;IACtC,wCAAwC,MAAM;IAC9C,qCAAqC,OAAO;IAC5C,mCAAmC,aAAa;IAChD,uCAAuC,OAAO;IAC9C,gCAAgC,KAAK;CACtC;AAKD,wBAAgB,uCAAuC,2CAQtD;AAED,wBAAgB,oCAAoC,uDAQnD;AAED,wBAAsB,sCAAsC,4CAiB3D;AAED,wBAAgB,qCAAqC,mCAKpD"}
@@ -1,2 +1,2 @@
1
- export declare const version = "1.26.4";
1
+ export declare const version = "1.26.6";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -12,7 +12,7 @@ function getNotifeeService(isKeepCallAliveEnabled = false) {
12
12
  let foregroundServiceType = 'shortService';
13
13
  if (isKeepCallAliveEnabled) {
14
14
  foregroundServiceType =
15
- 'dataSync|camera|microphone|connectedDevice|' + foregroundServiceType;
15
+ 'mediaPlayback|camera|microphone|' + foregroundServiceType;
16
16
  }
17
17
  let head = prefixAndroidKeys({
18
18
  name: 'app.notifee.core.ForegroundService',
@@ -17,7 +17,7 @@ const withStreamVideoReactNativeSDKAndroidPermissions = (configuration, props) =
17
17
  }
18
18
  }
19
19
  if (props?.androidKeepCallAlive || props?.ringingPushNotifications) {
20
- permissions.push('android.permission.FOREGROUND_SERVICE_CAMERA', 'android.permission.FOREGROUND_SERVICE_MICROPHONE', 'android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE', 'android.permission.FOREGROUND_SERVICE_DATA_SYNC');
20
+ permissions.push('android.permission.FOREGROUND_SERVICE_CAMERA', 'android.permission.FOREGROUND_SERVICE_MICROPHONE', 'android.permission.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK');
21
21
  }
22
22
  if (props?.ringingPushNotifications?.showWhenLockedAndroid) {
23
23
  permissions.push('android.permission.USE_FULL_SCREEN_INTENT');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stream-io/video-react-native-sdk",
3
- "version": "1.26.4",
3
+ "version": "1.26.6",
4
4
  "description": "Stream Video SDK for React Native",
5
5
  "author": "https://getstream.io",
6
6
  "homepage": "https://getstream.io/video/docs/react-native/",
@@ -50,8 +50,8 @@
50
50
  "!**/.*"
51
51
  ],
52
52
  "dependencies": {
53
- "@stream-io/video-client": "1.39.1",
54
- "@stream-io/video-react-bindings": "1.12.4",
53
+ "@stream-io/video-client": "1.39.3",
54
+ "@stream-io/video-react-bindings": "1.12.6",
55
55
  "intl-pluralrules": "2.0.1",
56
56
  "lodash.merge": "^4.6.2",
57
57
  "react-native-url-polyfill": "^3.0.0",
@@ -46,7 +46,9 @@ export function getNotifeeLibNoThrowForKeepCallAlive() {
46
46
  }
47
47
 
48
48
  export async function getKeepCallAliveForegroundServiceTypes() {
49
- const types: AndroidForegroundServiceType[] = [];
49
+ const types: AndroidForegroundServiceType[] = [
50
+ AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK,
51
+ ];
50
52
  const hasCameraPermission = await PermissionsAndroid.check(
51
53
  PermissionsAndroid.PERMISSIONS.CAMERA!,
52
54
  );
@@ -59,17 +61,6 @@ export async function getKeepCallAliveForegroundServiceTypes() {
59
61
  if (hasMicrophonePermission) {
60
62
  types.push(AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_MICROPHONE);
61
63
  }
62
- const hasConnectionPermission = await PermissionsAndroid.check(
63
- PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT!,
64
- );
65
- if (hasConnectionPermission) {
66
- types.push(
67
- AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE,
68
- );
69
- }
70
- if (types.length === 0) {
71
- types.push(AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_DATA_SYNC);
72
- }
73
64
  return types;
74
65
  }
75
66
 
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '1.26.4';
1
+ export const version = '1.26.6';