From 3d950f90ad196355a6ef2ad850e6ca0a4ac3d09d Mon Sep 17 00:00:00 2001 From: atsunatsu Date: Fri, 11 Sep 2026 20:42:27 +0800 Subject: [PATCH] feat(ui): map as 4th bottom-nav tab, passes top bar restored to upstream layout, bigger QSO expand arrow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Map moves from the passes-page top-right button to the bottom navigation bar at position 4 from the left (Satellites, Passes, AMSAT, Map, Mutual, Settings), matching the upstream nav order. - Passes top bar restored to the original repo layout: left = radios dialog (ic_radios), right = passes filter/schedule dialog (ic_filter) — the map button is gone from the top bar. - Worked-grid QSO dialog expand arrow enlarged from bodySmall to 18sp. --- .../main/java/com/rtbishop/look4sat/MainScreen.kt | 12 +++++++----- .../com/rtbishop/look4sat/feature/map/MapScreen.kt | 2 +- .../rtbishop/look4sat/feature/passes/PassesScreen.kt | 12 +++++------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/rtbishop/look4sat/MainScreen.kt b/app/src/main/java/com/rtbishop/look4sat/MainScreen.kt index 10b58db2..7cb5b744 100644 --- a/app/src/main/java/com/rtbishop/look4sat/MainScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/MainScreen.kt @@ -161,7 +161,10 @@ fun MainScreen( } } val fadeTransition = fadeIn(animationSpec = tween(350)) togetherWith fadeOut(animationSpec = tween(350)) - val navItems = listOf(Screen.Satellites, Screen.Passes, Screen.AMSAT, Screen.Mutual, Screen.Settings) + // Map sits at position 4 from the left, matching the upstream nav order + // (Satellites, Passes, AMSAT/Status, Map, ...), with the fork's Mutual tab + // appended before Settings. + val navItems = listOf(Screen.Satellites, Screen.Passes, Screen.AMSAT, Screen.Map, Screen.Mutual, Screen.Settings) val context = LocalContext.current val container = (context.applicationContext as IContainerProvider).getMainContainer() @@ -185,7 +188,7 @@ fun MainScreen( val isSelected = when (currentKey) { is Screen.Satellites -> screen is Screen.Satellites is Screen.Passes -> screen is Screen.Passes - is Screen.Map -> screen is Screen.Passes + is Screen.Map -> screen is Screen.Map is Screen.AMSAT -> screen is Screen.AMSAT is Screen.Mutual -> screen is Screen.Mutual is Screen.Settings -> screen is Screen.Settings @@ -196,7 +199,7 @@ fun MainScreen( label = { Text(stringResource(screen.titleResId)) }, selected = isSelected, onClick = { - if (isSelected && !(currentKey is Screen.Map && screen is Screen.Passes)) return@item + if (isSelected) return@item while (backStack.size > 1) backStack.removeAt(backStack.size - 1) if (screen !is Screen.Passes) backStack.add(screen) } @@ -236,8 +239,7 @@ fun MainScreen( container.setMutualPassData(MutualPassData()) container.satelliteRepo.selectPass(catNum, aosTime) navigateToRadar() - }, - navigateToMap = navigateToMap + } ) } entry { diff --git a/feature/map/src/main/java/com/rtbishop/look4sat/feature/map/MapScreen.kt b/feature/map/src/main/java/com/rtbishop/look4sat/feature/map/MapScreen.kt index c2c7ea4a..d813ebf7 100644 --- a/feature/map/src/main/java/com/rtbishop/look4sat/feature/map/MapScreen.kt +++ b/feature/map/src/main/java/com/rtbishop/look4sat/feature/map/MapScreen.kt @@ -389,7 +389,7 @@ private fun WorkedGridCallRow( ) Text( text = if (expanded) " ▴" else " ▾", - style = MaterialTheme.typography.bodySmall, + fontSize = 18.sp, color = MaterialTheme.colorScheme.primary ) } diff --git a/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesScreen.kt b/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesScreen.kt index 5ac53745..ace6618e 100644 --- a/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesScreen.kt +++ b/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesScreen.kt @@ -85,22 +85,20 @@ import java.util.TimeZone @Composable fun PassesDestination( - navigateToRadar: (Int, Long) -> Unit, - navigateToMap: () -> Unit + navigateToRadar: (Int, Long) -> Unit ) { val context = LocalContext.current val container = (context.applicationContext as IContainerProvider).getMainContainer() val viewModel: PassesViewModel = viewModel(factory = PassesViewModel.factory(container)) val uiState = viewModel.uiState.collectAsStateWithLifecycle().value - PassesScreen(uiState, viewModel::onAction, navigateToRadar, navigateToMap) + PassesScreen(uiState, viewModel::onAction, navigateToRadar) } @Composable private fun PassesScreen( uiState: PassesState, onAction: (PassesAction) -> Unit, - navigateToRadar: (Int, Long) -> Unit, - navigateToMap: () -> Unit + navigateToRadar: (Int, Long) -> Unit ) { if (uiState.isPassesDialogShown) { PassesFilterDialog( @@ -158,7 +156,7 @@ private fun PassesScreen( TopBar( isVerticalLayout = isVerticalLayout, startAction = { - IconCard(action = { onAction(PassesAction.TogglePassesDialog) }, resId = R.drawable.ic_filter) + IconCard(action = { onAction(PassesAction.ToggleRadiosDialog) }, resId = R.drawable.ic_radios) }, topInfo = { TimerRow(timeString = uiState.nextTime, isTimeAos = uiState.isNextTimeAos) @@ -167,7 +165,7 @@ private fun PassesScreen( NextPassRow(pass = uiState.nextPass, isUtc = uiState.isUtc) }, endAction = { - IconCard(action = navigateToMap, resId = R.drawable.ic_map) + IconCard(action = { onAction(PassesAction.TogglePassesDialog) }, resId = R.drawable.ic_filter) } ) }