diff --git a/core/domain/src/main/java/com/rtbishop/look4sat/core/domain/navigation/MenuLayout.kt b/core/domain/src/main/java/com/rtbishop/look4sat/core/domain/navigation/MenuLayout.kt index 8b35207e..b49616e9 100644 --- a/core/domain/src/main/java/com/rtbishop/look4sat/core/domain/navigation/MenuLayout.kt +++ b/core/domain/src/main/java/com/rtbishop/look4sat/core/domain/navigation/MenuLayout.kt @@ -99,16 +99,20 @@ object MenuLayout { val current = resolve(allScreenIds, screenOrder, subMenuOrder, emptyList()) val main = current.mainIds.toMutableList() val more = current.moreIds.toMutableList() + val wasInMore = screenId in more more.remove(screenId) if (screenId !in main) { val at = main.indexOf(SETTINGS_ID).let { if (it == -1) main.size else it } main.add(at, screenId) } - val movable = main.filter { it != SETTINGS_ID && it != screenId } - if (main.size > MAIN_SLOTS && movable.isNotEmpty()) { - val evicted = movable.last() - main.remove(evicted) - more.add(0, evicted) + // Only evict when we actually added a new page from More; internal reordering must not evict. + if (wasInMore) { + val movable = main.filter { it != SETTINGS_ID && it != screenId } + if (main.size > MAIN_SLOTS && movable.isNotEmpty()) { + val evicted = movable.last() + main.remove(evicted) + more.add(0, evicted) + } } return Assignment(screenOrder = main, subMenuOrder = more) } diff --git a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt index 45017dbd..7a4bae96 100644 --- a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt +++ b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt @@ -863,7 +863,11 @@ private fun UiSettingsCard( ) onUpdateMenu(moved.screenOrder, moved.subMenuOrder) }, - onReorder = { main -> onUpdateMenu(main, subItems) } + onReorder = { main -> + // Settings is locked last; exclude it so resolve continues to use its default position + val userOrder = main.filter { it != "Settings" } + onUpdateMenu(userOrder, subMenuOrder) + } ) // More-menu area (pages behind "More") Text( @@ -883,7 +887,7 @@ private fun UiSettingsCard( ) onUpdateMenu(moved.screenOrder, moved.subMenuOrder) }, - onReorder = { sub -> onUpdateMenu(mainItems, sub) } + onReorder = { sub -> onUpdateMenu(screenOrder, sub) } ) TextButton(onClick = onResetOrder) { Text(text = stringResource(id = R.string.prefs_ui_order_reset))