AudioSwitchHandler.kt
2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package io.livekit.android.audio
import android.content.Context
import android.media.AudioManager
import com.twilio.audioswitch.AudioDevice
import com.twilio.audioswitch.AudioDeviceChangeListener
import com.twilio.audioswitch.AudioSwitch
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class AudioSwitchHandler
@Inject
constructor(private val context: Context) : AudioHandler {
var loggingEnabled = false
var audioDeviceChangeListener: AudioDeviceChangeListener? = null
var onAudioFocusChangeListener: AudioManager.OnAudioFocusChangeListener? = null
var preferredDeviceList: List<Class<out AudioDevice>>? = null
private var audioSwitch: AudioSwitch? = null
override fun start() {
if (audioSwitch == null) {
val switch = AudioSwitch(
context = context,
loggingEnabled = loggingEnabled,
audioFocusChangeListener = onAudioFocusChangeListener ?: defaultOnAudioFocusChangeListener,
preferredDeviceList = preferredDeviceList ?: defaultPreferredDeviceList
)
audioSwitch = switch
switch.start(audioDeviceChangeListener ?: defaultAudioDeviceChangeListener)
switch.activate()
}
}
override fun stop() {
audioSwitch?.stop()
audioSwitch = null
}
val selectedAudioDevice: AudioDevice?
get() = audioSwitch?.selectedAudioDevice
val availableAudioDevices: List<AudioDevice>
get() = audioSwitch?.availableAudioDevices ?: listOf()
fun selectDevice(audioDevice: AudioDevice?) {
audioSwitch?.selectDevice(audioDevice)
}
companion object {
private val defaultOnAudioFocusChangeListener by lazy(LazyThreadSafetyMode.NONE) {
AudioManager.OnAudioFocusChangeListener { }
}
private val defaultAudioDeviceChangeListener by lazy(LazyThreadSafetyMode.NONE) {
object : AudioDeviceChangeListener {
override fun invoke(audioDevices: List<AudioDevice>, selectedAudioDevice: AudioDevice?) {
}
}
}
private val defaultPreferredDeviceList by lazy(LazyThreadSafetyMode.NONE) {
listOf(
AudioDevice.BluetoothHeadset::class.java,
AudioDevice.WiredHeadset::class.java,
AudioDevice.Earpiece::class.java,
AudioDevice.Speakerphone::class.java
)
}
}
}