diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/NotificationPresetSelect.kt b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/NotificationPresetSelect.kt
index f90bbe2..3df2775 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/NotificationPresetSelect.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/NotificationPresetSelect.kt
@@ -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),
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/PreviewIcon.kt b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/PreviewIcon.kt
index 89b02dc..1e3c557 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/PreviewIcon.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/PreviewIcon.kt
@@ -31,7 +31,7 @@ fun PreviewIcon(
.then(modifier)
.clip(CircleShape)
.background(MaterialTheme.colorScheme.secondary)
- .padding(1.dp)
+ .padding(2.dp)
) {
Image(
painter = painter,
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/molecules/EditNotificationInput.kt b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/molecules/EditNotificationInput.kt
index 73e2960..1aab0de 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/molecules/EditNotificationInput.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/molecules/EditNotificationInput.kt
@@ -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(
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/organisms/NotificationEditor.kt b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/organisms/NotificationEditor.kt
new file mode 100644
index 0000000..685430c
--- /dev/null
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/organisms/NotificationEditor.kt
@@ -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,
+ )
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/CustomRecordingNotificationsScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/CustomRecordingNotificationsScreen.kt
index a2cc7a2..7add6e2 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/screens/CustomRecordingNotificationsScreen.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/screens/CustomRecordingNotificationsScreen.kt
@@ -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,
+ )
}
}
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2dbf736..8b75438 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -84,4 +84,5 @@
Downloading file...
Connected to VPN
Connection Secured
+ Apply Preset \"%s\"
\ No newline at end of file