11package com.livekit.reactnative
22
3+ import android.annotation.SuppressLint
4+ import android.content.Context
35import com.facebook.react.bridge.*
46import com.livekit.reactnative.audio.AudioDeviceKind
57import com.livekit.reactnative.audio.AudioManagerUtils
@@ -17,24 +19,71 @@ class LivekitReactNativeModule(reactContext: ReactApplicationContext) : ReactCon
1719 fun configureAudio (config : ReadableMap ) {
1820 val androidConfig = config.getMap(" android" ) ? : return
1921
20- androidConfig.getArray(" preferredOutputList" )?.let { preferredOutputList ->
21- val preferredDeviceList = preferredOutputList.toArrayList().mapNotNull { output ->
22- val outputStr = output as ? String
23- AudioDeviceKind .fromTypeName(outputStr)?.audioDeviceClass
22+ if (androidConfig.hasKey(" preferredOutputList" )) {
23+ androidConfig.getArray(" preferredOutputList" )?.let { preferredOutputList ->
24+ val preferredDeviceList = preferredOutputList.toArrayList().mapNotNull { output ->
25+ val outputStr = output as ? String
26+ AudioDeviceKind .fromTypeName(outputStr)?.audioDeviceClass
27+ }
28+ audioManager.preferredDeviceList = preferredDeviceList
2429 }
25- audioManager.preferredDeviceList = preferredDeviceList
2630 }
2731
28- androidConfig.getString(" audioMode" )?.let { audioModeString ->
29- val audioMode = AudioManagerUtils .audioModeFromString(audioModeString)
30- if (audioMode != null ) {
31- audioManager.setAudioMode(audioMode)
32+ if (androidConfig.hasKey(" audioTypeOptions" )) {
33+ val audioTypeOptions = androidConfig.getMap(" audioTypeOptions" ) ? : return
34+
35+ if (audioTypeOptions.hasKey(" manageAudioFocus" )) {
36+ val manageFocus = audioTypeOptions.getBoolean(" manageAudioFocus" )
37+ audioManager.setManageAudioFocus(manageFocus)
3238 }
33- }
34- androidConfig.getString(" audioFocusMode" )?.let { focusModeString ->
35- val focusMode = AudioManagerUtils .focusModeFromString(focusModeString)
36- if (focusMode != null ) {
37- audioManager.setFocusMode(focusMode)
39+ if (audioTypeOptions.hasKey(" audioMode" )) {
40+ audioTypeOptions.getString(" audioMode" )?.let { audioModeString ->
41+ val audioMode = AudioManagerUtils .audioModeFromString(audioModeString)
42+ if (audioMode != null ) {
43+ audioManager.setAudioMode(audioMode)
44+ }
45+ }
46+ }
47+
48+ if (audioTypeOptions.hasKey(" audioFocusMode" )) {
49+ audioTypeOptions.getString(" audioFocusMode" )?.let { focusModeString ->
50+ val focusMode = AudioManagerUtils .focusModeFromString(focusModeString)
51+ if (focusMode != null ) {
52+ audioManager.setFocusMode(focusMode)
53+ }
54+ }
55+ }
56+
57+ if (audioTypeOptions.hasKey(" audioStreamType" )) {
58+ audioTypeOptions.getString(" audioStreamType" )?.let { streamTypeString ->
59+ val streamType = AudioManagerUtils .audioStreamTypeFromString(streamTypeString)
60+ if (streamType != null ) {
61+ audioManager.setAudioStreamType(streamType)
62+ }
63+ }
64+ }
65+
66+ if (audioTypeOptions.hasKey(" audioAttributesUsageType" )) {
67+ audioTypeOptions.getString(" audioAttributesUsageType" )?.let { usageTypeString ->
68+ val usageType = AudioManagerUtils .audioAttributesUsageTypeFromString(usageTypeString)
69+ if (usageType != null ) {
70+ audioManager.setAudioAttributesUsageType(usageType)
71+ }
72+ }
73+ }
74+
75+ if (audioTypeOptions.hasKey(" audioAttributesContentType" )) {
76+ audioTypeOptions.getString(" audioAttributesContentType" )?.let { contentTypeString ->
77+ val contentType = AudioManagerUtils .audioAttributesContentTypeFromString(contentTypeString)
78+ if (contentType != null ) {
79+ audioManager.setAudioAttributesContentType(contentType)
80+ }
81+ }
82+ }
83+
84+ if (audioTypeOptions.hasKey(" forceHandleAudioRouting" )) {
85+ val force = audioTypeOptions.getBoolean(" forceHandleAudioRouting" )
86+ audioManager.setForceHandleAudioRouting(force)
3887 }
3988 }
4089 }
0 commit comments