properly handle routing audio through speakerphone

This commit is contained in:
tibbi
2020-05-10 20:55:31 +02:00
parent 3296652da3
commit d8cdddfa31
4 changed files with 11 additions and 0 deletions

View File

@ -98,6 +98,8 @@
<service <service
android:name=".services.CallService" android:name=".services.CallService"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BIND_INCALL_SERVICE"> android:permission="android.permission.BIND_INCALL_SERVICE">
<meta-data <meta-data
android:name="android.telecom.IN_CALL_SERVICE_UI" android:name="android.telecom.IN_CALL_SERVICE_UI"

View File

@ -12,6 +12,7 @@ import android.os.Handler
import android.os.PowerManager import android.os.PowerManager
import android.provider.MediaStore import android.provider.MediaStore
import android.telecom.Call import android.telecom.Call
import android.telecom.CallAudioState
import android.util.Size import android.util.Size
import android.view.WindowManager import android.view.WindowManager
import android.widget.RemoteViews import android.widget.RemoteViews
@ -159,6 +160,9 @@ class CallActivity : SimpleActivity() {
val drawable = if (isSpeakerOn) R.drawable.ic_speaker_on_vector else R.drawable.ic_speaker_off_vector val drawable = if (isSpeakerOn) R.drawable.ic_speaker_on_vector else R.drawable.ic_speaker_off_vector
call_toggle_speaker.setImageDrawable(getDrawable(drawable)) call_toggle_speaker.setImageDrawable(getDrawable(drawable))
audioManager.isSpeakerphoneOn = isSpeakerOn audioManager.isSpeakerphoneOn = isSpeakerOn
val newRoute = if (isSpeakerOn) CallAudioState.ROUTE_SPEAKER else CallAudioState.ROUTE_EARPIECE
CallManager.inCallService?.setAudioRoute(newRoute)
} }
private fun toggleMicrophone() { private fun toggleMicrophone() {
@ -166,6 +170,7 @@ class CallActivity : SimpleActivity() {
val drawable = if (isMicrophoneOn) R.drawable.ic_microphone_vector else R.drawable.ic_microphone_off_vector val drawable = if (isMicrophoneOn) R.drawable.ic_microphone_vector else R.drawable.ic_microphone_off_vector
call_toggle_microphone.setImageDrawable(getDrawable(drawable)) call_toggle_microphone.setImageDrawable(getDrawable(drawable))
audioManager.isMicrophoneMute = !isMicrophoneOn audioManager.isMicrophoneMute = !isMicrophoneOn
CallManager.inCallService?.setMuted(!isMicrophoneOn)
} }
private fun toggleDialpadVisibility() { private fun toggleDialpadVisibility() {

View File

@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.net.Uri import android.net.Uri
import android.telecom.Call import android.telecom.Call
import android.telecom.InCallService
import android.telecom.VideoProfile import android.telecom.VideoProfile
import com.simplemobiletools.commons.helpers.SimpleContactsHelper import com.simplemobiletools.commons.helpers.SimpleContactsHelper
import com.simplemobiletools.dialer.models.CallContact import com.simplemobiletools.dialer.models.CallContact
@ -13,6 +14,7 @@ import com.simplemobiletools.dialer.models.CallContact
class CallManager { class CallManager {
companion object { companion object {
var call: Call? = null var call: Call? = null
var inCallService: InCallService? = null
fun accept() { fun accept() {
call?.answer(VideoProfile.STATE_AUDIO_ONLY) call?.answer(VideoProfile.STATE_AUDIO_ONLY)

View File

@ -13,10 +13,12 @@ class CallService : InCallService() {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent) startActivity(intent)
CallManager.call = call CallManager.call = call
CallManager.inCallService = this
} }
override fun onCallRemoved(call: Call) { override fun onCallRemoved(call: Call) {
super.onCallRemoved(call) super.onCallRemoved(call)
CallManager.call = null CallManager.call = null
CallManager.inCallService = null
} }
} }