From 6c3aeab041b33d48b2ec84db7f659d633fc48199 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Tue, 12 Aug 2025 19:15:00 +0100 Subject: [PATCH] Added a few minor fixes to Dialogs and RadarScreen --- .../presentation/common/Components.kt | 8 +- .../presentation/passes/PassesDialog.kt | 3 - .../presentation/passes/PassesScreen.kt | 4 +- .../presentation/radar/RadarScreen.kt | 185 +++++++++--------- .../look4sat/presentation/radar/RadarView.kt | 7 +- .../satellites/SatellitesDialog.kt | 3 - .../satellites/SatellitesScreen.kt | 6 +- .../look4sat/domain/source/Sources.kt | 1 + 8 files changed, 108 insertions(+), 109 deletions(-) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/common/Components.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/common/Components.kt index f0b83921..fd1905f2 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/common/Components.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/common/Components.kt @@ -1,5 +1,6 @@ package com.rtbishop.look4sat.presentation.common +import androidx.compose.foundation.MarqueeSpacing import androidx.compose.foundation.background import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.clickable @@ -119,7 +120,7 @@ fun NextPassRow(pass: OrbitalPass, modifier: Modifier = Modifier) { modifier = Modifier .weight(1f) .padding(end = 6.dp) - .basicMarquee(), + .infiniteMarquee(), fontWeight = FontWeight.Medium, maxLines = 1, overflow = TextOverflow.Ellipsis @@ -287,6 +288,11 @@ fun isVerticalLayout(): Boolean { return windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT } +@Composable +fun Modifier.infiniteMarquee(): Modifier { + return basicMarquee(iterations = Int.MAX_VALUE, spacing = MarqueeSpacing(16.dp)) +} + @Composable fun Modifier.layoutPadding(): Modifier { val statusBarMod = this.statusBarsPadding() diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesDialog.kt index 3f6b51c0..ee732ae1 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesDialog.kt @@ -29,7 +29,6 @@ import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.itemsIndexed import androidx.compose.material3.Checkbox -import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Slider @@ -155,7 +154,6 @@ fun RadiosDialog(modes: List, cancel: () -> Unit, accept: (List) horizontalArrangement = Arrangement.spacedBy(1.dp), verticalArrangement = Arrangement.spacedBy(1.dp) ) { - item { HorizontalDivider(color = MaterialTheme.colorScheme.surface) } itemsIndexed(allModes) { index, item -> Surface { Row( @@ -185,7 +183,6 @@ fun RadiosDialog(modes: List, cancel: () -> Unit, accept: (List) } } } - item { HorizontalDivider(color = MaterialTheme.colorScheme.surface) } } } } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesScreen.kt index 3750c2ac..a605e51d 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesScreen.kt @@ -1,7 +1,6 @@ package com.rtbishop.look4sat.presentation.passes import androidx.compose.foundation.background -import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -51,6 +50,7 @@ import com.rtbishop.look4sat.presentation.common.InfoDialog import com.rtbishop.look4sat.presentation.common.NextPassRow import com.rtbishop.look4sat.presentation.common.TimerRow import com.rtbishop.look4sat.presentation.common.TopBar +import com.rtbishop.look4sat.presentation.common.infiniteMarquee import com.rtbishop.look4sat.presentation.common.isVerticalLayout import com.rtbishop.look4sat.presentation.common.layoutPadding import java.text.SimpleDateFormat @@ -203,7 +203,7 @@ private fun NearEarthPass( modifier = Modifier .weight(1f) .padding(end = 6.dp) - .basicMarquee(), + .infiniteMarquee(), fontWeight = FontWeight.Medium, maxLines = 1, overflow = TextOverflow.Ellipsis diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarScreen.kt index ed37390e..6b564659 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarScreen.kt @@ -6,9 +6,7 @@ import androidx.compose.animation.core.animateFloat import androidx.compose.animation.core.infiniteRepeatable import androidx.compose.animation.core.rememberInfiniteTransition import androidx.compose.animation.core.tween -import androidx.compose.foundation.MarqueeSpacing import androidx.compose.foundation.background -import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -16,7 +14,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -57,6 +54,7 @@ import com.rtbishop.look4sat.presentation.common.NextPassRow import com.rtbishop.look4sat.presentation.common.TimerRow import com.rtbishop.look4sat.presentation.common.TopBar import com.rtbishop.look4sat.presentation.common.getDefaultPass +import com.rtbishop.look4sat.presentation.common.infiniteMarquee import com.rtbishop.look4sat.presentation.common.isVerticalLayout import com.rtbishop.look4sat.presentation.common.layoutPadding @@ -100,98 +98,17 @@ private fun RadarScreen(uiState: RadarState, navigateUp: () -> Unit) { } } if(isVerticalLayout()) { - Box(contentAlignment = Alignment.BottomCenter, modifier = Modifier.aspectRatio(1f)) { - uiState.orbitalPos?.let { position -> - ElevatedCard { + ElevatedCard(modifier = Modifier.weight(1f)) { + Box(contentAlignment = Alignment.Center) { + uiState.orbitalPos?.let { position -> RadarViewCompose( item = position, items = uiState.satTrack, azimElev = uiState.orientationValues, shouldShowSweep = uiState.shouldShowSweep, - shouldUseCompass = uiState.shouldUseCompass + shouldUseCompass = uiState.shouldUseCompass, + modifier = Modifier.align(Alignment.Center) ) - } - Column( - verticalArrangement = Arrangement.SpaceBetween, - modifier = Modifier - .fillMaxSize() - .padding(horizontal = 6.dp, vertical = 4.dp) - ) { - Row( - horizontalArrangement = Arrangement.SpaceBetween, - modifier = Modifier.fillMaxWidth() - ) { - RadarTextTop( - position.azimuth, - stringResource(R.string.radar_az_text), - true - ) - RadarTextTop( - position.elevation, - stringResource(R.string.radar_el_text), - false - ) - } - Row( - horizontalArrangement = Arrangement.SpaceBetween, - modifier = Modifier.fillMaxWidth() - ) { - RadarTextBottom( - position.altitude, - stringResource(R.string.radar_alt_text), - true - ) - RadarTextBottom( - position.distance, - stringResource(R.string.radar_dist_text), - false - ) - } - } - } - } - ElevatedCard(modifier = Modifier.fillMaxSize()) { - if (uiState.transmitters.isEmpty()) { - Column( - modifier = Modifier.fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center - ) { - Icon( - painter = painterResource(R.drawable.ic_satellite), - contentDescription = null, - modifier = Modifier.size(64.dp) - ) - Spacer(modifier = Modifier.height(16.dp)) - Text( - text = "This satellite doesn't have any known transcievers...", - textAlign = TextAlign.Center, - fontSize = 18.sp, - modifier = Modifier.padding(16.dp) - ) - } - } else { - Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { - TransmittersList(transmitters = uiState.transmitters) - if (uiState.orbitalPos?.eclipsed == true) { - EclipsedIndicator() - } - } - } - } - } else { - Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) { - Box(contentAlignment = Alignment.BottomCenter, modifier = Modifier.weight(1f)) { - uiState.orbitalPos?.let { position -> - ElevatedCard { - RadarViewCompose( - item = position, - items = uiState.satTrack, - azimElev = uiState.orientationValues, - shouldShowSweep = uiState.shouldShowSweep, - shouldUseCompass = false - ) - } Column( verticalArrangement = Arrangement.SpaceBetween, modifier = Modifier @@ -231,7 +148,90 @@ private fun RadarScreen(uiState: RadarState, navigateUp: () -> Unit) { } } } - ElevatedCard(modifier = Modifier.fillMaxSize().weight(1f)) { + } + ElevatedCard(modifier = Modifier.weight(1f)) { + if (uiState.transmitters.isEmpty()) { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Icon( + painter = painterResource(R.drawable.ic_satellite), + contentDescription = null, + modifier = Modifier.size(64.dp) + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + text = "This satellite doesn't have any known transcievers...", + textAlign = TextAlign.Center, + fontSize = 18.sp, + modifier = Modifier.padding(16.dp) + ) + } + } else { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + TransmittersList(transmitters = uiState.transmitters) + if (uiState.orbitalPos?.eclipsed == true) { + EclipsedIndicator() + } + } + } + } + } else { + Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) { + ElevatedCard(modifier = Modifier.weight(1f)) { + Box(contentAlignment = Alignment.Center) { + uiState.orbitalPos?.let { position -> + RadarViewCompose( + item = position, + items = uiState.satTrack, + azimElev = uiState.orientationValues, + shouldShowSweep = uiState.shouldShowSweep, + shouldUseCompass = false, + modifier = Modifier.align(Alignment.Center) + ) + Column( + verticalArrangement = Arrangement.SpaceBetween, + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 6.dp, vertical = 4.dp) + ) { + Row( + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier.fillMaxWidth() + ) { + RadarTextTop( + position.azimuth, + stringResource(R.string.radar_az_text), + true + ) + RadarTextTop( + position.elevation, + stringResource(R.string.radar_el_text), + false + ) + } + Row( + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier.fillMaxWidth() + ) { + RadarTextBottom( + position.altitude, + stringResource(R.string.radar_alt_text), + true + ) + RadarTextBottom( + position.distance, + stringResource(R.string.radar_dist_text), + false + ) + } + } + } + } + } + ElevatedCard(modifier = Modifier.weight(1f)) { if (uiState.transmitters.isEmpty()) { Column( modifier = Modifier.fillMaxSize(), @@ -378,10 +378,7 @@ private fun TransmitterItem(radio: SatRadio) { text = if (radio.isInverted) "INVERTED: ${radio.info} " else "${radio.info} ", textAlign = TextAlign.Center, modifier = Modifier - .basicMarquee( - iterations = Int.MAX_VALUE, - spacing = MarqueeSpacing(16.dp) - ) + .infiniteMarquee() .weight(0.7f) ) Icon( diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarView.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarView.kt index e253e924..06c15c15 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarView.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarView.kt @@ -6,7 +6,7 @@ import androidx.compose.animation.core.infiniteRepeatable import androidx.compose.animation.core.rememberInfiniteTransition import androidx.compose.animation.core.tween import androidx.compose.foundation.Canvas -import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.aspectRatio import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableFloatStateOf @@ -46,7 +46,8 @@ fun RadarViewCompose( items: List, azimElev: Pair, shouldShowSweep: Boolean, - shouldUseCompass: Boolean + shouldUseCompass: Boolean, + modifier: Modifier = Modifier ) { val context = LocalContext.current val view = LocalView.current @@ -128,7 +129,7 @@ fun RadarViewCompose( // } // } - Canvas(modifier = Modifier.fillMaxSize()) { + Canvas(modifier = modifier.aspectRatio(1f)) { val radius = (size.minDimension / 2f) * 0.95f if (!trackCreated.value) { trackPath.value = createTrackPath(items, radius) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/satellites/SatellitesDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/satellites/SatellitesDialog.kt index a07a850a..c12a9f42 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/satellites/SatellitesDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/satellites/SatellitesDialog.kt @@ -10,7 +10,6 @@ import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.itemsIndexed import androidx.compose.material3.Checkbox -import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -50,7 +49,6 @@ fun MultiTypesDialog( horizontalArrangement = Arrangement.spacedBy(1.dp), verticalArrangement = Arrangement.spacedBy(1.dp) ) { - item { HorizontalDivider(color = MaterialTheme.colorScheme.surface) } itemsIndexed(allTypes) { index, item -> Row( verticalAlignment = Alignment.CenterVertically, @@ -78,7 +76,6 @@ fun MultiTypesDialog( ) } } - item { HorizontalDivider(color = MaterialTheme.colorScheme.surface) } } } } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/satellites/SatellitesScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/satellites/SatellitesScreen.kt index 40ced428..c512f9dc 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/satellites/SatellitesScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/satellites/SatellitesScreen.kt @@ -1,8 +1,6 @@ package com.rtbishop.look4sat.presentation.satellites -import androidx.compose.foundation.MarqueeSpacing import androidx.compose.foundation.background -import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -51,6 +49,7 @@ import com.rtbishop.look4sat.presentation.common.CardLoadingIndicator import com.rtbishop.look4sat.presentation.common.IconCard import com.rtbishop.look4sat.presentation.common.InfoDialog import com.rtbishop.look4sat.presentation.common.TopBar +import com.rtbishop.look4sat.presentation.common.infiniteMarquee import com.rtbishop.look4sat.presentation.common.isVerticalLayout import com.rtbishop.look4sat.presentation.common.layoutPadding @@ -198,7 +197,8 @@ private fun TypeCard(types: List, onClick: () -> Unit, modifier: Modifie fontWeight = FontWeight.Medium, modifier = Modifier .weight(1f) - .basicMarquee(iterations = Int.MAX_VALUE, spacing = MarqueeSpacing(16.dp)) + .padding(end = 6.dp) + .infiniteMarquee() ) } } diff --git a/domain/src/main/java/com/rtbishop/look4sat/domain/source/Sources.kt b/domain/src/main/java/com/rtbishop/look4sat/domain/source/Sources.kt index 7c1466ab..252d43e0 100644 --- a/domain/src/main/java/com/rtbishop/look4sat/domain/source/Sources.kt +++ b/domain/src/main/java/com/rtbishop/look4sat/domain/source/Sources.kt @@ -6,6 +6,7 @@ object Sources { "All" to "https://celestrak.org/NORAD/elements/gp.php?GROUP=active&FORMAT=csv", "Amsat" to "https://amsat.org/tle/current/nasabare.txt", "Amateur" to "https://celestrak.org/NORAD/elements/gp.php?GROUP=amateur&FORMAT=csv", + "Brightest" to "https://celestrak.org/NORAD/elements/gp.php?GROUP=visual&FORMAT=csv", "Classified" to "https://www.mmccants.org/tles/classfd.zip", "Cubesat" to "https://celestrak.org/NORAD/elements/gp.php?GROUP=cubesat&FORMAT=csv", "Education" to "https://celestrak.org/NORAD/elements/gp.php?GROUP=education&FORMAT=csv",