From f190b67ee67f4d19dcb70f2335c1f4757a759d80 Mon Sep 17 00:00:00 2001 From: M57 <41645758+Hy4ri@users.noreply.github.com> Date: Wed, 24 Jun 2026 21:26:32 +0300 Subject: [PATCH] =?UTF-8?q?fix(#290):=20code=20health=20=E2=80=94=20magic?= =?UTF-8?q?=20colors,=20flag=20params,=20silent=20catch=20(#353)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(#290): use LocalHermesStatusColors instead of magic colors (CODE-33) * fix(#290): replace boolean-flag params with sealed NavIcon class (CODE-37) * fix(#290): resolve compilation errors — Color import + nullable NavIcon params --------- Co-authored-by: M57 --- .../java/com/m57/hermescontrol/Navigation.kt | 7 +++-- .../ui/achievements/AchievementsScreen.kt | 3 +- .../ui/channels/ChannelsScreen.kt | 3 +- .../m57/hermescontrol/ui/chat/ChatScreen.kt | 3 +- .../hermescontrol/ui/common/HermesScaffold.kt | 29 ++++++++++++------- .../hermescontrol/ui/config/ConfigScreen.kt | 3 +- .../hermescontrol/ui/cron/CronJobsScreen.kt | 3 +- .../hermescontrol/ui/gateway/GatewayScreen.kt | 3 +- .../hermescontrol/ui/kanban/KanbanScreen.kt | 3 +- .../m57/hermescontrol/ui/keys/KeysScreen.kt | 3 +- .../m57/hermescontrol/ui/logs/LogsScreen.kt | 3 +- .../hermescontrol/ui/mcp/McpServersScreen.kt | 3 +- .../m57/hermescontrol/ui/model/ModelScreen.kt | 3 +- .../hermescontrol/ui/pairing/PairingScreen.kt | 3 +- .../hermescontrol/ui/plugins/PluginsScreen.kt | 3 +- .../ui/profiles/ProfilesScreen.kt | 3 +- .../ui/sessions/SessionsScreen.kt | 3 +- .../ui/settings/SettingsScreen.kt | 4 +-- .../hermescontrol/ui/skills/SkillsScreen.kt | 21 ++++++++------ .../hermescontrol/ui/system/SystemScreen.kt | 3 +- .../ui/toolsets/ToolsetsScreen.kt | 3 +- .../ui/webhooks/WebhooksScreen.kt | 3 +- 22 files changed, 73 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/m57/hermescontrol/Navigation.kt b/app/src/main/java/com/m57/hermescontrol/Navigation.kt index 6ef91ddc..16df2bb5 100644 --- a/app/src/main/java/com/m57/hermescontrol/Navigation.kt +++ b/app/src/main/java/com/m57/hermescontrol/Navigation.kt @@ -50,6 +50,7 @@ import com.m57.hermescontrol.data.local.AuthManager import com.m57.hermescontrol.data.ws.ConnectionStatus import com.m57.hermescontrol.data.ws.HermesWsClient import com.m57.hermescontrol.theme.BottomNavDisplayMode +import com.m57.hermescontrol.theme.LocalHermesStatusColors import kotlinx.coroutines.launch import com.m57.hermescontrol.ui.authlogin.AuthLoginScreen as AuthLoginScreenContent import com.m57.hermescontrol.ui.landing.LandingScreen as LandingScreenContent @@ -137,13 +138,13 @@ fun MainNavigation(sessionId: String? = null) { val connectionStatus by HermesWsClient.connectionStatus.collectAsState() val statusColor = when (connectionStatus) { - ConnectionStatus.CONNECTED -> Color(0xFF4CAF50) + ConnectionStatus.CONNECTED -> LocalHermesStatusColors.current.success ConnectionStatus.CONNECTING, ConnectionStatus.RECONNECTING, - -> Color(0xFFFFC107) + -> LocalHermesStatusColors.current.warning - ConnectionStatus.DISCONNECTED -> Color(0xFFF44336) + ConnectionStatus.DISCONNECTED -> LocalHermesStatusColors.current.error } Row( verticalAlignment = Alignment.CenterVertically, diff --git a/app/src/main/java/com/m57/hermescontrol/ui/achievements/AchievementsScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/achievements/AchievementsScreen.kt index 2812b541..bd18f32b 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/achievements/AchievementsScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/achievements/AchievementsScreen.kt @@ -36,6 +36,7 @@ import com.m57.hermescontrol.ui.common.EmptyState import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SearchBar @Composable @@ -62,7 +63,7 @@ fun AchievementsScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_achievements)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadAchievements() }, ) { paddingValues -> diff --git a/app/src/main/java/com/m57/hermescontrol/ui/channels/ChannelsScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/channels/ChannelsScreen.kt index a89d688c..c5f8df82 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/channels/ChannelsScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/channels/ChannelsScreen.kt @@ -36,6 +36,7 @@ import com.m57.hermescontrol.ui.common.EmptyState import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SearchBar import com.m57.hermescontrol.ui.common.ToastEffect import com.m57.hermescontrol.ui.common.listContentPadding @@ -66,7 +67,7 @@ fun ChannelsScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_channels)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadPlatforms() }, ) { paddingValues -> diff --git a/app/src/main/java/com/m57/hermescontrol/ui/chat/ChatScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/chat/ChatScreen.kt index 2b3bf781..623f290e 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/chat/ChatScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/chat/ChatScreen.kt @@ -109,6 +109,7 @@ import com.m57.hermescontrol.notification.NotificationHelper import com.m57.hermescontrol.theme.StatusRed import com.m57.hermescontrol.ui.common.EmptyState import com.m57.hermescontrol.ui.common.HermesScaffold +import com.m57.hermescontrol.ui.common.NavIcon import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -296,7 +297,7 @@ fun ChatScreen( } } }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, snackbarHost = { SnackbarHost(snackbarHostState) { data -> Snackbar( diff --git a/app/src/main/java/com/m57/hermescontrol/ui/common/HermesScaffold.kt b/app/src/main/java/com/m57/hermescontrol/ui/common/HermesScaffold.kt index 41c2565b..fafe77c1 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/common/HermesScaffold.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/common/HermesScaffold.kt @@ -24,28 +24,35 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import com.m57.hermescontrol.R +/** Sealed interface for navigation icon types — eliminates boolean-flag anti-pattern. */ +sealed interface NavIcon { + /** Hamburger menu icon that opens the drawer. */ + data class Menu(val onOpen: () -> Unit) : NavIcon + + /** Back arrow icon. */ + data class Back(val onBack: () -> Unit) : NavIcon +} + /** * Shared Scaffold wrapper that standardizes the TopAppBar. * * Improvements (v2): * - Scroll-aware top bar (pinned collapse on scroll) * - Uses Spacing tokens internally - * - Simplified API: onOpenDrawer OR showBack (mutually exclusive) + * - Simplified API: [navigationIcon] replaces the old showBack/onBack/onOpenDrawer trio * - Safe-area aware via Scaffold insets * * Screens that still need a Back arrow instead of a Menu icon can set - * `showBack = true` and pass an `onBack` lambda. + * `navigationIcon = NavIcon.Back { … }` instead. */ @OptIn(ExperimentalMaterial3Api::class) @Composable fun HermesScaffold( modifier: Modifier = Modifier, title: @Composable () -> Unit, - onOpenDrawer: (() -> Unit)? = null, + navigationIcon: NavIcon? = null, onRefresh: (() -> Unit)? = null, isRefreshing: Boolean = false, - onBack: (() -> Unit)? = null, - showBack: Boolean = false, pinTopBar: Boolean = false, snackbarHost: @Composable () -> Unit = {}, actions: @Composable () -> Unit = {}, @@ -66,9 +73,9 @@ fun HermesScaffold( TopAppBar( title = title, navigationIcon = { - when { - showBack && onBack != null -> { - IconButton(onClick = onBack) { + when (val icon = navigationIcon) { + is NavIcon.Back -> { + IconButton(onClick = icon.onBack) { Icon( imageVector = Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource(R.string.content_desc_back), @@ -77,8 +84,8 @@ fun HermesScaffold( } } - onOpenDrawer != null -> { - IconButton(onClick = onOpenDrawer) { + is NavIcon.Menu -> { + IconButton(onClick = icon.onOpen) { Icon( imageVector = Icons.Filled.Menu, contentDescription = stringResource(R.string.content_desc_open_drawer), @@ -86,6 +93,8 @@ fun HermesScaffold( ) } } + + null -> { /* no navigation icon */ } } }, actions = { diff --git a/app/src/main/java/com/m57/hermescontrol/ui/config/ConfigScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/config/ConfigScreen.kt index 7dcc9f65..d458e049 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/config/ConfigScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/config/ConfigScreen.kt @@ -33,6 +33,7 @@ import com.m57.hermescontrol.R import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.ToastEffect @OptIn(ExperimentalMaterial3Api::class) @@ -53,7 +54,7 @@ fun ConfigScreen( HermesScaffold( title = { Text(stringResource(R.string.config_screen_title)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadRawConfig() }, ) { paddingValues -> diff --git a/app/src/main/java/com/m57/hermescontrol/ui/cron/CronJobsScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/cron/CronJobsScreen.kt index f28c627d..af8cf83e 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/cron/CronJobsScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/cron/CronJobsScreen.kt @@ -35,6 +35,7 @@ import com.m57.hermescontrol.ui.common.EmptyState import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.StatusBadge import com.m57.hermescontrol.ui.common.StatusBadgeType import com.m57.hermescontrol.ui.common.ToastEffect @@ -59,7 +60,7 @@ fun CronJobsScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_cron)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadCronJobs() }, ) { diff --git a/app/src/main/java/com/m57/hermescontrol/ui/gateway/GatewayScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/gateway/GatewayScreen.kt index dc00964d..a3cfea12 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/gateway/GatewayScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/gateway/GatewayScreen.kt @@ -39,6 +39,7 @@ import com.m57.hermescontrol.R import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.ToastEffect @OptIn(ExperimentalMaterial3Api::class) @@ -58,7 +59,7 @@ fun GatewayScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_gateway)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadStatus() }, ) { paddingValues -> diff --git a/app/src/main/java/com/m57/hermescontrol/ui/kanban/KanbanScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/kanban/KanbanScreen.kt index 88b990fb..28a9772d 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/kanban/KanbanScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/kanban/KanbanScreen.kt @@ -47,6 +47,7 @@ import com.m57.hermescontrol.data.model.KanbanTask import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SearchBar import com.m57.hermescontrol.ui.common.ToastEffect @@ -87,7 +88,7 @@ fun KanbanScreen( HermesScaffold( title = { Text(stringResource(R.string.kanban_board_title)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadBoards() }, ) { paddingValues -> diff --git a/app/src/main/java/com/m57/hermescontrol/ui/keys/KeysScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/keys/KeysScreen.kt index 7b5a8462..c0ce4dec 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/keys/KeysScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/keys/KeysScreen.kt @@ -43,6 +43,7 @@ import com.m57.hermescontrol.ui.common.EmptyState import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SearchBar import com.m57.hermescontrol.ui.common.ToastEffect import com.m57.hermescontrol.ui.common.listContentPadding @@ -75,7 +76,7 @@ fun KeysScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_keys)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadKeys() }, ) { paddingValues -> diff --git a/app/src/main/java/com/m57/hermescontrol/ui/logs/LogsScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/logs/LogsScreen.kt index ab228e5d..fa7e8c84 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/logs/LogsScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/logs/LogsScreen.kt @@ -31,6 +31,7 @@ import com.m57.hermescontrol.ui.common.EmptyState import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SearchBar import com.m57.hermescontrol.ui.common.ToastEffect @@ -68,7 +69,7 @@ fun LogsScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_logs)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadLogs() }, ) { diff --git a/app/src/main/java/com/m57/hermescontrol/ui/mcp/McpServersScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/mcp/McpServersScreen.kt index 296d3ebf..5595c6a6 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/mcp/McpServersScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/mcp/McpServersScreen.kt @@ -38,6 +38,7 @@ import com.m57.hermescontrol.R import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SearchBar import com.m57.hermescontrol.ui.common.ToastEffect import com.m57.hermescontrol.ui.common.listContentPadding @@ -71,7 +72,7 @@ fun McpServersScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_mcp_servers)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadServers() }, ) { paddingValues -> diff --git a/app/src/main/java/com/m57/hermescontrol/ui/model/ModelScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/model/ModelScreen.kt index 8f988220..4f32dbec 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/model/ModelScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/model/ModelScreen.kt @@ -43,6 +43,7 @@ import com.m57.hermescontrol.ui.common.EmptyState import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SearchBar import com.m57.hermescontrol.ui.common.ToastEffect @@ -76,7 +77,7 @@ fun ModelScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_models)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadModelOptions() }, ) { paddingValues -> diff --git a/app/src/main/java/com/m57/hermescontrol/ui/pairing/PairingScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/pairing/PairingScreen.kt index 6733b6d6..64c21e97 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/pairing/PairingScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/pairing/PairingScreen.kt @@ -35,6 +35,7 @@ import com.m57.hermescontrol.R import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.ToastEffect @OptIn(ExperimentalMaterial3Api::class) @@ -54,7 +55,7 @@ fun PairingScreen( HermesScaffold( title = { Text(stringResource(R.string.pairing_screen_title)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadPairing() }, ) { paddingValues -> diff --git a/app/src/main/java/com/m57/hermescontrol/ui/plugins/PluginsScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/plugins/PluginsScreen.kt index 37b1bf07..28e6c962 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/plugins/PluginsScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/plugins/PluginsScreen.kt @@ -37,6 +37,7 @@ import com.m57.hermescontrol.ui.common.EmptyState import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SearchBar import com.m57.hermescontrol.ui.common.ToastEffect import com.m57.hermescontrol.ui.common.listContentPadding @@ -69,7 +70,7 @@ fun PluginsScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_plugins)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadPlugins() }, ) { paddingValues -> diff --git a/app/src/main/java/com/m57/hermescontrol/ui/profiles/ProfilesScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/profiles/ProfilesScreen.kt index a800f210..5d5aa518 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/profiles/ProfilesScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/profiles/ProfilesScreen.kt @@ -46,6 +46,7 @@ import com.m57.hermescontrol.ui.common.EmptyState import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.ToastEffect @OptIn(ExperimentalMaterial3Api::class) @@ -70,7 +71,7 @@ fun ProfilesScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_profiles)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadProfiles() }, ) { paddingValues -> diff --git a/app/src/main/java/com/m57/hermescontrol/ui/sessions/SessionsScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/sessions/SessionsScreen.kt index d9523b90..d54a08a1 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/sessions/SessionsScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/sessions/SessionsScreen.kt @@ -38,6 +38,7 @@ import com.m57.hermescontrol.ui.common.EmptyState import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SearchBar import com.m57.hermescontrol.ui.common.listContentPadding import com.m57.hermescontrol.ui.common.listItemSpacing @@ -67,7 +68,7 @@ fun SessionsScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_history)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadSessions() }, modifier = modifier, diff --git a/app/src/main/java/com/m57/hermescontrol/ui/settings/SettingsScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/settings/SettingsScreen.kt index 2f2ae760..ec9a3eec 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/settings/SettingsScreen.kt @@ -69,6 +69,7 @@ import com.m57.hermescontrol.theme.BottomNavDisplayMode import com.m57.hermescontrol.theme.ThemePreference import com.m57.hermescontrol.theme.ThemePreset import com.m57.hermescontrol.ui.common.HermesScaffold +import com.m57.hermescontrol.ui.common.NavIcon enum class SettingsTab { CONNECTION, @@ -93,8 +94,7 @@ fun SettingsScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_settings)) }, - showBack = true, - onBack = onBack, + navigationIcon = NavIcon.Back(onBack), ) { Column( modifier = diff --git a/app/src/main/java/com/m57/hermescontrol/ui/skills/SkillsScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/skills/SkillsScreen.kt index 498e202f..7bfe1d14 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/skills/SkillsScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/skills/SkillsScreen.kt @@ -49,6 +49,7 @@ import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.FilterChipRow import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SearchBar import com.m57.hermescontrol.ui.common.ToastEffect import com.m57.hermescontrol.ui.common.listContentPadding @@ -113,7 +114,7 @@ fun SkillsScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_skills)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadSkills() }, ) { @@ -378,14 +379,16 @@ fun SkillEditorDialog( ) { HermesScaffold( title = { Text(stringResource(R.string.skills_edit_title, skillName)) }, - onBack = { - if (hasChanges) { - showDiscardConfirm = true - } else { - onDismiss() - } - }, - showBack = true, + navigationIcon = + NavIcon.Back( + onBack = { + if (hasChanges) { + showDiscardConfirm = true + } else { + onDismiss() + } + }, + ), actions = { if (!isLoading) { IconButton( diff --git a/app/src/main/java/com/m57/hermescontrol/ui/system/SystemScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/system/SystemScreen.kt index cfd3027b..224c03e9 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/system/SystemScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/system/SystemScreen.kt @@ -36,6 +36,7 @@ import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.InfoRow import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SectionHeader import com.m57.hermescontrol.ui.common.StatCard import com.m57.hermescontrol.ui.common.StatusBadge @@ -61,7 +62,7 @@ fun SystemScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_system)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadSystemData() }, ) { diff --git a/app/src/main/java/com/m57/hermescontrol/ui/toolsets/ToolsetsScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/toolsets/ToolsetsScreen.kt index ec79261e..e4ddaec5 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/toolsets/ToolsetsScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/toolsets/ToolsetsScreen.kt @@ -42,6 +42,7 @@ import com.m57.hermescontrol.ui.common.EmptyState import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SearchBar import com.m57.hermescontrol.ui.common.ToastEffect import com.m57.hermescontrol.ui.common.listContentPadding @@ -75,7 +76,7 @@ fun ToolsetsScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_toolsets)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadToolsets() }, ) { paddingValues -> diff --git a/app/src/main/java/com/m57/hermescontrol/ui/webhooks/WebhooksScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/webhooks/WebhooksScreen.kt index 8c87c47f..cf6541ca 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/webhooks/WebhooksScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/webhooks/WebhooksScreen.kt @@ -39,6 +39,7 @@ import com.m57.hermescontrol.R import com.m57.hermescontrol.ui.common.ErrorState import com.m57.hermescontrol.ui.common.HermesScaffold import com.m57.hermescontrol.ui.common.LoadingState +import com.m57.hermescontrol.ui.common.NavIcon import com.m57.hermescontrol.ui.common.SearchBar import com.m57.hermescontrol.ui.common.ToastEffect import com.m57.hermescontrol.ui.common.listContentPadding @@ -71,7 +72,7 @@ fun WebhooksScreen( HermesScaffold( title = { Text(stringResource(R.string.screen_webhooks)) }, - onOpenDrawer = onOpenDrawer, + navigationIcon = onOpenDrawer?.let { NavIcon.Menu(it) }, isRefreshing = state.isLoading, onRefresh = { viewModel.loadWebhooks() }, ) { paddingValues ->