From cda23c44c0613986c6d080f81d4094bb5d48e8ad Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 27 May 2024 12:31:24 +0200 Subject: [PATCH] Added a logger for Android Auto connection state + do not use bluetooth sound card as playback device for voice recordings when connected to Auto --- app/build.gradle.kts | 1 + app/src/main/java/org/linphone/core/CoreContext.kt | 2 ++ .../main/java/org/linphone/ui/main/MainActivity.kt | 13 +++++++++++++ app/src/main/java/org/linphone/utils/AudioUtils.kt | 12 +++++++++++- gradle/libs.versions.toml | 2 ++ 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a72b3181e..6e0a8c8f0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -175,6 +175,7 @@ dependencies { implementation(libs.androidx.navigation.fragment.ktx) implementation(libs.androidx.navigation.ui.ktx) implementation(libs.androidx.emoji2) + implementation(libs.androidx.car) // https://github.com/google/flexbox-layout/blob/main/LICENSE Apache v2.0 implementation(libs.google.flexbox) diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 3b9821890..91aaa2c6e 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -75,6 +75,8 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C var bearerAuthInfoPendingPasswordUpdate: AuthInfo? = null var digestAuthInfoPendingPasswordUpdate: AuthInfo? = null + var isConnectedToAndroidAuto: Boolean = false + val bearerAuthenticationRequestedEvent: MutableLiveData>> by lazy { MutableLiveData>>() } diff --git a/app/src/main/java/org/linphone/ui/main/MainActivity.kt b/app/src/main/java/org/linphone/ui/main/MainActivity.kt index c0cf4fd54..9421fe9e9 100644 --- a/app/src/main/java/org/linphone/ui/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/ui/main/MainActivity.kt @@ -31,6 +31,7 @@ import android.os.Parcelable import android.view.Gravity import android.view.ViewTreeObserver import androidx.annotation.UiThread +import androidx.car.app.connection.CarConnection import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider @@ -243,6 +244,18 @@ class MainActivity : GenericActivity() { showRedToast(message, icon) } } + + CarConnection(this).type.observe(this) { + val asString = when (it) { + CarConnection.CONNECTION_TYPE_NOT_CONNECTED -> "NOT CONNECTED" + CarConnection.CONNECTION_TYPE_PROJECTION -> "PROJECTION" + CarConnection.CONNECTION_TYPE_NATIVE -> "NATIVE" + else -> "UNEXPECTED ($it)" + } + Log.i("$TAG Car connection is [$asString]") + val projection = it == CarConnection.CONNECTION_TYPE_PROJECTION + coreContext.isConnectedToAndroidAuto = projection + } } override fun onPostCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/org/linphone/utils/AudioUtils.kt b/app/src/main/java/org/linphone/utils/AudioUtils.kt index f7929c9e9..5291aee88 100644 --- a/app/src/main/java/org/linphone/utils/AudioUtils.kt +++ b/app/src/main/java/org/linphone/utils/AudioUtils.kt @@ -197,7 +197,17 @@ class AudioUtils { Log.i( "$TAG Found headset/headphones/hearingAid sound card [$headphonesCard], bluetooth sound card [$bluetoothCard], speaker sound card [$speakerCard] and earpiece sound card [$earpieceCard]" ) - return headphonesCard ?: bluetoothCard ?: speakerCard ?: earpieceCard + return if (coreContext.isConnectedToAndroidAuto) { + Log.w( + "$TAG Device seems to be connected to Android Auto, do not use bluetooth sound card, priority order is headphone > speaker > earpiece" + ) + headphonesCard ?: speakerCard ?: earpieceCard + } else { + Log.i( + "$TAG Device doesn't seem to be connected to Android Auto, use headphone > bluetooth > speaker > earpiece sound card in priority order" + ) + headphonesCard ?: bluetoothCard ?: speakerCard ?: earpieceCard + } } @WorkerThread diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 33f808a9c..060abd4c4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,6 +21,7 @@ gridlayout = "1.0.0" securityCryptoKtx = "1.1.0-alpha06" navigation = "2.7.7" emoji2 = "1.4.0" +car = "1.7.0-alpha02" flexbox = "3.0.0" material = "1.11.0" protobuf = "3.22.3" @@ -47,6 +48,7 @@ androidx-security-crypto-ktx = { group = "androidx.security", name = "security-c androidx-navigation-fragment-ktx = { group = "androidx.navigation", name = "navigation-fragment-ktx", version.ref = "navigation" } androidx-navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "navigation" } androidx-emoji2 = { group = "androidx.emoji2", name = "emoji2-emojipicker", version.ref = "emoji2" } +androidx-car = { group = "androidx.car.app", name = "app", version.ref = "car" } google-firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebaseBomVersion" } google-firebase-messaging = { group = "com.google.firebase", name = "firebase-messaging" }