diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml
index da537d312c..396066a608 100644
--- a/vector/src/main/AndroidManifest.xml
+++ b/vector/src/main/AndroidManifest.xml
@@ -12,7 +12,7 @@
+ tools:targetApi="tiramisu" />
diff --git a/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt b/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt
index 3b91774f08..0eecedd433 100644
--- a/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt
@@ -20,6 +20,8 @@ import android.app.Activity
import android.bluetooth.BluetoothDevice
import android.content.Intent
import android.content.pm.PackageManager
+import android.media.AudioDeviceInfo
+import android.media.AudioManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
@@ -32,8 +34,10 @@ import android.view.ViewGroup
import android.webkit.PermissionRequest
import android.webkit.WebMessage
import androidx.activity.result.contract.ActivityResultContracts
+import androidx.annotation.RequiresApi
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
+import androidx.core.content.getSystemService
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import com.airbnb.mvrx.Fail
@@ -120,6 +124,9 @@ class WidgetFragment :
if (checkPermissions(PERMISSIONS_FOR_BLUETOOTH, requireActivity(), scanBluetoothResultLauncher)) {
startBluetoothScanning()
}
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ configureAudioDevice()
+ }
}
viewModel.observeViewEvents {
@@ -136,6 +143,18 @@ class WidgetFragment :
viewModel.handle(WidgetAction.LoadFormattedUrl)
}
+ @RequiresApi(Build.VERSION_CODES.S)
+ private fun configureAudioDevice() {
+ requireContext().getSystemService()?.let { audioManager ->
+ audioManager
+ .availableCommunicationDevices
+ .find { it.type == AudioDeviceInfo.TYPE_BLUETOOTH_SCO }
+ ?.let { bluetoothAudioDevice ->
+ audioManager.setCommunicationDevice(bluetoothAudioDevice)
+ }
+ }
+ }
+
private val termsActivityResultLauncher = registerStartForActivityResult {
Timber.v("On terms results")
if (it.resultCode == Activity.RESULT_OK) {
@@ -444,6 +463,7 @@ class WidgetFragment :
activity?.let {
val widgetUri = Uri.parse(fragmentArgs.baseUrl)
+ Timber.d("### WidgetFragment.handleBluetoothDeviceData: $event")
if (event.data contentEquals byteArrayOf(0x00)) {
views.widgetWebView.postWebMessage(WebMessage("pttr"), widgetUri)
} else if (event.data contentEquals byteArrayOf(0x01)) {
diff --git a/vector/src/main/java/im/vector/app/features/widgets/ptt/BluetoothLowEnergyService.kt b/vector/src/main/java/im/vector/app/features/widgets/ptt/BluetoothLowEnergyService.kt
index 2bb834b51a..5d7f53675f 100644
--- a/vector/src/main/java/im/vector/app/features/widgets/ptt/BluetoothLowEnergyService.kt
+++ b/vector/src/main/java/im/vector/app/features/widgets/ptt/BluetoothLowEnergyService.kt
@@ -141,7 +141,7 @@ class BluetoothLowEnergyService : VectorAndroidService() {
private fun onCharacteristicRead(characteristic: BluetoothGattCharacteristic) {
@Suppress("DEPRECATION") val data = characteristic.value
- Timber.d("### BluetoothLowEnergyService. $data")
+ Timber.d("### BluetoothLowEnergyService.onCharacteristicRead ${String(data)}")
if (data.isNotEmpty()) {
callback?.onCharacteristicRead(data)
}