From a9782c421deb3d94ad9af12e2a5b6e96dcd9cf29 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Mon, 13 Jul 2026 10:05:36 +0000 Subject: feat(widget): add Small/Normal/Large text size picker to widget settings --- .../org/terst/doot/widget/ui/SettingsActivity.kt | 31 +++++++++++++++++----- 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'android/app/src/main/java/org') diff --git a/android/app/src/main/java/org/terst/doot/widget/ui/SettingsActivity.kt b/android/app/src/main/java/org/terst/doot/widget/ui/SettingsActivity.kt index 485c067..fb7d773 100644 --- a/android/app/src/main/java/org/terst/doot/widget/ui/SettingsActivity.kt +++ b/android/app/src/main/java/org/terst/doot/widget/ui/SettingsActivity.kt @@ -41,24 +41,27 @@ class SettingsActivity : ComponentActivity() { val scope = rememberCoroutineScope() var savedUrl by remember { mutableStateOf("") } var savedToken by remember { mutableStateOf("") } + var savedTextSize by remember { mutableStateOf(WidgetTextSize.NORMAL) } LaunchedEffect(Unit) { val prefs = dataStore.data.first() savedUrl = prefs[Keys.SERVER_URL] ?: "" savedToken = prefs[Keys.TOKEN] ?: "" + savedTextSize = WidgetTextSize.fromPref(prefs[Keys.TEXT_SIZE]) } SettingsScreen( initialUrl = savedUrl, initialToken = savedToken, - onSave = { url, token -> + initialTextSize = savedTextSize, + onSave = { url, token, textSize -> lifecycleScope.launch { - saveAndFinish(url, token, appWidgetId) + saveAndFinish(url, token, textSize, appWidgetId) } }, onTest = { url, token, onResult -> scope.launch { - val repo = WidgetRepository(OkHttpClient(), url.trimEnd('/'), token) + val repo = WidgetRepository(OkHttpClient(), url, token) repo.fetchRaw().fold( onSuccess = { onResult("✓ Connected (${it.items.size} items)") }, onFailure = { onResult("✗ ${it.message}") } @@ -70,10 +73,11 @@ class SettingsActivity : ComponentActivity() { } } - private suspend fun saveAndFinish(url: String, token: String, appWidgetId: Int) { + private suspend fun saveAndFinish(url: String, token: String, textSize: WidgetTextSize, appWidgetId: Int) { dataStore.edit { prefs -> prefs[Keys.SERVER_URL] = url.trimEnd('/') prefs[Keys.TOKEN] = token + prefs[Keys.TEXT_SIZE] = textSize.name } RefreshWorker.schedule(this) RefreshWorker.runOnce(this) @@ -91,11 +95,13 @@ class SettingsActivity : ComponentActivity() { fun SettingsScreen( initialUrl: String = "", initialToken: String = "", - onSave: (url: String, token: String) -> Unit, + initialTextSize: WidgetTextSize = WidgetTextSize.NORMAL, + onSave: (url: String, token: String, textSize: WidgetTextSize) -> Unit, onTest: (url: String, token: String, onResult: (String) -> Unit) -> Unit ) { var url by remember(initialUrl) { mutableStateOf(initialUrl) } var token by remember(initialToken) { mutableStateOf(initialToken) } + var textSize by remember(initialTextSize) { mutableStateOf(initialTextSize) } var status by remember { mutableStateOf("") } var testing by remember { mutableStateOf(false) } @@ -132,6 +138,19 @@ fun SettingsScreen( singleLine = true ) + Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { + Text("Text Size", style = MaterialTheme.typography.labelLarge) + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + WidgetTextSize.entries.forEach { option -> + FilterChip( + selected = textSize == option, + onClick = { textSize = option }, + label = { Text(option.name.lowercase().replaceFirstChar { it.uppercase() }) } + ) + } + } + } + if (status.isNotEmpty()) { Text( status, @@ -159,7 +178,7 @@ fun SettingsScreen( } Button( - onClick = { onSave(url, token) }, + onClick = { onSave(url, token, textSize) }, enabled = url.isNotBlank() && token.isNotBlank() ) { Text("Save") -- cgit v1.2.3