Ignore smartwatch as possible headset.

This commit is contained in:
Nicholas 2023-03-22 18:08:08 -04:00 committed by Cody Henthorne
parent 43cd647036
commit ed67e7ac04
2 changed files with 9 additions and 66 deletions

View file

@ -4,6 +4,7 @@ import android.content.Context
import android.media.AudioDeviceCallback
import android.media.AudioDeviceInfo
import android.media.AudioManager
import android.media.MediaRouter
import android.net.Uri
import androidx.annotation.RequiresApi
import org.signal.core.util.logging.Log
@ -25,7 +26,6 @@ class FullSignalAudioManagerApi31(context: Context, eventListener: EventListener
private var savedIsSpeakerPhoneOn = false
private var savedIsMicrophoneMute = false
private var hasWiredHeadset = false
private var hasBluetoothHeadset = false
private var autoSwitchToWiredHeadset = true
private var autoSwitchToBluetooth = true
@ -175,7 +175,7 @@ class FullSignalAudioManagerApi31(context: Context, eventListener: EventListener
}
val availableCommunicationDevices: List<AudioDeviceInfo> = androidAudioManager.availableCommunicationDevices
availableCommunicationDevices.forEach { Log.d(TAG, "Detected communication device of type: ${it.type}") }
hasBluetoothHeadset = availableCommunicationDevices.any { AudioDeviceMapping.fromPlatformType(it.type) == AudioDevice.BLUETOOTH }
val hasBluetoothHeadset = isBluetoothHeadsetConnected()
hasWiredHeadset = availableCommunicationDevices.any { AudioDeviceMapping.fromPlatformType(it.type) == AudioDevice.WIRED_HEADSET }
Log.i(
TAG,
@ -245,4 +245,10 @@ class FullSignalAudioManagerApi31(context: Context, eventListener: EventListener
}
}
}
private fun isBluetoothHeadsetConnected(): Boolean {
val mediaRouter = context.getSystemService(Context.MEDIA_ROUTER_SERVICE) as MediaRouter
val liveAudioRoute = mediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_AUDIO)
return liveAudioRoute.deviceType == MediaRouter.RouteInfo.DEVICE_TYPE_BLUETOOTH
}
}

View file

@ -14,7 +14,6 @@ import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.service.webrtc.AndroidTelecomUtil
import org.thoughtcrime.securesms.util.safeUnregisterReceiver
import org.whispersystems.signalservice.api.util.Preconditions
@ -41,9 +40,7 @@ sealed class SignalAudioManager(protected val context: Context, protected val ev
companion object {
@JvmStatic
fun create(context: Context, eventListener: EventListener?, isGroup: Boolean): SignalAudioManager {
return if (AndroidTelecomUtil.telecomSupported && !isGroup) {
TelecomAwareSignalAudioManager(context, eventListener)
} else if (Build.VERSION.SDK_INT >= 31) {
return if (Build.VERSION.SDK_INT >= 31) {
FullSignalAudioManagerApi31(context, eventListener)
} else {
FullSignalAudioManager(context, eventListener)
@ -409,63 +406,3 @@ class FullSignalAudioManager(context: Context, eventListener: EventListener?) :
}
}
}
class TelecomAwareSignalAudioManager(context: Context, eventListener: EventListener?) : SignalAudioManager(context, eventListener) {
override fun setDefaultAudioDevice(recipientId: RecipientId?, newDefaultDevice: AudioDevice, clearUserEarpieceSelection: Boolean) {
if (recipientId != null && AndroidTelecomUtil.getSelectedAudioDevice(recipientId) == AudioDevice.EARPIECE) {
selectAudioDevice(recipientId, newDefaultDevice)
}
}
override fun initialize() {
val focusedGained = androidAudioManager.requestCallAudioFocus()
if (!focusedGained) {
handler.postDelayed({ androidAudioManager.requestCallAudioFocus() }, 500)
}
state = State.PREINITIALIZED
}
override fun start() {
incomingRinger.stop()
outgoingRinger.stop()
val focusedGained = androidAudioManager.requestCallAudioFocus()
if (!focusedGained) {
handler.postDelayed({ androidAudioManager.requestCallAudioFocus() }, 500)
}
state = State.RUNNING
}
override fun stop(playDisconnect: Boolean) {
incomingRinger.stop()
outgoingRinger.stop()
if (playDisconnect && state != State.UNINITIALIZED) {
val volume: Float = androidAudioManager.ringVolumeWithMinimum()
soundPool.play(disconnectedSoundId, volume, volume, 0, 0, 1.0f)
}
state = State.UNINITIALIZED
androidAudioManager.abandonCallAudioFocus()
}
override fun selectAudioDevice(recipientId: RecipientId?, device: AudioDevice) {
if (recipientId != null) {
selectedAudioDevice = device
AndroidTelecomUtil.selectAudioDevice(recipientId, device)
handler.postDelayed({ AndroidTelecomUtil.selectAudioDevice(recipientId, selectedAudioDevice) }, 1000)
}
}
override fun startIncomingRinger(ringtoneUri: Uri?, vibrate: Boolean) {
incomingRinger.start(ringtoneUri, vibrate)
}
override fun startOutgoingRinger() {
outgoingRinger.start(OutgoingRinger.Type.RINGING)
}
}