Skip to content

Commit 0f24b42

Browse files
authored
fix: fix crash on android when reloading the react-native app (#196)
1 parent d9e7ada commit 0f24b42

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

android/src/main/java/com/livekit/reactnative/LiveKitReactNative.kt

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
package com.livekit.reactnative
22

3+
import android.annotation.SuppressLint
34
import android.app.Application
45
import android.content.Context
56
import android.os.Build
67
import com.livekit.reactnative.audio.AudioType
7-
import com.livekit.reactnative.video.CustomVideoEncoderFactory
88
import com.livekit.reactnative.video.CustomVideoDecoderFactory
9+
import com.livekit.reactnative.video.CustomVideoEncoderFactory
910
import com.oney.WebRTCModule.WebRTCModuleOptions
1011
import org.webrtc.audio.JavaAudioDeviceModule
1112

1213
object LiveKitReactNative {
1314

14-
private lateinit var adm: JavaAudioDeviceModule
15+
16+
private var audioType: AudioType = AudioType.CommunicationAudioType()
17+
18+
@SuppressLint("StaticFieldLeak")
19+
private var adm: JavaAudioDeviceModule? = null
1520

1621
val audioDeviceModule: JavaAudioDeviceModule
1722
get() {
18-
if(!::adm.isInitialized) {
19-
throw IllegalStateException("Audio device module is not initialized! Did you remember to call LiveKitReactNative.setup in your Application.onCreate?")
20-
}
21-
23+
val adm = this.adm
24+
?: throw IllegalStateException("Audio device module is not initialized! Did you remember to call LiveKitReactNative.setup in your Application.onCreate?")
2225
return adm
2326
}
2427

@@ -34,19 +37,35 @@ object LiveKitReactNative {
3437
context: Context,
3538
audioType: AudioType = AudioType.CommunicationAudioType()
3639
) {
40+
this.audioType = audioType
3741
val options = WebRTCModuleOptions.getInstance()
3842
options.videoEncoderFactory = CustomVideoEncoderFactory(null, true, true)
3943
options.videoDecoderFactory = CustomVideoDecoderFactory()
4044
options.enableMediaProjectionService = true
4145

46+
setupAdm(context)
47+
options.audioDeviceModule = adm
48+
}
49+
50+
private fun setupAdm(context: Context) {
4251
val useHardwareAudioProcessing = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
4352

4453
adm = JavaAudioDeviceModule.builder(context)
4554
.setUseHardwareAcousticEchoCanceler(useHardwareAudioProcessing)
4655
.setUseHardwareNoiseSuppressor(useHardwareAudioProcessing)
4756
.setAudioAttributes(audioType.audioAttributes)
4857
.createAudioDeviceModule()
58+
}
59+
60+
internal fun invalidate(context: Context) {
61+
val options = WebRTCModuleOptions.getInstance()
62+
if (options.audioDeviceModule == adm) {
63+
options.audioDeviceModule = null
64+
}
65+
adm?.release()
66+
adm = null
4967

68+
setupAdm(context)
5069
options.audioDeviceModule = adm
5170
}
5271
}

android/src/main/java/com/livekit/reactnative/LivekitReactNativeModule.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package com.livekit.reactnative
22

3-
import android.annotation.SuppressLint
4-
import android.content.Context
53
import android.media.AudioAttributes
6-
import com.facebook.react.bridge.*
4+
import com.facebook.react.bridge.Arguments
5+
import com.facebook.react.bridge.Promise
6+
import com.facebook.react.bridge.ReactApplicationContext
7+
import com.facebook.react.bridge.ReactContextBaseJavaModule
8+
import com.facebook.react.bridge.ReactMethod
9+
import com.facebook.react.bridge.ReadableMap
710
import com.livekit.reactnative.audio.AudioDeviceKind
811
import com.livekit.reactnative.audio.AudioManagerUtils
912
import com.livekit.reactnative.audio.AudioSwitchManager
@@ -120,4 +123,8 @@ class LivekitReactNativeModule(reactContext: ReactApplicationContext) : ReactCon
120123
audioManager.selectAudioOutput(AudioDeviceKind.fromTypeName(deviceId))
121124
promise.resolve(null)
122125
}
126+
127+
override fun invalidate() {
128+
LiveKitReactNative.invalidate(reactApplicationContext)
129+
}
123130
}

0 commit comments

Comments
 (0)