mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-04-24 12:48:25 +00:00
Added audio device callback to reload sound devices when needed
This commit is contained in:
parent
ec07d54ed9
commit
6645d579a2
1 changed files with 40 additions and 0 deletions
|
|
@ -23,6 +23,9 @@ import android.annotation.SuppressLint
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.media.AudioDeviceCallback
|
||||||
|
import android.media.AudioDeviceInfo
|
||||||
|
import android.media.AudioManager
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.HandlerThread
|
import android.os.HandlerThread
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
|
|
@ -82,6 +85,32 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C
|
||||||
@SuppressLint("HandlerLeak")
|
@SuppressLint("HandlerLeak")
|
||||||
private lateinit var coreThread: Handler
|
private lateinit var coreThread: Handler
|
||||||
|
|
||||||
|
private val audioDeviceCallback = object : AudioDeviceCallback() {
|
||||||
|
@WorkerThread
|
||||||
|
override fun onAudioDevicesAdded(addedDevices: Array<out AudioDeviceInfo>?) {
|
||||||
|
if (!addedDevices.isNullOrEmpty()) {
|
||||||
|
Log.i("$TAG [${addedDevices.size}] new device(s) have been added:")
|
||||||
|
for (device in addedDevices) {
|
||||||
|
Log.i("$TAG Added device [${device.id}][${device.productName}][${device.type}]")
|
||||||
|
}
|
||||||
|
core.reloadSoundDevices()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@WorkerThread
|
||||||
|
override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>?) {
|
||||||
|
if (!removedDevices.isNullOrEmpty()) {
|
||||||
|
Log.i("$TAG [${removedDevices.size}] existing device(s) have been removed")
|
||||||
|
for (device in removedDevices) {
|
||||||
|
Log.i(
|
||||||
|
"$TAG Removed device [${device.id}][${device.productName}][${device.type}]"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
core.reloadSoundDevices()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private val coreListener = object : CoreListenerStub() {
|
private val coreListener = object : CoreListenerStub() {
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
override fun onGlobalStateChanged(core: Core, state: GlobalState, message: String) {
|
override fun onGlobalStateChanged(core: Core, state: GlobalState, message: String) {
|
||||||
|
|
@ -171,6 +200,7 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C
|
||||||
|
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
override fun run() {
|
override fun run() {
|
||||||
|
Log.i("$TAG Creating Core")
|
||||||
Looper.prepare()
|
Looper.prepare()
|
||||||
|
|
||||||
val looper = Looper.myLooper() ?: return
|
val looper = Looper.myLooper() ?: return
|
||||||
|
|
@ -182,18 +212,27 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C
|
||||||
|
|
||||||
computeUserAgent()
|
computeUserAgent()
|
||||||
|
|
||||||
|
Log.i("$TAG Core has been created with user-agent [${core.userAgent}], starting it")
|
||||||
core.start()
|
core.start()
|
||||||
|
|
||||||
contactsManager.onCoreStarted(core)
|
contactsManager.onCoreStarted(core)
|
||||||
telecomManager.onCoreStarted(core)
|
telecomManager.onCoreStarted(core)
|
||||||
notificationsManager.onCoreStarted(core)
|
notificationsManager.onCoreStarted(core)
|
||||||
|
|
||||||
|
val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
||||||
|
audioManager.registerAudioDeviceCallback(audioDeviceCallback, coreThread)
|
||||||
|
|
||||||
Looper.loop()
|
Looper.loop()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated("Deprecated in Java")
|
@Deprecated("Deprecated in Java")
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
override fun destroy() {
|
override fun destroy() {
|
||||||
|
Log.i("$TAG Stopping Core")
|
||||||
|
|
||||||
|
val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
||||||
|
audioManager.unregisterAudioDeviceCallback(audioDeviceCallback)
|
||||||
|
|
||||||
core.stop()
|
core.stop()
|
||||||
|
|
||||||
contactsManager.onCoreStopped(core)
|
contactsManager.onCoreStopped(core)
|
||||||
|
|
@ -204,6 +243,7 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C
|
||||||
(context as Application).unregisterActivityLifecycleCallbacks(activityMonitor)
|
(context as Application).unregisterActivityLifecycleCallbacks(activityMonitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.i("$TAG Core has been stopped, app can gracefully quit")
|
||||||
quitSafely()
|
quitSafely()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue