From a7310220e54f55fa83ce8bd5818c7f2cb17f4881 Mon Sep 17 00:00:00 2001 From: Tim Kluge Date: Wed, 4 Dec 2024 21:51:33 +0100 Subject: [PATCH] fix #5: Add reminder display duration setting --- app/manifest.json | 2 +- .../karooreminder/KarooReminderExtension.kt | 2 +- .../karooreminder/screens/DetailScreen.kt | 19 +++++++++++++------ .../karooreminder/screens/MainScreen.kt | 15 ++++++++++++--- .../timklge/karooreminder/screens/Reminder.kt | 3 ++- 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/app/manifest.json b/app/manifest.json index cae698b..ea0122a 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -7,5 +7,5 @@ "latestVersionCode": 4, "developer": "timklge", "description": "Simple karoo extension that shows in-ride alerts every X minutes", - "releaseNotes": "Fix reminders are shown immediately on start of the second ride after system start" + "releaseNotes": "Added display duration setting" } \ No newline at end of file diff --git a/app/src/main/kotlin/de/timklge/karooreminder/KarooReminderExtension.kt b/app/src/main/kotlin/de/timklge/karooreminder/KarooReminderExtension.kt index 896bedd..f6e2d22 100644 --- a/app/src/main/kotlin/de/timklge/karooreminder/KarooReminderExtension.kt +++ b/app/src/main/kotlin/de/timklge/karooreminder/KarooReminderExtension.kt @@ -77,7 +77,7 @@ class KarooReminderExtension : KarooExtension("karoo-reminder", "1.0.3") { id = "reminder-${reminder.id}-${elapsedMinutes}", detail = reminder.text, title = reminder.name, - autoDismissMs = if(reminder.isAutoDismiss) 15_000 else null, + autoDismissMs = if(reminder.isAutoDismiss) reminder.autoDismissSeconds * 1000L else null, icon = R.drawable.ic_launcher, textColor = R.color.white, backgroundColor = reminder.getResourceColor(applicationContext) diff --git a/app/src/main/kotlin/de/timklge/karooreminder/screens/DetailScreen.kt b/app/src/main/kotlin/de/timklge/karooreminder/screens/DetailScreen.kt index a3b6f01..93ee67f 100644 --- a/app/src/main/kotlin/de/timklge/karooreminder/screens/DetailScreen.kt +++ b/app/src/main/kotlin/de/timklge/karooreminder/screens/DetailScreen.kt @@ -40,7 +40,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -61,7 +60,6 @@ import com.maxkeppeler.sheets.color.models.SingleColor import de.timklge.karooreminder.R import io.hammerhead.karooext.KarooSystemService import io.hammerhead.karooext.models.PlayBeepPattern -import kotlinx.coroutines.launch @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -81,9 +79,10 @@ fun DetailScreen(isCreating: Boolean, reminder: Reminder, onSubmit: (updatedRemi var deleteDialogVisible by remember { mutableStateOf(false) } var toneDialogVisible by remember { mutableStateOf(false) } var selectedTone by remember { mutableStateOf(reminder.tone) } + var autoDismissSeconds by remember { mutableStateOf(reminder.autoDismissSeconds.toString()) } - fun getUpdatedReminder(): Reminder = Reminder(reminder.id, title, duration.toIntOrNull() ?: 0, - text, selectedColor, isActive, isAutoDismiss = autoDismiss, tone = selectedTone) + fun getUpdatedReminder(): Reminder = Reminder(reminder.id, title, duration.toIntOrNull() ?: 1, + text, selectedColor, isActive, isAutoDismiss = autoDismiss, tone = selectedTone, autoDismissSeconds = autoDismissSeconds.toIntOrNull() ?: 15) Column(modifier = Modifier .fillMaxSize() @@ -158,6 +157,16 @@ fun DetailScreen(isCreating: Boolean, reminder: Reminder, onSubmit: (updatedRemi Text("Auto-Dismiss") } + if (autoDismiss){ + OutlinedTextField(value = autoDismissSeconds, modifier = Modifier.fillMaxWidth(), + onValueChange = { autoDismissSeconds = it }, + label = { Text("Display duration") }, + suffix = { Text("s") }, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + singleLine = true + ) + } + Row(verticalAlignment = Alignment.CenterVertically) { Switch(checked = isActive, onCheckedChange = { isActive = it}) Spacer(modifier = Modifier.width(10.dp)) @@ -212,7 +221,6 @@ fun DetailScreen(isCreating: Boolean, reminder: Reminder, onSubmit: (updatedRemi if (toneDialogVisible){ Dialog(onDismissRequest = { toneDialogVisible = false }) { var dialogSelectedTone by remember { mutableStateOf(selectedTone) } - val coroutineScope = rememberCoroutineScope() Card( modifier = Modifier @@ -261,7 +269,6 @@ fun DetailScreen(isCreating: Boolean, reminder: Reminder, onSubmit: (updatedRemi Icon(Icons.Default.Close, contentDescription = "Cancel") Text("Cancel") } - } } } diff --git a/app/src/main/kotlin/de/timklge/karooreminder/screens/MainScreen.kt b/app/src/main/kotlin/de/timklge/karooreminder/screens/MainScreen.kt index 8d77eba..0d3778e 100644 --- a/app/src/main/kotlin/de/timklge/karooreminder/screens/MainScreen.kt +++ b/app/src/main/kotlin/de/timklge/karooreminder/screens/MainScreen.kt @@ -56,6 +56,7 @@ import androidx.navigation.navArgument import de.timklge.karooreminder.KarooReminderExtension import de.timklge.karooreminder.dataStore import io.hammerhead.karooext.KarooSystemService +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch import kotlinx.serialization.encodeToString @@ -151,6 +152,12 @@ fun MainScreen(reminders: MutableList, onNavigateToReminder: (r: Remin val ctx = LocalContext.current val karooSystem = remember { KarooSystemService(ctx) } + var showWarnings by remember { mutableStateOf(false) } + LaunchedEffect(Unit) { + delay(1000L) + showWarnings = true + } + Scaffold( topBar = { TopAppBar(title = {Text("Reminder")}) }, floatingActionButtonPosition = FabPosition.End, @@ -203,10 +210,12 @@ fun MainScreen(reminders: MutableList, onNavigateToReminder: (r: Remin } } - if (reminders.isEmpty()) Text(modifier = Modifier.padding(5.dp), text = "No reminders added.") + if (showWarnings){ + if (reminders.isEmpty()) Text(modifier = Modifier.padding(5.dp), text = "No reminders added.") - if (!karooConnected){ - Text(modifier = Modifier.padding(5.dp), text = "Could not read device status. Is your Karoo updated?") + if (!karooConnected){ + Text(modifier = Modifier.padding(5.dp), text = "Could not read device status. Is your Karoo updated?") + } } } } diff --git a/app/src/main/kotlin/de/timklge/karooreminder/screens/Reminder.kt b/app/src/main/kotlin/de/timklge/karooreminder/screens/Reminder.kt index 8da8b51..82bc727 100644 --- a/app/src/main/kotlin/de/timklge/karooreminder/screens/Reminder.kt +++ b/app/src/main/kotlin/de/timklge/karooreminder/screens/Reminder.kt @@ -28,7 +28,8 @@ enum class ReminderBeepPattern(val displayName: String, val tones: List