@stream-io/video-react-native-sdk 1.4.22 → 1.5.1
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 +17 -0
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/java/com/streamvideo/reactnative/StreamVideoReactNativeModule.kt +114 -0
- package/dist/commonjs/providers/StreamCall.js +35 -1
- package/dist/commonjs/providers/StreamCall.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/commonjs/version.js.map +1 -1
- package/dist/module/providers/StreamCall.js +37 -3
- package/dist/module/providers/StreamCall.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/module/version.js.map +1 -1
- package/dist/typescript/providers/StreamCall.d.ts.map +1 -1
- package/dist/typescript/version.d.ts +1 -1
- package/dist/typescript/version.d.ts.map +1 -1
- package/ios/StreamVideoReactNative.m +45 -4
- package/package.json +3 -3
- package/src/providers/StreamCall.tsx +69 -3
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [1.5.1](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.5.0...@stream-io/video-react-native-sdk-1.5.1) (2024-12-20)
|
|
6
|
+
|
|
7
|
+
### Dependency Updates
|
|
8
|
+
|
|
9
|
+
* `@stream-io/video-client` updated to version `1.13.1`
|
|
10
|
+
* `@stream-io/video-react-bindings` updated to version `1.2.16`
|
|
11
|
+
## [1.5.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.4.22...@stream-io/video-react-native-sdk-1.5.0) (2024-12-20)
|
|
12
|
+
|
|
13
|
+
### Dependency Updates
|
|
14
|
+
|
|
15
|
+
* `@stream-io/video-client` updated to version `1.13.0`
|
|
16
|
+
* `@stream-io/video-react-bindings` updated to version `1.2.15`
|
|
17
|
+
|
|
18
|
+
### Features
|
|
19
|
+
|
|
20
|
+
* report low power mode and thermal info to stats ([#1583](https://github.com/GetStream/stream-video-js/issues/1583)) ([ef49cee](https://github.com/GetStream/stream-video-js/commit/ef49ceef032fc3e4bb055fbc32c2b5b18c3a24d2))
|
|
21
|
+
|
|
5
22
|
## [1.4.22](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.4.21...@stream-io/video-react-native-sdk-1.4.22) (2024-12-19)
|
|
6
23
|
|
|
7
24
|
|
|
@@ -4,8 +4,12 @@ import android.app.AppOpsManager
|
|
|
4
4
|
import android.app.PictureInPictureParams
|
|
5
5
|
import android.content.Context
|
|
6
6
|
import android.content.pm.PackageManager
|
|
7
|
+
import android.content.BroadcastReceiver
|
|
8
|
+
import android.content.Intent
|
|
9
|
+
import android.content.IntentFilter
|
|
7
10
|
import android.net.Uri
|
|
8
11
|
import android.os.Build
|
|
12
|
+
import android.os.PowerManager
|
|
9
13
|
import android.os.Process
|
|
10
14
|
import android.util.Rational
|
|
11
15
|
import androidx.annotation.RequiresApi
|
|
@@ -23,6 +27,8 @@ class StreamVideoReactNativeModule(reactContext: ReactApplicationContext) : Reac
|
|
|
23
27
|
return NAME;
|
|
24
28
|
}
|
|
25
29
|
|
|
30
|
+
private var thermalStatusListener: PowerManager.OnThermalStatusChangedListener? = null
|
|
31
|
+
|
|
26
32
|
override fun initialize() {
|
|
27
33
|
super.initialize()
|
|
28
34
|
StreamVideoReactNative.pipListeners.add { isInPictureInPictureMode ->
|
|
@@ -30,6 +36,9 @@ class StreamVideoReactNativeModule(reactContext: ReactApplicationContext) : Reac
|
|
|
30
36
|
RCTDeviceEventEmitter::class.java
|
|
31
37
|
).emit(PIP_CHANGE_EVENT, isInPictureInPictureMode)
|
|
32
38
|
}
|
|
39
|
+
|
|
40
|
+
val filter = IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED)
|
|
41
|
+
reactApplicationContext.registerReceiver(powerReceiver, filter)
|
|
33
42
|
}
|
|
34
43
|
|
|
35
44
|
@ReactMethod
|
|
@@ -81,6 +90,111 @@ class StreamVideoReactNativeModule(reactContext: ReactApplicationContext) : Reac
|
|
|
81
90
|
StreamVideoReactNative.canAutoEnterPictureInPictureMode = value
|
|
82
91
|
}
|
|
83
92
|
|
|
93
|
+
@ReactMethod
|
|
94
|
+
fun startThermalStatusUpdates(promise: Promise) {
|
|
95
|
+
try {
|
|
96
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
97
|
+
val powerManager = reactApplicationContext.getSystemService(ReactApplicationContext.POWER_SERVICE) as PowerManager
|
|
98
|
+
|
|
99
|
+
val listener = PowerManager.OnThermalStatusChangedListener { status ->
|
|
100
|
+
val thermalStatus = when (status) {
|
|
101
|
+
PowerManager.THERMAL_STATUS_NONE -> "NONE"
|
|
102
|
+
PowerManager.THERMAL_STATUS_LIGHT -> "LIGHT"
|
|
103
|
+
PowerManager.THERMAL_STATUS_MODERATE -> "MODERATE"
|
|
104
|
+
PowerManager.THERMAL_STATUS_SEVERE -> "SEVERE"
|
|
105
|
+
PowerManager.THERMAL_STATUS_CRITICAL -> "CRITICAL"
|
|
106
|
+
PowerManager.THERMAL_STATUS_EMERGENCY -> "EMERGENCY"
|
|
107
|
+
PowerManager.THERMAL_STATUS_SHUTDOWN -> "SHUTDOWN"
|
|
108
|
+
else -> "UNKNOWN"
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
reactApplicationContext
|
|
112
|
+
.getJSModule(RCTDeviceEventEmitter::class.java)
|
|
113
|
+
.emit("thermalStateDidChange", thermalStatus)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
thermalStatusListener = listener
|
|
117
|
+
powerManager.addThermalStatusListener(listener)
|
|
118
|
+
// Get initial status
|
|
119
|
+
currentThermalState(promise)
|
|
120
|
+
} else {
|
|
121
|
+
promise.resolve("NOT_SUPPORTED")
|
|
122
|
+
}
|
|
123
|
+
} catch (e: Exception) {
|
|
124
|
+
promise.reject("THERMAL_ERROR", e.message)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@ReactMethod
|
|
129
|
+
fun stopThermalStatusUpdates() {
|
|
130
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
131
|
+
val powerManager = reactApplicationContext.getSystemService(ReactApplicationContext.POWER_SERVICE) as PowerManager
|
|
132
|
+
// Store the current listener in a local val for safe null checking
|
|
133
|
+
val currentListener = thermalStatusListener
|
|
134
|
+
if (currentListener != null) {
|
|
135
|
+
powerManager.removeThermalStatusListener(currentListener)
|
|
136
|
+
thermalStatusListener = null
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@ReactMethod
|
|
142
|
+
fun currentThermalState(promise: Promise) {
|
|
143
|
+
try {
|
|
144
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
145
|
+
val powerManager = reactApplicationContext.getSystemService(ReactApplicationContext.POWER_SERVICE) as PowerManager
|
|
146
|
+
val status = powerManager.currentThermalStatus
|
|
147
|
+
val thermalStatus = when (status) {
|
|
148
|
+
PowerManager.THERMAL_STATUS_NONE -> "NONE"
|
|
149
|
+
PowerManager.THERMAL_STATUS_LIGHT -> "LIGHT"
|
|
150
|
+
PowerManager.THERMAL_STATUS_MODERATE -> "MODERATE"
|
|
151
|
+
PowerManager.THERMAL_STATUS_SEVERE -> "SEVERE"
|
|
152
|
+
PowerManager.THERMAL_STATUS_CRITICAL -> "CRITICAL"
|
|
153
|
+
PowerManager.THERMAL_STATUS_EMERGENCY -> "EMERGENCY"
|
|
154
|
+
PowerManager.THERMAL_STATUS_SHUTDOWN -> "SHUTDOWN"
|
|
155
|
+
else -> "UNKNOWN"
|
|
156
|
+
}
|
|
157
|
+
promise.resolve(thermalStatus)
|
|
158
|
+
} else {
|
|
159
|
+
promise.resolve("NOT_SUPPORTED")
|
|
160
|
+
}
|
|
161
|
+
} catch (e: Exception) {
|
|
162
|
+
promise.reject("THERMAL_ERROR", e.message)
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
private val powerReceiver = object : BroadcastReceiver() {
|
|
167
|
+
override fun onReceive(context: Context?, intent: Intent?) {
|
|
168
|
+
if (intent?.action == PowerManager.ACTION_POWER_SAVE_MODE_CHANGED) {
|
|
169
|
+
sendPowerModeEvent()
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
override fun onCatalystInstanceDestroy() {
|
|
175
|
+
super.onCatalystInstanceDestroy()
|
|
176
|
+
reactApplicationContext.unregisterReceiver(powerReceiver)
|
|
177
|
+
stopThermalStatusUpdates()
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
private fun sendPowerModeEvent() {
|
|
181
|
+
val powerManager = reactApplicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager
|
|
182
|
+
val isLowPowerMode = powerManager.isPowerSaveMode
|
|
183
|
+
reactApplicationContext
|
|
184
|
+
.getJSModule(RCTDeviceEventEmitter::class.java)
|
|
185
|
+
.emit("isLowPowerModeEnabled", isLowPowerMode)
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
@ReactMethod
|
|
189
|
+
fun isLowPowerModeEnabled(promise: Promise) {
|
|
190
|
+
try {
|
|
191
|
+
val powerManager = reactApplicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager
|
|
192
|
+
promise.resolve(powerManager.isPowerSaveMode)
|
|
193
|
+
} catch (e: Exception) {
|
|
194
|
+
promise.reject("ERROR", e.message)
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
84
198
|
private fun hasPermission(): Boolean {
|
|
85
199
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && reactApplicationContext.packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) {
|
|
86
200
|
val appOps =
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.StreamCall = void 0;
|
|
7
7
|
var _videoReactBindings = require("@stream-io/video-react-bindings");
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _videoClient = require("@stream-io/video-client");
|
|
9
10
|
var _useIosCallkeepWithCallingStateEffect = require("../hooks/push/useIosCallkeepWithCallingStateEffect");
|
|
10
11
|
var _utils = require("../utils/push/internal/utils");
|
|
11
12
|
var _useAndroidKeepCallAliveEffect = require("../hooks/useAndroidKeepCallAliveEffect");
|
|
@@ -26,7 +27,7 @@ const StreamCall = ({
|
|
|
26
27
|
}) => {
|
|
27
28
|
return /*#__PURE__*/_react.default.createElement(_videoReactBindings.StreamCallProvider, {
|
|
28
29
|
call: call
|
|
29
|
-
}, /*#__PURE__*/_react.default.createElement(AppStateListener, null), /*#__PURE__*/_react.default.createElement(AndroidKeepCallAlive, null), /*#__PURE__*/_react.default.createElement(IosInformCallkeepCallEnd, null), /*#__PURE__*/_react.default.createElement(ClearPushWSSubscriptions, null), children);
|
|
30
|
+
}, /*#__PURE__*/_react.default.createElement(AppStateListener, null), /*#__PURE__*/_react.default.createElement(AndroidKeepCallAlive, null), /*#__PURE__*/_react.default.createElement(IosInformCallkeepCallEnd, null), /*#__PURE__*/_react.default.createElement(ClearPushWSSubscriptions, null), /*#__PURE__*/_react.default.createElement(DeviceStats, null), children);
|
|
30
31
|
};
|
|
31
32
|
|
|
32
33
|
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
@@ -118,4 +119,37 @@ const ClearPushWSSubscriptions = () => {
|
|
|
118
119
|
}, []);
|
|
119
120
|
return null;
|
|
120
121
|
};
|
|
122
|
+
const eventEmitter = _reactNative.NativeModules?.StreamVideoReactNative ? new _reactNative.NativeEventEmitter(_reactNative.NativeModules?.StreamVideoReactNative) : undefined;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* This is a renderless component to get the device stats like thermal state and power saver mode.
|
|
126
|
+
*/
|
|
127
|
+
const DeviceStats = () => {
|
|
128
|
+
const {
|
|
129
|
+
useCallCallingState
|
|
130
|
+
} = (0, _videoReactBindings.useCallStateHooks)();
|
|
131
|
+
const callingState = useCallCallingState();
|
|
132
|
+
(0, _react.useEffect)(() => {
|
|
133
|
+
if (callingState !== _videoClient.CallingState.JOINED) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
_reactNative.NativeModules?.StreamVideoReactNative.isLowPowerModeEnabled().then(initialPowerMode => (0, _videoClient.setPowerState)(initialPowerMode));
|
|
137
|
+
let powerModeSubscription = eventEmitter?.addListener('isLowPowerModeEnabled', isLowPowerMode => (0, _videoClient.setPowerState)(isLowPowerMode));
|
|
138
|
+
_reactNative.NativeModules?.StreamVideoReactNative.currentThermalState().then(initialState => (0, _videoClient.setThermalState)(initialState));
|
|
139
|
+
let thermalStateSubscription = eventEmitter?.addListener('thermalStateDidChange', thermalState => (0, _videoClient.setThermalState)(thermalState));
|
|
140
|
+
|
|
141
|
+
// on android we need to explicitly start and stop the thermal status updates
|
|
142
|
+
if (_reactNative.Platform.OS === 'android') {
|
|
143
|
+
_reactNative.NativeModules?.StreamVideoReactNative.startThermalStatusUpdates();
|
|
144
|
+
}
|
|
145
|
+
return () => {
|
|
146
|
+
powerModeSubscription?.remove();
|
|
147
|
+
thermalStateSubscription?.remove();
|
|
148
|
+
if (_reactNative.Platform.OS === 'android') {
|
|
149
|
+
_reactNative.NativeModules?.StreamVideoReactNative.stopThermalStatusUpdates();
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
}, [callingState]);
|
|
153
|
+
return null;
|
|
154
|
+
};
|
|
121
155
|
//# sourceMappingURL=StreamCall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_videoReactBindings","require","_react","_interopRequireWildcard","_useIosCallkeepWithCallingStateEffect","_utils","_useAndroidKeepCallAliveEffect","_reactNative","_shouldDisableIOSLocalVideoOnBackground","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","StreamCall","children","createElement","StreamCallProvider","AppStateListener","AndroidKeepCallAlive","IosInformCallkeepCallEnd","ClearPushWSSubscriptions","exports","useCall","appState","useRef","AppState","currentState","useEffect","subscription","addEventListener","nextAppState","current","match","camera","state","status","Platform","OS","disable","then","enable","resume","NativeModules","StreamVideoReactNative","isInPiPMode","isInPiP","shouldDisableIOSLocalVideoOnBackgroundRef","remove","useAndroidKeepCallAliveEffect","useIosCallkeepWithCallingStateEffect","clearPushWSEventSubscriptions","canAddPushWSSubscriptionsRef"],"sourceRoot":"../../../src","sources":["providers/StreamCall.tsx"],"mappings":";;;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["_videoReactBindings","require","_react","_interopRequireWildcard","_videoClient","_useIosCallkeepWithCallingStateEffect","_utils","_useAndroidKeepCallAliveEffect","_reactNative","_shouldDisableIOSLocalVideoOnBackground","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","StreamCall","children","createElement","StreamCallProvider","AppStateListener","AndroidKeepCallAlive","IosInformCallkeepCallEnd","ClearPushWSSubscriptions","DeviceStats","exports","useCall","appState","useRef","AppState","currentState","useEffect","subscription","addEventListener","nextAppState","current","match","camera","state","status","Platform","OS","disable","then","enable","resume","NativeModules","StreamVideoReactNative","isInPiPMode","isInPiP","shouldDisableIOSLocalVideoOnBackgroundRef","remove","useAndroidKeepCallAliveEffect","useIosCallkeepWithCallingStateEffect","clearPushWSEventSubscriptions","canAddPushWSSubscriptionsRef","eventEmitter","NativeEventEmitter","undefined","useCallCallingState","useCallStateHooks","callingState","CallingState","JOINED","isLowPowerModeEnabled","initialPowerMode","setPowerState","powerModeSubscription","addListener","isLowPowerMode","currentThermalState","initialState","setThermalState","thermalStateSubscription","thermalState","startThermalStatusUpdates","stopThermalStatusUpdates"],"sourceRoot":"../../../src","sources":["providers/StreamCall.tsx"],"mappings":"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","ignoreList":[]}
|
package/dist/commonjs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["version","exports"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAG,
|
|
1
|
+
{"version":3,"names":["version","exports"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAG,OAAO","ignoreList":[]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { StreamCallProvider, useCall } from '@stream-io/video-react-bindings';
|
|
1
|
+
import { StreamCallProvider, useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
|
|
2
2
|
import React, { useEffect, useRef } from 'react';
|
|
3
|
+
import { CallingState, setThermalState, setPowerState } from '@stream-io/video-client';
|
|
3
4
|
import { useIosCallkeepWithCallingStateEffect } from '../hooks/push/useIosCallkeepWithCallingStateEffect';
|
|
4
5
|
import { canAddPushWSSubscriptionsRef, clearPushWSEventSubscriptions } from '../utils/push/internal/utils';
|
|
5
6
|
import { useAndroidKeepCallAliveEffect } from '../hooks/useAndroidKeepCallAliveEffect';
|
|
6
|
-
import { AppState, NativeModules, Platform } from 'react-native';
|
|
7
|
+
import { AppState, NativeModules, Platform, NativeEventEmitter } from 'react-native';
|
|
7
8
|
import { shouldDisableIOSLocalVideoOnBackgroundRef } from '../utils/internal/shouldDisableIOSLocalVideoOnBackground';
|
|
8
9
|
/**
|
|
9
10
|
* StreamCall is a wrapper component that orchestrates the call life cycle logic and
|
|
@@ -18,7 +19,7 @@ export const StreamCall = ({
|
|
|
18
19
|
}) => {
|
|
19
20
|
return /*#__PURE__*/React.createElement(StreamCallProvider, {
|
|
20
21
|
call: call
|
|
21
|
-
}, /*#__PURE__*/React.createElement(AppStateListener, null), /*#__PURE__*/React.createElement(AndroidKeepCallAlive, null), /*#__PURE__*/React.createElement(IosInformCallkeepCallEnd, null), /*#__PURE__*/React.createElement(ClearPushWSSubscriptions, null), children);
|
|
22
|
+
}, /*#__PURE__*/React.createElement(AppStateListener, null), /*#__PURE__*/React.createElement(AndroidKeepCallAlive, null), /*#__PURE__*/React.createElement(IosInformCallkeepCallEnd, null), /*#__PURE__*/React.createElement(ClearPushWSSubscriptions, null), /*#__PURE__*/React.createElement(DeviceStats, null), children);
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
@@ -109,4 +110,37 @@ const ClearPushWSSubscriptions = () => {
|
|
|
109
110
|
}, []);
|
|
110
111
|
return null;
|
|
111
112
|
};
|
|
113
|
+
const eventEmitter = NativeModules?.StreamVideoReactNative ? new NativeEventEmitter(NativeModules?.StreamVideoReactNative) : undefined;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* This is a renderless component to get the device stats like thermal state and power saver mode.
|
|
117
|
+
*/
|
|
118
|
+
const DeviceStats = () => {
|
|
119
|
+
const {
|
|
120
|
+
useCallCallingState
|
|
121
|
+
} = useCallStateHooks();
|
|
122
|
+
const callingState = useCallCallingState();
|
|
123
|
+
useEffect(() => {
|
|
124
|
+
if (callingState !== CallingState.JOINED) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
NativeModules?.StreamVideoReactNative.isLowPowerModeEnabled().then(initialPowerMode => setPowerState(initialPowerMode));
|
|
128
|
+
let powerModeSubscription = eventEmitter?.addListener('isLowPowerModeEnabled', isLowPowerMode => setPowerState(isLowPowerMode));
|
|
129
|
+
NativeModules?.StreamVideoReactNative.currentThermalState().then(initialState => setThermalState(initialState));
|
|
130
|
+
let thermalStateSubscription = eventEmitter?.addListener('thermalStateDidChange', thermalState => setThermalState(thermalState));
|
|
131
|
+
|
|
132
|
+
// on android we need to explicitly start and stop the thermal status updates
|
|
133
|
+
if (Platform.OS === 'android') {
|
|
134
|
+
NativeModules?.StreamVideoReactNative.startThermalStatusUpdates();
|
|
135
|
+
}
|
|
136
|
+
return () => {
|
|
137
|
+
powerModeSubscription?.remove();
|
|
138
|
+
thermalStateSubscription?.remove();
|
|
139
|
+
if (Platform.OS === 'android') {
|
|
140
|
+
NativeModules?.StreamVideoReactNative.stopThermalStatusUpdates();
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
}, [callingState]);
|
|
144
|
+
return null;
|
|
145
|
+
};
|
|
112
146
|
//# sourceMappingURL=StreamCall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StreamCallProvider","useCall","React","useEffect","useRef","useIosCallkeepWithCallingStateEffect","canAddPushWSSubscriptionsRef","clearPushWSEventSubscriptions","useAndroidKeepCallAliveEffect","AppState","NativeModules","Platform","shouldDisableIOSLocalVideoOnBackgroundRef","StreamCall","call","children","createElement","AppStateListener","AndroidKeepCallAlive","IosInformCallkeepCallEnd","ClearPushWSSubscriptions","appState","currentState","subscription","addEventListener","nextAppState","current","match","camera","state","status","OS","disable","then","enable","resume","StreamVideoReactNative","isInPiPMode","isInPiP","remove"],"sourceRoot":"../../../src","sources":["providers/StreamCall.tsx"],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"names":["StreamCallProvider","useCall","useCallStateHooks","React","useEffect","useRef","CallingState","setThermalState","setPowerState","useIosCallkeepWithCallingStateEffect","canAddPushWSSubscriptionsRef","clearPushWSEventSubscriptions","useAndroidKeepCallAliveEffect","AppState","NativeModules","Platform","NativeEventEmitter","shouldDisableIOSLocalVideoOnBackgroundRef","StreamCall","call","children","createElement","AppStateListener","AndroidKeepCallAlive","IosInformCallkeepCallEnd","ClearPushWSSubscriptions","DeviceStats","appState","currentState","subscription","addEventListener","nextAppState","current","match","camera","state","status","OS","disable","then","enable","resume","StreamVideoReactNative","isInPiPMode","isInPiP","remove","eventEmitter","undefined","useCallCallingState","callingState","JOINED","isLowPowerModeEnabled","initialPowerMode","powerModeSubscription","addListener","isLowPowerMode","currentThermalState","initialState","thermalStateSubscription","thermalState","startThermalStatusUpdates","stopThermalStatusUpdates"],"sourceRoot":"../../../src","sources":["providers/StreamCall.tsx"],"mappings":"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","ignoreList":[]}
|
package/dist/module/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '1.
|
|
1
|
+
export const version = '1.5.1';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["version"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":"AAAA,OAAO,MAAMA,OAAO,GAAG,
|
|
1
|
+
{"version":3,"names":["version"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":"AAAA,OAAO,MAAMA,OAAO,GAAG,OAAO","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamCall.d.ts","sourceRoot":"","sources":["../../../src/providers/StreamCall.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StreamCall.d.ts","sourceRoot":"","sources":["../../../src/providers/StreamCall.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAqB,MAAM,OAAO,CAAC;AACpE,OAAO,EACL,IAAI,EAIL,MAAM,yBAAyB,CAAC;AAejC,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AACF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,wBAGpB,iBAAiB,CAAC,eAAe,CAAC,sBAWpC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "1.
|
|
1
|
+
export declare const version = "1.5.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
|
@@ -17,7 +17,7 @@ void broadcastNotificationCallback(CFNotificationCenterRef center,
|
|
|
17
17
|
StreamVideoReactNative *this = (__bridge StreamVideoReactNative*)observer;
|
|
18
18
|
NSString *eventName = (__bridge NSString*)name;
|
|
19
19
|
[this screenShareEventReceived: eventName];
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
@implementation StreamVideoReactNative
|
|
@@ -44,10 +44,21 @@ RCT_EXPORT_MODULE();
|
|
|
44
44
|
_notificationCenter = CFNotificationCenterGetDarwinNotifyCenter();
|
|
45
45
|
[self setupObserver];
|
|
46
46
|
}
|
|
47
|
-
|
|
47
|
+
if (self) {
|
|
48
|
+
[UIDevice currentDevice].batteryMonitoringEnabled = YES;
|
|
49
|
+
}
|
|
50
|
+
|
|
48
51
|
return self;
|
|
49
52
|
}
|
|
50
53
|
|
|
54
|
+
RCT_EXPORT_METHOD(isLowPowerModeEnabled:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
55
|
+
resolve(@([NSProcessInfo processInfo].lowPowerModeEnabled));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
RCT_EXPORT_METHOD(currentThermalState:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
59
|
+
resolve(@([NSProcessInfo processInfo].thermalState));
|
|
60
|
+
}
|
|
61
|
+
|
|
51
62
|
-(void)dealloc {
|
|
52
63
|
[self clearObserver];
|
|
53
64
|
}
|
|
@@ -81,10 +92,40 @@ RCT_EXPORT_MODULE();
|
|
|
81
92
|
|
|
82
93
|
-(void)startObserving {
|
|
83
94
|
hasListeners = YES;
|
|
95
|
+
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
96
|
+
selector:@selector(powerModeDidChange)
|
|
97
|
+
name:NSProcessInfoPowerStateDidChangeNotification
|
|
98
|
+
object:nil];
|
|
99
|
+
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
100
|
+
selector:@selector(thermalStateDidChange)
|
|
101
|
+
name:NSProcessInfoThermalStateDidChangeNotification
|
|
102
|
+
object:nil];
|
|
84
103
|
}
|
|
85
104
|
|
|
86
105
|
-(void)stopObserving {
|
|
87
106
|
hasListeners = NO;
|
|
107
|
+
[[NSNotificationCenter defaultCenter] removeObserver:self
|
|
108
|
+
name:NSProcessInfoPowerStateDidChangeNotification
|
|
109
|
+
object:nil];
|
|
110
|
+
[[NSNotificationCenter defaultCenter] removeObserver:self
|
|
111
|
+
name:NSProcessInfoThermalStateDidChangeNotification
|
|
112
|
+
object:nil];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
- (void)powerModeDidChange {
|
|
116
|
+
if (!hasListeners) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
BOOL lowPowerEnabled = [NSProcessInfo processInfo].lowPowerModeEnabled;
|
|
120
|
+
[self sendEventWithName:@"isLowPowerModeEnabled" body:@(lowPowerEnabled)];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
- (void)thermalStateDidChange {
|
|
124
|
+
if (!hasListeners) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
NSInteger thermalState = [NSProcessInfo processInfo].thermalState;
|
|
128
|
+
[self sendEventWithName:@"thermalStateDidChange" body:@(thermalState)];
|
|
88
129
|
}
|
|
89
130
|
|
|
90
131
|
-(void)screenShareEventReceived:(NSString*)event {
|
|
@@ -113,11 +154,11 @@ RCT_EXPORT_METHOD(getIncomingCallUUid:(NSString *)cid
|
|
|
113
154
|
} else {
|
|
114
155
|
reject(@"access_failure", @"requested incoming call found", nil);
|
|
115
156
|
}
|
|
116
|
-
|
|
157
|
+
|
|
117
158
|
}
|
|
118
159
|
|
|
119
160
|
-(NSArray<NSString *> *)supportedEvents {
|
|
120
|
-
return @[@"StreamVideoReactNative_Ios_Screenshare_Event"];
|
|
161
|
+
return @[@"StreamVideoReactNative_Ios_Screenshare_Event", @"isLowPowerModeEnabled", @"thermalStateDidChange"];
|
|
121
162
|
}
|
|
122
163
|
|
|
123
164
|
@end
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/video-react-native-sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"packageManager": "yarn@3.2.4",
|
|
5
5
|
"main": "dist/commonjs/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"!**/.*"
|
|
47
47
|
],
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@stream-io/video-client": "1.
|
|
50
|
-
"@stream-io/video-react-bindings": "1.2.
|
|
49
|
+
"@stream-io/video-client": "1.13.1",
|
|
50
|
+
"@stream-io/video-react-bindings": "1.2.16",
|
|
51
51
|
"intl-pluralrules": "2.0.1",
|
|
52
52
|
"lodash.merge": "^4.6.2",
|
|
53
53
|
"react-native-url-polyfill": "1.3.0",
|
|
@@ -1,13 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
StreamCallProvider,
|
|
3
|
+
useCall,
|
|
4
|
+
useCallStateHooks,
|
|
5
|
+
} from '@stream-io/video-react-bindings';
|
|
2
6
|
import React, { PropsWithChildren, useEffect, useRef } from 'react';
|
|
3
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
Call,
|
|
9
|
+
CallingState,
|
|
10
|
+
setThermalState,
|
|
11
|
+
setPowerState,
|
|
12
|
+
} from '@stream-io/video-client';
|
|
4
13
|
import { useIosCallkeepWithCallingStateEffect } from '../hooks/push/useIosCallkeepWithCallingStateEffect';
|
|
5
14
|
import {
|
|
6
15
|
canAddPushWSSubscriptionsRef,
|
|
7
16
|
clearPushWSEventSubscriptions,
|
|
8
17
|
} from '../utils/push/internal/utils';
|
|
9
18
|
import { useAndroidKeepCallAliveEffect } from '../hooks/useAndroidKeepCallAliveEffect';
|
|
10
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
AppState,
|
|
21
|
+
NativeModules,
|
|
22
|
+
Platform,
|
|
23
|
+
NativeEventEmitter,
|
|
24
|
+
} from 'react-native';
|
|
11
25
|
import { shouldDisableIOSLocalVideoOnBackgroundRef } from '../utils/internal/shouldDisableIOSLocalVideoOnBackground';
|
|
12
26
|
|
|
13
27
|
export type StreamCallProps = {
|
|
@@ -34,6 +48,7 @@ export const StreamCall = ({
|
|
|
34
48
|
<AndroidKeepCallAlive />
|
|
35
49
|
<IosInformCallkeepCallEnd />
|
|
36
50
|
<ClearPushWSSubscriptions />
|
|
51
|
+
<DeviceStats />
|
|
37
52
|
{children}
|
|
38
53
|
</StreamCallProvider>
|
|
39
54
|
);
|
|
@@ -137,3 +152,54 @@ const ClearPushWSSubscriptions = () => {
|
|
|
137
152
|
}, []);
|
|
138
153
|
return null;
|
|
139
154
|
};
|
|
155
|
+
|
|
156
|
+
const eventEmitter = NativeModules?.StreamVideoReactNative
|
|
157
|
+
? new NativeEventEmitter(NativeModules?.StreamVideoReactNative)
|
|
158
|
+
: undefined;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* This is a renderless component to get the device stats like thermal state and power saver mode.
|
|
162
|
+
*/
|
|
163
|
+
const DeviceStats = () => {
|
|
164
|
+
const { useCallCallingState } = useCallStateHooks();
|
|
165
|
+
const callingState = useCallCallingState();
|
|
166
|
+
|
|
167
|
+
useEffect(() => {
|
|
168
|
+
if (callingState !== CallingState.JOINED) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
NativeModules?.StreamVideoReactNative.isLowPowerModeEnabled().then(
|
|
173
|
+
(initialPowerMode: boolean) => setPowerState(initialPowerMode)
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
let powerModeSubscription = eventEmitter?.addListener(
|
|
177
|
+
'isLowPowerModeEnabled',
|
|
178
|
+
(isLowPowerMode: boolean) => setPowerState(isLowPowerMode)
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
NativeModules?.StreamVideoReactNative.currentThermalState().then(
|
|
182
|
+
(initialState: string) => setThermalState(initialState)
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
let thermalStateSubscription = eventEmitter?.addListener(
|
|
186
|
+
'thermalStateDidChange',
|
|
187
|
+
(thermalState: string) => setThermalState(thermalState)
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
// on android we need to explicitly start and stop the thermal status updates
|
|
191
|
+
if (Platform.OS === 'android') {
|
|
192
|
+
NativeModules?.StreamVideoReactNative.startThermalStatusUpdates();
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return () => {
|
|
196
|
+
powerModeSubscription?.remove();
|
|
197
|
+
thermalStateSubscription?.remove();
|
|
198
|
+
if (Platform.OS === 'android') {
|
|
199
|
+
NativeModules?.StreamVideoReactNative.stopThermalStatusUpdates();
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
}, [callingState]);
|
|
203
|
+
|
|
204
|
+
return null;
|
|
205
|
+
};
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '1.
|
|
1
|
+
export const version = '1.5.1';
|