mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-19 07:15:25 +02:00
feat: Add message when microphone is disconnected
This commit is contained in:
parent
76e10a1512
commit
d559fb45a5
@ -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),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user