fix: Improve microphone selection

This commit is contained in:
Myzel394 2023-10-21 19:23:04 +02:00
parent 69b4207124
commit 027e41d6b6
No known key found for this signature in database
GPG Key ID: 79CC92F37B3E1A2B
2 changed files with 12 additions and 38 deletions

View File

@ -1,24 +1,20 @@
package app.myzel394.alibi.services package app.myzel394.alibi.services
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.media.AudioDeviceInfo
import android.media.AudioManager import android.media.AudioManager
import android.media.MediaRecorder import android.media.MediaRecorder
import android.media.MediaRecorder.OnErrorListener import android.media.MediaRecorder.OnErrorListener
import android.media.MediaRecorder.getAudioSourceMax
import android.os.Build import android.os.Build
import app.myzel394.alibi.ui.utils.MicrophoneInfo import app.myzel394.alibi.ui.utils.MicrophoneInfo
import java.lang.IllegalStateException import java.lang.IllegalStateException
class AudioRecorderService : IntervalRecorderService() { class AudioRecorderService : IntervalRecorderService() {
var amplitudesAmount = 1000 var amplitudesAmount = 1000
var selectedDevice: MicrophoneInfo? = null var selectedMicrophone: MicrophoneInfo? = null
var recorder: MediaRecorder? = null var recorder: MediaRecorder? = null
private set private set
var onError: () -> Unit = {} var onError: () -> Unit = {}
var onSelectedMicrophoneChange: (MicrophoneInfo?) -> Unit = {}
val filePath: String val filePath: String
get() = "$folder/$counter.${settings!!.fileExtension}" get() = "$folder/$counter.${settings!!.fileExtension}"
@ -27,13 +23,13 @@ class AudioRecorderService : IntervalRecorderService() {
val audioManger = getSystemService(AUDIO_SERVICE)!! as AudioManager val audioManger = getSystemService(AUDIO_SERVICE)!! as AudioManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
if (selectedDevice == null) { if (selectedMicrophone == null) {
audioManger.clearCommunicationDevice() audioManger.clearCommunicationDevice()
} else { } else {
audioManger.setCommunicationDevice(selectedDevice!!.deviceInfo) audioManger.setCommunicationDevice(selectedMicrophone!!.deviceInfo)
} }
} else { } else {
if (selectedDevice == null) { if (selectedMicrophone == null) {
audioManger.stopBluetoothSco() audioManger.stopBluetoothSco()
} else { } else {
audioManger.startBluetoothSco() audioManger.startBluetoothSco()
@ -104,7 +100,7 @@ class AudioRecorderService : IntervalRecorderService() {
super.stop() super.stop()
resetRecorder() resetRecorder()
selectedDevice = null selectedMicrophone = null
} }
override fun getAmplitudeAmount(): Int = amplitudesAmount override fun getAmplitudeAmount(): Int = amplitudesAmount
@ -118,4 +114,9 @@ class AudioRecorderService : IntervalRecorderService() {
0 0
} }
} }
fun changeMicrophone(microphone: MicrophoneInfo?) {
selectedMicrophone = microphone
onSelectedMicrophoneChange(microphone)
}
} }

View File

@ -1,10 +1,8 @@
package app.myzel394.alibi.ui.components.AudioRecorder.organisms package app.myzel394.alibi.ui.components.AudioRecorder.organisms
import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
import androidx.compose.animation.expandHorizontally import androidx.compose.animation.expandHorizontally
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -13,22 +11,8 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.Pause
import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material.icons.filled.Save
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.LargeFloatingActionButton
import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -37,28 +21,17 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import app.myzel394.alibi.R
import app.myzel394.alibi.ui.BIG_PRIMARY_BUTTON_SIZE
import app.myzel394.alibi.ui.components.AudioRecorder.atoms.ConfirmDeletionDialog
import app.myzel394.alibi.ui.components.AudioRecorder.atoms.DeleteButton import app.myzel394.alibi.ui.components.AudioRecorder.atoms.DeleteButton
import app.myzel394.alibi.ui.components.AudioRecorder.atoms.PauseResumeButton import app.myzel394.alibi.ui.components.AudioRecorder.atoms.PauseResumeButton
import app.myzel394.alibi.ui.components.AudioRecorder.atoms.RealtimeAudioVisualizer import app.myzel394.alibi.ui.components.AudioRecorder.atoms.RealtimeAudioVisualizer
import app.myzel394.alibi.ui.components.AudioRecorder.atoms.RecordingTime import app.myzel394.alibi.ui.components.AudioRecorder.atoms.RecordingTime
import app.myzel394.alibi.ui.components.AudioRecorder.atoms.SaveButton import app.myzel394.alibi.ui.components.AudioRecorder.atoms.SaveButton
import app.myzel394.alibi.ui.components.AudioRecorder.molecules.MicrophoneSelection import app.myzel394.alibi.ui.components.AudioRecorder.molecules.MicrophoneSelection
import app.myzel394.alibi.ui.components.atoms.Pulsating
import app.myzel394.alibi.ui.models.AudioRecorderModel import app.myzel394.alibi.ui.models.AudioRecorderModel
import app.myzel394.alibi.ui.utils.KeepScreenOn import app.myzel394.alibi.ui.utils.KeepScreenOn
import app.myzel394.alibi.ui.utils.MicrophoneInfo import app.myzel394.alibi.ui.utils.MicrophoneInfo
import app.myzel394.alibi.ui.utils.formatDuration
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import java.time.LocalDateTime import java.time.LocalDateTime
@ -168,7 +141,7 @@ fun RecordingStatus(
if (microphones.isNotEmpty()) { if (microphones.isNotEmpty()) {
MicrophoneSelection( MicrophoneSelection(
microphones = microphones, microphones = microphones,
selectedMicrophone = audioRecorder.selectedDevice, selectedMicrophone = audioRecorder.selectedMicrophone,
onSelect = { onSelect = {
audioRecorder.changeMicrophone(it) audioRecorder.changeMicrophone(it)