mirror of
https://github.com/twinksoftware/Gearslip.git
synced 2026-11-11 00:12:24 +01:00
audio: with music on Bluetooth, leave the car's media channel closed so the car keeps its Bluetooth source
This commit is contained in:
1 parent
e8f51f4947
commit
4e71689f8e
2 files changed
+17
-1
No files matched your search
@@ -2,6 +2,7 @@ package app.seb3thehacker.gearslip
|
|||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import app.seb3thehacker.gearslip.audio.AudioLink
|
import app.seb3thehacker.gearslip.audio.AudioLink
|
||||||
|
import app.seb3thehacker.gearslip.audio.CarAudio
|
||||||
import app.seb3thehacker.gearslip.audio.CarMic
|
import app.seb3thehacker.gearslip.audio.CarMic
|
||||||
import app.seb3thehacker.gearslip.media.CarMediaStatus
|
import app.seb3thehacker.gearslip.media.CarMediaStatus
|
||||||
import app.seb3thehacker.gearslip.car.BluetoothAudioCheck
|
import app.seb3thehacker.gearslip.car.BluetoothAudioCheck
|
||||||
@@ -160,6 +161,7 @@ class GearslipRunner(
|
|||||||
synchronized(ackLock) { ackLock.notifyAll() } // free an encoder waiting on an ack
|
synchronized(ackLock) { ackLock.notifyAll() } // free an encoder waiting on an ack
|
||||||
videoSource?.stop()
|
videoSource?.stop()
|
||||||
videoSource = null
|
videoSource = null
|
||||||
|
CarAudio.openSink = null
|
||||||
audioLink?.close()
|
audioLink?.close()
|
||||||
audioLink = null
|
audioLink = null
|
||||||
guidanceLink?.close()
|
guidanceLink?.close()
|
||||||
@@ -527,7 +529,17 @@ class GearslipRunner(
|
|||||||
// as Android Auto does, instead of letting it play on to no one.
|
// as Android Auto does, instead of letting it play on to no one.
|
||||||
onTakenBack = { CarServices.pausePhoneMedia("the car switched to another source") },
|
onTakenBack = { CarServices.pausePhoneMedia("the car switched to another source") },
|
||||||
)
|
)
|
||||||
openChannel(media.serviceId)
|
if (CarSettings.pipeAudio.value) {
|
||||||
|
openChannel(media.serviceId)
|
||||||
|
} else {
|
||||||
|
// Many cars switch their source to Android Auto the moment this channel opens, which
|
||||||
|
// cut off music the driver chose to play over Bluetooth. Open it only if they switch.
|
||||||
|
log.i("music goes over Bluetooth: the media channel stays closed, so the car keeps its own source")
|
||||||
|
CarAudio.openSink = {
|
||||||
|
CarAudio.openSink = null
|
||||||
|
openChannel(media.serviceId)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The car's directions channel, where [DirectionsVoice] reads out each turn. */
|
/** The car's directions channel, where [DirectionsVoice] reads out each turn. */
|
||||||
|
|||||||
@@ -44,6 +44,9 @@ object CarAudio {
|
|||||||
|
|
||||||
@Volatile private var link: Link? = null
|
@Volatile private var link: Link? = null
|
||||||
|
|
||||||
|
/** Opens the car's media channel, left closed while music went over Bluetooth; null once open. */
|
||||||
|
@Volatile var openSink: (() -> Unit)? = null
|
||||||
|
|
||||||
/** Rate and channel count the capture should use: the car's, or a sensible default. */
|
/** Rate and channel count the capture should use: the car's, or a sensible default. */
|
||||||
val sampleRate get() = link?.sampleRate ?: 48_000
|
val sampleRate get() = link?.sampleRate ?: 48_000
|
||||||
val channels get() = link?.channels ?: 2
|
val channels get() = link?.channels ?: 2
|
||||||
@@ -71,6 +74,7 @@ object CarAudio {
|
|||||||
when (_capture.value) {
|
when (_capture.value) {
|
||||||
Capture.ON, Capture.ASKING, Capture.DENIED -> return
|
Capture.ON, Capture.ASKING, Capture.DENIED -> return
|
||||||
Capture.OFF -> if (link == null) {
|
Capture.OFF -> if (link == null) {
|
||||||
|
openSink?.invoke()
|
||||||
GearslipLog.i("audio: waiting for the car to offer an audio sink")
|
GearslipLog.i("audio: waiting for the car to offer an audio sink")
|
||||||
} else {
|
} else {
|
||||||
ask()
|
ask()
|
||||||
|
|||||||
Reference in new issue
Block a user