Route voice/call recordings to headset instead of speaker, if possible
This commit is contained in:
parent
0232ae5be2
commit
0580dfa58f
4 changed files with 19 additions and 8 deletions
|
@ -43,6 +43,7 @@ Group changes to describe their impact on the project, as follows:
|
||||||
### Fixed
|
### Fixed
|
||||||
- Chat notifications disappearing when app restarts
|
- Chat notifications disappearing when app restarts
|
||||||
- "Infinite backstack", now each view is stored (at most) once in the backstack
|
- "Infinite backstack", now each view is stored (at most) once in the backstack
|
||||||
|
- Voice messages / call recordings will be played on headset/headphones instead of speaker, if possible
|
||||||
- Going back to the dialer when pressing back in a chat room after clicking on a chat message notification
|
- Going back to the dialer when pressing back in a chat room after clicking on a chat message notification
|
||||||
- Missing international prefix / phone number in assistant after granting permission
|
- Missing international prefix / phone number in assistant after granting permission
|
||||||
- Display issue for incoming call notification preventing to use answer/hangup actions on some Xiaomi devices (like Redmi Note 9S)
|
- Display issue for incoming call notification preventing to use answer/hangup actions on some Xiaomi devices (like Redmi Note 9S)
|
||||||
|
|
|
@ -306,8 +306,9 @@ class ChatMessageContentData(
|
||||||
|
|
||||||
private fun initVoiceRecordPlayer() {
|
private fun initVoiceRecordPlayer() {
|
||||||
Log.i("[Voice Recording] Creating player for voice record")
|
Log.i("[Voice Recording] Creating player for voice record")
|
||||||
// Use speaker sound card to play recordings, otherwise use earpiece
|
// In case no headphones/headset is connected, use speaker sound card to play recordings, otherwise use earpiece
|
||||||
// If none are available, default one will be used
|
// If none are available, default one will be used
|
||||||
|
var headphonesCard: String? = null
|
||||||
var speakerCard: String? = null
|
var speakerCard: String? = null
|
||||||
var earpieceCard: String? = null
|
var earpieceCard: String? = null
|
||||||
for (device in coreContext.core.audioDevices) {
|
for (device in coreContext.core.audioDevices) {
|
||||||
|
@ -316,12 +317,14 @@ class ChatMessageContentData(
|
||||||
speakerCard = device.id
|
speakerCard = device.id
|
||||||
} else if (device.type == AudioDevice.Type.Earpiece) {
|
} else if (device.type == AudioDevice.Type.Earpiece) {
|
||||||
earpieceCard = device.id
|
earpieceCard = device.id
|
||||||
|
} else if (device.type == AudioDevice.Type.Headphones || device.type == AudioDevice.Type.Headset) {
|
||||||
|
headphonesCard = device.id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Log.i("[Voice Recording] Found speaker sound card [$speakerCard] and earpiece sound card [$earpieceCard]")
|
Log.i("[Voice Recording] Found headset/headphones sound card [$headphonesCard], speaker sound card [$speakerCard] and earpiece sound card [$earpieceCard]")
|
||||||
|
|
||||||
val localPlayer = coreContext.core.createLocalPlayer(speakerCard ?: earpieceCard, null, null)
|
val localPlayer = coreContext.core.createLocalPlayer(headphonesCard ?: speakerCard ?: earpieceCard, null, null)
|
||||||
if (localPlayer != null) {
|
if (localPlayer != null) {
|
||||||
voiceRecordingPlayer = localPlayer
|
voiceRecordingPlayer = localPlayer
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -428,8 +428,9 @@ class ChatMessageSendingViewModel(private val chatRoom: ChatRoom) : ViewModel()
|
||||||
|
|
||||||
private fun initVoiceRecordPlayer() {
|
private fun initVoiceRecordPlayer() {
|
||||||
Log.i("[Chat Message Sending] Creating player for voice record")
|
Log.i("[Chat Message Sending] Creating player for voice record")
|
||||||
// Use speaker sound card to play recordings, otherwise use earpiece
|
// In case no headphones/headset is connected, use speaker sound card to play recordings, otherwise use earpiece
|
||||||
// If none are available, default one will be used
|
// If none are available, default one will be used
|
||||||
|
var headphonesCard: String? = null
|
||||||
var speakerCard: String? = null
|
var speakerCard: String? = null
|
||||||
var earpieceCard: String? = null
|
var earpieceCard: String? = null
|
||||||
for (device in coreContext.core.audioDevices) {
|
for (device in coreContext.core.audioDevices) {
|
||||||
|
@ -438,12 +439,14 @@ class ChatMessageSendingViewModel(private val chatRoom: ChatRoom) : ViewModel()
|
||||||
speakerCard = device.id
|
speakerCard = device.id
|
||||||
} else if (device.type == AudioDevice.Type.Earpiece) {
|
} else if (device.type == AudioDevice.Type.Earpiece) {
|
||||||
earpieceCard = device.id
|
earpieceCard = device.id
|
||||||
|
} else if (device.type == AudioDevice.Type.Headphones || device.type == AudioDevice.Type.Headset) {
|
||||||
|
headphonesCard = device.id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Log.i("[Chat Message Sending] Found speaker sound card [$speakerCard] and earpiece sound card [$earpieceCard]")
|
Log.i("[Chat Message Sending] Found headset/headphones sound card [$headphonesCard], speaker sound card [$speakerCard] and earpiece sound card [$earpieceCard]")
|
||||||
|
|
||||||
val localPlayer = coreContext.core.createLocalPlayer(speakerCard ?: earpieceCard, null, null)
|
val localPlayer = coreContext.core.createLocalPlayer(headphonesCard ?: speakerCard ?: earpieceCard, null, null)
|
||||||
if (localPlayer != null) {
|
if (localPlayer != null) {
|
||||||
voiceRecordingPlayer = localPlayer
|
voiceRecordingPlayer = localPlayer
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -164,8 +164,9 @@ class RecordingData(val path: String, private val recordingListener: RecordingLi
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initPlayer() {
|
private fun initPlayer() {
|
||||||
// Use speaker sound card to play recordings, otherwise use earpiece
|
// In case no headphones/headset is connected, use speaker sound card to play recordings, otherwise use earpiece
|
||||||
// If none are available, default one will be used
|
// If none are available, default one will be used
|
||||||
|
var headphonesCard: String? = null
|
||||||
var speakerCard: String? = null
|
var speakerCard: String? = null
|
||||||
var earpieceCard: String? = null
|
var earpieceCard: String? = null
|
||||||
for (device in coreContext.core.audioDevices) {
|
for (device in coreContext.core.audioDevices) {
|
||||||
|
@ -174,11 +175,14 @@ class RecordingData(val path: String, private val recordingListener: RecordingLi
|
||||||
speakerCard = device.id
|
speakerCard = device.id
|
||||||
} else if (device.type == AudioDevice.Type.Earpiece) {
|
} else if (device.type == AudioDevice.Type.Earpiece) {
|
||||||
earpieceCard = device.id
|
earpieceCard = device.id
|
||||||
|
} else if (device.type == AudioDevice.Type.Headphones || device.type == AudioDevice.Type.Headset) {
|
||||||
|
headphonesCard = device.id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Log.i("[Recording VM] Found headset/headphones sound card [$headphonesCard], speaker sound card [$speakerCard] and earpiece sound card [$earpieceCard]")
|
||||||
|
|
||||||
val localPlayer = coreContext.core.createLocalPlayer(speakerCard ?: earpieceCard, null, null)
|
val localPlayer = coreContext.core.createLocalPlayer(headphonesCard ?: speakerCard ?: earpieceCard, null, null)
|
||||||
if (localPlayer != null) player = localPlayer
|
if (localPlayer != null) player = localPlayer
|
||||||
else Log.e("[Recording VM] Couldn't create local player!")
|
else Log.e("[Recording VM] Couldn't create local player!")
|
||||||
player.addListener(listener)
|
player.addListener(listener)
|
||||||
|
|
Loading…
Reference in a new issue