From d559fb45a58170032b4e804e775919b1f693e032 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Sun, 22 Oct 2023 00:33:03 +0200 Subject: [PATCH] feat: Add message when microphone is disconnected --- .../atoms/MicrophoneSelectionButton.kt | 13 +++++++++ .../molecules/MicrophoneSelection.kt | 27 +++++++++++++++++++ .../alibi/ui/components/atoms/MessageBox.kt | 8 +++--- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/atoms/MicrophoneSelectionButton.kt b/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/atoms/MicrophoneSelectionButton.kt index c38033a..3ca6486 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/atoms/MicrophoneSelectionButton.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/atoms/MicrophoneSelectionButton.kt @@ -12,8 +12,12 @@ 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.material.icons.Icons +import androidx.compose.material.icons.filled.MicExternalOn +import androidx.compose.material.icons.filled.Warning import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -32,6 +36,7 @@ import app.myzel394.alibi.db.AppSettings fun MicrophoneSelectionButton( microphone: MicrophoneInfo? = null, selected: Boolean = false, + selectedAsFallback: Boolean = false, onSelect: () -> Unit, ) { val dataStore = LocalContext.current.dataStore @@ -69,6 +74,14 @@ fun MicrophoneSelectionButton( color = if (selected) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.secondary, ) } + if (selectedAsFallback) + Icon( + Icons.Default.MicExternalOn, + contentDescription = null, + tint = MaterialTheme.colorScheme.tertiary, + modifier = Modifier + .size(ButtonDefaults.IconSize), + ) } } } diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/molecules/MicrophoneSelection.kt b/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/molecules/MicrophoneSelection.kt index e401c34..d14887e 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/molecules/MicrophoneSelection.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/molecules/MicrophoneSelection.kt @@ -12,10 +12,13 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Warning import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Divider import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Text @@ -37,6 +40,8 @@ import app.myzel394.alibi.dataStore import app.myzel394.alibi.db.AppSettings import app.myzel394.alibi.ui.components.AudioRecorder.atoms.MicrophoneSelectionButton import app.myzel394.alibi.ui.components.AudioRecorder.atoms.MicrophoneTypeInfo +import app.myzel394.alibi.ui.components.atoms.MessageBox +import app.myzel394.alibi.ui.components.atoms.MessageType import app.myzel394.alibi.ui.models.AudioRecorderModel import app.myzel394.alibi.ui.utils.MicrophoneInfo @@ -62,6 +67,8 @@ fun MicrophoneSelection( .collectAsState(initial = AppSettings.getDefaultInstance()) .value + val isTryingToReconnect = + audioRecorder.selectedMicrophone != null && audioRecorder.microphoneStatus == AudioRecorderModel.MicrophoneConnectivityStatus.DISCONNECTED if (showSelection) { ModalBottomSheet( @@ -83,6 +90,16 @@ fun MicrophoneSelection( textAlign = TextAlign.Center, ) + if (isTryingToReconnect) + MessageBox( + type = MessageType.INFO, + message = stringResource( + R.string.ui_audioRecorder_error_microphoneDisconnected_message, + audioRecorder.recorderService!!.selectedMicrophone?.name ?: "", + audioRecorder.recorderService!!.selectedMicrophone?.name ?: "", + ) + ) + LazyColumn( modifier = Modifier .padding(horizontal = 32.dp), @@ -91,6 +108,7 @@ fun MicrophoneSelection( item { MicrophoneSelectionButton( selected = audioRecorder.selectedMicrophone == null, + selectedAsFallback = isTryingToReconnect, onSelect = { audioRecorder.changeMicrophone(null) showSelection = false @@ -175,6 +193,15 @@ fun MicrophoneSelection( ?: stringResource(R.string.ui_audioRecorder_info_microphone_deviceMicrophone) } ) + if (isTryingToReconnect) { + Spacer(modifier = Modifier.width(ButtonDefaults.IconSpacing)) + Icon( + Icons.Default.Warning, + contentDescription = null, + tint = MaterialTheme.colorScheme.tertiary, + modifier = Modifier.size(ButtonDefaults.IconSize), + ) + } } } } \ No newline at end of file diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/atoms/MessageBox.kt b/app/src/main/java/app/myzel394/alibi/ui/components/atoms/MessageBox.kt index cf0f0c9..01156cc 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/atoms/MessageBox.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/atoms/MessageBox.kt @@ -29,14 +29,14 @@ fun MessageBox( title: String? = null, ) { val isDark = rememberIsInDarkMode() - val containerColor = when(type) { + val containerColor = when (type) { MessageType.ERROR -> MaterialTheme.colorScheme.errorContainer MessageType.INFO -> MaterialTheme.colorScheme.tertiaryContainer MessageType.SUCCESS -> Color.Green.copy(alpha = 0.3f) MessageType.WARNING -> Color.Yellow.copy(alpha = 0.3f) } - val onContainerColor = when(type) { - MessageType.ERROR -> MaterialTheme.colorScheme.onError + val onContainerColor = when (type) { + MessageType.ERROR -> MaterialTheme.colorScheme.onErrorContainer MessageType.INFO -> MaterialTheme.colorScheme.onTertiaryContainer MessageType.SUCCESS -> Color.Green MessageType.WARNING -> Color.Yellow @@ -53,7 +53,7 @@ fun MessageBox( .then(modifier) ) { Icon( - imageVector = when(type) { + imageVector = when (type) { MessageType.ERROR -> Icons.Default.Error MessageType.INFO -> Icons.Default.Info MessageType.SUCCESS -> Icons.Default.Check