feat: Add message when microphone is disconnected

This commit is contained in:
Myzel394 2023-10-22 00:33:03 +02:00
parent 76e10a1512
commit d559fb45a5
No known key found for this signature in database
GPG Key ID: 79CC92F37B3E1A2B
3 changed files with 44 additions and 4 deletions

View File

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

View File

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

View File

@ -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