@100mslive/react-native-hms 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +3 -2
- package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +189 -55
- package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +1 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +94 -38
- package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +446 -107
- package/android/src/main/java/com/reactnativehmssdk/HMSSDKViewManager.kt +5 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSView.kt +42 -25
- package/android/src/main/res/layout/hms_view.xml +2 -2
- package/ios/HMSConstants.swift +33 -0
- package/ios/HMSDecoder.swift +372 -157
- package/ios/HMSHelper.swift +44 -7
- package/ios/HMSManager.m +17 -2
- package/ios/HMSManager.swift +177 -75
- package/ios/HMSRNSDK.swift +641 -199
- package/ios/HMSView.m +1 -0
- package/ios/HMSView.swift +21 -19
- package/lib/commonjs/classes/HMSAudioTrackSettings.js +14 -0
- package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSCameraControl.js +28 -0
- package/lib/commonjs/classes/HMSCameraControl.js.map +1 -0
- package/lib/commonjs/classes/HMSEncoder.js +97 -14
- package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
- package/lib/commonjs/classes/HMSIOSAudioMode.js +13 -0
- package/lib/commonjs/classes/HMSIOSAudioMode.js.map +1 -0
- package/lib/commonjs/classes/HMSLayer.js +14 -0
- package/lib/commonjs/classes/HMSLayer.js.map +1 -0
- package/lib/commonjs/classes/HMSLocalVideoStats.js +11 -0
- package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -1
- package/lib/commonjs/classes/HMSPeer.js +1 -1
- package/lib/commonjs/classes/HMSPeer.js.map +1 -1
- package/lib/commonjs/classes/HMSPublishSettings.js +2 -0
- package/lib/commonjs/classes/HMSPublishSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSQualityLimitationReason.js +16 -0
- package/lib/commonjs/classes/HMSQualityLimitationReason.js.map +1 -0
- package/lib/commonjs/classes/HMSQualityLimitationReasons.js +27 -0
- package/lib/commonjs/classes/HMSQualityLimitationReasons.js.map +1 -0
- package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
- package/lib/commonjs/classes/HMSRemoteVideoTrack.js +39 -3
- package/lib/commonjs/classes/HMSRemoteVideoTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSRoom.js +4 -0
- package/lib/commonjs/classes/HMSRoom.js.map +1 -1
- package/lib/commonjs/classes/HMSRoomUpdate.js +1 -0
- package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
- package/lib/commonjs/classes/HMSSDK.js +82 -45
- package/lib/commonjs/classes/HMSSDK.js.map +1 -1
- package/lib/commonjs/classes/HMSSessionStore.js +173 -0
- package/lib/commonjs/classes/HMSSessionStore.js.map +1 -0
- package/lib/commonjs/classes/HMSSimulcastLayerDefinition.js +19 -0
- package/lib/commonjs/classes/HMSSimulcastLayerDefinition.js.map +1 -0
- package/lib/commonjs/classes/HMSSimulcastLayerSettingsPolicy.js +23 -0
- package/lib/commonjs/classes/HMSSimulcastLayerSettingsPolicy.js.map +1 -0
- package/lib/commonjs/classes/HMSSimulcastSettings.js +5 -4
- package/lib/commonjs/classes/HMSSimulcastSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSSimulcastSettingsPolicy.js +17 -0
- package/lib/commonjs/classes/HMSSimulcastSettingsPolicy.js.map +1 -0
- package/lib/commonjs/classes/HMSSubscribeDegradationPolicy.js +21 -0
- package/lib/commonjs/classes/HMSSubscribeDegradationPolicy.js.map +1 -0
- package/lib/commonjs/classes/HMSSubscribeSettings.js +2 -0
- package/lib/commonjs/classes/HMSSubscribeSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSUpdateListenerActions.js +8 -0
- package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
- package/lib/commonjs/classes/HMSVideoResolution.js.map +1 -1
- package/lib/commonjs/classes/HMSVideoTrackSettings.js +5 -0
- package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
- package/lib/commonjs/classes/HmsView.js +2 -0
- package/lib/commonjs/classes/HmsView.js.map +1 -1
- package/lib/commonjs/index.js +72 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/emitter/EventEmitter.js +162 -0
- package/lib/commonjs/utils/emitter/EventEmitter.js.map +1 -0
- package/lib/commonjs/utils/emitter/_EmitterSubscription.js +46 -0
- package/lib/commonjs/utils/emitter/_EmitterSubscription.js.map +1 -0
- package/lib/commonjs/utils/emitter/_EventSubscription.js +36 -0
- package/lib/commonjs/utils/emitter/_EventSubscription.js.map +1 -0
- package/lib/commonjs/utils/emitter/_EventSubscriptionVendor.js +90 -0
- package/lib/commonjs/utils/emitter/_EventSubscriptionVendor.js.map +1 -0
- package/lib/commonjs/utils/index.js +17 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/module/classes/HMSAudioTrackSettings.js +14 -0
- package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
- package/lib/module/classes/HMSCameraControl.js +21 -0
- package/lib/module/classes/HMSCameraControl.js.map +1 -0
- package/lib/module/classes/HMSEncoder.js +97 -14
- package/lib/module/classes/HMSEncoder.js.map +1 -1
- package/lib/module/classes/HMSIOSAudioMode.js +6 -0
- package/lib/module/classes/HMSIOSAudioMode.js.map +1 -0
- package/lib/module/classes/HMSLayer.js +7 -0
- package/lib/module/classes/HMSLayer.js.map +1 -0
- package/lib/module/classes/HMSLocalVideoStats.js +11 -0
- package/lib/module/classes/HMSLocalVideoStats.js.map +1 -1
- package/lib/module/classes/HMSPeer.js +1 -1
- package/lib/module/classes/HMSPeer.js.map +1 -1
- package/lib/module/classes/HMSPublishSettings.js +2 -0
- package/lib/module/classes/HMSPublishSettings.js.map +1 -1
- package/lib/module/classes/HMSQualityLimitationReason.js +9 -0
- package/lib/module/classes/HMSQualityLimitationReason.js.map +1 -0
- package/lib/module/classes/HMSQualityLimitationReasons.js +20 -0
- package/lib/module/classes/HMSQualityLimitationReasons.js.map +1 -0
- package/lib/module/classes/HMSRemotePeer.js.map +1 -1
- package/lib/module/classes/HMSRemoteVideoTrack.js +39 -3
- package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
- package/lib/module/classes/HMSRoom.js +4 -0
- package/lib/module/classes/HMSRoom.js.map +1 -1
- package/lib/module/classes/HMSRoomUpdate.js +1 -0
- package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
- package/lib/module/classes/HMSSDK.js +83 -45
- package/lib/module/classes/HMSSDK.js.map +1 -1
- package/lib/module/classes/HMSSessionStore.js +166 -0
- package/lib/module/classes/HMSSessionStore.js.map +1 -0
- package/lib/module/classes/HMSSimulcastLayerDefinition.js +12 -0
- package/lib/module/classes/HMSSimulcastLayerDefinition.js.map +1 -0
- package/lib/module/classes/HMSSimulcastLayerSettingsPolicy.js +16 -0
- package/lib/module/classes/HMSSimulcastLayerSettingsPolicy.js.map +1 -0
- package/lib/module/classes/HMSSimulcastSettings.js +5 -4
- package/lib/module/classes/HMSSimulcastSettings.js.map +1 -1
- package/lib/module/classes/HMSSimulcastSettingsPolicy.js +10 -0
- package/lib/module/classes/HMSSimulcastSettingsPolicy.js.map +1 -0
- package/lib/module/classes/HMSSubscribeDegradationPolicy.js +14 -0
- package/lib/module/classes/HMSSubscribeDegradationPolicy.js.map +1 -0
- package/lib/module/classes/HMSSubscribeSettings.js +2 -0
- package/lib/module/classes/HMSSubscribeSettings.js.map +1 -1
- package/lib/module/classes/HMSUpdateListenerActions.js +8 -0
- package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
- package/lib/module/classes/HMSVideoResolution.js.map +1 -1
- package/lib/module/classes/HMSVideoTrackSettings.js +5 -0
- package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
- package/lib/module/classes/HmsView.js +2 -0
- package/lib/module/classes/HmsView.js.map +1 -1
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/emitter/EventEmitter.js +151 -0
- package/lib/module/utils/emitter/EventEmitter.js.map +1 -0
- package/lib/module/utils/emitter/_EmitterSubscription.js +39 -0
- package/lib/module/utils/emitter/_EmitterSubscription.js.map +1 -0
- package/lib/module/utils/emitter/_EventSubscription.js +29 -0
- package/lib/module/utils/emitter/_EventSubscription.js.map +1 -0
- package/lib/module/utils/emitter/_EventSubscriptionVendor.js +83 -0
- package/lib/module/utils/emitter/_EventSubscriptionVendor.js.map +1 -0
- package/lib/module/utils/index.js +2 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/typescript/classes/HMSAudioTrackSettings.d.ts +14 -0
- package/lib/typescript/classes/HMSCameraControl.d.ts +9 -0
- package/lib/typescript/classes/HMSEncoder.d.ts +13 -1
- package/lib/typescript/classes/HMSIOSAudioMode.d.ts +4 -0
- package/lib/typescript/classes/HMSLayer.d.ts +5 -0
- package/lib/typescript/classes/HMSLocalVideoStats.d.ts +6 -0
- package/lib/typescript/classes/HMSPeer.d.ts +1 -1
- package/lib/typescript/classes/HMSPublishSettings.d.ts +3 -0
- package/lib/typescript/classes/HMSQualityLimitationReason.d.ts +7 -0
- package/lib/typescript/classes/HMSQualityLimitationReasons.d.ts +17 -0
- package/lib/typescript/classes/HMSRemotePeer.d.ts +0 -1
- package/lib/typescript/classes/HMSRemoteVideoTrack.d.ts +6 -2
- package/lib/typescript/classes/HMSRoomUpdate.d.ts +2 -1
- package/lib/typescript/classes/HMSSDK.d.ts +21 -31
- package/lib/typescript/classes/HMSSessionStore.d.ts +63 -0
- package/lib/typescript/classes/HMSSimulcastLayerDefinition.d.ts +10 -0
- package/lib/typescript/classes/HMSSimulcastLayerSettingsPolicy.d.ts +12 -0
- package/lib/typescript/classes/HMSSimulcastSettings.d.ts +7 -3
- package/lib/typescript/classes/HMSSimulcastSettingsPolicy.d.ts +7 -0
- package/lib/typescript/classes/HMSSubscribeDegradationPolicy.d.ts +10 -0
- package/lib/typescript/classes/HMSSubscribeSettings.d.ts +5 -2
- package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +9 -1
- package/lib/typescript/classes/HMSVideoResolution.d.ts +2 -2
- package/lib/typescript/classes/HMSVideoTrackSettings.d.ts +5 -0
- package/lib/typescript/classes/HmsView.d.ts +2 -2
- package/lib/typescript/index.d.ts +7 -0
- package/lib/typescript/utils/emitter/EventEmitter.d.ts +91 -0
- package/lib/typescript/utils/emitter/_EmitterSubscription.d.ts +29 -0
- package/lib/typescript/utils/emitter/_EventSubscription.d.ts +19 -0
- package/lib/typescript/utils/emitter/_EventSubscriptionVendor.d.ts +44 -0
- package/lib/typescript/utils/index.d.ts +1 -0
- package/package.json +21 -2
- package/sdk-versions.json +3 -3
- package/src/classes/HMSAudioTrackSettings.ts +16 -0
- package/src/classes/HMSCameraControl.ts +21 -0
- package/src/classes/HMSEncoder.ts +126 -11
- package/src/classes/HMSIOSAudioMode.ts +4 -0
- package/src/classes/HMSLayer.ts +5 -0
- package/src/classes/HMSLocalVideoStats.ts +21 -0
- package/src/classes/HMSPeer.ts +1 -1
- package/src/classes/HMSPublishSettings.ts +4 -0
- package/src/classes/HMSQualityLimitationReason.ts +7 -0
- package/src/classes/HMSQualityLimitationReasons.ts +27 -0
- package/src/classes/HMSRemotePeer.ts +0 -1
- package/src/classes/HMSRemoteVideoTrack.ts +52 -4
- package/src/classes/HMSRoom.ts +2 -0
- package/src/classes/HMSRoomUpdate.ts +1 -0
- package/src/classes/HMSSDK.tsx +124 -52
- package/src/classes/HMSSessionStore.ts +209 -0
- package/src/classes/HMSSimulcastLayerDefinition.ts +12 -0
- package/src/classes/HMSSimulcastLayerSettingsPolicy.ts +18 -0
- package/src/classes/HMSSimulcastSettings.ts +12 -3
- package/src/classes/HMSSimulcastSettingsPolicy.ts +9 -0
- package/src/classes/HMSSubscribeDegradationPolicy.ts +15 -0
- package/src/classes/HMSSubscribeSettings.ts +10 -2
- package/src/classes/HMSUpdateListenerActions.ts +8 -0
- package/src/classes/HMSVideoResolution.ts +1 -1
- package/src/classes/HMSVideoTrackSettings.ts +5 -0
- package/src/classes/HmsView.tsx +5 -1
- package/src/index.ts +10 -0
- package/src/utils/emitter/EventEmitter.ts +160 -0
- package/src/utils/emitter/_EmitterSubscription.ts +44 -0
- package/src/utils/emitter/_EventSubscription.ts +28 -0
- package/src/utils/emitter/_EventSubscriptionVendor.ts +89 -0
- package/src/utils/index.ts +1 -0
|
@@ -2,12 +2,14 @@ package com.reactnativehmssdk
|
|
|
2
2
|
|
|
3
3
|
import android.content.Intent
|
|
4
4
|
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
|
|
5
|
+
import android.util.Log
|
|
5
6
|
import com.facebook.react.bridge.*
|
|
6
7
|
import com.facebook.react.bridge.UiThreadUtil.runOnUiThread
|
|
7
8
|
import kotlinx.coroutines.launch
|
|
8
9
|
import live.hms.video.audio.HMSAudioManager
|
|
9
10
|
import live.hms.video.connection.stats.*
|
|
10
11
|
import live.hms.video.error.HMSException
|
|
12
|
+
import live.hms.video.media.settings.HMSLayer
|
|
11
13
|
import live.hms.video.media.tracks.*
|
|
12
14
|
import live.hms.video.sdk.*
|
|
13
15
|
import live.hms.video.sdk.models.*
|
|
@@ -16,17 +18,21 @@ import live.hms.video.sdk.models.enums.HMSPeerUpdate
|
|
|
16
18
|
import live.hms.video.sdk.models.enums.HMSRoomUpdate
|
|
17
19
|
import live.hms.video.sdk.models.enums.HMSTrackUpdate
|
|
18
20
|
import live.hms.video.sdk.models.trackchangerequest.HMSChangeTrackStateRequest
|
|
21
|
+
import live.hms.video.sessionstore.HMSKeyChangeListener
|
|
22
|
+
import live.hms.video.sessionstore.HmsSessionStore
|
|
19
23
|
import live.hms.video.signal.init.HMSTokenListener
|
|
20
24
|
import live.hms.video.signal.init.TokenRequest
|
|
21
25
|
import live.hms.video.signal.init.TokenRequestOptions
|
|
22
26
|
import live.hms.video.utils.HMSCoroutineScope
|
|
23
27
|
import live.hms.video.utils.HmsUtilities
|
|
28
|
+
import java.io.File
|
|
29
|
+
import java.util.Date
|
|
24
30
|
|
|
25
31
|
class HMSRNSDK(
|
|
26
32
|
data: ReadableMap?,
|
|
27
33
|
HmsDelegate: HMSManager,
|
|
28
34
|
sdkId: String,
|
|
29
|
-
reactApplicationContext: ReactApplicationContext
|
|
35
|
+
reactApplicationContext: ReactApplicationContext,
|
|
30
36
|
) {
|
|
31
37
|
var hmsSDK: HMSSDK? = null
|
|
32
38
|
var screenshareCallback: Promise? = null
|
|
@@ -37,12 +43,13 @@ class HMSRNSDK(
|
|
|
37
43
|
private var context: ReactApplicationContext = reactApplicationContext
|
|
38
44
|
private var previewInProgress: Boolean = false
|
|
39
45
|
private var reconnectingStage: Boolean = false
|
|
40
|
-
private var rtcStatsAttached: Boolean = false
|
|
41
46
|
private var networkQualityUpdatesAttached: Boolean = false
|
|
42
47
|
private var audioMixingMode: AudioMixingMode = AudioMixingMode.TALK_AND_MUSIC
|
|
43
48
|
private var id: String = sdkId
|
|
44
49
|
private var self = this
|
|
45
50
|
private var eventsEnableStatus = mutableMapOf<String, Boolean>()
|
|
51
|
+
private var sessionStore: HmsSessionStore? = null
|
|
52
|
+
private val keyChangeObservers = mutableMapOf<String, HMSKeyChangeListener?>()
|
|
46
53
|
|
|
47
54
|
init {
|
|
48
55
|
val builder = HMSSDK.Builder(reactApplicationContext)
|
|
@@ -98,7 +105,7 @@ class HMSRNSDK(
|
|
|
98
105
|
message,
|
|
99
106
|
message,
|
|
100
107
|
null,
|
|
101
|
-
false
|
|
108
|
+
false,
|
|
102
109
|
)
|
|
103
110
|
data.putString("id", id)
|
|
104
111
|
data.putMap("error", HMSDecoder.getError(hmsError))
|
|
@@ -109,6 +116,21 @@ class HMSRNSDK(
|
|
|
109
116
|
callback?.reject("6002", message)
|
|
110
117
|
}
|
|
111
118
|
|
|
119
|
+
// Handle resetting states and data cleanup
|
|
120
|
+
private fun cleanup() {
|
|
121
|
+
screenshareCallback = null
|
|
122
|
+
audioshareCallback = null
|
|
123
|
+
isAudioSharing = false
|
|
124
|
+
recentRoleChangeRequest = null
|
|
125
|
+
previewInProgress = false
|
|
126
|
+
reconnectingStage = false
|
|
127
|
+
networkQualityUpdatesAttached = false
|
|
128
|
+
eventsEnableStatus.clear()
|
|
129
|
+
sessionStore = null
|
|
130
|
+
keyChangeObservers.clear()
|
|
131
|
+
HMSDecoder.clearRestrictDataStates()
|
|
132
|
+
}
|
|
133
|
+
|
|
112
134
|
fun emitHMSError(error: HMSException) {
|
|
113
135
|
if (eventsEnableStatus["ON_ERROR"] != true) {
|
|
114
136
|
return
|
|
@@ -136,7 +158,7 @@ class HMSRNSDK(
|
|
|
136
158
|
val requiredKeys =
|
|
137
159
|
HMSHelper.getUnavailableRequiredKey(
|
|
138
160
|
credentials,
|
|
139
|
-
arrayOf(Pair("username", "String"), Pair("authToken", "String"))
|
|
161
|
+
arrayOf(Pair("username", "String"), Pair("authToken", "String")),
|
|
140
162
|
)
|
|
141
163
|
if (requiredKeys === null) {
|
|
142
164
|
previewInProgress = true
|
|
@@ -208,7 +230,7 @@ class HMSRNSDK(
|
|
|
208
230
|
data.putString("id", id)
|
|
209
231
|
delegate.emitEvent("ON_PREVIEW", data)
|
|
210
232
|
}
|
|
211
|
-
}
|
|
233
|
+
},
|
|
212
234
|
)
|
|
213
235
|
} else {
|
|
214
236
|
val errorMessage = "preview: $requiredKeys"
|
|
@@ -224,7 +246,7 @@ class HMSRNSDK(
|
|
|
224
246
|
val requiredKeys =
|
|
225
247
|
HMSHelper.getUnavailableRequiredKey(
|
|
226
248
|
credentials,
|
|
227
|
-
arrayOf(Pair("username", "String"), Pair("authToken", "String"))
|
|
249
|
+
arrayOf(Pair("username", "String"), Pair("authToken", "String")),
|
|
228
250
|
)
|
|
229
251
|
if (requiredKeys === null) {
|
|
230
252
|
reconnectingStage = false
|
|
@@ -243,15 +265,14 @@ class HMSRNSDK(
|
|
|
243
265
|
HMSDecoder.getHmsChangeTrackStateRequest(details, id)
|
|
244
266
|
delegate.emitEvent(
|
|
245
267
|
"ON_CHANGE_TRACK_STATE_REQUEST",
|
|
246
|
-
decodedChangeTrackStateRequest
|
|
268
|
+
decodedChangeTrackStateRequest,
|
|
247
269
|
)
|
|
248
270
|
}
|
|
249
271
|
|
|
250
272
|
override fun onRemovedFromRoom(notification: HMSRemovedFromRoom) {
|
|
251
273
|
super.onRemovedFromRoom(notification)
|
|
252
|
-
|
|
253
|
-
HMSDecoder.clearRestrictDataStates()
|
|
254
274
|
if (eventsEnableStatus["ON_REMOVED_FROM_ROOM"] != true) {
|
|
275
|
+
cleanup() // resetting states and doing data cleanup
|
|
255
276
|
return
|
|
256
277
|
}
|
|
257
278
|
val data: WritableMap = Arguments.createMap()
|
|
@@ -266,6 +287,7 @@ class HMSRNSDK(
|
|
|
266
287
|
data.putString("id", id)
|
|
267
288
|
|
|
268
289
|
delegate.emitEvent("ON_REMOVED_FROM_ROOM", data)
|
|
290
|
+
cleanup() // resetting states and doing data cleanup
|
|
269
291
|
}
|
|
270
292
|
|
|
271
293
|
override fun onError(error: HMSException) {
|
|
@@ -394,7 +416,17 @@ class HMSRNSDK(
|
|
|
394
416
|
val decodedChangeRoleRequest = HMSDecoder.getHmsRoleChangeRequest(request, id)
|
|
395
417
|
delegate.emitEvent("ON_ROLE_CHANGE_REQUEST", decodedChangeRoleRequest)
|
|
396
418
|
}
|
|
397
|
-
|
|
419
|
+
|
|
420
|
+
override fun onSessionStoreAvailable(sessionStore: HmsSessionStore) {
|
|
421
|
+
self.sessionStore = sessionStore
|
|
422
|
+
if (eventsEnableStatus["ON_SESSION_STORE_AVAILABLE"] != true) {
|
|
423
|
+
return
|
|
424
|
+
}
|
|
425
|
+
val data: WritableMap = Arguments.createMap()
|
|
426
|
+
data.putString("id", id)
|
|
427
|
+
delegate.emitEvent("ON_SESSION_STORE_AVAILABLE", data)
|
|
428
|
+
}
|
|
429
|
+
},
|
|
398
430
|
)
|
|
399
431
|
} catch (e: HMSException) {
|
|
400
432
|
self.emitHMSError(e)
|
|
@@ -423,7 +455,7 @@ class HMSRNSDK(
|
|
|
423
455
|
data.putString("id", id)
|
|
424
456
|
delegate.emitEvent("ON_SPEAKER", data)
|
|
425
457
|
}
|
|
426
|
-
}
|
|
458
|
+
},
|
|
427
459
|
)
|
|
428
460
|
|
|
429
461
|
hmsSDK?.addRtcStatsObserver(
|
|
@@ -431,20 +463,17 @@ class HMSRNSDK(
|
|
|
431
463
|
override fun onLocalAudioStats(
|
|
432
464
|
audioStats: HMSLocalAudioStats,
|
|
433
465
|
hmsTrack: HMSTrack?,
|
|
434
|
-
hmsPeer: HMSPeer
|
|
466
|
+
hmsPeer: HMSPeer?,
|
|
435
467
|
) {
|
|
436
|
-
if (eventsEnableStatus["ON_LOCAL_AUDIO_STATS"] != true) {
|
|
437
|
-
return
|
|
438
|
-
}
|
|
439
|
-
if (!rtcStatsAttached) {
|
|
468
|
+
if (eventsEnableStatus["ON_LOCAL_AUDIO_STATS"] != true || hmsPeer == null || hmsTrack == null) {
|
|
440
469
|
return
|
|
441
470
|
}
|
|
442
|
-
val localAudioStats = HMSDecoder.getLocalAudioStats(audioStats)
|
|
471
|
+
val localAudioStats = HMSDecoder.getLocalAudioStats(audioStats) // [bitrate, bytesSent, roundTripTime]
|
|
443
472
|
val track = HMSDecoder.getHmsLocalAudioTrack(hmsTrack as HMSLocalAudioTrack)
|
|
444
473
|
val peer = HMSDecoder.getHmsPeerSubset(hmsPeer)
|
|
445
474
|
|
|
446
475
|
val data: WritableMap = Arguments.createMap()
|
|
447
|
-
data.
|
|
476
|
+
data.putArray("localAudioStats", localAudioStats)
|
|
448
477
|
data.putMap("track", track)
|
|
449
478
|
data.putMap("peer", peer)
|
|
450
479
|
data.putString("id", id)
|
|
@@ -454,16 +483,12 @@ class HMSRNSDK(
|
|
|
454
483
|
override fun onLocalVideoStats(
|
|
455
484
|
videoStats: List<HMSLocalVideoStats>,
|
|
456
485
|
hmsTrack: HMSTrack?,
|
|
457
|
-
hmsPeer: HMSPeer
|
|
486
|
+
hmsPeer: HMSPeer?,
|
|
458
487
|
) {
|
|
459
|
-
if (eventsEnableStatus["ON_LOCAL_VIDEO_STATS"] != true) {
|
|
460
|
-
return
|
|
461
|
-
}
|
|
462
|
-
if (!rtcStatsAttached && hmsPeer != null && hmsTrack != null) {
|
|
488
|
+
if (eventsEnableStatus["ON_LOCAL_VIDEO_STATS"] != true || hmsPeer == null || hmsTrack == null) {
|
|
463
489
|
return
|
|
464
490
|
}
|
|
465
|
-
|
|
466
|
-
val localVideoStats = HMSDecoder.getLocalVideoStats(videoStats)
|
|
491
|
+
val localVideoStats = HMSDecoder.getLocalVideoStats(videoStats) // List<[bitrate, bytesSent, roundTripTime, frameRate, resolution]>
|
|
467
492
|
val track = HMSDecoder.getHmsLocalVideoTrack(hmsTrack as HMSLocalVideoTrack)
|
|
468
493
|
val peer = HMSDecoder.getHmsPeerSubset(hmsPeer)
|
|
469
494
|
|
|
@@ -479,17 +504,14 @@ class HMSRNSDK(
|
|
|
479
504
|
if (eventsEnableStatus["ON_RTC_STATS"] != true) {
|
|
480
505
|
return
|
|
481
506
|
}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
val video = HMSDecoder.getHMSRTCStats(rtcStats.video)
|
|
486
|
-
val audio = HMSDecoder.getHMSRTCStats(rtcStats.audio)
|
|
487
|
-
val combined = HMSDecoder.getHMSRTCStats(rtcStats.combined)
|
|
507
|
+
val video = HMSDecoder.getHMSRTCStats(rtcStats.video) // [bitrateReceived, bitrateSent, bytesReceived, bytesSent, packetsLost, packetsReceived, roundTripTime]
|
|
508
|
+
val audio = HMSDecoder.getHMSRTCStats(rtcStats.audio) // [bitrateReceived, bitrateSent, bytesReceived, bytesSent, packetsLost, packetsReceived, roundTripTime]
|
|
509
|
+
val combined = HMSDecoder.getHMSRTCStats(rtcStats.combined) // [bitrateReceived, bitrateSent, bytesReceived, bytesSent, packetsLost, packetsReceived, roundTripTime]
|
|
488
510
|
|
|
489
511
|
val data: WritableMap = Arguments.createMap()
|
|
490
|
-
data.
|
|
491
|
-
data.
|
|
492
|
-
data.
|
|
512
|
+
data.putArray("video", video)
|
|
513
|
+
data.putArray("audio", audio)
|
|
514
|
+
data.putArray("combined", combined)
|
|
493
515
|
data.putString("id", id)
|
|
494
516
|
delegate.emitEvent("ON_RTC_STATS", data)
|
|
495
517
|
}
|
|
@@ -497,21 +519,17 @@ class HMSRNSDK(
|
|
|
497
519
|
override fun onRemoteAudioStats(
|
|
498
520
|
audioStats: HMSRemoteAudioStats,
|
|
499
521
|
hmsTrack: HMSTrack?,
|
|
500
|
-
hmsPeer: HMSPeer
|
|
522
|
+
hmsPeer: HMSPeer?,
|
|
501
523
|
) {
|
|
502
|
-
if (eventsEnableStatus["ON_REMOTE_AUDIO_STATS"] != true) {
|
|
503
|
-
return
|
|
504
|
-
}
|
|
505
|
-
if (!rtcStatsAttached) {
|
|
524
|
+
if (eventsEnableStatus["ON_REMOTE_AUDIO_STATS"] != true || hmsPeer == null || hmsTrack == null) {
|
|
506
525
|
return
|
|
507
526
|
}
|
|
508
|
-
|
|
509
|
-
val remoteAudioStats = HMSDecoder.getRemoteAudioStats(audioStats)
|
|
527
|
+
val remoteAudioStats = HMSDecoder.getRemoteAudioStats(audioStats) // [bitrate, bytesReceived, jitter, packetsLost, packetsReceived]
|
|
510
528
|
val track = HMSDecoder.getHmsRemoteAudioTrack(hmsTrack as HMSRemoteAudioTrack)
|
|
511
529
|
val peer = HMSDecoder.getHmsPeerSubset(hmsPeer)
|
|
512
530
|
|
|
513
531
|
val data: WritableMap = Arguments.createMap()
|
|
514
|
-
data.
|
|
532
|
+
data.putArray("remoteAudioStats", remoteAudioStats)
|
|
515
533
|
data.putMap("track", track)
|
|
516
534
|
data.putMap("peer", peer)
|
|
517
535
|
data.putString("id", id)
|
|
@@ -521,27 +539,23 @@ class HMSRNSDK(
|
|
|
521
539
|
override fun onRemoteVideoStats(
|
|
522
540
|
videoStats: HMSRemoteVideoStats,
|
|
523
541
|
hmsTrack: HMSTrack?,
|
|
524
|
-
hmsPeer: HMSPeer
|
|
542
|
+
hmsPeer: HMSPeer?,
|
|
525
543
|
) {
|
|
526
|
-
if (eventsEnableStatus["ON_REMOTE_VIDEO_STATS"] != true) {
|
|
527
|
-
return
|
|
528
|
-
}
|
|
529
|
-
if (!rtcStatsAttached) {
|
|
544
|
+
if (eventsEnableStatus["ON_REMOTE_VIDEO_STATS"] != true || hmsPeer == null || hmsTrack == null) {
|
|
530
545
|
return
|
|
531
546
|
}
|
|
532
|
-
|
|
533
|
-
val remoteVideoStats = HMSDecoder.getRemoteVideoStats(videoStats)
|
|
547
|
+
val remoteVideoStats = HMSDecoder.getRemoteVideoStats(videoStats) // [bitrate, bytesReceived, frameRate, jitter, packetsLost, packetsReceived, resolution]
|
|
534
548
|
val track = HMSDecoder.getHmsRemoteVideoTrack(hmsTrack as HMSRemoteVideoTrack)
|
|
535
549
|
val peer = HMSDecoder.getHmsPeerSubset(hmsPeer)
|
|
536
550
|
|
|
537
551
|
val data: WritableMap = Arguments.createMap()
|
|
538
|
-
data.
|
|
552
|
+
data.putArray("remoteVideoStats", remoteVideoStats)
|
|
539
553
|
data.putMap("track", track)
|
|
540
554
|
data.putMap("peer", peer)
|
|
541
555
|
data.putString("id", id)
|
|
542
556
|
delegate.emitEvent("ON_REMOTE_VIDEO_STATS", data)
|
|
543
557
|
}
|
|
544
|
-
}
|
|
558
|
+
},
|
|
545
559
|
)
|
|
546
560
|
}
|
|
547
561
|
} else {
|
|
@@ -554,7 +568,7 @@ class HMSRNSDK(
|
|
|
554
568
|
val requiredKeys =
|
|
555
569
|
HMSHelper.getUnavailableRequiredKey(
|
|
556
570
|
data,
|
|
557
|
-
arrayOf(Pair("roomCode", "String"))
|
|
571
|
+
arrayOf(Pair("roomCode", "String")),
|
|
558
572
|
)
|
|
559
573
|
|
|
560
574
|
if (requiredKeys === null) {
|
|
@@ -576,7 +590,7 @@ class HMSRNSDK(
|
|
|
576
590
|
override fun onTokenSuccess(string: String) {
|
|
577
591
|
promise.resolve(string)
|
|
578
592
|
}
|
|
579
|
-
}
|
|
593
|
+
},
|
|
580
594
|
)
|
|
581
595
|
} else {
|
|
582
596
|
val errorMessage = "getAuthTokenByRoomCode: $requiredKeys"
|
|
@@ -614,12 +628,6 @@ class HMSRNSDK(
|
|
|
614
628
|
hmsSDK?.leave(
|
|
615
629
|
object : HMSActionResultListener {
|
|
616
630
|
override fun onSuccess() {
|
|
617
|
-
isAudioSharing = false
|
|
618
|
-
screenshareCallback = null
|
|
619
|
-
audioshareCallback = null
|
|
620
|
-
networkQualityUpdatesAttached = false
|
|
621
|
-
rtcStatsAttached = false
|
|
622
|
-
HMSDecoder.clearRestrictDataStates()
|
|
623
631
|
if (fromPIP) {
|
|
624
632
|
context.currentActivity?.moveTaskToBack(false)
|
|
625
633
|
|
|
@@ -632,6 +640,7 @@ class HMSRNSDK(
|
|
|
632
640
|
} else {
|
|
633
641
|
callback?.resolve(emitHMSSuccess())
|
|
634
642
|
}
|
|
643
|
+
cleanup() // resetting states and doing data cleanup
|
|
635
644
|
}
|
|
636
645
|
|
|
637
646
|
override fun onError(error: HMSException) {
|
|
@@ -640,7 +649,7 @@ class HMSRNSDK(
|
|
|
640
649
|
}
|
|
641
650
|
self.emitHMSError(error)
|
|
642
651
|
}
|
|
643
|
-
}
|
|
652
|
+
},
|
|
644
653
|
)
|
|
645
654
|
}
|
|
646
655
|
}
|
|
@@ -649,7 +658,7 @@ class HMSRNSDK(
|
|
|
649
658
|
val requiredKeys =
|
|
650
659
|
HMSHelper.getUnavailableRequiredKey(
|
|
651
660
|
data,
|
|
652
|
-
arrayOf(Pair("message", "String"), Pair("type", "String"))
|
|
661
|
+
arrayOf(Pair("message", "String"), Pair("type", "String")),
|
|
653
662
|
)
|
|
654
663
|
if (requiredKeys === null) {
|
|
655
664
|
hmsSDK?.sendBroadcastMessage(
|
|
@@ -663,7 +672,7 @@ class HMSRNSDK(
|
|
|
663
672
|
override fun onSuccess(hmsMessage: HMSMessage) {
|
|
664
673
|
callback?.resolve(emitHMSSuccess(hmsMessage))
|
|
665
674
|
}
|
|
666
|
-
}
|
|
675
|
+
},
|
|
667
676
|
)
|
|
668
677
|
} else {
|
|
669
678
|
val errorMessage = "sendBroadcastMessage: $requiredKeys"
|
|
@@ -676,7 +685,7 @@ class HMSRNSDK(
|
|
|
676
685
|
val requiredKeys =
|
|
677
686
|
HMSHelper.getUnavailableRequiredKey(
|
|
678
687
|
data,
|
|
679
|
-
arrayOf(Pair("message", "String"), Pair("roles", "Array"), Pair("type", "String"))
|
|
688
|
+
arrayOf(Pair("message", "String"), Pair("roles", "Array"), Pair("type", "String")),
|
|
680
689
|
)
|
|
681
690
|
if (requiredKeys === null) {
|
|
682
691
|
val targetedRoles = data.getArray("roles")?.toArrayList() as? ArrayList<String>
|
|
@@ -695,7 +704,7 @@ class HMSRNSDK(
|
|
|
695
704
|
override fun onSuccess(hmsMessage: HMSMessage) {
|
|
696
705
|
callback?.resolve(emitHMSSuccess(hmsMessage))
|
|
697
706
|
}
|
|
698
|
-
}
|
|
707
|
+
},
|
|
699
708
|
)
|
|
700
709
|
} else {
|
|
701
710
|
val errorMessage = "sendGroupMessage: $requiredKeys"
|
|
@@ -708,7 +717,7 @@ class HMSRNSDK(
|
|
|
708
717
|
val requiredKeys =
|
|
709
718
|
HMSHelper.getUnavailableRequiredKey(
|
|
710
719
|
data,
|
|
711
|
-
arrayOf(Pair("message", "String"), Pair("peerId", "String"), Pair("type", "String"))
|
|
720
|
+
arrayOf(Pair("message", "String"), Pair("peerId", "String"), Pair("type", "String")),
|
|
712
721
|
)
|
|
713
722
|
if (requiredKeys === null) {
|
|
714
723
|
val peerId = data.getString("peerId")
|
|
@@ -726,7 +735,7 @@ class HMSRNSDK(
|
|
|
726
735
|
override fun onSuccess(hmsMessage: HMSMessage) {
|
|
727
736
|
callback?.resolve(emitHMSSuccess(hmsMessage))
|
|
728
737
|
}
|
|
729
|
-
}
|
|
738
|
+
},
|
|
730
739
|
)
|
|
731
740
|
} else {
|
|
732
741
|
self.emitCustomError("PEER_NOT_FOUND")
|
|
@@ -744,7 +753,7 @@ class HMSRNSDK(
|
|
|
744
753
|
val requiredKeys =
|
|
745
754
|
HMSHelper.getUnavailableRequiredKey(
|
|
746
755
|
data,
|
|
747
|
-
arrayOf(Pair("peerId", "String"), Pair("role", "String"), Pair("force", "Boolean"))
|
|
756
|
+
arrayOf(Pair("peerId", "String"), Pair("role", "String"), Pair("force", "Boolean")),
|
|
748
757
|
)
|
|
749
758
|
if (requiredKeys === null) {
|
|
750
759
|
val peerId = data.getString("peerId")
|
|
@@ -768,7 +777,7 @@ class HMSRNSDK(
|
|
|
768
777
|
self.emitHMSError(error)
|
|
769
778
|
callback?.reject(error.code.toString(), error.message)
|
|
770
779
|
}
|
|
771
|
-
}
|
|
780
|
+
},
|
|
772
781
|
)
|
|
773
782
|
}
|
|
774
783
|
}
|
|
@@ -783,7 +792,7 @@ class HMSRNSDK(
|
|
|
783
792
|
val requiredKeys =
|
|
784
793
|
HMSHelper.getUnavailableRequiredKey(
|
|
785
794
|
data,
|
|
786
|
-
arrayOf(Pair("peerId", "String"), Pair("role", "String"), Pair("force", "Boolean"))
|
|
795
|
+
arrayOf(Pair("peerId", "String"), Pair("role", "String"), Pair("force", "Boolean")),
|
|
787
796
|
)
|
|
788
797
|
if (requiredKeys === null) {
|
|
789
798
|
val peerId = data.getString("peerId")
|
|
@@ -807,7 +816,7 @@ class HMSRNSDK(
|
|
|
807
816
|
self.emitHMSError(error)
|
|
808
817
|
promise?.reject(error.code.toString(), error.message)
|
|
809
818
|
}
|
|
810
|
-
}
|
|
819
|
+
},
|
|
811
820
|
)
|
|
812
821
|
}
|
|
813
822
|
}
|
|
@@ -822,7 +831,7 @@ class HMSRNSDK(
|
|
|
822
831
|
val requiredKeys =
|
|
823
832
|
HMSHelper.getUnavailableRequiredKey(
|
|
824
833
|
data,
|
|
825
|
-
arrayOf(Pair("ofRoles", "Array"), Pair("toRole", "String"))
|
|
834
|
+
arrayOf(Pair("ofRoles", "Array"), Pair("toRole", "String")),
|
|
826
835
|
)
|
|
827
836
|
if (requiredKeys === null) {
|
|
828
837
|
val ofRoles = data.getArray("ofRoles")
|
|
@@ -848,7 +857,7 @@ class HMSRNSDK(
|
|
|
848
857
|
self.emitHMSError(error)
|
|
849
858
|
promise?.reject(error.code.toString(), error.message)
|
|
850
859
|
}
|
|
851
|
-
}
|
|
860
|
+
},
|
|
852
861
|
)
|
|
853
862
|
}
|
|
854
863
|
}
|
|
@@ -863,7 +872,7 @@ class HMSRNSDK(
|
|
|
863
872
|
val requiredKeys =
|
|
864
873
|
HMSHelper.getUnavailableRequiredKey(
|
|
865
874
|
data,
|
|
866
|
-
arrayOf(Pair("trackId", "String"), Pair("mute", "Boolean"))
|
|
875
|
+
arrayOf(Pair("trackId", "String"), Pair("mute", "Boolean")),
|
|
867
876
|
)
|
|
868
877
|
if (requiredKeys === null) {
|
|
869
878
|
val trackId = data.getString("trackId")
|
|
@@ -881,7 +890,7 @@ class HMSRNSDK(
|
|
|
881
890
|
self.emitHMSError(error)
|
|
882
891
|
callback?.reject(error.code.toString(), error.message)
|
|
883
892
|
}
|
|
884
|
-
}
|
|
893
|
+
},
|
|
885
894
|
)
|
|
886
895
|
}
|
|
887
896
|
} else {
|
|
@@ -932,7 +941,7 @@ class HMSRNSDK(
|
|
|
932
941
|
self.emitHMSError(error)
|
|
933
942
|
callback?.reject(error.code.toString(), error.message)
|
|
934
943
|
}
|
|
935
|
-
}
|
|
944
|
+
},
|
|
936
945
|
)
|
|
937
946
|
} else {
|
|
938
947
|
val errorMessage = "changeTrackStateForRoles: $requiredKeys"
|
|
@@ -963,7 +972,7 @@ class HMSRNSDK(
|
|
|
963
972
|
val requiredKeys =
|
|
964
973
|
HMSHelper.getUnavailableRequiredKey(
|
|
965
974
|
data,
|
|
966
|
-
arrayOf(Pair("peerId", "String"), Pair("reason", "String"))
|
|
975
|
+
arrayOf(Pair("peerId", "String"), Pair("reason", "String")),
|
|
967
976
|
)
|
|
968
977
|
if (requiredKeys === null) {
|
|
969
978
|
val peerId = data.getString("peerId")
|
|
@@ -981,7 +990,7 @@ class HMSRNSDK(
|
|
|
981
990
|
self.emitHMSError(error)
|
|
982
991
|
callback?.reject(error.code.toString(), error.message)
|
|
983
992
|
}
|
|
984
|
-
}
|
|
993
|
+
},
|
|
985
994
|
)
|
|
986
995
|
} else {
|
|
987
996
|
self.emitCustomError("PEER_NOT_FOUND")
|
|
@@ -998,7 +1007,7 @@ class HMSRNSDK(
|
|
|
998
1007
|
val requiredKeys =
|
|
999
1008
|
HMSHelper.getUnavailableRequiredKey(
|
|
1000
1009
|
data,
|
|
1001
|
-
arrayOf(Pair("lock", "Boolean"), Pair("reason", "String"))
|
|
1010
|
+
arrayOf(Pair("lock", "Boolean"), Pair("reason", "String")),
|
|
1002
1011
|
)
|
|
1003
1012
|
if (requiredKeys === null) {
|
|
1004
1013
|
hmsSDK?.endRoom(
|
|
@@ -1007,12 +1016,13 @@ class HMSRNSDK(
|
|
|
1007
1016
|
object : HMSActionResultListener {
|
|
1008
1017
|
override fun onSuccess() {
|
|
1009
1018
|
callback?.resolve(emitHMSSuccess())
|
|
1019
|
+
cleanup() // resetting states and doing data cleanup
|
|
1010
1020
|
}
|
|
1011
1021
|
override fun onError(error: HMSException) {
|
|
1012
1022
|
self.emitHMSError(error)
|
|
1013
1023
|
callback?.reject(error.code.toString(), error.message)
|
|
1014
1024
|
}
|
|
1015
|
-
}
|
|
1025
|
+
},
|
|
1016
1026
|
)
|
|
1017
1027
|
} else {
|
|
1018
1028
|
val errorMessage = "endRoom: $requiredKeys"
|
|
@@ -1033,7 +1043,7 @@ class HMSRNSDK(
|
|
|
1033
1043
|
self.emitHMSError(error)
|
|
1034
1044
|
callback?.reject(error.code.toString(), error.message)
|
|
1035
1045
|
}
|
|
1036
|
-
}
|
|
1046
|
+
},
|
|
1037
1047
|
)
|
|
1038
1048
|
recentRoleChangeRequest = null
|
|
1039
1049
|
} else {
|
|
@@ -1056,7 +1066,7 @@ class HMSRNSDK(
|
|
|
1056
1066
|
override fun onError(error: HMSException) {
|
|
1057
1067
|
customError = error
|
|
1058
1068
|
}
|
|
1059
|
-
}
|
|
1069
|
+
},
|
|
1060
1070
|
)
|
|
1061
1071
|
}
|
|
1062
1072
|
if (customError === null) {
|
|
@@ -1090,7 +1100,7 @@ class HMSRNSDK(
|
|
|
1090
1100
|
val requiredKeys =
|
|
1091
1101
|
HMSHelper.getUnavailableRequiredKey(
|
|
1092
1102
|
data,
|
|
1093
|
-
arrayOf(Pair("trackId", "String"), Pair("playbackAllowed", "Boolean"))
|
|
1103
|
+
arrayOf(Pair("trackId", "String"), Pair("playbackAllowed", "Boolean")),
|
|
1094
1104
|
)
|
|
1095
1105
|
if (requiredKeys === null) {
|
|
1096
1106
|
val trackId = data.getString("trackId")
|
|
@@ -1158,7 +1168,7 @@ class HMSRNSDK(
|
|
|
1158
1168
|
val requiredKeys =
|
|
1159
1169
|
HMSHelper.getUnavailableRequiredKey(
|
|
1160
1170
|
data,
|
|
1161
|
-
arrayOf(Pair("trackId", "String"), Pair("volume", "Float"))
|
|
1171
|
+
arrayOf(Pair("trackId", "String"), Pair("volume", "Float")),
|
|
1162
1172
|
)
|
|
1163
1173
|
|
|
1164
1174
|
if (requiredKeys === null) {
|
|
@@ -1234,7 +1244,7 @@ class HMSRNSDK(
|
|
|
1234
1244
|
callback?.reject(error.code.toString(), error.message)
|
|
1235
1245
|
self.emitHMSError(error)
|
|
1236
1246
|
}
|
|
1237
|
-
}
|
|
1247
|
+
},
|
|
1238
1248
|
)
|
|
1239
1249
|
}
|
|
1240
1250
|
} else {
|
|
@@ -1248,7 +1258,7 @@ class HMSRNSDK(
|
|
|
1248
1258
|
val requiredKeys =
|
|
1249
1259
|
HMSHelper.getUnavailableRequiredKey(
|
|
1250
1260
|
data,
|
|
1251
|
-
arrayOf(Pair("record", "Boolean"), Pair("meetingURL", "String"))
|
|
1261
|
+
arrayOf(Pair("record", "Boolean"), Pair("meetingURL", "String")),
|
|
1252
1262
|
)
|
|
1253
1263
|
if (requiredKeys === null) {
|
|
1254
1264
|
val config = HMSHelper.getRtmpConfig(data)
|
|
@@ -1267,7 +1277,7 @@ class HMSRNSDK(
|
|
|
1267
1277
|
callback?.reject(error.code.toString(), error.message)
|
|
1268
1278
|
self.emitHMSError(error)
|
|
1269
1279
|
}
|
|
1270
|
-
}
|
|
1280
|
+
},
|
|
1271
1281
|
)
|
|
1272
1282
|
}
|
|
1273
1283
|
} else {
|
|
@@ -1287,7 +1297,7 @@ class HMSRNSDK(
|
|
|
1287
1297
|
callback?.reject(error.code.toString(), error.message)
|
|
1288
1298
|
self.emitHMSError(error)
|
|
1289
1299
|
}
|
|
1290
|
-
}
|
|
1300
|
+
},
|
|
1291
1301
|
)
|
|
1292
1302
|
}
|
|
1293
1303
|
|
|
@@ -1317,7 +1327,7 @@ class HMSRNSDK(
|
|
|
1317
1327
|
screenshareCallback = null
|
|
1318
1328
|
callback?.resolve(emitHMSSuccess())
|
|
1319
1329
|
}
|
|
1320
|
-
}
|
|
1330
|
+
},
|
|
1321
1331
|
)
|
|
1322
1332
|
}
|
|
1323
1333
|
|
|
@@ -1333,7 +1343,7 @@ class HMSRNSDK(
|
|
|
1333
1343
|
callback?.reject(error.code.toString(), error.message)
|
|
1334
1344
|
self.emitHMSError(error)
|
|
1335
1345
|
}
|
|
1336
|
-
}
|
|
1346
|
+
},
|
|
1337
1347
|
)
|
|
1338
1348
|
}
|
|
1339
1349
|
|
|
@@ -1348,7 +1358,7 @@ class HMSRNSDK(
|
|
|
1348
1358
|
callback?.reject(error.code.toString(), error.message)
|
|
1349
1359
|
self.emitHMSError(error)
|
|
1350
1360
|
}
|
|
1351
|
-
}
|
|
1361
|
+
},
|
|
1352
1362
|
)
|
|
1353
1363
|
}
|
|
1354
1364
|
|
|
@@ -1388,7 +1398,7 @@ class HMSRNSDK(
|
|
|
1388
1398
|
callback?.reject(error.code.toString(), error.message)
|
|
1389
1399
|
self.emitHMSError(error)
|
|
1390
1400
|
}
|
|
1391
|
-
}
|
|
1401
|
+
},
|
|
1392
1402
|
)
|
|
1393
1403
|
} else {
|
|
1394
1404
|
self.emitCustomError("NAME_UNDEFINED")
|
|
@@ -1401,14 +1411,6 @@ class HMSRNSDK(
|
|
|
1401
1411
|
}
|
|
1402
1412
|
}
|
|
1403
1413
|
|
|
1404
|
-
fun enableRTCStats() {
|
|
1405
|
-
rtcStatsAttached = true
|
|
1406
|
-
}
|
|
1407
|
-
|
|
1408
|
-
fun disableRTCStats() {
|
|
1409
|
-
rtcStatsAttached = false
|
|
1410
|
-
}
|
|
1411
|
-
|
|
1412
1414
|
fun enableNetworkQualityUpdates() {
|
|
1413
1415
|
networkQualityUpdatesAttached = true
|
|
1414
1416
|
}
|
|
@@ -1453,7 +1455,7 @@ class HMSRNSDK(
|
|
|
1453
1455
|
object : HMSAudioManager.AudioManagerDeviceChangeListener {
|
|
1454
1456
|
override fun onAudioDeviceChanged(
|
|
1455
1457
|
device: HMSAudioManager.AudioDevice?,
|
|
1456
|
-
audioDevicesList: Set<HMSAudioManager.AudioDevice
|
|
1458
|
+
audioDevicesList: Set<HMSAudioManager.AudioDevice>?,
|
|
1457
1459
|
) {
|
|
1458
1460
|
if (eventsEnableStatus["ON_AUDIO_DEVICE_CHANGED"] != true) {
|
|
1459
1461
|
return
|
|
@@ -1468,7 +1470,7 @@ class HMSRNSDK(
|
|
|
1468
1470
|
override fun onError(error: HMSException) {
|
|
1469
1471
|
self.emitHMSError(error)
|
|
1470
1472
|
}
|
|
1471
|
-
}
|
|
1473
|
+
},
|
|
1472
1474
|
)
|
|
1473
1475
|
}
|
|
1474
1476
|
|
|
@@ -1508,7 +1510,7 @@ class HMSRNSDK(
|
|
|
1508
1510
|
audioshareCallback = null
|
|
1509
1511
|
callback?.resolve(emitHMSSuccess())
|
|
1510
1512
|
}
|
|
1511
|
-
}
|
|
1513
|
+
},
|
|
1512
1514
|
)
|
|
1513
1515
|
}
|
|
1514
1516
|
|
|
@@ -1531,6 +1533,7 @@ class HMSRNSDK(
|
|
|
1531
1533
|
}
|
|
1532
1534
|
}
|
|
1533
1535
|
|
|
1536
|
+
@Deprecated("SessionMetaData APIs has been deprecated in favour of Session Store APIs", ReplaceWith("setSessionMetadataForKey"), DeprecationLevel.WARNING)
|
|
1534
1537
|
fun setSessionMetaData(data: ReadableMap, callback: Promise?) {
|
|
1535
1538
|
if (data.hasKey("sessionMetaData")) {
|
|
1536
1539
|
val sessionMetaData = data.getString("sessionMetaData")
|
|
@@ -1545,7 +1548,7 @@ class HMSRNSDK(
|
|
|
1545
1548
|
callback?.reject(error.code.toString(), error.message)
|
|
1546
1549
|
self.emitHMSError(error)
|
|
1547
1550
|
}
|
|
1548
|
-
}
|
|
1551
|
+
},
|
|
1549
1552
|
)
|
|
1550
1553
|
} else {
|
|
1551
1554
|
val errorMessage = "setSessionMetaData: sessionMetaData_Is_Required"
|
|
@@ -1554,18 +1557,23 @@ class HMSRNSDK(
|
|
|
1554
1557
|
}
|
|
1555
1558
|
}
|
|
1556
1559
|
|
|
1560
|
+
@Deprecated("SessionMetaData APIs has been deprecated in favour of Session Store APIs", ReplaceWith("getSessionMetadataForKey"), DeprecationLevel.WARNING)
|
|
1557
1561
|
fun getSessionMetaData(callback: Promise?) {
|
|
1558
1562
|
hmsSDK?.getSessionMetaData(
|
|
1559
1563
|
object : HMSSessionMetadataListener {
|
|
1560
|
-
override fun onSuccess(sessionMetadata:
|
|
1561
|
-
|
|
1564
|
+
override fun onSuccess(sessionMetadata: Any?) {
|
|
1565
|
+
if (sessionMetadata is String?) {
|
|
1566
|
+
callback?.resolve(sessionMetadata)
|
|
1567
|
+
} else {
|
|
1568
|
+
callback?.reject("6002", "Session Store: Unsupported type received, only String type is supported")
|
|
1569
|
+
}
|
|
1562
1570
|
}
|
|
1563
1571
|
|
|
1564
1572
|
override fun onError(error: HMSException) {
|
|
1565
1573
|
callback?.reject(error.code.toString(), error.message)
|
|
1566
1574
|
self.emitHMSError(error)
|
|
1567
1575
|
}
|
|
1568
|
-
}
|
|
1576
|
+
},
|
|
1569
1577
|
)
|
|
1570
1578
|
}
|
|
1571
1579
|
|
|
@@ -1582,7 +1590,9 @@ class HMSRNSDK(
|
|
|
1582
1590
|
val peerId = data.getString("peerId")!!
|
|
1583
1591
|
val property = data.getString("property")!!
|
|
1584
1592
|
|
|
1585
|
-
val
|
|
1593
|
+
val hmsRoom = nativeHmsSDK.getRoom()
|
|
1594
|
+
|
|
1595
|
+
val peer = HMSHelper.getPeerFromPeerId(peerId, hmsRoom)
|
|
1586
1596
|
|
|
1587
1597
|
if (peer !== null) {
|
|
1588
1598
|
val result: WritableMap = Arguments.createMap()
|
|
@@ -1740,4 +1750,333 @@ class HMSRNSDK(
|
|
|
1740
1750
|
rejectCallback(promise, errorMessage)
|
|
1741
1751
|
}
|
|
1742
1752
|
}
|
|
1753
|
+
|
|
1754
|
+
fun getRemoteVideoTrackFromTrackId(data: ReadableMap, promise: Promise) {
|
|
1755
|
+
val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
|
|
1756
|
+
if (requiredKeys === null) {
|
|
1757
|
+
val trackId = data.getString("trackId")
|
|
1758
|
+
val remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, hmsSDK?.getRoom())
|
|
1759
|
+
if (remoteVideoTrack === null) {
|
|
1760
|
+
promise.reject("101", "TRACK_NOT_FOUND")
|
|
1761
|
+
} else {
|
|
1762
|
+
promise.resolve(HMSDecoder.getHmsRemoteVideoTrack(remoteVideoTrack))
|
|
1763
|
+
}
|
|
1764
|
+
} else {
|
|
1765
|
+
val errorMessage = "getRemoteVideoTrackFromTrackId: $requiredKeys"
|
|
1766
|
+
self.emitRequiredKeysError(errorMessage)
|
|
1767
|
+
rejectCallback(promise, errorMessage)
|
|
1768
|
+
}
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1771
|
+
fun getRemoteAudioTrackFromTrackId(data: ReadableMap, promise: Promise) {
|
|
1772
|
+
val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
|
|
1773
|
+
if (requiredKeys === null) {
|
|
1774
|
+
val trackId = data.getString("trackId")
|
|
1775
|
+
val remoteAudioTrack = HMSHelper.getRemoteAudioTrackFromTrackId(trackId, hmsSDK?.getRoom())
|
|
1776
|
+
if (remoteAudioTrack === null) {
|
|
1777
|
+
promise.reject("101", "TRACK_NOT_FOUND")
|
|
1778
|
+
} else {
|
|
1779
|
+
promise.resolve(HMSDecoder.getHmsRemoteAudioTrack(remoteAudioTrack))
|
|
1780
|
+
}
|
|
1781
|
+
} else {
|
|
1782
|
+
val errorMessage = "getRemoteAudioTrackFromTrackId: $requiredKeys"
|
|
1783
|
+
self.emitRequiredKeysError(errorMessage)
|
|
1784
|
+
rejectCallback(promise, errorMessage)
|
|
1785
|
+
}
|
|
1786
|
+
}
|
|
1787
|
+
|
|
1788
|
+
fun getVideoTrackLayer(data: ReadableMap, promise: Promise) {
|
|
1789
|
+
val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
|
|
1790
|
+
if (requiredKeys === null) {
|
|
1791
|
+
val trackId = data.getString("trackId")
|
|
1792
|
+
val remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, hmsSDK?.getRoom())
|
|
1793
|
+
if (remoteVideoTrack === null) {
|
|
1794
|
+
promise.reject("101", "TRACK_NOT_FOUND")
|
|
1795
|
+
} else {
|
|
1796
|
+
val layer = remoteVideoTrack.getLayer()
|
|
1797
|
+
promise.resolve(layer.name)
|
|
1798
|
+
}
|
|
1799
|
+
} else {
|
|
1800
|
+
val errorMessage = "getVideoTrackLayer: $requiredKeys"
|
|
1801
|
+
self.emitRequiredKeysError(errorMessage)
|
|
1802
|
+
rejectCallback(promise, errorMessage)
|
|
1803
|
+
}
|
|
1804
|
+
}
|
|
1805
|
+
|
|
1806
|
+
fun getVideoTrackLayerDefinition(data: ReadableMap, promise: Promise) {
|
|
1807
|
+
val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
|
|
1808
|
+
if (requiredKeys === null) {
|
|
1809
|
+
val trackId = data.getString("trackId")
|
|
1810
|
+
val remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, hmsSDK?.getRoom())
|
|
1811
|
+
if (remoteVideoTrack === null) {
|
|
1812
|
+
promise.reject("101", "TRACK_NOT_FOUND")
|
|
1813
|
+
} else {
|
|
1814
|
+
val layerDefinition = remoteVideoTrack.getLayerDefinition()
|
|
1815
|
+
|
|
1816
|
+
promise.resolve(HMSDecoder.getSimulcastLayerDefinitions(layerDefinition))
|
|
1817
|
+
}
|
|
1818
|
+
} else {
|
|
1819
|
+
val errorMessage = "getVideoTrackLayerDefinition: $requiredKeys"
|
|
1820
|
+
self.emitRequiredKeysError(errorMessage)
|
|
1821
|
+
rejectCallback(promise, errorMessage)
|
|
1822
|
+
}
|
|
1823
|
+
}
|
|
1824
|
+
|
|
1825
|
+
fun setVideoTrackLayer(data: ReadableMap, promise: Promise?) {
|
|
1826
|
+
val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String"), Pair("layer", "String")))
|
|
1827
|
+
if (requiredKeys === null) {
|
|
1828
|
+
val trackId = data.getString("trackId")
|
|
1829
|
+
val layerString = data.getString("layer")
|
|
1830
|
+
|
|
1831
|
+
if (HMSLayer.values().find { it.name == layerString } === null) {
|
|
1832
|
+
// DOUBT: which error to throw here?
|
|
1833
|
+
// emitError or 101 or 6000?
|
|
1834
|
+
promise?.reject("6000", "INVALID_LAYER")
|
|
1835
|
+
return
|
|
1836
|
+
}
|
|
1837
|
+
|
|
1838
|
+
val remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, hmsSDK?.getRoom())
|
|
1839
|
+
|
|
1840
|
+
if (remoteVideoTrack === null) {
|
|
1841
|
+
promise?.reject("101", "TRACK_NOT_FOUND")
|
|
1842
|
+
} else {
|
|
1843
|
+
val layer = HMSLayer.valueOf(layerString!!)
|
|
1844
|
+
remoteVideoTrack.setLayer(layer)
|
|
1845
|
+
promise?.resolve(true)
|
|
1846
|
+
}
|
|
1847
|
+
} else {
|
|
1848
|
+
val errorMessage = "setVideoTrackLayer: $requiredKeys"
|
|
1849
|
+
self.emitRequiredKeysError(errorMessage)
|
|
1850
|
+
rejectCallback(promise, errorMessage)
|
|
1851
|
+
}
|
|
1852
|
+
}
|
|
1853
|
+
|
|
1854
|
+
fun captureImageAtMaxSupportedResolution(data: ReadableMap, promise: Promise?) {
|
|
1855
|
+
val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("flash", "Boolean")))
|
|
1856
|
+
if (requiredKeys === null) {
|
|
1857
|
+
val localPeer = hmsSDK?.getLocalPeer().let {
|
|
1858
|
+
if (it == null) {
|
|
1859
|
+
promise?.reject("6004", "An instance of Local Peer could not be found! Please check if a Room is joined.")
|
|
1860
|
+
return
|
|
1861
|
+
} else {
|
|
1862
|
+
it
|
|
1863
|
+
}
|
|
1864
|
+
}
|
|
1865
|
+
val localVideoTrack = localPeer.videoTrack.let {
|
|
1866
|
+
if (it == null) {
|
|
1867
|
+
promise?.reject("6004", "Video Track of Local Peer could not be found! Please check if the Local Peer has permission to publish video & video is unmuted currently.")
|
|
1868
|
+
return
|
|
1869
|
+
} else {
|
|
1870
|
+
it
|
|
1871
|
+
}
|
|
1872
|
+
}
|
|
1873
|
+
val cameraControl = localVideoTrack.getCameraControl().let {
|
|
1874
|
+
if (it == null) {
|
|
1875
|
+
promise?.reject("6004", "Camera Controls not available!")
|
|
1876
|
+
return
|
|
1877
|
+
} else {
|
|
1878
|
+
it
|
|
1879
|
+
}
|
|
1880
|
+
}
|
|
1881
|
+
|
|
1882
|
+
val flashSupported = cameraControl.isFlashSupported()
|
|
1883
|
+
var flashActionOnSuccess = 0 // 0 - Do nothing on success, 1 - set flash on, 2 - set flash off
|
|
1884
|
+
if (flashSupported) {
|
|
1885
|
+
val useFlash = data.getBoolean("flash")
|
|
1886
|
+
|
|
1887
|
+
val flashEnabled = cameraControl.isFlashEnabled()
|
|
1888
|
+
|
|
1889
|
+
// if flash option is true, and flash is already on
|
|
1890
|
+
// -> do nothing now and on success
|
|
1891
|
+
|
|
1892
|
+
// if flash option is true, and flash is off
|
|
1893
|
+
// -> turn it on and later turn it off
|
|
1894
|
+
if (useFlash && !flashEnabled) {
|
|
1895
|
+
cameraControl.setFlash(true)
|
|
1896
|
+
flashActionOnSuccess = 2
|
|
1897
|
+
}
|
|
1898
|
+
|
|
1899
|
+
// if flash option is false, and flash is on
|
|
1900
|
+
// -> turn it off and later turn it on
|
|
1901
|
+
if (!useFlash && flashEnabled) {
|
|
1902
|
+
cameraControl.setFlash(false)
|
|
1903
|
+
flashActionOnSuccess = 1
|
|
1904
|
+
}
|
|
1905
|
+
|
|
1906
|
+
// if flash option is false, and flash is off
|
|
1907
|
+
// -> do nothing now and on success
|
|
1908
|
+
}
|
|
1909
|
+
|
|
1910
|
+
val dir = context.getExternalFilesDir("images")
|
|
1911
|
+
val imagePath = "$dir/hms_${Date().time}.jpg"
|
|
1912
|
+
val savePath = File(imagePath)
|
|
1913
|
+
|
|
1914
|
+
cameraControl.captureImageAtMaxSupportedResolution(
|
|
1915
|
+
savePath,
|
|
1916
|
+
) { success ->
|
|
1917
|
+
if (flashActionOnSuccess > 0) {
|
|
1918
|
+
cameraControl.setFlash(flashActionOnSuccess === 1)
|
|
1919
|
+
}
|
|
1920
|
+
if (success) {
|
|
1921
|
+
promise?.resolve(imagePath)
|
|
1922
|
+
} else {
|
|
1923
|
+
promise?.reject("6004", "Could Not Capture Image!")
|
|
1924
|
+
}
|
|
1925
|
+
}
|
|
1926
|
+
} else {
|
|
1927
|
+
val errorMessage = "captureImageAtMaxSupportedResolution: $requiredKeys"
|
|
1928
|
+
self.emitRequiredKeysError(errorMessage)
|
|
1929
|
+
rejectCallback(promise, errorMessage)
|
|
1930
|
+
}
|
|
1931
|
+
}
|
|
1932
|
+
|
|
1933
|
+
// Mark: Session Store
|
|
1934
|
+
|
|
1935
|
+
fun setSessionMetadataForKey(data: ReadableMap, promise: Promise?) {
|
|
1936
|
+
val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("key", "String")))
|
|
1937
|
+
if (requiredKeys === null) {
|
|
1938
|
+
val key = data.getString("key")!!
|
|
1939
|
+
val value = data.getString("value")
|
|
1940
|
+
|
|
1941
|
+
sessionStore.let {
|
|
1942
|
+
if (it === null) {
|
|
1943
|
+
val errorMessage = "setSessionMetadataForKey: HmsSessionStore instance is not available!"
|
|
1944
|
+
rejectCallback(promise, errorMessage)
|
|
1945
|
+
return
|
|
1946
|
+
}
|
|
1947
|
+
|
|
1948
|
+
it.set(
|
|
1949
|
+
value, // data/value
|
|
1950
|
+
key, // key
|
|
1951
|
+
object : HMSActionResultListener {
|
|
1952
|
+
override fun onError(error: HMSException) {
|
|
1953
|
+
promise?.reject(error.code.toString(), error.message)
|
|
1954
|
+
}
|
|
1955
|
+
override fun onSuccess() {
|
|
1956
|
+
val result: WritableMap = Arguments.createMap()
|
|
1957
|
+
result.putBoolean("success", true)
|
|
1958
|
+
result.putString("finalValue", value)
|
|
1959
|
+
promise?.resolve(result)
|
|
1960
|
+
}
|
|
1961
|
+
},
|
|
1962
|
+
)
|
|
1963
|
+
}
|
|
1964
|
+
} else {
|
|
1965
|
+
val errorMessage = "setSessionMetadataForKey: $requiredKeys"
|
|
1966
|
+
rejectCallback(promise, errorMessage)
|
|
1967
|
+
}
|
|
1968
|
+
}
|
|
1969
|
+
|
|
1970
|
+
fun getSessionMetadataForKey(data: ReadableMap, promise: Promise?) {
|
|
1971
|
+
val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("key", "String")))
|
|
1972
|
+
if (requiredKeys === null) {
|
|
1973
|
+
val key = data.getString("key")!!
|
|
1974
|
+
|
|
1975
|
+
sessionStore.let {
|
|
1976
|
+
if (it === null) {
|
|
1977
|
+
val errorMessage = "setSessionMetadataForKey: HmsSessionStore instance is not available!"
|
|
1978
|
+
rejectCallback(promise, errorMessage)
|
|
1979
|
+
return
|
|
1980
|
+
}
|
|
1981
|
+
|
|
1982
|
+
it.get(
|
|
1983
|
+
key,
|
|
1984
|
+
object : HMSSessionMetadataListener {
|
|
1985
|
+
override fun onError(error: HMSException) {
|
|
1986
|
+
promise?.reject(error.code.toString(), error.message)
|
|
1987
|
+
}
|
|
1988
|
+
override fun onSuccess(sessionMetadata: Any?) {
|
|
1989
|
+
if (sessionMetadata is String?) {
|
|
1990
|
+
promise?.resolve(sessionMetadata)
|
|
1991
|
+
} else {
|
|
1992
|
+
promise?.reject("6002", "Session Store: Unsupported type received for '$key' key, only String type is supported")
|
|
1993
|
+
}
|
|
1994
|
+
}
|
|
1995
|
+
},
|
|
1996
|
+
)
|
|
1997
|
+
}
|
|
1998
|
+
} else {
|
|
1999
|
+
val errorMessage = "getSessionMetadataForKey: $requiredKeys"
|
|
2000
|
+
rejectCallback(promise, errorMessage)
|
|
2001
|
+
}
|
|
2002
|
+
}
|
|
2003
|
+
|
|
2004
|
+
fun addKeyChangeListener(data: ReadableMap, promise: Promise?) {
|
|
2005
|
+
val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("keys", "Array"), Pair("uniqueId", "String")))
|
|
2006
|
+
if (requiredKeys === null) {
|
|
2007
|
+
val keys = ArrayList(data.getArray("keys")!!.toArrayList().map { it.toString() })
|
|
2008
|
+
val uniqueId = data.getString("uniqueId")!!
|
|
2009
|
+
|
|
2010
|
+
sessionStore.let {
|
|
2011
|
+
if (it === null) {
|
|
2012
|
+
val errorMessage = "setSessionMetadataForKey: HmsSessionStore instance is not available!"
|
|
2013
|
+
rejectCallback(promise, errorMessage)
|
|
2014
|
+
return
|
|
2015
|
+
}
|
|
2016
|
+
|
|
2017
|
+
val keyChangeListener = object : HMSKeyChangeListener {
|
|
2018
|
+
override fun onKeyChanged(key: String, value: Any?) {
|
|
2019
|
+
val map = Arguments.createMap()
|
|
2020
|
+
map.putString("id", id)
|
|
2021
|
+
map.putString("key", key)
|
|
2022
|
+
if (value is String?) {
|
|
2023
|
+
map.putString("value", value)
|
|
2024
|
+
} else {
|
|
2025
|
+
Log.e("HMSRNSDK", "Session Store: '$value' value received for '$key' key, expected only NullableString type for value")
|
|
2026
|
+
map.putString("value", null) // resetting value to `null`, as the current type is not supported
|
|
2027
|
+
}
|
|
2028
|
+
delegate.emitEvent("ON_SESSION_STORE_CHANGED", map)
|
|
2029
|
+
}
|
|
2030
|
+
}
|
|
2031
|
+
|
|
2032
|
+
val actionResultListener = object : HMSActionResultListener {
|
|
2033
|
+
override fun onError(error: HMSException) {
|
|
2034
|
+
promise?.reject(error.code.toString(), error.message)
|
|
2035
|
+
}
|
|
2036
|
+
override fun onSuccess() {
|
|
2037
|
+
keyChangeObservers[uniqueId] = keyChangeListener
|
|
2038
|
+
promise?.resolve(true)
|
|
2039
|
+
}
|
|
2040
|
+
}
|
|
2041
|
+
|
|
2042
|
+
it.addKeyChangeListener(
|
|
2043
|
+
keys,
|
|
2044
|
+
keyChangeListener,
|
|
2045
|
+
actionResultListener,
|
|
2046
|
+
)
|
|
2047
|
+
}
|
|
2048
|
+
} else {
|
|
2049
|
+
val errorMessage = "addKeyChangeListener: $requiredKeys"
|
|
2050
|
+
rejectCallback(promise, errorMessage)
|
|
2051
|
+
}
|
|
2052
|
+
}
|
|
2053
|
+
|
|
2054
|
+
fun removeKeyChangeListener(data: ReadableMap, promise: Promise?) {
|
|
2055
|
+
val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("uniqueId", "String")))
|
|
2056
|
+
if (requiredKeys === null) {
|
|
2057
|
+
val uniqueId = data.getString("uniqueId")!!
|
|
2058
|
+
|
|
2059
|
+
sessionStore.let { localSessionStore ->
|
|
2060
|
+
if (localSessionStore === null) {
|
|
2061
|
+
val errorMessage = "removeKeyChangeListener: HmsSessionStore instance is not available!"
|
|
2062
|
+
rejectCallback(promise, errorMessage)
|
|
2063
|
+
return
|
|
2064
|
+
}
|
|
2065
|
+
|
|
2066
|
+
keyChangeObservers[uniqueId].let {
|
|
2067
|
+
if (it == null) {
|
|
2068
|
+
val errorMessage = "removeKeyChangeListener: No listener found to remove for the '$uniqueId' uniqueId passed."
|
|
2069
|
+
rejectCallback(promise, errorMessage)
|
|
2070
|
+
} else {
|
|
2071
|
+
localSessionStore.removeKeyChangeListener(it)
|
|
2072
|
+
keyChangeObservers.remove(uniqueId)
|
|
2073
|
+
promise?.resolve(true)
|
|
2074
|
+
}
|
|
2075
|
+
}
|
|
2076
|
+
}
|
|
2077
|
+
} else {
|
|
2078
|
+
val errorMessage = "removeKeyChangeListener: $requiredKeys"
|
|
2079
|
+
rejectCallback(promise, errorMessage)
|
|
2080
|
+
}
|
|
2081
|
+
}
|
|
1743
2082
|
}
|