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) } }