* 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:
1 parent
c43904b2b8
commit
0edb67338d
17 files changed
-580
No files matched your search
@@ -20,17 +20,8 @@ fun ServerStoreState.selfHealed(): ServerStoreState {
|
||||
val hasActive = connectionProfiles.any { it.id == selectedProfileId }
|
||||
val newSelected = if (selectedProfileId != null && !hasActive) null else selectedProfileId
|
||||
|
||||
val validItems = bottomNavItems.filter { it.isNotBlank() }
|
||||
val finalBottomNavItems =
|
||||
if (validItems.isEmpty()) {
|
||||
listOf("ChatScreen", "SkillsScreen", "CronJobsScreen", "SystemScreen", "SettingsScreen")
|
||||
} else {
|
||||
validItems
|
||||
}
|
||||
|
||||
return copy(
|
||||
selectedProfileId = newSelected,
|
||||
bottomNavItems = finalBottomNavItems,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ import androidx.security.crypto.MasterKeys
|
||||
import com.m57.hermescontrol.data.model.PinnedModel
|
||||
import com.m57.hermescontrol.data.remote.OkHttpProvider
|
||||
import com.m57.hermescontrol.data.remote.ServerEndpoint
|
||||
import com.m57.hermescontrol.theme.BottomNavDisplayMode
|
||||
import com.m57.hermescontrol.theme.ThemePreference
|
||||
import com.m57.hermescontrol.theme.ThemePreset
|
||||
import kotlinx.serialization.decodeFromString
|
||||
@@ -27,8 +26,6 @@ class ServerStoreMigration(
|
||||
"theme_preference",
|
||||
"use_dynamic_colors",
|
||||
"theme_preset",
|
||||
"bottom_nav_display_mode",
|
||||
"bottom_nav_items",
|
||||
"connection_profiles",
|
||||
"selected_profile_id",
|
||||
"pinned_models",
|
||||
@@ -65,20 +62,6 @@ class ServerStoreMigration(
|
||||
runCatching { ThemePreset.valueOf(themePresetString!!) }
|
||||
.getOrDefault(ThemePreset.DEFAULT)
|
||||
|
||||
val bottomNavDisplayModeString =
|
||||
prefs.getString(
|
||||
"bottom_nav_display_mode",
|
||||
BottomNavDisplayMode.ICON_AND_TEXT.name,
|
||||
)
|
||||
val bottomNavDisplayMode =
|
||||
runCatching { BottomNavDisplayMode.valueOf(bottomNavDisplayModeString!!) }
|
||||
.getOrDefault(BottomNavDisplayMode.ICON_AND_TEXT)
|
||||
|
||||
val bottomNavItemsRaw = prefs.getString("bottom_nav_items", null)
|
||||
val bottomNavItems =
|
||||
bottomNavItemsRaw?.split(",")?.filter { it.isNotBlank() }
|
||||
?: listOf("ChatScreen", "SkillsScreen", "CronJobsScreen", "SystemScreen", "SettingsScreen")
|
||||
|
||||
val connectionProfilesRaw = prefs.getString("connection_profiles", null)
|
||||
val connectionProfiles =
|
||||
if (connectionProfilesRaw != null) {
|
||||
@@ -117,8 +100,6 @@ class ServerStoreMigration(
|
||||
themePreference = themePreference,
|
||||
useDynamicColors = useDynamicColors,
|
||||
themePreset = themePreset,
|
||||
bottomNavDisplayMode = bottomNavDisplayMode,
|
||||
bottomNavItems = bottomNavItems,
|
||||
connectionProfiles =
|
||||
connectionProfiles.map { profile ->
|
||||
profile.copy(
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.m57.hermescontrol.data.config
|
||||
|
||||
import com.m57.hermescontrol.data.model.PinnedModel
|
||||
import com.m57.hermescontrol.theme.BottomNavDisplayMode
|
||||
import com.m57.hermescontrol.theme.ThemePreference
|
||||
import com.m57.hermescontrol.theme.ThemePreset
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -16,9 +15,6 @@ data class ServerStoreState(
|
||||
val themePreference: ThemePreference = ThemePreference.SYSTEM,
|
||||
val useDynamicColors: Boolean = true,
|
||||
val themePreset: ThemePreset = ThemePreset.DEFAULT,
|
||||
val bottomNavDisplayMode: BottomNavDisplayMode = BottomNavDisplayMode.ICON_AND_TEXT,
|
||||
val bottomNavItems: List<String> =
|
||||
listOf("ChatScreen", "SkillsScreen", "CronJobsScreen", "SystemScreen", "SettingsScreen"),
|
||||
val connectionProfiles: List<ConnectionProfile> = emptyList(),
|
||||
val selectedProfileId: String? = null,
|
||||
val pinnedModels: List<PinnedModel> = emptyList(),
|
||||
|
||||
@@ -16,7 +16,6 @@ import com.m57.hermescontrol.data.model.PinnedModel
|
||||
import com.m57.hermescontrol.data.remote.CleartextPolicy
|
||||
import com.m57.hermescontrol.data.remote.CookieManager
|
||||
import com.m57.hermescontrol.data.remote.ServerEndpoint
|
||||
import com.m57.hermescontrol.theme.BottomNavDisplayMode
|
||||
import com.m57.hermescontrol.theme.ThemePreference
|
||||
import com.m57.hermescontrol.theme.ThemePreset
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -61,9 +60,6 @@ object AuthManager {
|
||||
"AuthManager not initialized. Call init(context) first.",
|
||||
)
|
||||
|
||||
private val _bottomNavItemsFlow = MutableStateFlow<List<String>>(emptyList())
|
||||
val bottomNavItemsFlow: StateFlow<List<String>> = _bottomNavItemsFlow.asStateFlow()
|
||||
|
||||
private val _themePreferenceFlow = MutableStateFlow<ThemePreference>(ThemePreference.SYSTEM)
|
||||
val themePreferenceFlow: StateFlow<ThemePreference> = _themePreferenceFlow.asStateFlow()
|
||||
|
||||
@@ -73,9 +69,6 @@ object AuthManager {
|
||||
private val _themePresetFlow = MutableStateFlow<ThemePreset>(ThemePreset.DEFAULT)
|
||||
val themePresetFlow: StateFlow<ThemePreset> = _themePresetFlow.asStateFlow()
|
||||
|
||||
private val _bottomNavDisplayModeFlow = MutableStateFlow<BottomNavDisplayMode>(BottomNavDisplayMode.ICON_AND_TEXT)
|
||||
val bottomNavDisplayModeFlow: StateFlow<BottomNavDisplayMode> = _bottomNavDisplayModeFlow.asStateFlow()
|
||||
|
||||
private val _tokenFlow = MutableStateFlow<String?>(null)
|
||||
val tokenFlow: StateFlow<String?> = _tokenFlow.asStateFlow()
|
||||
|
||||
@@ -133,11 +126,9 @@ object AuthManager {
|
||||
|
||||
scope.launch {
|
||||
store.stateFlow.collect { state ->
|
||||
_bottomNavItemsFlow.value = state.bottomNavItems
|
||||
_themePreferenceFlow.value = state.themePreference
|
||||
_useDynamicColorsFlow.value = state.useDynamicColors
|
||||
_themePresetFlow.value = state.themePreset
|
||||
_bottomNavDisplayModeFlow.value = state.bottomNavDisplayMode
|
||||
// B7 (Jul 08 2026, kanban t_470): keep cookie scope aligned with active profile.
|
||||
syncCookieStoreForProfile(state.selectedProfileId)
|
||||
}
|
||||
@@ -512,16 +503,6 @@ object AuthManager {
|
||||
)
|
||||
}
|
||||
|
||||
// ── Bottom nav bar items ──────────────────────────────────────────────
|
||||
|
||||
/** Returns the list of selected bottom-nav item keys (data-object names). */
|
||||
fun getBottomNavItems(): List<String> = serverStore.getLatestState().bottomNavItems
|
||||
|
||||
/** Persist the ordered list of bottom-nav item keys (max 5, data-object names). */
|
||||
fun setBottomNavItems(items: List<String>) {
|
||||
serverStore.update { it.copy(bottomNavItems = items) }
|
||||
}
|
||||
|
||||
// ── Typing Effect ───────────────────────────────────────────────────
|
||||
|
||||
fun isTypingEffectEnabled(): Boolean = serverStore.getLatestState().typingEffectEnabled
|
||||
@@ -544,12 +525,4 @@ object AuthManager {
|
||||
fun setTypingEffectDelayMs(delayMs: Int) {
|
||||
serverStore.update { it.copy(typingEffectDelayMs = delayMs) }
|
||||
}
|
||||
|
||||
// ── Bottom Nav Display Mode ──────────────────────────────────────────
|
||||
|
||||
fun getBottomNavDisplayMode(): BottomNavDisplayMode = serverStore.getLatestState().bottomNavDisplayMode
|
||||
|
||||
fun setBottomNavDisplayMode(mode: BottomNavDisplayMode) {
|
||||
serverStore.update { it.copy(bottomNavDisplayMode = mode) }
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user