@100mslive/react-native-hms 1.10.4 → 1.10.6-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +9 -2
- package/android/local.properties +1 -8
- package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +8 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +52 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +6 -4
- package/android/src/main/java/com/reactnativehmssdk/Interactivity/HMSInteractivityDecoder.kt +50 -25
- package/android/src/main/java/com/reactnativehmssdk/Interactivity/HMSRNInteractivityCenter.kt +69 -1
- package/ios/HMSConstants.swift +1 -0
- package/ios/HMSDecoder.swift +9 -1
- package/ios/HMSHLSPlayerManager.swift +4 -1
- package/ios/HMSHelper.swift +28 -2
- package/ios/HMSInteractivityDecoder.swift +41 -0
- package/ios/HMSManager.m +34 -0
- package/ios/HMSManager.swift +66 -1
- package/ios/HMSRNInteractivityCenter.swift +41 -0
- package/ios/HMSRNSDK.swift +201 -3
- package/lib/commonjs/classes/HMSInteractivityCenter.js +58 -4
- package/lib/commonjs/classes/HMSInteractivityCenter.js.map +1 -1
- package/lib/commonjs/classes/HMSInteractivityEncoder.js +6 -0
- package/lib/commonjs/classes/HMSInteractivityEncoder.js.map +1 -1
- package/lib/commonjs/classes/HMSPermissions.js +2 -0
- package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
- package/lib/commonjs/classes/HMSSessionStore.js +1 -1
- package/lib/commonjs/classes/HMSSessionStore.js.map +1 -1
- package/lib/commonjs/classes/HMSVideoTrackSettings.js +3 -2
- package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
- package/lib/commonjs/classes/whiteboard/HMSWhiteboard.js +6 -0
- package/lib/commonjs/classes/whiteboard/HMSWhiteboard.js.map +1 -0
- package/lib/commonjs/classes/whiteboard/HMSWhiteboardListenerActions.js +11 -0
- package/lib/commonjs/classes/whiteboard/HMSWhiteboardListenerActions.js.map +1 -0
- package/lib/commonjs/classes/whiteboard/HMSWhiteboardState.js +12 -0
- package/lib/commonjs/classes/whiteboard/HMSWhiteboardState.js.map +1 -0
- package/lib/commonjs/classes/whiteboard/HMSWhiteboardUpdateType.js +12 -0
- package/lib/commonjs/classes/whiteboard/HMSWhiteboardUpdateType.js.map +1 -0
- package/lib/commonjs/classes/whiteboard/index.js +39 -0
- package/lib/commonjs/classes/whiteboard/index.js.map +1 -0
- package/lib/commonjs/classes/whiteboard/registerCallbacks.js +26 -0
- package/lib/commonjs/classes/whiteboard/registerCallbacks.js.map +1 -0
- package/lib/commonjs/index.js +12 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/classes/HMSInteractivityCenter.js +58 -4
- package/lib/module/classes/HMSInteractivityCenter.js.map +1 -1
- package/lib/module/classes/HMSInteractivityEncoder.js +6 -0
- package/lib/module/classes/HMSInteractivityEncoder.js.map +1 -1
- package/lib/module/classes/HMSPermissions.js +2 -0
- package/lib/module/classes/HMSPermissions.js.map +1 -1
- package/lib/module/classes/HMSSessionStore.js +1 -1
- package/lib/module/classes/HMSSessionStore.js.map +1 -1
- package/lib/module/classes/HMSVideoTrackSettings.js +3 -2
- package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
- package/lib/module/classes/whiteboard/HMSWhiteboard.js +2 -0
- package/lib/module/classes/whiteboard/HMSWhiteboard.js.map +1 -0
- package/lib/module/classes/whiteboard/HMSWhiteboardListenerActions.js +5 -0
- package/lib/module/classes/whiteboard/HMSWhiteboardListenerActions.js.map +1 -0
- package/lib/module/classes/whiteboard/HMSWhiteboardState.js +6 -0
- package/lib/module/classes/whiteboard/HMSWhiteboardState.js.map +1 -0
- package/lib/module/classes/whiteboard/HMSWhiteboardUpdateType.js +6 -0
- package/lib/module/classes/whiteboard/HMSWhiteboardUpdateType.js.map +1 -0
- package/lib/module/classes/whiteboard/index.js +4 -0
- package/lib/module/classes/whiteboard/index.js.map +1 -0
- package/lib/module/classes/whiteboard/registerCallbacks.js +18 -0
- package/lib/module/classes/whiteboard/registerCallbacks.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/classes/HMSInteractivityCenter.d.ts +19 -2
- package/lib/typescript/classes/HMSInteractivityEncoder.d.ts +2 -0
- package/lib/typescript/classes/HMSPermissions.d.ts +7 -0
- package/lib/typescript/classes/HMSVideoTrackSettings.d.ts +11 -0
- package/lib/typescript/classes/whiteboard/HMSWhiteboard.d.ts +10 -0
- package/lib/typescript/classes/whiteboard/HMSWhiteboardListenerActions.d.ts +3 -0
- package/lib/typescript/classes/whiteboard/HMSWhiteboardState.d.ts +4 -0
- package/lib/typescript/classes/whiteboard/HMSWhiteboardUpdateType.d.ts +4 -0
- package/lib/typescript/classes/whiteboard/index.d.ts +3 -0
- package/lib/typescript/classes/whiteboard/registerCallbacks.d.ts +8 -0
- package/lib/typescript/index.d.ts +1 -0
- package/package.json +1 -1
- package/sdk-versions.json +2 -2
- package/src/classes/HMSInteractivityCenter.ts +89 -10
- package/src/classes/HMSInteractivityEncoder.ts +8 -0
- package/src/classes/HMSPermissions.ts +9 -0
- package/src/classes/HMSSessionStore.ts +0 -3
- package/src/classes/HMSVideoTrackSettings.ts +15 -0
- package/src/classes/whiteboard/HMSWhiteboard.tsx +16 -0
- package/src/classes/whiteboard/HMSWhiteboardListenerActions.ts +3 -0
- package/src/classes/whiteboard/HMSWhiteboardState.tsx +4 -0
- package/src/classes/whiteboard/HMSWhiteboardUpdateType.tsx +4 -0
- package/src/classes/whiteboard/index.ts +3 -0
- package/src/classes/whiteboard/registerCallbacks.ts +34 -0
- package/src/index.ts +1 -0
- package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
package/android/build.gradle
CHANGED
|
@@ -12,7 +12,14 @@ buildscript {
|
|
|
12
12
|
if (ext.has("kotlinVersion")) {
|
|
13
13
|
ext.kotlinVersion()
|
|
14
14
|
} else {
|
|
15
|
-
ext.safeExtGet("kotlinVersion", "1.
|
|
15
|
+
ext.safeExtGet("kotlinVersion", "1.7.20")
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
ext.getKotlinGradlePluginVersion = {
|
|
19
|
+
if (ext.has("kotlinGradlePluginVersion")) {
|
|
20
|
+
ext.kotlinGradlePluginVersion()
|
|
21
|
+
} else {
|
|
22
|
+
ext.safeExtGet("kotlinGradlePluginVersion", "1.8.0")
|
|
16
23
|
}
|
|
17
24
|
}
|
|
18
25
|
if (project == rootProject) {
|
|
@@ -30,7 +37,7 @@ buildscript {
|
|
|
30
37
|
mavenCentral()
|
|
31
38
|
}
|
|
32
39
|
dependencies {
|
|
33
|
-
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${
|
|
40
|
+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getKotlinGradlePluginVersion()}"
|
|
34
41
|
}
|
|
35
42
|
}
|
|
36
43
|
|
package/android/local.properties
CHANGED
|
@@ -1,8 +1 @@
|
|
|
1
|
-
|
|
2
|
-
# as it contains information specific to your local configuration.
|
|
3
|
-
#
|
|
4
|
-
# Location of the SDK. This is only used by Gradle.
|
|
5
|
-
# For customization when using a Version Control System, please read the
|
|
6
|
-
# header note.
|
|
7
|
-
#Mon Nov 14 20:51:00 IST 2022
|
|
8
|
-
sdk.dir=/Users/jatinnagar/Library/Android/sdk
|
|
1
|
+
sdk.dir=/Users/yogesh/Library/Android/sdk
|
|
@@ -344,6 +344,14 @@ object HMSDecoder {
|
|
|
344
344
|
permissions.putBoolean("changeRole", hmsPermissions.changeRole)
|
|
345
345
|
permissions.putBoolean("pollRead", hmsPermissions.pollRead)
|
|
346
346
|
permissions.putBoolean("pollWrite", hmsPermissions.pollWrite)
|
|
347
|
+
|
|
348
|
+
val whiteboardPermissionMap: WritableMap = Arguments.createMap()
|
|
349
|
+
hmsPermissions.whiteboard.let { whiteBoardPermission ->
|
|
350
|
+
whiteboardPermissionMap.putBoolean("admin", whiteBoardPermission.admin)
|
|
351
|
+
whiteboardPermissionMap.putBoolean("read", whiteBoardPermission.read)
|
|
352
|
+
whiteboardPermissionMap.putBoolean("write", whiteBoardPermission.write)
|
|
353
|
+
}
|
|
354
|
+
permissions.putMap("whiteboard", whiteboardPermissionMap)
|
|
347
355
|
}
|
|
348
356
|
return permissions
|
|
349
357
|
}
|
|
@@ -1458,6 +1458,44 @@ class HMSManager(reactContext: ReactApplicationContext) :
|
|
|
1458
1458
|
}
|
|
1459
1459
|
// endregion
|
|
1460
1460
|
|
|
1461
|
+
//region Whiteboard
|
|
1462
|
+
@ReactMethod
|
|
1463
|
+
fun startWhiteboard(
|
|
1464
|
+
data: ReadableMap,
|
|
1465
|
+
promise: Promise?,
|
|
1466
|
+
) {
|
|
1467
|
+
val rnSDK = HMSHelper.getHms(data, hmsCollection)
|
|
1468
|
+
rnSDK?.let { sdk ->
|
|
1469
|
+
sdk.interactivityCenter?.let { center ->
|
|
1470
|
+
center.startWhiteboard(data, promise)
|
|
1471
|
+
return
|
|
1472
|
+
}
|
|
1473
|
+
}
|
|
1474
|
+
promise?.reject(
|
|
1475
|
+
"6004",
|
|
1476
|
+
"HMS SDK not initialized",
|
|
1477
|
+
)
|
|
1478
|
+
}
|
|
1479
|
+
|
|
1480
|
+
@ReactMethod
|
|
1481
|
+
fun stopWhiteboard(
|
|
1482
|
+
data: ReadableMap,
|
|
1483
|
+
promise: Promise?,
|
|
1484
|
+
) {
|
|
1485
|
+
val rnSDK = HMSHelper.getHms(data, hmsCollection)
|
|
1486
|
+
rnSDK?.let { sdk ->
|
|
1487
|
+
sdk.interactivityCenter?.let { center ->
|
|
1488
|
+
center.stopWhiteboard(promise)
|
|
1489
|
+
return
|
|
1490
|
+
}
|
|
1491
|
+
}
|
|
1492
|
+
promise?.reject(
|
|
1493
|
+
"6004",
|
|
1494
|
+
"HMS SDK not initialized",
|
|
1495
|
+
)
|
|
1496
|
+
}
|
|
1497
|
+
//endregion
|
|
1498
|
+
|
|
1461
1499
|
// region Noise Cancellation Plugin
|
|
1462
1500
|
@ReactMethod
|
|
1463
1501
|
fun enableNoiseCancellationPlugin(
|
|
@@ -1569,6 +1607,20 @@ class HMSManager(reactContext: ReactApplicationContext) :
|
|
|
1569
1607
|
}
|
|
1570
1608
|
// endregion
|
|
1571
1609
|
|
|
1610
|
+
// region Warning on JS side
|
|
1611
|
+
@ReactMethod
|
|
1612
|
+
fun addListener(eventName: String) {
|
|
1613
|
+
// Keep: Required for RN built in Event Emitter Calls.
|
|
1614
|
+
// Fixes Warning - `new NativeEventEmitter()` was called with a non-null argument without the required `addListener` method.
|
|
1615
|
+
}
|
|
1616
|
+
|
|
1617
|
+
@ReactMethod
|
|
1618
|
+
fun removeListeners(count: Int) {
|
|
1619
|
+
// Keep: Required for RN built in Event Emitter Calls.
|
|
1620
|
+
// Fixes Warning - `new NativeEventEmitter()` was called with a non-null argument without the required `removeListeners` method.
|
|
1621
|
+
}
|
|
1622
|
+
// endregion
|
|
1623
|
+
|
|
1572
1624
|
// region ActivityLifecycleCallbacks
|
|
1573
1625
|
|
|
1574
1626
|
override fun onActivityCreated(
|
|
@@ -256,9 +256,11 @@ class HMSRNSDK(
|
|
|
256
256
|
delegate.emitEvent("ON_PREVIEW", data)
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
259
|
+
override fun peerListUpdated(
|
|
260
|
+
addedPeers: ArrayList<HMSPeer>?,
|
|
261
|
+
removedPeers: ArrayList<HMSPeer>?,
|
|
262
|
+
) {
|
|
263
|
+
super.peerListUpdated(addedPeers, removedPeers)
|
|
262
264
|
if (eventsEnableStatus["ON_PEER_LIST_UPDATED"] != true) {
|
|
263
265
|
return
|
|
264
266
|
}
|
|
@@ -278,11 +280,11 @@ class HMSRNSDK(
|
|
|
278
280
|
}
|
|
279
281
|
}
|
|
280
282
|
|
|
283
|
+
data.putString("id", id)
|
|
281
284
|
data.putArray("addedPeers", addedPeersArray)
|
|
282
285
|
data.putArray("removedPeers", removedPeersArray)
|
|
283
286
|
delegate.emitEvent("ON_PEER_LIST_UPDATED", data)
|
|
284
287
|
}
|
|
285
|
-
*/
|
|
286
288
|
},
|
|
287
289
|
)
|
|
288
290
|
} else {
|
package/android/src/main/java/com/reactnativehmssdk/Interactivity/HMSInteractivityDecoder.kt
CHANGED
|
@@ -17,8 +17,12 @@ import live.hms.video.polls.network.HMSPollLeaderboardEntry
|
|
|
17
17
|
import live.hms.video.polls.network.HMSPollLeaderboardSummary
|
|
18
18
|
import live.hms.video.polls.network.PollLeaderboardResponse
|
|
19
19
|
import live.hms.video.polls.network.PollResultsDisplay
|
|
20
|
+
import live.hms.video.whiteboard.HMSWhiteboard
|
|
21
|
+
import live.hms.video.whiteboard.HMSWhiteboardUpdate
|
|
22
|
+
import live.hms.video.whiteboard.State
|
|
20
23
|
|
|
21
24
|
object HMSInteractivityDecoder {
|
|
25
|
+
//region poll methods
|
|
22
26
|
fun getPollUpdateType(hmsPollUpdateType: HMSPollUpdateType): Int {
|
|
23
27
|
return when (hmsPollUpdateType) {
|
|
24
28
|
HMSPollUpdateType.started -> 0
|
|
@@ -280,31 +284,6 @@ object HMSInteractivityDecoder {
|
|
|
280
284
|
return readableArray
|
|
281
285
|
}
|
|
282
286
|
|
|
283
|
-
/*
|
|
284
|
-
|
|
285
|
-
static func getHMSPollQuestionResponseResults(_ hmsPollQuestionResponseResults: [HMSPollQuestionResponseResult]) -> [[String: AnyHashable]] {
|
|
286
|
-
var results = [[String: AnyHashable]]()
|
|
287
|
-
|
|
288
|
-
hmsPollQuestionResponseResults.forEach { result in
|
|
289
|
-
results.append(getHMSPollQuestionResponseResult(result))
|
|
290
|
-
}
|
|
291
|
-
return results
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
static func getHMSPollQuestionResponseResult(_ hmsPollQuestionResponseResult: HMSPollQuestionResponseResult) -> [String: AnyHashable] {
|
|
295
|
-
var result: [String: AnyHashable] = [
|
|
296
|
-
"question": hmsPollQuestionResponseResult.question
|
|
297
|
-
]
|
|
298
|
-
if let correct = hmsPollQuestionResponseResult.correct {
|
|
299
|
-
result["correct"] = correct
|
|
300
|
-
}
|
|
301
|
-
if let error = hmsPollQuestionResponseResult.error {
|
|
302
|
-
result["error"] = error.localizedDescription
|
|
303
|
-
}
|
|
304
|
-
return result
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
*/
|
|
308
287
|
fun getHMSPollQuestionResponseResults(hmsPollQuestionResponseResults: PollAnswerResponse): WritableArray {
|
|
309
288
|
val results = Arguments.createArray()
|
|
310
289
|
|
|
@@ -410,4 +389,50 @@ object HMSInteractivityDecoder {
|
|
|
410
389
|
|
|
411
390
|
return result
|
|
412
391
|
}
|
|
392
|
+
//endregion
|
|
393
|
+
|
|
394
|
+
//region whiteboard methods
|
|
395
|
+
fun getHMSWhiteboard(hmsWhiteboard: HMSWhiteboard): WritableMap {
|
|
396
|
+
val data: WritableMap = Arguments.createMap()
|
|
397
|
+
|
|
398
|
+
data.putString("id", hmsWhiteboard.id)
|
|
399
|
+
data.putBoolean("isOwner", hmsWhiteboard.isOwner)
|
|
400
|
+
data.putString("state", getWhiteboardState(hmsWhiteboard.state))
|
|
401
|
+
hmsWhiteboard.title?.let { title ->
|
|
402
|
+
data.putString("title", title)
|
|
403
|
+
}
|
|
404
|
+
hmsWhiteboard.owner?.let { owner ->
|
|
405
|
+
data.putMap("owner", HMSDecoder.getHmsPeerSubset(owner))
|
|
406
|
+
}
|
|
407
|
+
data.putString("url", hmsWhiteboard.url)
|
|
408
|
+
return data
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
enum class JSWhiteboardState(val label: String) {
|
|
412
|
+
Start("STARTED"),
|
|
413
|
+
Stop("STOPPED"),
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
private fun getWhiteboardState(hmsWhiteboardState: State): String {
|
|
417
|
+
return when (hmsWhiteboardState) {
|
|
418
|
+
State.Started -> {
|
|
419
|
+
JSWhiteboardState.Start.label
|
|
420
|
+
}
|
|
421
|
+
State.Stopped -> {
|
|
422
|
+
JSWhiteboardState.Stop.label
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
fun getWhiteboardUpdateType(hmsWhiteboardUpdate: HMSWhiteboardUpdate): String {
|
|
428
|
+
return when (hmsWhiteboardUpdate) {
|
|
429
|
+
is HMSWhiteboardUpdate.Start -> {
|
|
430
|
+
JSWhiteboardState.Start.label
|
|
431
|
+
}
|
|
432
|
+
is HMSWhiteboardUpdate.Stop -> {
|
|
433
|
+
JSWhiteboardState.Stop.label
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
//endregion
|
|
413
438
|
}
|
package/android/src/main/java/com/reactnativehmssdk/Interactivity/HMSRNInteractivityCenter.kt
CHANGED
|
@@ -13,10 +13,12 @@ import live.hms.video.polls.network.PollLeaderboardResponse
|
|
|
13
13
|
import live.hms.video.sdk.HMSActionResultListener
|
|
14
14
|
import live.hms.video.sdk.HMSSDK
|
|
15
15
|
import live.hms.video.sdk.HmsTypedActionResultListener
|
|
16
|
+
import live.hms.video.whiteboard.HMSWhiteboardUpdate
|
|
17
|
+
import live.hms.video.whiteboard.HMSWhiteboardUpdateListener
|
|
16
18
|
|
|
17
19
|
class HMSRNInteractivityCenter(private val sdk: HMSSDK, private val rnSDK: HMSRNSDK) {
|
|
18
20
|
init {
|
|
19
|
-
// Listen for poll updates
|
|
21
|
+
//region Listen for poll updates
|
|
20
22
|
this.sdk.getHmsInteractivityCenter().pollUpdateListener =
|
|
21
23
|
object : HmsPollUpdateListener {
|
|
22
24
|
override fun onPollUpdate(
|
|
@@ -35,8 +37,34 @@ class HMSRNInteractivityCenter(private val sdk: HMSSDK, private val rnSDK: HMSRN
|
|
|
35
37
|
rnSDK.delegate.emitEvent("ON_POLL_UPDATE", data)
|
|
36
38
|
}
|
|
37
39
|
}
|
|
40
|
+
//endregion
|
|
41
|
+
|
|
42
|
+
//region Listen for whiteboard updates
|
|
43
|
+
this.sdk.getHmsInteractivityCenter().setWhiteboardUpdateListener(
|
|
44
|
+
object : HMSWhiteboardUpdateListener {
|
|
45
|
+
override fun onUpdate(hmsWhiteboardUpdate: HMSWhiteboardUpdate) {
|
|
46
|
+
if (rnSDK.eventsEnableStatus["ON_WHITEBOARD_UPDATE"] != true) {
|
|
47
|
+
return
|
|
48
|
+
}
|
|
49
|
+
val data: WritableMap = Arguments.createMap()
|
|
50
|
+
when (hmsWhiteboardUpdate) {
|
|
51
|
+
is HMSWhiteboardUpdate.Start -> {
|
|
52
|
+
data.putMap("hmsWhiteboard", HMSInteractivityDecoder.getHMSWhiteboard(hmsWhiteboardUpdate.hmsWhiteboard))
|
|
53
|
+
data.putString("updateType", HMSInteractivityDecoder.getWhiteboardUpdateType(hmsWhiteboardUpdate))
|
|
54
|
+
}
|
|
55
|
+
is HMSWhiteboardUpdate.Stop -> {
|
|
56
|
+
data.putMap("hmsWhiteboard", HMSInteractivityDecoder.getHMSWhiteboard(hmsWhiteboardUpdate.hmsWhiteboard))
|
|
57
|
+
data.putString("updateType", HMSInteractivityDecoder.getWhiteboardUpdateType(hmsWhiteboardUpdate))
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
rnSDK.delegate.emitEvent("ON_WHITEBOARD_UPDATE", data)
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
)
|
|
64
|
+
//endregion
|
|
38
65
|
}
|
|
39
66
|
|
|
67
|
+
//region poll methods
|
|
40
68
|
fun quickStartPoll(
|
|
41
69
|
data: ReadableMap,
|
|
42
70
|
promise: Promise?,
|
|
@@ -159,4 +187,44 @@ class HMSRNInteractivityCenter(private val sdk: HMSSDK, private val rnSDK: HMSRN
|
|
|
159
187
|
},
|
|
160
188
|
)
|
|
161
189
|
}
|
|
190
|
+
//endregion
|
|
191
|
+
|
|
192
|
+
//region whiteboard methods
|
|
193
|
+
fun startWhiteboard(
|
|
194
|
+
data: ReadableMap,
|
|
195
|
+
promise: Promise?,
|
|
196
|
+
) {
|
|
197
|
+
val whiteboardTitle = data.getString("title")
|
|
198
|
+
if (whiteboardTitle == null) {
|
|
199
|
+
promise?.reject("6004", "whiteboard title is required")
|
|
200
|
+
return
|
|
201
|
+
}
|
|
202
|
+
sdk.getHmsInteractivityCenter().startWhiteboard(
|
|
203
|
+
whiteboardTitle,
|
|
204
|
+
object : HMSActionResultListener {
|
|
205
|
+
override fun onSuccess() {
|
|
206
|
+
promise?.resolve(true)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
override fun onError(error: HMSException) {
|
|
210
|
+
promise?.reject(error.code.toString(), error.description)
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
)
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
fun stopWhiteboard(promise: Promise?) {
|
|
217
|
+
sdk.getHmsInteractivityCenter().stopWhiteboard(
|
|
218
|
+
object : HMSActionResultListener {
|
|
219
|
+
override fun onSuccess() {
|
|
220
|
+
promise?.resolve(true)
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
override fun onError(error: HMSException) {
|
|
224
|
+
promise?.reject(error.code.toString(), error.description)
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
)
|
|
228
|
+
}
|
|
229
|
+
//endregion
|
|
162
230
|
}
|
package/ios/HMSConstants.swift
CHANGED
|
@@ -32,4 +32,5 @@ struct HMSConstants {
|
|
|
32
32
|
static let ON_SESSION_STORE_AVAILABLE = "ON_SESSION_STORE_AVAILABLE"
|
|
33
33
|
static let ON_SESSION_STORE_CHANGED = "ON_SESSION_STORE_CHANGED"
|
|
34
34
|
static let ON_POLL_UPDATE = "ON_POLL_UPDATE"
|
|
35
|
+
static let ON_WHITEBOARD_UPDATE = "ON_WHITEBOARD_UPDATE"
|
|
35
36
|
}
|
package/ios/HMSDecoder.swift
CHANGED
|
@@ -451,7 +451,7 @@ class HMSDecoder: NSObject {
|
|
|
451
451
|
}
|
|
452
452
|
|
|
453
453
|
static private func getPermissions (_ permissions: HMSPermissions) -> [String: Any] {
|
|
454
|
-
[
|
|
454
|
+
var permissionsDict: [String: Any] = [
|
|
455
455
|
"endRoom": permissions.endRoom ?? false,
|
|
456
456
|
"removeOthers": permissions.removeOthers ?? false,
|
|
457
457
|
"browserRecording": permissions.browserRecording ?? false,
|
|
@@ -463,6 +463,14 @@ class HMSDecoder: NSObject {
|
|
|
463
463
|
"pollRead": permissions.pollRead ?? false,
|
|
464
464
|
"pollWrite": permissions.pollWrite ?? false
|
|
465
465
|
]
|
|
466
|
+
if let whiteboardPermissions = permissions.whiteboard {
|
|
467
|
+
permissionsDict["whiteboard"] = [
|
|
468
|
+
"admin": whiteboardPermissions.admin,
|
|
469
|
+
"read": whiteboardPermissions.read,
|
|
470
|
+
"write": whiteboardPermissions.write
|
|
471
|
+
]
|
|
472
|
+
}
|
|
473
|
+
return permissionsDict
|
|
466
474
|
}
|
|
467
475
|
|
|
468
476
|
// MARK: - HMSRole Publish Settings and Utility functions
|
|
@@ -339,7 +339,10 @@ class HMSHLSPlayer: UIView {
|
|
|
339
339
|
attachPlayerPlaybackListeners()
|
|
340
340
|
|
|
341
341
|
hmsHLSPlayerViewController?.showsPlaybackControls = false
|
|
342
|
-
hmsHLSPlayerViewController?.allowsPictureInPicturePlayback =
|
|
342
|
+
hmsHLSPlayerViewController?.allowsPictureInPicturePlayback = true
|
|
343
|
+
if #available(iOS 14.2, *) {
|
|
344
|
+
hmsHLSPlayerViewController?.canStartPictureInPictureAutomaticallyFromInline = true
|
|
345
|
+
}
|
|
343
346
|
}
|
|
344
347
|
|
|
345
348
|
required init?(coder: NSCoder) {
|
package/ios/HMSHelper.swift
CHANGED
|
@@ -167,7 +167,7 @@ class HMSHelper: NSObject {
|
|
|
167
167
|
isPrebuilt: isPrebuilt)
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
static func getLocalVideoSettings(_ settings: NSDictionary?) -> HMSVideoTrackSettings? {
|
|
170
|
+
static func getLocalVideoSettings(_ settings: NSDictionary?, _ videoPlugin: HMSVideoPlugin?) -> HMSVideoTrackSettings? {
|
|
171
171
|
if settings === nil {
|
|
172
172
|
return nil
|
|
173
173
|
}
|
|
@@ -180,6 +180,7 @@ class HMSHelper: NSObject {
|
|
|
180
180
|
let cameraFacingEncoded = HMSHelper.getCameraFacing(cameraFacing)
|
|
181
181
|
let initialState = settings?.value(forKey: "initialState") as? String
|
|
182
182
|
let initialStateEncoded = HMSHelper.getHMSTrackSettingsInitState(initialState)
|
|
183
|
+
let videoPlugins: [HMSVideoPlugin]? = if let videoPlugin = videoPlugin { [videoPlugin] } else { nil }
|
|
183
184
|
let hmsTrackSettings = HMSVideoTrackSettings(codec: codec,
|
|
184
185
|
resolution: resolution,
|
|
185
186
|
maxBitrate: maxBitrate,
|
|
@@ -188,7 +189,7 @@ class HMSHelper: NSObject {
|
|
|
188
189
|
simulcastSettings: nil,
|
|
189
190
|
trackDescription: trackDescription,
|
|
190
191
|
initialMuteState: initialStateEncoded,
|
|
191
|
-
videoPlugins:
|
|
192
|
+
videoPlugins: videoPlugins)
|
|
192
193
|
return hmsTrackSettings
|
|
193
194
|
}
|
|
194
195
|
|
|
@@ -291,6 +292,31 @@ class HMSHelper: NSObject {
|
|
|
291
292
|
return nil
|
|
292
293
|
}
|
|
293
294
|
|
|
295
|
+
static func getHMSVideoPlugin(_ videoPluginData: NSDictionary?) -> HMSVideoPlugin? {
|
|
296
|
+
guard let videoPluginDict = videoPluginData else {
|
|
297
|
+
print(#function, "No Video Plugin data passed!")
|
|
298
|
+
return nil
|
|
299
|
+
}
|
|
300
|
+
guard let videoPluginType = videoPluginDict.value(forKey: "type") as? String else {
|
|
301
|
+
print(#function, "No HMSVideoPlugin `type` passed!")
|
|
302
|
+
return nil
|
|
303
|
+
}
|
|
304
|
+
switch videoPluginType {
|
|
305
|
+
case "HMSVirtualBackgroundPlugin":
|
|
306
|
+
if #available(iOS 15.0, *) {
|
|
307
|
+
return HMSVirtualBackgroundPlugin(backgroundImage: nil, blurRadius: 100)
|
|
308
|
+
} else {
|
|
309
|
+
print(#function, "HMSVirtualBackgroundPlugin is not available below iOS 15.0")
|
|
310
|
+
return nil
|
|
311
|
+
}
|
|
312
|
+
case "HMSVideoFilterPlugin":
|
|
313
|
+
return HMSVideoFilterPlugin()
|
|
314
|
+
default:
|
|
315
|
+
print(#function, "Unknown HMSVideoPlugin `type` passed!")
|
|
316
|
+
return nil
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
294
320
|
static func getAudioMixerSourceMap() -> [String: HMSAudioNode]? {
|
|
295
321
|
return self.audioMixerSourceHashMap
|
|
296
322
|
}
|
|
@@ -270,4 +270,45 @@ class HMSInteractivityDecoder {
|
|
|
270
270
|
|
|
271
271
|
return result
|
|
272
272
|
}
|
|
273
|
+
|
|
274
|
+
static func getHMSWhiteboard(_ hmsWhiteboard: HMSWhiteboard) -> [String: Any] {
|
|
275
|
+
var result: [String: Any] = [
|
|
276
|
+
"id": hmsWhiteboard.id,
|
|
277
|
+
"state": getWhiteboardState(hmsWhiteboard.state)
|
|
278
|
+
]
|
|
279
|
+
if let owner = hmsWhiteboard.owner {
|
|
280
|
+
result["owner"] = HMSDecoder.getHmsPeerSubset(owner)
|
|
281
|
+
}
|
|
282
|
+
if let title = hmsWhiteboard.title {
|
|
283
|
+
result["title"] = title
|
|
284
|
+
}
|
|
285
|
+
if let urlString = hmsWhiteboard.url?.absoluteString {
|
|
286
|
+
result["url"] = urlString
|
|
287
|
+
}
|
|
288
|
+
return result
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
static func getWhiteboardState(_ state: HMSWhiteboard.WhiteboardState) -> String {
|
|
292
|
+
switch state {
|
|
293
|
+
case .started:
|
|
294
|
+
return "STARTED"
|
|
295
|
+
case .stopped:
|
|
296
|
+
return "STOPPED"
|
|
297
|
+
@unknown default:
|
|
298
|
+
print("@unknown default case: Invalid HMSWhiteboardUpdateType")
|
|
299
|
+
return "STOPPED"
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
static func getWhiteboardUpdateType(_ type: HMSWhiteboardUpdateType) -> String {
|
|
304
|
+
switch type {
|
|
305
|
+
case .started:
|
|
306
|
+
return "STARTED"
|
|
307
|
+
case .stopped:
|
|
308
|
+
return "STOPPED"
|
|
309
|
+
@unknown default:
|
|
310
|
+
print("@unknown default case: Invalid HMSWhiteboardUpdateType")
|
|
311
|
+
return "STOPPED"
|
|
312
|
+
}
|
|
313
|
+
}
|
|
273
314
|
}
|
package/ios/HMSManager.m
CHANGED
|
@@ -353,4 +353,38 @@ RCT_EXTERN_METHOD(isNoiseCancellationPluginAvailable
|
|
|
353
353
|
: (RCTPromiseResolveBlock)resolve
|
|
354
354
|
: (RCTPromiseRejectBlock)reject)
|
|
355
355
|
|
|
356
|
+
#pragma mark - Noise Cancellation Plugin
|
|
357
|
+
|
|
358
|
+
RCT_EXTERN_METHOD(enableVideoPlugin
|
|
359
|
+
: (NSDictionary)data
|
|
360
|
+
: (RCTPromiseResolveBlock)resolve
|
|
361
|
+
: (RCTPromiseRejectBlock)reject)
|
|
362
|
+
|
|
363
|
+
RCT_EXTERN_METHOD(disableVideoPlugin
|
|
364
|
+
: (NSDictionary)data
|
|
365
|
+
: (RCTPromiseResolveBlock)resolve
|
|
366
|
+
: (RCTPromiseRejectBlock)reject)
|
|
367
|
+
|
|
368
|
+
RCT_EXTERN_METHOD(changeVirtualBackground
|
|
369
|
+
: (NSDictionary)data
|
|
370
|
+
: (RCTPromiseResolveBlock)resolve
|
|
371
|
+
: (RCTPromiseRejectBlock)reject)
|
|
372
|
+
|
|
373
|
+
RCT_EXTERN_METHOD(setVideoFilterParameter
|
|
374
|
+
: (NSDictionary)data
|
|
375
|
+
: (RCTPromiseResolveBlock)resolve
|
|
376
|
+
: (RCTPromiseRejectBlock)reject)
|
|
377
|
+
|
|
378
|
+
#pragma mark - Interactivity Center - Whiteboard
|
|
379
|
+
|
|
380
|
+
RCT_EXTERN_METHOD(startWhiteboard
|
|
381
|
+
: (NSDictionary)data
|
|
382
|
+
: (RCTPromiseResolveBlock)resolve
|
|
383
|
+
: (RCTPromiseRejectBlock)reject)
|
|
384
|
+
|
|
385
|
+
RCT_EXTERN_METHOD(stopWhiteboard
|
|
386
|
+
: (NSDictionary)data
|
|
387
|
+
: (RCTPromiseResolveBlock)resolve
|
|
388
|
+
: (RCTPromiseRejectBlock)reject)
|
|
389
|
+
|
|
356
390
|
@end
|
package/ios/HMSManager.swift
CHANGED
|
@@ -37,7 +37,7 @@ class HMSManager: RCTEventEmitter {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
override func supportedEvents() -> [String]! {
|
|
40
|
-
return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED, HMSConstants.ON_SESSION_STORE_AVAILABLE, HMSConstants.ON_SESSION_STORE_CHANGED, HMSConstants.ON_PEER_LIST_UPDATED, HMSConstants.ON_POLL_UPDATE]
|
|
40
|
+
return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED, HMSConstants.ON_SESSION_STORE_AVAILABLE, HMSConstants.ON_SESSION_STORE_CHANGED, HMSConstants.ON_PEER_LIST_UPDATED, HMSConstants.ON_POLL_UPDATE, HMSConstants.ON_WHITEBOARD_UPDATE]
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
// MARK: - HMS SDK Delegate Callbacks
|
|
@@ -762,4 +762,69 @@ class HMSManager: RCTEventEmitter {
|
|
|
762
762
|
}
|
|
763
763
|
rnsdk.isNoiseCancellationPluginAvailable(data, resolve, reject)
|
|
764
764
|
}
|
|
765
|
+
|
|
766
|
+
// MARK: - Video Plugin Functions
|
|
767
|
+
|
|
768
|
+
@objc
|
|
769
|
+
func enableVideoPlugin( _ data: NSDictionary,
|
|
770
|
+
_ resolve: RCTPromiseResolveBlock?,
|
|
771
|
+
_ reject: RCTPromiseRejectBlock?) {
|
|
772
|
+
guard let rnsdk = HMSHelper.getHms(data, hmsCollection) else {
|
|
773
|
+
reject?("6004", "HMSRNSDK instance not found!", nil)
|
|
774
|
+
return
|
|
775
|
+
}
|
|
776
|
+
rnsdk.enableVideoPlugin(data, resolve, reject)
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
@objc
|
|
780
|
+
func disableVideoPlugin(_ data: NSDictionary,
|
|
781
|
+
_ resolve: RCTPromiseResolveBlock?,
|
|
782
|
+
_ reject: RCTPromiseRejectBlock?) {
|
|
783
|
+
guard let rnsdk = HMSHelper.getHms(data, hmsCollection) else {
|
|
784
|
+
reject?("6004", "HMSRNSDK instance not found!", nil)
|
|
785
|
+
return
|
|
786
|
+
}
|
|
787
|
+
rnsdk.disableVideoPlugin(data, resolve, reject)
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
@objc
|
|
791
|
+
func changeVirtualBackground(_ data: NSDictionary,
|
|
792
|
+
_ resolve: RCTPromiseResolveBlock?,
|
|
793
|
+
_ reject: RCTPromiseRejectBlock?) {
|
|
794
|
+
guard let rnsdk = HMSHelper.getHms(data, hmsCollection) else {
|
|
795
|
+
reject?("6004", "HMSRNSDK instance not found!", nil)
|
|
796
|
+
return
|
|
797
|
+
}
|
|
798
|
+
rnsdk.changeVirtualBackground(data, resolve, reject)
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
@objc
|
|
802
|
+
func setVideoFilterParameter(_ data: NSDictionary,
|
|
803
|
+
_ resolve: RCTPromiseResolveBlock?,
|
|
804
|
+
_ reject: RCTPromiseRejectBlock?) {
|
|
805
|
+
guard let rnsdk = HMSHelper.getHms(data, hmsCollection) else {
|
|
806
|
+
reject?("6004", "HMSRNSDK instance not found!", nil)
|
|
807
|
+
return
|
|
808
|
+
}
|
|
809
|
+
rnsdk.setVideoFilterParameter(data, resolve, reject)
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
// MARK: - Interactivity Center - Whiteboard
|
|
813
|
+
@objc
|
|
814
|
+
func startWhiteboard(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
815
|
+
guard let rnsdk = HMSHelper.getHms(data, hmsCollection), let interactivity = rnsdk.interactivity else {
|
|
816
|
+
reject?("6004", "HMSRNSDK instance not found!", nil)
|
|
817
|
+
return
|
|
818
|
+
}
|
|
819
|
+
interactivity.startWhiteboard(resolve, reject)
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
@objc
|
|
823
|
+
func stopWhiteboard(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
824
|
+
guard let rnsdk = HMSHelper.getHms(data, hmsCollection), let interactivity = rnsdk.interactivity else {
|
|
825
|
+
reject?("6004", "HMSRNSDK instance not found!", nil)
|
|
826
|
+
return
|
|
827
|
+
}
|
|
828
|
+
interactivity.stopWhiteboard(resolve, reject)
|
|
829
|
+
}
|
|
765
830
|
}
|
|
@@ -27,8 +27,27 @@ class HMSRNInteractivityCenter {
|
|
|
27
27
|
["update": update.rawValue, "updatedPoll": HMSInteractivityDecoder.getHMSPoll(updatedPoll)]
|
|
28
28
|
)
|
|
29
29
|
}
|
|
30
|
+
|
|
31
|
+
hmssdk.interactivityCenter.addWhiteboardUpdateListener { [weak self] hmsWhiteboard, hmsWhiteboardUpdateType in
|
|
32
|
+
guard let self = self else { return }
|
|
33
|
+
guard let enabledEvents = self.hmsrnsdk?.eventsEnableStatus, enabledEvents[HMSConstants.ON_WHITEBOARD_UPDATE] == true else {
|
|
34
|
+
print("HMSConstants.ON_WHITEBOARD_UPDATE event is not enabled")
|
|
35
|
+
return
|
|
36
|
+
}
|
|
37
|
+
var hmsWhiteboardDict = HMSInteractivityDecoder.getHMSWhiteboard(hmsWhiteboard)
|
|
38
|
+
hmsWhiteboardDict["isOwner"] = hmsWhiteboard.owner?.peerID == self.hmssdk?.localPeer?.peerID
|
|
39
|
+
|
|
40
|
+
self.hmsrnsdk?.delegate?.emitEvent(
|
|
41
|
+
HMSConstants.ON_WHITEBOARD_UPDATE,
|
|
42
|
+
[
|
|
43
|
+
"hmsWhiteboard": hmsWhiteboardDict,
|
|
44
|
+
"updateType": HMSInteractivityDecoder.getWhiteboardUpdateType(hmsWhiteboardUpdateType)
|
|
45
|
+
]
|
|
46
|
+
)
|
|
47
|
+
}
|
|
30
48
|
}
|
|
31
49
|
|
|
50
|
+
// MARK: Poll Methods
|
|
32
51
|
func quickStartPoll(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
33
52
|
let pollBuilder = HMSInteractivityHelper.getPollBuilderFromDict(data, sdkRoles: hmssdk?.roles)
|
|
34
53
|
|
|
@@ -117,4 +136,26 @@ class HMSRNInteractivityCenter {
|
|
|
117
136
|
}
|
|
118
137
|
}
|
|
119
138
|
}
|
|
139
|
+
|
|
140
|
+
// MARK: - Whiteboard Methods
|
|
141
|
+
|
|
142
|
+
func startWhiteboard(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
143
|
+
self.hmssdk?.interactivityCenter.startWhiteboard { success, error in
|
|
144
|
+
if let error = error {
|
|
145
|
+
reject?("6004", error.localizedDescription, nil)
|
|
146
|
+
return
|
|
147
|
+
}
|
|
148
|
+
resolve?(success)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
func stopWhiteboard(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
153
|
+
self.hmssdk?.interactivityCenter.stopWhiteboard { success, error in
|
|
154
|
+
if let error = error {
|
|
155
|
+
reject?("6004", error.localizedDescription, nil)
|
|
156
|
+
return
|
|
157
|
+
}
|
|
158
|
+
resolve?(success)
|
|
159
|
+
}
|
|
160
|
+
}
|
|
120
161
|
}
|