mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-18 23:05:26 +02:00
feat: Make presets workable
This commit is contained in:
parent
dd57ce513e
commit
5a55619e55
@ -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),
|
||||
|
@ -31,7 +31,7 @@ fun PreviewIcon(
|
||||
.then(modifier)
|
||||
.clip(CircleShape)
|
||||
.background(MaterialTheme.colorScheme.secondary)
|
||||
.padding(1.dp)
|
||||
.padding(2.dp)
|
||||
) {
|
||||
Image(
|
||||
painter = painter,
|
||||
|
@ -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(
|
||||
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
@ -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>
|
Loading…
x
Reference in New Issue
Block a user