From 0d82e26eea909ef3aecb1b1ebd11ba949621d25a Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Thu, 8 Oct 2026 15:10:15 -0400 Subject: [PATCH] DRY pass #2, batch 8, F20: drawer titles and tag colour names come from strings.xml (#5372) Destination carried its English title as a field, and NoteTint its colour name; every other word on screen is a string resource. Destination.title() now reads nav_notes/reminders/archive/trash (a tag's destination keeps its name), and NoteTint.label is a @StringRes. Error fallbacks raised in view models and the install receiver stay as constants: they are made outside composition, with no Context to read a resource from. Co-Authored-By: Claude Opus 5.5 --- .../com/fabledsword/inkwell/ui/BoardScreen.kt | 12 +++++++++- .../fabledsword/inkwell/ui/BoardViewModel.kt | 20 ++++------------ .../com/fabledsword/inkwell/ui/NoteTint.kt | 24 ++++++++++--------- .../com/fabledsword/inkwell/ui/TagsScreen.kt | 2 +- android/app/src/main/res/values/strings.xml | 14 +++++++++++ 5 files changed, 44 insertions(+), 28 deletions(-) diff --git a/android/app/src/main/java/com/fabledsword/inkwell/ui/BoardScreen.kt b/android/app/src/main/java/com/fabledsword/inkwell/ui/BoardScreen.kt index 4a54ad0..238e92a 100644 --- a/android/app/src/main/java/com/fabledsword/inkwell/ui/BoardScreen.kt +++ b/android/app/src/main/java/com/fabledsword/inkwell/ui/BoardScreen.kt @@ -470,6 +470,16 @@ private fun NavigationDrawer( } } +@Composable +private fun Destination.title(): String = + when (this) { + Destination.Notes -> stringResource(R.string.nav_notes) + Destination.Reminders -> stringResource(R.string.nav_reminders) + Destination.Archive -> stringResource(R.string.nav_archive) + Destination.Trash -> stringResource(R.string.nav_trash) + is Destination.WithLabel -> name + } + @Composable private fun DrawerRow( destination: Destination, @@ -477,7 +487,7 @@ private fun DrawerRow( onOpen: (Destination) -> Unit, ) { NavigationDrawerItem( - label = { Text(destination.title) }, + label = { Text(destination.title()) }, selected = destination == current, onClick = { onOpen(destination) }, modifier = Modifier.padding(horizontal = 12.dp), diff --git a/android/app/src/main/java/com/fabledsword/inkwell/ui/BoardViewModel.kt b/android/app/src/main/java/com/fabledsword/inkwell/ui/BoardViewModel.kt index 59887db..9196646 100644 --- a/android/app/src/main/java/com/fabledsword/inkwell/ui/BoardViewModel.kt +++ b/android/app/src/main/java/com/fabledsword/inkwell/ui/BoardViewModel.kt @@ -30,27 +30,17 @@ import kotlinx.coroutines.withContext * empty board. */ sealed interface Destination { - val title: String + data object Notes : Destination - data object Notes : Destination { - override val title = "Notes" - } + data object Reminders : Destination - data object Reminders : Destination { - override val title = "Reminders" - } + data object Archive : Destination - data object Archive : Destination { - override val title = "Archive" - } - - data object Trash : Destination { - override val title = "Trash" - } + data object Trash : Destination data class WithLabel( val id: String, - override val title: String, + val name: String, ) : Destination } diff --git a/android/app/src/main/java/com/fabledsword/inkwell/ui/NoteTint.kt b/android/app/src/main/java/com/fabledsword/inkwell/ui/NoteTint.kt index 48636c7..894e385 100644 --- a/android/app/src/main/java/com/fabledsword/inkwell/ui/NoteTint.kt +++ b/android/app/src/main/java/com/fabledsword/inkwell/ui/NoteTint.kt @@ -1,8 +1,10 @@ package com.fabledsword.inkwell.ui +import androidx.annotation.StringRes import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.graphics.Color +import com.fabledsword.inkwell.R /** * The colour palette, matching `frontend/src/notes/colors.ts` VALUE FOR VALUE. @@ -27,7 +29,7 @@ import androidx.compose.ui.graphics.Color * acid against the neutral surfaces. */ data class NoteTint( - val label: String, + @StringRes val label: Int, val lightBackground: Color, val lightBorder: Color, val darkBackground: Color, @@ -121,7 +123,7 @@ val NOTE_TINTS: Map = mapOf( "default" to NoteTint( - label = "Default", + label = R.string.tint_default, lightBackground = Color(0xFFFFFFFF), lightBorder = Color(0xFFE5E5E5), darkBackground = Color(0xFF171717), @@ -135,7 +137,7 @@ val NOTE_TINTS: Map = ), "red" to NoteTint( - label = "Red", + label = R.string.tint_red, lightBackground = Color(0xFFFEF2F2), lightBorder = Color(0xFFFECACA), darkBackground = Color(0x66450A0A), @@ -149,7 +151,7 @@ val NOTE_TINTS: Map = ), "orange" to NoteTint( - label = "Orange", + label = R.string.tint_orange, lightBackground = Color(0xFFFFF7ED), lightBorder = Color(0xFFFED7AA), darkBackground = Color(0x66431407), @@ -163,7 +165,7 @@ val NOTE_TINTS: Map = ), "yellow" to NoteTint( - label = "Yellow", + label = R.string.tint_yellow, lightBackground = Color(0xFFFFFBEB), lightBorder = Color(0xFFFDE68A), darkBackground = Color(0x66451A03), @@ -177,7 +179,7 @@ val NOTE_TINTS: Map = ), "green" to NoteTint( - label = "Green", + label = R.string.tint_green, lightBackground = Color(0xFFF0FDF4), lightBorder = Color(0xFFBBF7D0), darkBackground = Color(0x66052E16), @@ -191,7 +193,7 @@ val NOTE_TINTS: Map = ), "teal" to NoteTint( - label = "Teal", + label = R.string.tint_teal, lightBackground = Color(0xFFF0FDFA), lightBorder = Color(0xFF99F6E4), darkBackground = Color(0x66042F2E), @@ -205,7 +207,7 @@ val NOTE_TINTS: Map = ), "blue" to NoteTint( - label = "Blue", + label = R.string.tint_blue, lightBackground = Color(0xFFEFF6FF), lightBorder = Color(0xFFBFDBFE), darkBackground = Color(0x66172554), @@ -219,7 +221,7 @@ val NOTE_TINTS: Map = ), "purple" to NoteTint( - label = "Purple", + label = R.string.tint_purple, lightBackground = Color(0xFFFAF5FF), lightBorder = Color(0xFFE9D5FF), darkBackground = Color(0x663B0764), @@ -233,7 +235,7 @@ val NOTE_TINTS: Map = ), "pink" to NoteTint( - label = "Pink", + label = R.string.tint_pink, lightBackground = Color(0xFFFDF2F8), lightBorder = Color(0xFFFBCFE8), darkBackground = Color(0x66500724), @@ -247,7 +249,7 @@ val NOTE_TINTS: Map = ), "gray" to NoteTint( - label = "Gray", + label = R.string.tint_gray, lightBackground = Color(0xFFF5F5F5), lightBorder = Color(0xFFD4D4D4), darkBackground = Color(0xFF262626), diff --git a/android/app/src/main/java/com/fabledsword/inkwell/ui/TagsScreen.kt b/android/app/src/main/java/com/fabledsword/inkwell/ui/TagsScreen.kt index 6737eae..fa99a18 100644 --- a/android/app/src/main/java/com/fabledsword/inkwell/ui/TagsScreen.kt +++ b/android/app/src/main/java/com/fabledsword/inkwell/ui/TagsScreen.kt @@ -524,7 +524,7 @@ private fun ColourDialog( ) { Swatch(tint, dark) Text( - text = tint.label, + text = stringResource(tint.label), style = MaterialTheme.typography.bodyMedium, color = if (key == tag.color) { diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 9edba18..60f89f0 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -7,6 +7,20 @@ Clear search Open navigation Tags + Notes + Reminders + Archive + Trash + Default + Red + Orange + Yellow + Green + Teal + Blue + Purple + Pink + Gray New note