mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-19 07:15:25 +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),
|
horizontalArrangement = Arrangement.spacedBy(16.dp),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.clip(MaterialTheme.shapes.large)
|
.clip(MaterialTheme.shapes.large)
|
||||||
|
.then(modifier)
|
||||||
.background(MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.4f))
|
.background(MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.4f))
|
||||||
.border(
|
.border(
|
||||||
width = 1.dp,
|
width = 1.dp,
|
||||||
shape = MaterialTheme.shapes.large,
|
shape = MaterialTheme.shapes.large,
|
||||||
color = MaterialTheme.colorScheme.outline.copy(alpha = 0.4f)
|
color = MaterialTheme.colorScheme.outline.copy(alpha = 0.4f)
|
||||||
)
|
)
|
||||||
.padding(horizontal = 16.dp, vertical = 8.dp)
|
.padding(horizontal = 16.dp, vertical = 8.dp),
|
||||||
.then(modifier),
|
|
||||||
) {
|
) {
|
||||||
PreviewIcon(
|
PreviewIcon(
|
||||||
modifier = Modifier.size(32.dp),
|
modifier = Modifier.size(32.dp),
|
||||||
|
@ -31,7 +31,7 @@ fun PreviewIcon(
|
|||||||
.then(modifier)
|
.then(modifier)
|
||||||
.clip(CircleShape)
|
.clip(CircleShape)
|
||||||
.background(MaterialTheme.colorScheme.secondary)
|
.background(MaterialTheme.colorScheme.secondary)
|
||||||
.padding(1.dp)
|
.padding(2.dp)
|
||||||
) {
|
) {
|
||||||
Image(
|
Image(
|
||||||
painter = painter,
|
painter = painter,
|
||||||
|
@ -33,6 +33,7 @@ import androidx.compose.ui.draw.clip
|
|||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.ColorFilter
|
import androidx.compose.ui.graphics.ColorFilter
|
||||||
import androidx.compose.ui.graphics.SolidColor
|
import androidx.compose.ui.graphics.SolidColor
|
||||||
|
import androidx.compose.ui.graphics.painter.Painter
|
||||||
import androidx.compose.ui.graphics.toArgb
|
import androidx.compose.ui.graphics.toArgb
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
@ -54,9 +55,11 @@ fun EditNotificationInput(
|
|||||||
showOngoing: Boolean,
|
showOngoing: Boolean,
|
||||||
title: String,
|
title: String,
|
||||||
description: String,
|
description: String,
|
||||||
|
icon: Painter,
|
||||||
onShowOngoingChange: (Boolean) -> Unit,
|
onShowOngoingChange: (Boolean) -> Unit,
|
||||||
onTitleChange: (String) -> Unit,
|
onTitleChange: (String) -> Unit,
|
||||||
onDescriptionChange: (String) -> Unit,
|
onDescriptionChange: (String) -> Unit,
|
||||||
|
onIconChange: (Int) -> Unit,
|
||||||
) {
|
) {
|
||||||
var ongoingStartTime by remember { mutableStateOf(LocalDateTime.now()) }
|
var ongoingStartTime by remember { mutableStateOf(LocalDateTime.now()) }
|
||||||
|
|
||||||
@ -75,7 +78,7 @@ fun EditNotificationInput(
|
|||||||
|
|
||||||
PreviewIcon(
|
PreviewIcon(
|
||||||
modifier = Modifier.size(headlineSize),
|
modifier = Modifier.size(headlineSize),
|
||||||
painter = painterResource(id = R.drawable.launcher_foreground)
|
painter = icon,
|
||||||
)
|
)
|
||||||
|
|
||||||
Column(
|
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
|
package app.myzel394.alibi.ui.screens
|
||||||
|
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
|
import androidx.compose.foundation.gestures.scrollable
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
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.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
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.Icons
|
||||||
import androidx.compose.material.icons.filled.ArrowBack
|
import androidx.compose.material.icons.filled.ArrowBack
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
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.db.NotificationSettings
|
||||||
import app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.atoms.NotificationPresetSelect
|
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.molecules.EditNotificationInput
|
||||||
|
import app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.organisms.NotificationEditor
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
@ -41,6 +44,7 @@ fun CustomRecordingNotificationsScreen(
|
|||||||
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
|
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
|
||||||
rememberTopAppBarState()
|
rememberTopAppBarState()
|
||||||
)
|
)
|
||||||
|
val scrollState = rememberScrollState()
|
||||||
|
|
||||||
val dataStore = LocalContext.current.dataStore
|
val dataStore = LocalContext.current.dataStore
|
||||||
val settings = dataStore
|
val settings = dataStore
|
||||||
@ -70,40 +74,11 @@ fun CustomRecordingNotificationsScreen(
|
|||||||
) { padding ->
|
) { padding ->
|
||||||
if (settings.notificationSettings == null) {
|
if (settings.notificationSettings == null) {
|
||||||
}
|
}
|
||||||
Column(
|
NotificationEditor(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize()
|
|
||||||
.padding(padding)
|
.padding(padding)
|
||||||
.padding(vertical = 64.dp, horizontal = 16.dp),
|
.verticalScroll(scrollState),
|
||||||
verticalArrangement = Arrangement.SpaceBetween,
|
scrollState = scrollState,
|
||||||
) {
|
|
||||||
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,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -84,4 +84,5 @@
|
|||||||
<string name="ui_audioRecorder_state_recording_fake_browser_description">Downloading file...</string>
|
<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_title">Connected to VPN</string>
|
||||||
<string name="ui_audioRecorder_state_recording_fake_vpn_description">Connection Secured</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>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user