mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-19 07:15:25 +02:00
feat(ui): Improve settings UI
This commit is contained in:
parent
d4a5612b77
commit
4f265b23f8
@ -0,0 +1,53 @@
|
|||||||
|
package app.myzel394.alibi.ui.components.SettingsScreen.Tiles
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.Row
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.material3.Divider
|
||||||
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun DividerTitle(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
title: String,
|
||||||
|
description: String,
|
||||||
|
) {
|
||||||
|
Column(
|
||||||
|
modifier = modifier,
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
|
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||||
|
) {
|
||||||
|
Row(
|
||||||
|
modifier = Modifier.fillMaxWidth(),
|
||||||
|
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
) {
|
||||||
|
Divider(
|
||||||
|
modifier = Modifier
|
||||||
|
.weight(1f)
|
||||||
|
.align(Alignment.CenterVertically),
|
||||||
|
)
|
||||||
|
Text(
|
||||||
|
title,
|
||||||
|
style = MaterialTheme.typography.headlineSmall,
|
||||||
|
color = MaterialTheme.colorScheme.onSurface,
|
||||||
|
)
|
||||||
|
Divider(
|
||||||
|
modifier = Modifier
|
||||||
|
.weight(1f)
|
||||||
|
.align(Alignment.CenterVertically),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Text(
|
||||||
|
description,
|
||||||
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package app.myzel394.alibi.ui.components.atoms
|
package app.myzel394.alibi.ui.components.atoms
|
||||||
|
|
||||||
|
import androidx.compose.animation.animateColorAsState
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
@ -10,6 +11,7 @@ import androidx.compose.material3.Switch
|
|||||||
import androidx.compose.material3.SwitchDefaults
|
import androidx.compose.material3.SwitchDefaults
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
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.clip
|
import androidx.compose.ui.draw.clip
|
||||||
@ -24,12 +26,21 @@ fun GlobalSwitch(
|
|||||||
checked: Boolean,
|
checked: Boolean,
|
||||||
onCheckedChange: (Boolean) -> Unit,
|
onCheckedChange: (Boolean) -> Unit,
|
||||||
) {
|
) {
|
||||||
|
val backgroundColor by animateColorAsState(
|
||||||
|
targetValue = if (checked) MaterialTheme.colorScheme.secondaryContainer else MaterialTheme.colorScheme.secondaryContainer.copy(
|
||||||
|
alpha = 0.2f
|
||||||
|
),
|
||||||
|
label = "backgroundColor"
|
||||||
|
)
|
||||||
|
|
||||||
Row(
|
Row(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(16.dp)
|
.padding(16.dp)
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.clip(MaterialTheme.shapes.extraLarge)
|
.clip(MaterialTheme.shapes.extraLarge)
|
||||||
.background(MaterialTheme.colorScheme.secondary)
|
.background(
|
||||||
|
backgroundColor
|
||||||
|
)
|
||||||
.padding(16.dp),
|
.padding(16.dp),
|
||||||
horizontalArrangement = Arrangement.SpaceBetween,
|
horizontalArrangement = Arrangement.SpaceBetween,
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
@ -38,18 +49,10 @@ fun GlobalSwitch(
|
|||||||
label,
|
label,
|
||||||
fontSize = 18.sp,
|
fontSize = 18.sp,
|
||||||
fontWeight = FontWeight.W500,
|
fontWeight = FontWeight.W500,
|
||||||
color = MaterialTheme.colorScheme.onSecondary,
|
color = MaterialTheme.colorScheme.onSurface,
|
||||||
)
|
)
|
||||||
Switch(
|
Switch(
|
||||||
colors = SwitchDefaults.colors(
|
colors = SwitchDefaults.colors(),
|
||||||
uncheckedTrackColor = MaterialTheme.colorScheme.background,
|
|
||||||
checkedTrackColor = MaterialTheme.colorScheme.surfaceVariant,
|
|
||||||
checkedThumbColor = MaterialTheme.colorScheme.secondary,
|
|
||||||
uncheckedBorderColor = Color.Transparent,
|
|
||||||
checkedBorderColor = Color.Transparent,
|
|
||||||
disabledCheckedBorderColor = Color.Transparent,
|
|
||||||
disabledUncheckedBorderColor = Color.Transparent,
|
|
||||||
),
|
|
||||||
checked = checked,
|
checked = checked,
|
||||||
onCheckedChange = {
|
onCheckedChange = {
|
||||||
onCheckedChange(it)
|
onCheckedChange(it)
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
package app.myzel394.alibi.ui.screens
|
package app.myzel394.alibi.ui.screens
|
||||||
|
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
|
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
|
||||||
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.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
@ -131,6 +133,11 @@ fun SettingsScreen(
|
|||||||
if (!SUPPORTS_DARK_MODE_NATIVELY) {
|
if (!SUPPORTS_DARK_MODE_NATIVELY) {
|
||||||
ThemeSelector()
|
ThemeSelector()
|
||||||
}
|
}
|
||||||
|
MaxDurationTile(settings = settings)
|
||||||
|
IntervalDurationTile(settings = settings)
|
||||||
|
InAppLanguagePicker()
|
||||||
|
DeleteRecordingsImmediatelyTile(settings = settings)
|
||||||
|
CustomNotificationTile(navController = navController, settings = settings)
|
||||||
GlobalSwitch(
|
GlobalSwitch(
|
||||||
label = stringResource(R.string.ui_settings_advancedSettings_label),
|
label = stringResource(R.string.ui_settings_advancedSettings_label),
|
||||||
checked = settings.showAdvancedSettings,
|
checked = settings.showAdvancedSettings,
|
||||||
@ -142,24 +149,22 @@ fun SettingsScreen(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
MaxDurationTile(settings = settings)
|
|
||||||
IntervalDurationTile(settings = settings)
|
|
||||||
InAppLanguagePicker()
|
|
||||||
DeleteRecordingsImmediatelyTile(settings = settings)
|
|
||||||
CustomNotificationTile(navController = navController, settings = settings)
|
|
||||||
AboutTile(navController = navController)
|
|
||||||
AnimatedVisibility(visible = settings.showAdvancedSettings) {
|
AnimatedVisibility(visible = settings.showAdvancedSettings) {
|
||||||
Column(
|
Column(
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
verticalArrangement = Arrangement.spacedBy(32.dp),
|
verticalArrangement = Arrangement.spacedBy(32.dp),
|
||||||
) {
|
) {
|
||||||
Column {
|
Column {
|
||||||
Divider(
|
SaveFolderTile(settings = settings)
|
||||||
|
|
||||||
|
DividerTitle(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp, vertical = 32.dp)
|
.padding(16.dp),
|
||||||
|
title = stringResource(R.string.ui_settings_sections_audio_title),
|
||||||
|
description = stringResource(R.string.ui_settings_sections_audio_description),
|
||||||
)
|
)
|
||||||
SaveFolderTile(settings = settings)
|
|
||||||
AudioRecorderShowAllMicrophonesTile(settings = settings)
|
AudioRecorderShowAllMicrophonesTile(settings = settings)
|
||||||
AudioRecorderBitrateTile(settings = settings)
|
AudioRecorderBitrateTile(settings = settings)
|
||||||
AudioRecorderSamplingRateTile(settings = settings)
|
AudioRecorderSamplingRateTile(settings = settings)
|
||||||
@ -176,6 +181,7 @@ fun SettingsScreen(
|
|||||||
ImportExport(snackbarHostState = snackbarHostState)
|
ImportExport(snackbarHostState = snackbarHostState)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
AboutTile(navController = navController)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -120,4 +120,6 @@
|
|||||||
<string name="ui_settings_option_saveFolder_action_default_label">Use private, encrypted storage</string>
|
<string name="ui_settings_option_saveFolder_action_default_label">Use private, encrypted storage</string>
|
||||||
<string name="ui_audioRecorder_action_save_success">Recording has been saved successfully!</string>
|
<string name="ui_audioRecorder_action_save_success">Recording has been saved successfully!</string>
|
||||||
<string name="ui_audioRecorder_action_save_openFolder">Open</string>
|
<string name="ui_audioRecorder_action_save_openFolder">Open</string>
|
||||||
|
<string name="ui_settings_sections_audio_title">Audio Recording</string>
|
||||||
|
<string name="ui_settings_sections_audio_description">Only applies to audio recordings</string>
|
||||||
</resources>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user