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.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width 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.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -32,6 +36,7 @@ import app.myzel394.alibi.db.AppSettings
fun MicrophoneSelectionButton( fun MicrophoneSelectionButton(
microphone: MicrophoneInfo? = null, microphone: MicrophoneInfo? = null,
selected: Boolean = false, selected: Boolean = false,
selectedAsFallback: Boolean = false,
onSelect: () -> Unit, onSelect: () -> Unit,
) { ) {
val dataStore = LocalContext.current.dataStore val dataStore = LocalContext.current.dataStore
@ -69,6 +74,14 @@ fun MicrophoneSelectionButton(
color = if (selected) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.secondary, 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.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn 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.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Divider import androidx.compose.material3.Divider
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.Text import androidx.compose.material3.Text
@ -37,6 +40,8 @@ import app.myzel394.alibi.dataStore
import app.myzel394.alibi.db.AppSettings import app.myzel394.alibi.db.AppSettings
import app.myzel394.alibi.ui.components.AudioRecorder.atoms.MicrophoneSelectionButton import app.myzel394.alibi.ui.components.AudioRecorder.atoms.MicrophoneSelectionButton
import app.myzel394.alibi.ui.components.AudioRecorder.atoms.MicrophoneTypeInfo 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.models.AudioRecorderModel
import app.myzel394.alibi.ui.utils.MicrophoneInfo import app.myzel394.alibi.ui.utils.MicrophoneInfo
@ -62,6 +67,8 @@ fun MicrophoneSelection(
.collectAsState(initial = AppSettings.getDefaultInstance()) .collectAsState(initial = AppSettings.getDefaultInstance())
.value .value
val isTryingToReconnect =
audioRecorder.selectedMicrophone != null && audioRecorder.microphoneStatus == AudioRecorderModel.MicrophoneConnectivityStatus.DISCONNECTED
if (showSelection) { if (showSelection) {
ModalBottomSheet( ModalBottomSheet(
@ -83,6 +90,16 @@ fun MicrophoneSelection(
textAlign = TextAlign.Center, 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( LazyColumn(
modifier = Modifier modifier = Modifier
.padding(horizontal = 32.dp), .padding(horizontal = 32.dp),
@ -91,6 +108,7 @@ fun MicrophoneSelection(
item { item {
MicrophoneSelectionButton( MicrophoneSelectionButton(
selected = audioRecorder.selectedMicrophone == null, selected = audioRecorder.selectedMicrophone == null,
selectedAsFallback = isTryingToReconnect,
onSelect = { onSelect = {
audioRecorder.changeMicrophone(null) audioRecorder.changeMicrophone(null)
showSelection = false showSelection = false
@ -175,6 +193,15 @@ fun MicrophoneSelection(
?: stringResource(R.string.ui_audioRecorder_info_microphone_deviceMicrophone) ?: 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

@ -36,7 +36,7 @@ fun MessageBox(
MessageType.WARNING -> Color.Yellow.copy(alpha = 0.3f) MessageType.WARNING -> Color.Yellow.copy(alpha = 0.3f)
} }
val onContainerColor = when (type) { val onContainerColor = when (type) {
MessageType.ERROR -> MaterialTheme.colorScheme.onError MessageType.ERROR -> MaterialTheme.colorScheme.onErrorContainer
MessageType.INFO -> MaterialTheme.colorScheme.onTertiaryContainer MessageType.INFO -> MaterialTheme.colorScheme.onTertiaryContainer
MessageType.SUCCESS -> Color.Green MessageType.SUCCESS -> Color.Green
MessageType.WARNING -> Color.Yellow MessageType.WARNING -> Color.Yellow