From 880fe10bfd4c402f25ddfcfcf397c87efe36e5f2 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Wed, 18 Dec 2024 11:06:57 +0000 Subject: [PATCH] Added multiple fixes to MapScreen and components --- .../presentation/components/Common.kt | 5 +- .../look4sat/presentation/map/MapScreen.kt | 48 +++--- .../map/{MapData.kt => MapState.kt} | 22 +++ .../look4sat/presentation/map/MapViewModel.kt | 105 ++++++++----- .../presentation/radar/RadarScreen.kt | 145 ++++++++++-------- .../satellites/SatellitesScreen.kt | 1 + 6 files changed, 192 insertions(+), 134 deletions(-) rename app/src/main/java/com/rtbishop/look4sat/presentation/map/{MapData.kt => MapState.kt} (62%) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/components/Common.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/components/Common.kt index 646754f9..0f9fdacc 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/components/Common.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/components/Common.kt @@ -209,11 +209,12 @@ fun CardButton(onClick: () -> Unit, text: String, modifier: Modifier = Modifier) } @Composable -fun CardIcon(onClick: () -> Unit, iconId: Int, description: String? = null) { +fun CardIcon(onClick: () -> Unit, iconId: Int, modifier: Modifier = Modifier) { val clickableModifier = Modifier.clickable { onClick() } + val iconRes = ImageVector.vectorResource(iconId) ElevatedCard(modifier = Modifier.size(48.dp)) { Box(modifier = clickableModifier.fillMaxSize(), contentAlignment = Alignment.Center) { - Icon(imageVector = ImageVector.vectorResource(iconId), contentDescription = description) + Icon(imageVector = iconRes, contentDescription = null, modifier = modifier) } } } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapScreen.kt index 07c5aec1..c24105b5 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapScreen.kt @@ -16,9 +16,10 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material3.ElevatedCard import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.State import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView @@ -26,6 +27,7 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.compose.LocalLifecycleOwner +import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable @@ -38,7 +40,6 @@ import com.rtbishop.look4sat.presentation.components.CardIcon import com.rtbishop.look4sat.presentation.components.NextPassRow import com.rtbishop.look4sat.presentation.components.TimerBar import com.rtbishop.look4sat.presentation.components.TimerRow -import com.rtbishop.look4sat.presentation.components.getDefaultPass import org.osmdroid.tileprovider.tilesource.XYTileSource import org.osmdroid.util.GeoPoint import org.osmdroid.views.CustomZoomButtonsController @@ -70,31 +71,34 @@ private val textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { private val labelRect = Rect() fun NavGraphBuilder.mapDestination() { - composable(Screen.Map.route) { MapScreen() } + composable(Screen.Map.route) { + val viewModel = viewModel(MapViewModel::class.java, factory = MapViewModel.Factory) + val uiState = viewModel.uiState.collectAsStateWithLifecycle() + MapScreen(uiState) + } } @Composable -private fun MapScreen() { - val viewModel = viewModel(MapViewModel::class.java, factory = MapViewModel.Factory) - viewModel.selectDefaultSatellite(-1) - val stationPos = viewModel.stationPosition.collectAsState(initial = null) - val positions = viewModel.positions.collectAsState(initial = null) - val satTrack = viewModel.track.collectAsState(initial = null) - val footprint = viewModel.footprint.collectAsState(initial = null) - val positionClick = { orbitalObject: OrbitalObject -> viewModel.selectSatellite(orbitalObject) } +private fun MapScreen(uiState: State) { + val onItemClick = { item: OrbitalObject -> uiState.value.sendAction(MapAction.SelectItem(item)) } + val selectPrev = { uiState.value.sendAction(MapAction.SelectPrev) } + val selectNext = { uiState.value.sendAction(MapAction.SelectNext) } + val rotateMod = Modifier.rotate(180f) + val timeString = uiState.value.mapData?.aosTime ?: "00:00:00" + val isTimeAos = uiState.value.mapData?.isTimeAos ?: true Column(modifier = Modifier.padding(6.dp), verticalArrangement = Arrangement.spacedBy(6.dp)) { TimerRow { - CardIcon(onClick = {}, iconId = R.drawable.ic_filter) - TimerBar(timeString = "88:88:88", isTimeAos = true) - CardIcon(onClick = {}, iconId = R.drawable.ic_satellite) + CardIcon(onClick = selectPrev, iconId = R.drawable.ic_arrow, modifier = rotateMod) + TimerBar(timeString = timeString, isTimeAos = isTimeAos) + CardIcon(onClick = selectNext, iconId = R.drawable.ic_arrow) } - NextPassRow(pass = getDefaultPass()) + NextPassRow(pass = uiState.value.orbitalPass) ElevatedCard(modifier = Modifier.fillMaxSize()) { - MapView(modifier = Modifier.fillMaxSize(), isLightTheme = viewModel.stateOfLightTheme) { mapView -> - stationPos.value?.let { setStationPosition(it, mapView) } - positions.value?.let { setPositions(it, mapView, positionClick) } - satTrack.value?.let { setSatelliteTrack(it, mapView) } - footprint.value?.let { setFootprint(it, mapView) } + MapView(modifier = Modifier.fillMaxSize(), isLightUi = uiState.value.isLightUi) { mapView -> + uiState.value.stationPosition?.let { setStationPosition(it, mapView) } + uiState.value.positions?.let { setPositions(it, mapView, onItemClick) } + uiState.value.track?.let { setSatelliteTrack(it, mapView) } + uiState.value.footprint?.let { setFootprint(it, mapView) } } } } @@ -218,10 +222,10 @@ private fun setFootprint(orbitalPos: OrbitalPos, mapView: MapView) { @Composable private fun MapView( modifier: Modifier = Modifier, - isLightTheme: Boolean, + isLightUi: Boolean, update: ((map: MapView) -> Unit)? = null ) { - val mapView = rememberMapViewWithLifecycle(isLightTheme) + val mapView = rememberMapViewWithLifecycle(isLightUi) AndroidView({ mapView }, modifier) { update?.invoke(it) } } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapData.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapState.kt similarity index 62% rename from app/src/main/java/com/rtbishop/look4sat/presentation/map/MapData.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/map/MapState.kt index 839fdc0a..55ad40f9 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapData.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapState.kt @@ -18,11 +18,33 @@ package com.rtbishop.look4sat.presentation.map import com.rtbishop.look4sat.domain.predict.GeoPos +import com.rtbishop.look4sat.domain.predict.OrbitalObject +import com.rtbishop.look4sat.domain.predict.OrbitalPass +import com.rtbishop.look4sat.domain.predict.OrbitalPos + +data class MapState( + val mapData: MapData?, + val isLightUi: Boolean, + val stationPosition: GeoPos?, + val orbitalPass: OrbitalPass, + val track: List>?, + val footprint: OrbitalPos?, + val positions: Map?, + val sendAction: (MapAction) -> Unit +) + +sealed class MapAction { + data object SelectPrev: MapAction() + data object SelectNext: MapAction() + data class SelectItem(val item: OrbitalObject): MapAction() + data class SelectDefaultItem(val catnum: Int): MapAction() +} data class MapData( val catNum: Int, val name: String, val aosTime: String, + val isTimeAos: Boolean, val azimuth: Double, val elevation: Double, val range: Double, diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapViewModel.kt index 21ae39a5..75727e05 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapViewModel.kt @@ -25,7 +25,6 @@ import androidx.lifecycle.viewmodel.viewModelFactory import com.rtbishop.look4sat.MainApplication import com.rtbishop.look4sat.domain.predict.GeoPos import com.rtbishop.look4sat.domain.predict.OrbitalObject -import com.rtbishop.look4sat.domain.predict.OrbitalPos import com.rtbishop.look4sat.domain.repository.ISatelliteRepo import com.rtbishop.look4sat.domain.repository.ISettingsRepo import com.rtbishop.look4sat.domain.utility.clipLat @@ -33,60 +32,62 @@ import com.rtbishop.look4sat.domain.utility.clipLon import com.rtbishop.look4sat.domain.utility.positionToQth import com.rtbishop.look4sat.domain.utility.toDegrees import com.rtbishop.look4sat.domain.utility.toTimerString -import java.util.Date -import kotlin.collections.set +import com.rtbishop.look4sat.presentation.components.getDefaultPass import kotlinx.coroutines.Job import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.SharedFlow -import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.update import kotlinx.coroutines.isActive import kotlinx.coroutines.launch +import java.util.Date +import kotlin.collections.set -class MapViewModel(private val satelliteRepo: ISatelliteRepo, settingsRepo: ISettingsRepo) : ViewModel() { +class MapViewModel(private val satelliteRepo: ISatelliteRepo, settingsRepo: ISettingsRepo) : + ViewModel() { private val stationPos = settingsRepo.stationPosition.value + private val defaultPass = getDefaultPass() + private val _uiState = MutableStateFlow( + MapState( + mapData = null, + isLightUi = settingsRepo.otherSettings.value.stateOfLightTheme, + stationPosition = null, + orbitalPass = defaultPass, + track = null, + footprint = null, + positions = null, + sendAction = ::handleAction + ) + ) private var allPasses = satelliteRepo.passes.value private var allSatellites = satelliteRepo.satellites.value private var dataUpdateJob: Job? = null private var dataUpdateRate = 1000L private var selectedOrbitalObject: OrbitalObject? = null + val uiState: StateFlow = _uiState - val stateOfLightTheme = settingsRepo.otherSettings.value.stateOfLightTheme - - val stationPosition = flow { - val osmLat = clipLat(stationPos.latitude) - val osmLon = clipLon(stationPos.longitude) - emit(GeoPos(osmLat, osmLon)) + init { + selectDefaultSatellite(-1) } - private val _track = MutableSharedFlow>>() - val track: SharedFlow>> = _track + private fun handleAction(action: MapAction) { + when (action) { + MapAction.SelectPrev -> scrollSelection(true) + MapAction.SelectNext -> scrollSelection(false) + is MapAction.SelectItem -> selectSatellite(action.item) + is MapAction.SelectDefaultItem -> selectDefaultSatellite(action.catnum) + } + } - private val _footprint = MutableSharedFlow() - val footprint: SharedFlow = _footprint + private fun getStationPosition() { + val osmLat = clipLat(stationPos.latitude) + val osmLon = clipLon(stationPos.longitude) + _uiState.update { it.copy(stationPosition = GeoPos(osmLat, osmLon)) } + } - private val _mapData = MutableSharedFlow() -// val mapData: SharedFlow = _mapData - - private val _positions = MutableSharedFlow>() - val positions: SharedFlow> = _positions - -// fun scrollSelection(decrement: Boolean) { -// if (allSatellites.isNotEmpty()) { -// val index = allSatellites.indexOf(selectedSatellite) -// if (decrement) { -// if (index > 0) selectSatellite(allSatellites[index - 1]) -// else selectSatellite(allSatellites[allSatellites.size - 1]) -// } else { -// if (index < allSatellites.size - 1) selectSatellite(allSatellites[index + 1]) -// else selectSatellite(allSatellites[0]) -// } -// } -// } - - fun selectDefaultSatellite(catnum: Int) { + private fun selectDefaultSatellite(catnum: Int) { if (allSatellites.isNotEmpty()) { if (catnum == -1) { allPasses.find { pass -> pass.progress < 100 && !pass.isDeepSpace } @@ -97,12 +98,26 @@ class MapViewModel(private val satelliteRepo: ISatelliteRepo, settingsRepo: ISet } } - fun selectSatellite(orbitalObject: OrbitalObject, updateFreq: Long = dataUpdateRate) { + private fun scrollSelection(decrement: Boolean) { + if (allSatellites.isNotEmpty()) { + val index = allSatellites.indexOf(selectedOrbitalObject) + if (decrement) { + if (index > 0) selectSatellite(allSatellites[index - 1]) + else selectSatellite(allSatellites[allSatellites.size - 1]) + } else { + if (index < allSatellites.size - 1) selectSatellite(allSatellites[index + 1]) + else selectSatellite(allSatellites[0]) + } + } + } + + private fun selectSatellite(orbitalObject: OrbitalObject, updateFreq: Long = dataUpdateRate) { selectedOrbitalObject = orbitalObject viewModelScope.launch { dataUpdateJob?.cancelAndJoin() dataUpdateJob = launch { val dateNow = Date() + getStationPosition() getSatTrack(orbitalObject, stationPos, dateNow) while (isActive) { dateNow.time = System.currentTimeMillis() @@ -141,7 +156,7 @@ class MapViewModel(private val satelliteRepo: ISatelliteRepo, settingsRepo: ISet currentTrack.add(currentPosition) } satTracks.add(currentTrack) - _track.emit(satTracks) + _uiState.update { it.copy(track = satTracks) } } private suspend fun getPositions(orbitalObjects: List, pos: GeoPos, date: Date) { @@ -152,24 +167,29 @@ class MapViewModel(private val satelliteRepo: ISatelliteRepo, settingsRepo: ISet val osmLon = clipLon(satPos.longitude.toDegrees()) positions[satellite] = GeoPos(osmLat, osmLon) } - _positions.emit(positions) + _uiState.update { it.copy(positions = positions) } } private suspend fun getSatFootprint(orbitalObject: OrbitalObject, pos: GeoPos, date: Date) { val satPos = satelliteRepo.getPosition(orbitalObject, pos, date.time) - _footprint.emit(satPos) + _uiState.update { it.copy(footprint = satPos) } } private suspend fun getSatData(sat: OrbitalObject, pos: GeoPos, date: Date) { + var orbitalPass = defaultPass var aosTime = 0L.toTimerString() + var isTimeAos = true allPasses.find { pass -> pass.catNum == sat.data.catnum && pass.progress < 100 } ?.let { satPass -> + orbitalPass = satPass if (!satPass.isDeepSpace) { aosTime = if (date.time < satPass.aosTime) { val millisBeforeStart = satPass.aosTime.minus(date.time) + isTimeAos = true millisBeforeStart.toTimerString() } else { val millisBeforeEnd = satPass.losTime.minus(date.time) + isTimeAos = false millisBeforeEnd.toTimerString() } } @@ -188,6 +208,7 @@ class MapViewModel(private val satelliteRepo: ISatelliteRepo, settingsRepo: ISet sat.data.catnum, sat.data.name, aosTime, + isTimeAos, azimuth, elevation, satPos.distance, @@ -199,7 +220,7 @@ class MapViewModel(private val satelliteRepo: ISatelliteRepo, settingsRepo: ISet phase, visibility ) - _mapData.emit(satData) + _uiState.update { it.copy(mapData = satData, orbitalPass = orbitalPass) } } companion object { 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 a3fb774b..c0d1a4c8 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 @@ -4,6 +4,7 @@ import androidx.compose.foundation.MarqueeSpacing import androidx.compose.foundation.background import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope @@ -38,6 +39,7 @@ import androidx.navigation.compose.composable import androidx.navigation.navArgument import com.rtbishop.look4sat.R import com.rtbishop.look4sat.domain.model.SatRadio +import com.rtbishop.look4sat.domain.utility.toDegrees import com.rtbishop.look4sat.presentation.MainTheme import com.rtbishop.look4sat.presentation.Screen import com.rtbishop.look4sat.presentation.components.CardIcon @@ -78,15 +80,53 @@ private fun RadarScreen(uiState: RadarState, navigateBack: () -> Unit) { CardIcon(onClick = addToCalendar, iconId = R.drawable.ic_calendar) } NextPassRow(pass = uiState.currentPass ?: getDefaultPass()) - ElevatedCard(modifier = Modifier.aspectRatio(1f)) { - uiState.orbitalPos?.let { item -> - RadarViewCompose( - item = item, - items = uiState.satTrack, - azimElev = uiState.orientationValues, - shouldShowSweep = uiState.shouldShowSweep, - shouldUseCompass = uiState.shouldUseCompass - ) + Box(contentAlignment = Alignment.Center, modifier = Modifier.aspectRatio(1f)) { + uiState.orbitalPos?.let { position -> + ElevatedCard { + RadarViewCompose( + item = position, + items = uiState.satTrack, + azimElev = uiState.orientationValues, + shouldShowSweep = uiState.shouldShowSweep, + shouldUseCompass = uiState.shouldUseCompass + ) + } + 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()) { @@ -96,6 +136,26 @@ private fun RadarScreen(uiState: RadarState, navigateBack: () -> Unit) { } } +@Composable +private fun RadarTextTop(value: Double, text: String, isLeft: Boolean) { + val alignment = if (isLeft) Alignment.Start else Alignment.End + val degValue = stringResource(R.string.radar_az_value, value.toDegrees()) + Column(horizontalAlignment = alignment) { + Text(text = degValue, fontSize = 18.sp) + Text(text = text, fontSize = 15.sp) + } +} + +@Composable +private fun RadarTextBottom(value: Double, text: String, isLeft: Boolean) { + val alignment = if (isLeft) Alignment.Start else Alignment.End + val degValue = stringResource(R.string.radar_alt_value, value) + Column(horizontalAlignment = alignment) { + Text(text = text, fontSize = 15.sp) + Text(text = degValue, fontSize = 18.sp) + } +} + @Composable private fun TransmittersList(transmitters: List) { LazyColumn(modifier = Modifier.fillMaxSize()) { @@ -120,19 +180,19 @@ private fun TransmitterItem(radio: SatRadio) { Surface(color = MaterialTheme.colorScheme.background) { Surface(modifier = Modifier.padding(bottom = 2.dp)) { Column( - verticalArrangement = Arrangement.spacedBy(2.dp), + verticalArrangement = Arrangement.spacedBy(4.dp), modifier = Modifier .background(MaterialTheme.colorScheme.surface) - .padding(6.dp) + .padding(horizontal = 6.dp, vertical = 8.dp) ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxWidth() ) { Icon( - painter = painterResource(id = R.drawable.ic_back), + painter = painterResource(id = R.drawable.ic_arrow), tint = Color.Green, - contentDescription = null, modifier = Modifier.rotate(-90f) + contentDescription = null, modifier = Modifier.rotate(90f).weight(0.15f) ) Text( text = if (radio.isInverted) "INVERTED: ${radio.info} " else "${radio.info} ", @@ -140,14 +200,14 @@ private fun TransmitterItem(radio: SatRadio) { modifier = Modifier .basicMarquee( iterations = Int.MAX_VALUE, - spacing = MarqueeSpacing(0.dp) + spacing = MarqueeSpacing(16.dp) ) - .weight(1f) + .weight(0.7f) ) Icon( - painter = painterResource(id = R.drawable.ic_back), + painter = painterResource(id = R.drawable.ic_arrow), tint = Color.Red, - contentDescription = null, modifier = Modifier.rotate(90f) + contentDescription = null, modifier = Modifier.rotate(-90f).weight(0.15f) ) } FrequencyRow(satRadio = radio) @@ -185,7 +245,6 @@ private fun RowScope.ModeText(mode: String?) { Text( text = mode ?: "- - : - -", textAlign = TextAlign.Center, - fontSize = 15.sp, modifier = Modifier.weight(0.15f) ) } @@ -203,53 +262,3 @@ private fun FrequencyText(frequency: Long?) { color = MaterialTheme.colorScheme.primary ) } - -//private val divider = 1000000f -//radioDownlink.text = String.format(Locale.ENGLISH, link, downlink / divider) -//radioUplink.text = String.format(Locale.ENGLISH, link, uplink / divider) - -//private fun setupObservers() { -// viewModel.getPass(45000, System.currentTimeMillis()).observe(viewLifecycleOwner) { pass -> -// binding?.run { -// radarView = RadarView(requireContext()).apply { -// setShowAim(viewModel.getUseCompass()) -// setScanning(viewModel.getShowSweep()) -// } -// viewModel.radarData.observe(viewLifecycleOwner) { passData -> -// setPassText(pass, passData.satPos) -// } -// } -// } -//} -// -//private fun setPassText(satPass: SatPass, satPos: SatPos) { -// binding?.run { -// val timeNow = System.currentTimeMillis() -// val radarAzim = getString(R.string.radar_az_value) -// val radarElev = getString(R.string.radar_el_value) -// val radarAlt = getString(R.string.radar_alt_value) -// val radarDist = getString(R.string.radar_dist_value) -// radarAzValue.text = String.format(radarAzim, satPos.azimuth.toDegrees()) -// radarElValue.text = String.format(radarElev, satPos.elevation.toDegrees()) -// radarAltValue.text = String.format(radarAlt, satPos.altitude) -// radarDstValue.text = String.format(radarDist, satPos.distance) -// if (satPos.eclipsed) { -// radarVisibility.text = getText(R.string.radar_eclipsed) -// } else { -// radarVisibility.text = getText(R.string.radar_visible) -// } -// if (!satPass.isDeepSpace) { -// if (timeNow < satPass.aosTime) { -// val millisBeforeStart = satPass.aosTime.minus(timeNow) -// radarTimer.text = millisBeforeStart.toTimerString() -// } else { -// val millisBeforeEnd = satPass.losTime.minus(timeNow) -// radarTimer.text = millisBeforeEnd.toTimerString() -// if (timeNow > satPass.losTime) { -// radarTimer.text = 0L.toTimerString() -//// findNavController().navigateUp() -// } -// } -// } else radarTimer.text = 0L.toTimerString() -// } -//} 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 7775e781..8682dc96 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 @@ -195,6 +195,7 @@ private fun TypeCard(types: List, onClick: () -> Unit, modifier: Modifie fontSize = 16.sp, fontWeight = FontWeight.Medium, modifier = Modifier + .weight(1f) .basicMarquee(iterations = Int.MAX_VALUE, spacing = MarqueeSpacing(16.dp)) ) }