From f2fac1674bb1752993c12013e59e28df9dd794ca Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Thu, 8 Oct 2026 14:52:54 -0400 Subject: [PATCH] DRY pass #2, batch 6, F19: BackButton, the arrow out of a full-screen surface (#5372) Panel.kt BackButton(onClick, label): the IconButton + ArrowBack that the tags, sync and editor top bars each built. Each keeps its own spoken label. Checked with ktlint in the CI image. Co-Authored-By: Claude Opus 5.5 --- .../com/fabledsword/inkwell/ui/EditorChrome.kt | 8 +------- .../main/java/com/fabledsword/inkwell/ui/Panel.kt | 15 +++++++++++++++ .../java/com/fabledsword/inkwell/ui/SyncScreen.kt | 13 +------------ .../java/com/fabledsword/inkwell/ui/TagsScreen.kt | 10 +--------- 4 files changed, 18 insertions(+), 28 deletions(-) diff --git a/android/app/src/main/java/com/fabledsword/inkwell/ui/EditorChrome.kt b/android/app/src/main/java/com/fabledsword/inkwell/ui/EditorChrome.kt index 249a42d..000e247 100644 --- a/android/app/src/main/java/com/fabledsword/inkwell/ui/EditorChrome.kt +++ b/android/app/src/main/java/com/fabledsword/inkwell/ui/EditorChrome.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.automirrored.filled.List import androidx.compose.material.icons.filled.Check import androidx.compose.material.icons.filled.Close @@ -96,12 +95,7 @@ fun EditorTopBar( // The only way out, and the only thing that needed a "save" button // before writes became continuous. Leaving IS saving now, which is what // the line in the bottom corner is there to say out loud. - IconButton(onClick = onClose) { - Icon( - Icons.AutoMirrored.Filled.ArrowBack, - contentDescription = stringResource(R.string.editor_back), - ) - } + BackButton(onClose, R.string.editor_back) }, actions = { if (!readOnly && owner) { diff --git a/android/app/src/main/java/com/fabledsword/inkwell/ui/Panel.kt b/android/app/src/main/java/com/fabledsword/inkwell/ui/Panel.kt index 744c3d5..7dd1624 100644 --- a/android/app/src/main/java/com/fabledsword/inkwell/ui/Panel.kt +++ b/android/app/src/main/java/com/fabledsword/inkwell/ui/Panel.kt @@ -9,8 +9,12 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material3.AlertDialog import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton @@ -175,6 +179,17 @@ fun ConfirmDialog( ) } +/** The arrow out of a full-screen surface, at the start of its top bar. */ +@Composable +fun BackButton( + onClick: () -> Unit, + @StringRes label: Int, +) { + IconButton(onClick = onClick) { + Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource(label)) + } +} + /** Secondary text under a field or a heading: smaller, and in the quieter ink. */ @Composable fun Hint( diff --git a/android/app/src/main/java/com/fabledsword/inkwell/ui/SyncScreen.kt b/android/app/src/main/java/com/fabledsword/inkwell/ui/SyncScreen.kt index e5925e8..c35e97c 100644 --- a/android/app/src/main/java/com/fabledsword/inkwell/ui/SyncScreen.kt +++ b/android/app/src/main/java/com/fabledsword/inkwell/ui/SyncScreen.kt @@ -9,13 +9,9 @@ import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material3.Button import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold @@ -76,14 +72,7 @@ fun SyncScreen( topBar = { TopAppBar( title = { Text(stringResource(R.string.sync_title)) }, - navigationIcon = { - IconButton(onClick = onClose) { - Icon( - Icons.AutoMirrored.Filled.ArrowBack, - contentDescription = stringResource(R.string.editor_back), - ) - } - }, + navigationIcon = { BackButton(onClose, R.string.editor_back) }, ) }, ) { padding -> 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 a9d1e1b..c0f51aa 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 @@ -19,7 +19,6 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material3.AlertDialog import androidx.compose.material3.DropdownMenu @@ -104,14 +103,7 @@ fun TagsScreen( topBar = { TopAppBar( title = { Text(stringResource(R.string.tags_title)) }, - navigationIcon = { - IconButton(onClick = onClose) { - Icon( - Icons.AutoMirrored.Filled.ArrowBack, - contentDescription = stringResource(R.string.tags_back), - ) - } - }, + navigationIcon = { BackButton(onClose, R.string.tags_back) }, ) }, ) { padding ->