refactor: remove bottom navigation bar (#665 #666 #667 #668) (#672)

* refactor(nav): remove bottom NavigationBar from Scaffold (#665)

* refactor(theme): remove BottomNavDisplayMode enum (#666)

* refactor(settings): remove nav bar customization page (#667)

* chore: clean up unused imports after bottom nav removal (#668)

* chore: remove dead bottom nav infrastructure after removal

- Remove SettingsNavBar NavKey (NavigationKeys.kt)
- Remove bottomNavItems field from ServerStoreState + migration code
- Remove _bottomNavItemsFlow, getBottomNavItems, setBottomNavItems from AuthManager
- Remove bottomNavItems handling from selfHealed() (ServerCollectionOps)
- Remove redundant bottomBar={} from Scaffold (Navigation.kt)
- Remove unused nav bar strings from values/strings.xml + values-ko/strings.xml
- Remove content_desc_move_up/down/remove_item strings
- Update SettingsViewModelTest.kt (drop stale getBottomNavItems mock)
- Update ServerStoreTest.kt (remove bottomNavItems assertions)

---------

Co-authored-by: M57 <Hy4ri@users.noreply.github.com>
This commit is contained in:
M57andM57 authored and GitHub committed 2026-07-22 10:14:50 +03:00
1 parent c43904b2b8
commit 0edb67338d
17 files changed
-580

No files matched your search

@@ -1,58 +0,0 @@
package com.m57.hermescontrol
import androidx.navigation3.runtime.NavKey
import org.junit.Assert.assertEquals
import org.junit.Test
/**
* Verifies that the bottom-nav selection key maps Settings drill-down
* destinations back to [SettingsScreen] so the indicator stays highlighted,
* while every other screen is returned unchanged.
*/
class BottomNavigationSelectionTest {
@Test
fun `SettingsScreen selects itself`() {
assertEquals(SettingsScreen, selectedBottomNavDestination(SettingsScreen))
}
@Test
fun `every Settings drill-down maps back to SettingsScreen`() {
val drillDowns: List<NavKey> =
listOf(
SettingsConnection,
SettingsAppearance,
SettingsChat,
SettingsNavBar,
SettingsBehavior,
SettingsAbout,
)
for (destination in drillDowns) {
assertEquals(
"Expected $destination to map to SettingsScreen",
SettingsScreen,
selectedBottomNavDestination(destination),
)
}
}
@Test
fun `non-Settings screens are returned unchanged`() {
val others: List<NavKey> =
listOf(
ChatScreen,
CronJobsScreen,
WebhooksScreen,
GatewayScreen,
SkillsScreen,
LandingScreen,
AuthLoginScreen,
)
for (screen in others) {
assertEquals(
"Expected $screen to be returned unchanged",
screen,
selectedBottomNavDestination(screen),
)
}
}
}
@@ -68,15 +68,6 @@ class ServerStoreTest {
)
val healed = state.selfHealed()
assertNull(healed.selectedProfileId)
// Test empty bottomNavItems
val state2 =
ServerStoreState(
bottomNavItems = emptyList(),
)
val healed2 = state2.selfHealed()
assertEquals(5, healed2.bottomNavItems.size)
assertEquals("ChatScreen", healed2.bottomNavItems[0])
}
@Test
@@ -3,7 +3,6 @@ package com.m57.hermescontrol.ui.settings
import com.m57.hermescontrol.data.config.ConnectionProfile
import com.m57.hermescontrol.data.local.AuthManager
import com.m57.hermescontrol.data.remote.ApiClient
import com.m57.hermescontrol.theme.BottomNavDisplayMode
import com.m57.hermescontrol.theme.ThemePreference
import com.m57.hermescontrol.theme.ThemePreset
import io.mockk.every
@@ -63,12 +62,10 @@ class SettingsViewModelTest {
every { AuthManager.getThemePreference() } returns ThemePreference.SYSTEM
every { AuthManager.isUseDynamicColors() } returns true
every { AuthManager.getThemePreset() } returns ThemePreset.DEFAULT
every { AuthManager.getBottomNavItems() } returns emptyList()
every { AuthManager.isTypingEffectEnabled() } returns true
every { AuthManager.getTypingEffectDelayMs() } returns 30
every { AuthManager.getConnectionProfiles() } returns emptyList()
every { AuthManager.getSelectedProfileId() } answers { storedSelectedProfileId }
every { AuthManager.getBottomNavDisplayMode() } returns BottomNavDisplayMode.ICON_AND_TEXT
every { AuthManager.baseUrl() } returns "http://127.0.0.1:9119/"
every { AuthManager.setHost(any()) } returns Unit
every { AuthManager.setPort(any()) } returns Unit
@@ -78,7 +75,6 @@ class SettingsViewModelTest {
every { AuthManager.setThemePreference(any()) } returns Unit
every { AuthManager.setUseDynamicColors(any()) } returns Unit
every { AuthManager.setThemePreset(any()) } returns Unit
every { AuthManager.setBottomNavDisplayMode(any()) } returns Unit
every { AuthManager.setTypingEffectEnabled(any()) } returns Unit
every { AuthManager.setTypingEffectDelayMs(any()) } returns Unit
every { AuthManager.setSelectedProfileId(any()) } answers {