44 lines
1.6 KiB
Kotlin
44 lines
1.6 KiB
Kotlin
package calls.data.remote
|
|
|
|
import android.content.Context
|
|
import android.media.AudioAttributes
|
|
import android.media.AudioFocusRequest
|
|
import android.media.AudioManager
|
|
import android.os.Build
|
|
|
|
class CallAudioManager(private val context: Context) {
|
|
private val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
|
private var originalMode: Int = AudioManager.MODE_NORMAL
|
|
private var originalIsSpeakerphoneOn: Boolean = false
|
|
|
|
fun startCallMode(isVideoCall: Boolean) {
|
|
originalMode = audioManager.mode
|
|
originalIsSpeakerphoneOn = audioManager.isSpeakerphoneOn
|
|
|
|
audioManager.mode = AudioManager.MODE_IN_COMMUNICATION
|
|
setSpeakerphoneOn(isVideoCall)
|
|
|
|
// Запрашиваем фокус аудио
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
val playbackAttributes = AudioAttributes.Builder()
|
|
.setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
|
|
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
|
|
.build()
|
|
val focusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT)
|
|
.setAudioAttributes(playbackAttributes)
|
|
.build()
|
|
audioManager.requestAudioFocus(focusRequest)
|
|
}
|
|
}
|
|
|
|
fun setSpeakerphoneOn(on: Boolean) {
|
|
audioManager.isSpeakerphoneOn = on
|
|
}
|
|
|
|
fun stopCallMode() {
|
|
audioManager.mode = originalMode
|
|
audioManager.isSpeakerphoneOn = originalIsSpeakerphoneOn
|
|
audioManager.abandonAudioFocus(null)
|
|
}
|
|
}
|