From 83e84228f5acf190001635b5a095df06189456ce Mon Sep 17 00:00:00 2001 From: Nicholas Tinsley Date: Tue, 30 May 2023 15:00:49 -0400 Subject: [PATCH] Bolster Bluetooth headset detection for Android 11 and older. --- .../conversation/ConversationParentFragment.java | 2 +- .../securesms/webrtc/audio/AudioManagerCompat.java | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java index e0f193daab..45d5bbdd18 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java @@ -3282,7 +3282,7 @@ public class ConversationParentFragment extends Fragment @Override public void onRecorderStarted() { final AudioManagerCompat audioManager = ApplicationDependencies.getAndroidCallAudioManager(); - if (audioManager.isBluetoothAvailable()) { + if (audioManager.isBluetoothHeadsetAvailable()) { connectToBluetoothAndBeginRecording(); } else { Log.d(TAG, "Recording from phone mic because no bluetooth devices were available."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/AudioManagerCompat.java b/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/AudioManagerCompat.java index 9b7936c440..2b612a3251 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/AudioManagerCompat.java +++ b/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/AudioManagerCompat.java @@ -1,6 +1,8 @@ package org.thoughtcrime.securesms.webrtc.audio; import android.annotation.SuppressLint; +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothHeadset; import android.content.Context; import android.content.pm.PackageManager; import android.media.AudioAttributes; @@ -52,11 +54,16 @@ public abstract class AudioManagerCompat { audioManager.stopBluetoothSco(); } - public boolean isBluetoothAvailable() { + public boolean isBluetoothHeadsetAvailable() { if (Build.VERSION.SDK_INT >= 31) { return audioManager.getAvailableCommunicationDevices().stream().anyMatch(it -> AudioDeviceMapping.fromPlatformType(it.getType()) == SignalAudioManager.AudioDevice.BLUETOOTH); } else { - return isBluetoothScoAvailableOffCall(); + BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); + return mBluetoothAdapter != null && + mBluetoothAdapter.isEnabled() && + // noinspection MissingPermission + mBluetoothAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothAdapter.STATE_CONNECTED && + isBluetoothScoAvailableOffCall(); } }