More fixes for pass item in Compose

This commit is contained in:
Arty Bishop committed 2025-12-27 15:01:32 +00:00
1 parent ac479f80ee
commit 46f0b9608b
7 files changed
+31 -19

No files matched your search

@@ -10,6 +10,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.navigation.NavController
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
@@ -20,6 +21,7 @@ import com.rtbishop.look4sat.presentation.MainTheme
import com.rtbishop.look4sat.presentation.aboutScreen.AboutScreen
import com.rtbishop.look4sat.presentation.entriesScreen.EntriesScreen
import com.rtbishop.look4sat.presentation.passesScreen.PassesScreen
import com.rtbishop.look4sat.presentation.passesScreen.PassesViewModel
@Composable
fun BottomNavBar(navController: NavController) {
@@ -50,9 +52,12 @@ fun BottomNavBar(navController: NavController) {
@Composable
fun NavigationGraph(navController: NavHostController) {
val navToPasses = { navController.navigate(BottomNavItem.Passes.screen_route) }
val passesViewModel: PassesViewModel = hiltViewModel()
NavHost(navController, startDestination = BottomNavItem.Passes.screen_route) {
composable(BottomNavItem.Satellites.screen_route) { EntriesScreen(navToPasses) }
composable(BottomNavItem.Passes.screen_route) { PassesScreen() }
composable(BottomNavItem.Satellites.screen_route) {
EntriesScreen(navToPasses, passesViewModel = passesViewModel)
}
composable(BottomNavItem.Passes.screen_route) { PassesScreen(viewModel = passesViewModel) }
composable(BottomNavItem.WorldMap.screen_route) {}
composable(BottomNavItem.Settings.screen_route) {}
composable(BottomNavItem.About.screen_route) { AboutScreen() }
@@ -33,9 +33,12 @@ import com.rtbishop.look4sat.presentation.onClick
import com.rtbishop.look4sat.presentation.passesScreen.PassesViewModel
@Composable
fun EntriesScreen(navToPasses: () -> Unit, viewModel: EntriesViewModel = hiltViewModel()) {
fun EntriesScreen(
navToPasses: () -> Unit,
viewModel: EntriesViewModel = hiltViewModel(),
passesViewModel: PassesViewModel = hiltViewModel()
) {
val state = viewModel.satData.observeAsState(DataState.Loading)
val passesViewModel: PassesViewModel = hiltViewModel()
val unselectAll = { viewModel.selectCurrentItems(false) }
val selectAll = { viewModel.selectCurrentItems(true) }
Column(modifier = Modifier.padding(6.dp), verticalArrangement = Arrangement.spacedBy(6.dp)) {
@@ -105,7 +105,7 @@ class PassesAdapter(private val clickListener: PassesClickListener) :
passStart.text = startFormat.format(Date(satPass.aosTime))
passElev.text = String.format(elevFormat, satPass.maxElevation)
passEnd.text = endFormat.format(Date(satPass.losTime))
passProgress.progress = satPass.progress
passProgress.progress = satPass.progress.toInt()
}
}
@@ -36,7 +36,7 @@ private fun PassPreview() {
"Satellite", 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 45000, 0.0
)
val satellite = NearEarthSat(data)
val pass = SatPass(1L, 25.0, 10L, 75.0, 850, 45.0, satellite, 150)
val pass = SatPass(1L, 25.0, 10L, 75.0, 850, 45.0, satellite, 0.5f)
MainTheme { Pass(pass = pass) }
}
@@ -82,7 +82,7 @@ private fun Pass(pass: SatPass, modifier: Modifier = Modifier) {
Text(text = "Elevation: 75")
Text(text = "Sun - 16:02:28")
}
LinearProgressIndicator(progress = 0.5f, modifier.fillMaxWidth())
LinearProgressIndicator(progress = pass.progress, modifier = modifier.fillMaxWidth())
}
}
}
@@ -95,7 +95,7 @@ private fun PassesCard(state: DataState<List<SatPass>>) {
when (state) {
is DataState.Success -> {
LazyColumn {
items(items = state.data, key = { item -> item.aosTime }) { pass ->
items(items = state.data, key = { item -> item.catNum + item.aosTime }) { pass ->
Pass(pass, Modifier.animateItemPlacement())
}
}
@@ -18,16 +18,14 @@
package com.rtbishop.look4sat.domain.predict
data class SatPass(
val aosTime: Long,
val aosAzimuth: Double,
val losTime: Long,
val losAzimuth: Double,
// val tcaTime: Long,
// val tcaAzimuth: Double,
val altitude: Int,
val maxElevation: Double,
val aosTime: Long = 0L,
val aosAzimuth: Double = 90.0,
val losTime: Long = 0L,
val losAzimuth: Double = 270.0,
val altitude: Int = 1000,
val maxElevation: Double = 75.0,
val satellite: Satellite,
var progress: Int = 0
var progress: Float = 0.0f
) {
val catNum: Int = satellite.data.catnum
val name: String = satellite.data.name
@@ -78,11 +78,11 @@ class SatelliteManager(private val defaultDispatcher: CoroutineDispatcher) : ISa
if (time > timeStart) {
val deltaNow = time.minus(timeStart).toFloat()
val deltaTotal = pass.losTime.minus(timeStart).toFloat()
pass.progress = ((deltaNow / deltaTotal) * 100).toInt()
pass.progress = (deltaNow / deltaTotal).round(2)
}
}
}
passList.filter { pass -> pass.progress < 100 }.map { it.copy() }
passList.filter { pass -> pass.progress < 1.0 }.map { it.copy() }
}
}
@@ -29,6 +29,12 @@ fun Long.toTimerString(): String {
return String.format(format, hours, minutes, seconds)
}
fun Float.round(decimals: Int): Float {
var multiplier = 1.0f
repeat(decimals) { multiplier *= 10 }
return kotlin.math.round(this * multiplier) / multiplier
}
fun Double.round(decimals: Int): Double {
var multiplier = 1.0
repeat(decimals) { multiplier *= 10 }