feat: Make presets workable

This commit is contained in:
Myzel394 2023-10-23 21:46:41 +02:00
parent dd57ce513e
commit 5a55619e55
No known key found for this signature in database
GPG Key ID: 79CC92F37B3E1A2B
6 changed files with 127 additions and 38 deletions

View File

@ -29,14 +29,14 @@ fun NotificationPresetSelect(
horizontalArrangement = Arrangement.spacedBy(16.dp),
modifier = Modifier
.clip(MaterialTheme.shapes.large)
.then(modifier)
.background(MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.4f))
.border(
width = 1.dp,
shape = MaterialTheme.shapes.large,
color = MaterialTheme.colorScheme.outline.copy(alpha = 0.4f)
)
.padding(horizontal = 16.dp, vertical = 8.dp)
.then(modifier),
.padding(horizontal = 16.dp, vertical = 8.dp),
) {
PreviewIcon(
modifier = Modifier.size(32.dp),

View File

@ -31,7 +31,7 @@ fun PreviewIcon(
.then(modifier)
.clip(CircleShape)
.background(MaterialTheme.colorScheme.secondary)
.padding(1.dp)
.padding(2.dp)
) {
Image(
painter = painter,

View File

@ -33,6 +33,7 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@ -54,9 +55,11 @@ fun EditNotificationInput(
showOngoing: Boolean,
title: String,
description: String,
icon: Painter,
onShowOngoingChange: (Boolean) -> Unit,
onTitleChange: (String) -> Unit,
onDescriptionChange: (String) -> Unit,
onIconChange: (Int) -> Unit,
) {
var ongoingStartTime by remember { mutableStateOf(LocalDateTime.now()) }
@ -75,7 +78,7 @@ fun EditNotificationInput(
PreviewIcon(
modifier = Modifier.size(headlineSize),
painter = painterResource(id = R.drawable.launcher_foreground)
painter = icon,
)
Column(

View File

@ -0,0 +1,110 @@
package app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.organisms
import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.clickable
import androidx.compose.foundation.gestures.scrollable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.dp
import app.myzel394.alibi.R
import app.myzel394.alibi.db.NotificationSettings
import app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.atoms.NotificationPresetSelect
import app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.molecules.EditNotificationInput
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun NotificationEditor(
modifier: Modifier = Modifier,
scrollState: ScrollState,
) {
val defaultTitle = stringResource(R.string.ui_audioRecorder_state_recording_title)
val defaultDescription = stringResource(R.string.ui_audioRecorder_state_recording_description)
var title: String by rememberSaveable {
mutableStateOf(defaultTitle)
}
var description: String by rememberSaveable {
mutableStateOf(defaultDescription)
}
var showOngoing: Boolean by rememberSaveable {
mutableStateOf(true)
}
var icon: Int by rememberSaveable {
mutableStateOf(R.drawable.launcher_monochrome_noopacity)
}
Column(
modifier = Modifier
.fillMaxSize()
.padding(horizontal = 16.dp)
.then(modifier),
verticalArrangement = Arrangement.SpaceBetween,
) {
EditNotificationInput(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp),
showOngoing = true,
title = title,
description = description,
icon = painterResource(icon),
onShowOngoingChange = {
showOngoing = it
},
onTitleChange = {
title = it
},
onDescriptionChange = {
description = it
},
onIconChange = {
icon = it
},
)
Column(
verticalArrangement = Arrangement.spacedBy(4.dp),
) {
for (preset in NotificationSettings.PRESETS) {
val label = stringResource(
R.string.ui_settings_customNotifications_preset_apply_label,
stringResource(preset.titleID)
)
val presetTitle = stringResource(preset.titleID)
val presetDescription = stringResource(preset.messageID)
NotificationPresetSelect(
modifier = Modifier
.fillMaxWidth()
.semantics {
contentDescription = label
}
.clickable {
title = presetTitle
description = presetDescription
icon = preset.iconID
showOngoing = preset.showOngoing
},
preset = preset,
)
}
}
}
}

View File

@ -1,13 +1,15 @@
package app.myzel394.alibi.ui.screens
import androidx.compose.foundation.clickable
import androidx.compose.foundation.gestures.scrollable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material3.ExperimentalMaterial3Api
@ -32,6 +34,7 @@ import app.myzel394.alibi.db.AppSettings
import app.myzel394.alibi.db.NotificationSettings
import app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.atoms.NotificationPresetSelect
import app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.molecules.EditNotificationInput
import app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.organisms.NotificationEditor
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@ -41,6 +44,7 @@ fun CustomRecordingNotificationsScreen(
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
rememberTopAppBarState()
)
val scrollState = rememberScrollState()
val dataStore = LocalContext.current.dataStore
val settings = dataStore
@ -70,40 +74,11 @@ fun CustomRecordingNotificationsScreen(
) { padding ->
if (settings.notificationSettings == null) {
}
Column(
NotificationEditor(
modifier = Modifier
.fillMaxSize()
.padding(padding)
.padding(vertical = 64.dp, horizontal = 16.dp),
verticalArrangement = Arrangement.SpaceBetween,
) {
EditNotificationInput(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp),
showOngoing = true,
title = "Alibi",
description = "test",
onShowOngoingChange = {},
onTitleChange = {},
onDescriptionChange = {},
)
LazyColumn(
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
items(NotificationSettings.PRESETS.size) {
val preset = NotificationSettings.PRESETS[it]
NotificationPresetSelect(
modifier = Modifier
.fillMaxWidth()
.clickable {
},
preset = preset,
)
}
}
}
.verticalScroll(scrollState),
scrollState = scrollState,
)
}
}

View File

@ -84,4 +84,5 @@
<string name="ui_audioRecorder_state_recording_fake_browser_description">Downloading file...</string>
<string name="ui_audioRecorder_state_recording_fake_vpn_title">Connected to VPN</string>
<string name="ui_audioRecorder_state_recording_fake_vpn_description">Connection Secured</string>
<string name="ui_settings_customNotifications_preset_apply_label">Apply Preset \"%s\"</string>
</resources>