From ac4102d5cd0a8cf4d3cfae2975913f447ccc2250 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Mon, 23 Oct 2023 18:22:49 +0200 Subject: [PATCH] feat: Add CustomNotificationTile.kt to SettingsScreen --- .../java/app/myzel394/alibi/db/AppSettings.kt | 3 +- .../atoms/CustomNotificationTile.kt | 53 +++++++++++++++++++ .../alibi/ui/screens/SettingsScreen.kt | 2 + app/src/main/res/values/strings.xml | 3 ++ 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/CustomNotificationTile.kt diff --git a/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt b/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt index cda7f9a..be44487 100644 --- a/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt +++ b/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt @@ -16,7 +16,7 @@ import java.time.format.DateTimeFormatter.ISO_DATE_TIME @Serializable data class AppSettings( val audioRecorderSettings: AudioRecorderSettings = AudioRecorderSettings(), - val notificationSettings: NotificationSettings = NotificationSettings.fromPreset(NotificationSettings.Preset.Default), + val notificationSettings: NotificationSettings? = null, val hasSeenOnboarding: Boolean = false, val showAdvancedSettings: Boolean = false, val theme: Theme = Theme.SYSTEM, @@ -433,6 +433,7 @@ data class NotificationSettings( R.string.ui_audioRecorder_state_recording_description, true, ) + data object Weather : Preset( R.string.ui_audioRecorder_state_recording_fake_weather_title, R.string.ui_audioRecorder_state_recording_fake_weather_description, diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/CustomNotificationTile.kt b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/CustomNotificationTile.kt new file mode 100644 index 0000000..288d88c --- /dev/null +++ b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/CustomNotificationTile.kt @@ -0,0 +1,53 @@ +package app.myzel394.alibi.ui.components.SettingsScreen.atoms + +import androidx.compose.foundation.clickable +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ChevronRight +import androidx.compose.material.icons.filled.Notifications +import androidx.compose.material3.Icon +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.semantics +import app.myzel394.alibi.R +import app.myzel394.alibi.dataStore +import app.myzel394.alibi.db.AppSettings +import app.myzel394.alibi.ui.components.atoms.SettingsTile + +@Composable +fun CustomNotificationTile() { + val dataStore = LocalContext.current.dataStore + val settings = dataStore + .data + .collectAsState(initial = AppSettings.getDefaultInstance()) + .value + + val label = if (settings.notificationSettings == null) + stringResource(R.string.ui_settings_option_customNotification_description_setup) + else stringResource( + R.string.ui_settings_option_customNotification_description_edit + ) + + SettingsTile( + firstModifier = Modifier + .clickable { } + .semantics { contentDescription = label }, + title = stringResource(R.string.ui_settings_option_customNotification_title), + description = label, + leading = { + Icon( + Icons.Default.Notifications, + contentDescription = null, + ) + }, + trailing = { + Icon( + Icons.Default.ChevronRight, + contentDescription = null, + ) + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/SettingsScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/SettingsScreen.kt index 420c117..5235937 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/screens/SettingsScreen.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/screens/SettingsScreen.kt @@ -40,6 +40,7 @@ import app.myzel394.alibi.dataStore import app.myzel394.alibi.db.AppSettings import app.myzel394.alibi.ui.SUPPORTS_DARK_MODE_NATIVELY import app.myzel394.alibi.ui.components.SettingsScreen.atoms.BitrateTile +import app.myzel394.alibi.ui.components.SettingsScreen.atoms.CustomNotificationTile import app.myzel394.alibi.ui.components.SettingsScreen.atoms.EncoderTile import app.myzel394.alibi.ui.components.SettingsScreen.atoms.ForceExactMaxDurationTile import app.myzel394.alibi.ui.components.SettingsScreen.atoms.ImportExport @@ -145,6 +146,7 @@ fun SettingsScreen( IntervalDurationTile() ForceExactMaxDurationTile() InAppLanguagePicker() + CustomNotificationTile() AnimatedVisibility(visible = settings.showAdvancedSettings) { Column( horizontalAlignment = Alignment.CenterHorizontally, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3ca07f3..abe5e8a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -71,4 +71,7 @@ Are you sure you want to import these settings? Your current settings will be overwritten! Import settings Settings have been imported successfully! + Custom Notifications + Setup custom recording notifications now + Edit recording notifications \ No newline at end of file