diff --git a/gearslip/src/main/java/app/seb3thehacker/gearslip/audio/AudioLink.kt b/gearslip/src/main/java/app/seb3thehacker/gearslip/audio/AudioLink.kt index d904be6..f250b1c 100644 --- a/gearslip/src/main/java/app/seb3thehacker/gearslip/audio/AudioLink.kt +++ b/gearslip/src/main/java/app/seb3thehacker/gearslip/audio/AudioLink.kt @@ -147,7 +147,8 @@ class AudioLink( fun onFocus(state: Int) { val name = FOCUS_STATES[state] ?: "unknown($state)" GearslipLog.i("audio: <- AudioFocusResponse state=$name") - focusGranted = state == FOCUS_STATE_GAIN || state == FOCUS_STATE_GAIN_TRANSIENT + focusGranted = state == FOCUS_STATE_GAIN || state == FOCUS_STATE_GAIN_TRANSIENT || + state == FOCUS_STATE_GAIN_MEDIA_ONLY if (focusGranted) startStream() else stop() } @@ -257,13 +258,16 @@ class AudioLink( private const val FOCUS_RELEASE = 4 private const val FOCUS_STATE_GAIN = 1 private const val FOCUS_STATE_GAIN_TRANSIENT = 2 + private const val FOCUS_STATE_GAIN_MEDIA_ONLY = 6 private const val SESSION_ID = 2 private const val STALL_MS = 2_000L private const val CHUNK_LOG_EVERY = 200 // about every four seconds private const val CONFIG_WAIT_MS = 1_000L + // AudioFocusStateNotification.AudioFocusState in aasdk. private val FOCUS_STATES = mapOf( - 1 to "GAIN", 2 to "GAIN_TRANSIENT", 3 to "LOSS", 4 to "LOSS_TRANSIENT", + 1 to "GAIN", 2 to "GAIN_TRANSIENT", 3 to "LOSS", 4 to "LOSS_TRANSIENT_CAN_DUCK", + 5 to "LOSS_TRANSIENT", 6 to "GAIN_MEDIA_ONLY", 7 to "GAIN_TRANSIENT_GUIDANCE_ONLY", ) } } diff --git a/gearslip/src/main/java/app/seb3thehacker/gearslip/car/MediaScreen.kt b/gearslip/src/main/java/app/seb3thehacker/gearslip/car/MediaScreen.kt index b099efa..4f53f3a 100644 --- a/gearslip/src/main/java/app/seb3thehacker/gearslip/car/MediaScreen.kt +++ b/gearslip/src/main/java/app/seb3thehacker/gearslip/car/MediaScreen.kt @@ -61,7 +61,6 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import app.seb3thehacker.gearslip.audio.CarAudio import app.seb3thehacker.gearslip.media.CarMedia import app.seb3thehacker.gearslip.media.MediaApp import app.seb3thehacker.gearslip.media.MediaArt @@ -88,7 +87,6 @@ fun MediaScreen(app: MediaApp, onExit: () -> Unit) { val queue by media.queue.collectAsStateWithLifecycle() val browse by media.browse.collectAsStateWithLifecycle() val rejection by media.rejection.collectAsStateWithLifecycle() - val capture by CarAudio.capture.collectAsStateWithLifecycle() val search by media.search.collectAsStateWithLifecycle() var tab by remember { mutableStateOf(Tab.NOW_PLAYING) } var searching by remember { mutableStateOf(false) } @@ -174,7 +172,6 @@ fun MediaScreen(app: MediaApp, onExit: () -> Unit) { } else { CompactPlayer(now, media, Modifier.weight(1f).fillMaxWidth()) } - AudioBadge(capture) } Column(Modifier.weight(1.2f).fillMaxHeight()) { Row(Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp)) { @@ -447,20 +444,6 @@ private sealed interface LyricsState { class Found(val result: LyricsResult) : LyricsState } -@Composable -private fun AudioBadge(capture: CarAudio.Capture) { - val micBlocked by CarAudio.micBlocked.collectAsStateWithLifecycle() - val text = when (capture) { - CarAudio.Capture.ON -> "Audio to car" - CarAudio.Capture.ASKING -> "Allow audio capture on the phone" - CarAudio.Capture.DENIED -> - if (micBlocked) "Audio stays on the phone: turn on Gearslip's microphone permission" - else "Audio stays on the phone" - CarAudio.Capture.OFF -> return - } - Text(text, style = MaterialTheme.typography.labelLarge, color = MaterialTheme.colorScheme.onSurfaceVariant) -} - @Composable private fun Notice(title: String, detail: String?, action: Pair Unit>? = null) { Column(