Ignore smartwatch as possible headset.
This commit is contained in:
parent
43cd647036
commit
ed67e7ac04
2 changed files with 9 additions and 66 deletions
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue