From a6a59877a8824c78acbd5f56df0e25805e7ed332 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sat, 31 Jan 2026 12:55:47 +0000 Subject: [PATCH] v4.0.1 - Hotfix for RadarScreen track projection display --- .github/workflows/release.yml | 2 + app/build.gradle.kts | 4 +- .../presentation/radar/RadarScreen.kt | 179 ++++++++++-------- .../look4sat/presentation/radar/RadarView.kt | 27 +-- 4 files changed, 109 insertions(+), 103 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f4f6bd2b..d95771c1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,6 +17,8 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v6 + with: + fetch-depth: 0 - name: Setup Java uses: actions/setup-java@v5 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d21e65c2..ddefe22c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -13,8 +13,8 @@ android { defaultConfig { applicationId = "com.rtbishop.look4sat" minSdk = 24 - versionCode = 400 - versionName = "4.0.0" + versionCode = 401 + versionName = "4.0.1" } buildFeatures { compose = true 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 c4d1362a..8762c733 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 @@ -64,6 +64,7 @@ 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.common.EmptyListCard import com.rtbishop.look4sat.presentation.common.IconCard import com.rtbishop.look4sat.presentation.common.NextPassRow import com.rtbishop.look4sat.presentation.common.TimerRow @@ -115,49 +116,56 @@ private fun RadarScreen(uiState: RadarState, navigateUp: () -> Unit) { if(isVerticalLayout()) { ElevatedCard(modifier = Modifier.weight(1f)) { Box(contentAlignment = Alignment.Center) { - RadarViewCompose( - item = uiState.orbitalPos, - items = uiState.satTrack, - azimElev = uiState.orientationValues, - shouldShowSweep = uiState.shouldShowSweep, - 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( - uiState.orbitalPos?.azimuth ?: 0.0, - stringResource(R.string.radar_az_text), - true - ) - RadarTextTop( - uiState.orbitalPos?.elevation ?: 0.0, - stringResource(R.string.radar_el_text), - false - ) + if (uiState.orbitalPos == null) { + ElevatedCard(modifier = Modifier.fillMaxSize()) { + EmptyListCard(message = "") } - Row( - horizontalArrangement = Arrangement.SpaceBetween, - modifier = Modifier.fillMaxWidth() + } + uiState.orbitalPos?.let { position -> + RadarViewCompose( + item = position, + items = uiState.satTrack, + azimElev = uiState.orientationValues, + shouldShowSweep = uiState.shouldShowSweep, + shouldUseCompass = uiState.shouldUseCompass, + modifier = Modifier.align(Alignment.Center) + ) + Column( + verticalArrangement = Arrangement.SpaceBetween, + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 6.dp, vertical = 4.dp) ) { - RadarTextBottom( - uiState.orbitalPos?.altitude ?: 0.0, - stringResource(R.string.radar_alt_text), - true - ) - RadarTextBottom( - uiState.orbitalPos?.distance ?: 0.0, - stringResource(R.string.radar_dist_text), - false - ) + 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 + ) + } } } } @@ -192,49 +200,56 @@ private fun RadarScreen(uiState: RadarState, navigateUp: () -> Unit) { Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) { ElevatedCard(modifier = Modifier.weight(1f)) { Box(contentAlignment = Alignment.Center) { - RadarViewCompose( - item = uiState.orbitalPos, - 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( - uiState.orbitalPos?.azimuth ?: 0.0, - stringResource(R.string.radar_az_text), - true - ) - RadarTextTop( - uiState.orbitalPos?.elevation ?: 0.0, - stringResource(R.string.radar_el_text), - false - ) + if (uiState.orbitalPos == null) { + ElevatedCard(modifier = Modifier.fillMaxSize()) { + EmptyListCard(message = "") } - Row( - horizontalArrangement = Arrangement.SpaceBetween, - modifier = Modifier.fillMaxWidth() + } + 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) ) { - RadarTextBottom( - uiState.orbitalPos?.altitude ?: 0.0, - stringResource(R.string.radar_alt_text), - true - ) - RadarTextBottom( - uiState.orbitalPos?.distance ?: 0.0, - stringResource(R.string.radar_dist_text), - false - ) + 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 + ) + } } } } 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 628bd89b..6895316b 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 @@ -17,7 +17,6 @@ */ package com.rtbishop.look4sat.presentation.radar -import android.media.SoundPool import androidx.compose.animation.core.animateFloat import androidx.compose.animation.core.infiniteRepeatable import androidx.compose.animation.core.rememberInfiniteTransition @@ -27,7 +26,6 @@ import androidx.compose.foundation.layout.aspectRatio import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableFloatStateOf -import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier @@ -44,8 +42,6 @@ import androidx.compose.ui.graphics.drawscope.Fill import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.graphics.drawscope.rotate import androidx.compose.ui.graphics.drawscope.translate -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalView import androidx.compose.ui.text.TextMeasurer import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.drawText @@ -59,15 +55,15 @@ import kotlin.math.sin @Composable fun RadarViewCompose( - item: OrbitalPos?, + item: OrbitalPos, items: List, azimElev: Pair, shouldShowSweep: Boolean, shouldUseCompass: Boolean, modifier: Modifier = Modifier ) { - val context = LocalContext.current - val view = LocalView.current +// val context = LocalContext.current +// val view = LocalView.current val radarColor = MaterialTheme.colorScheme.secondary val trackColor = MaterialTheme.colorScheme.primary val aimColor = MaterialTheme.colorScheme.error @@ -75,15 +71,15 @@ fun RadarViewCompose( val animTransition = rememberInfiniteTransition(label = "animScale") val animSpec = infiniteRepeatable(tween(1000)) val animScale = animTransition.animateFloat(16f, 64f, animSpec, label = "animScale") - val aimThreshold = 0.05f +// val aimThreshold = 0.05f val measurer = rememberTextMeasurer() val sweepDegrees = remember { mutableFloatStateOf(0f) } val trackCreated = remember { mutableStateOf(false) } val trackPath = remember { mutableStateOf(Path()) } val trackEffect = remember { mutableStateOf(PathEffect.cornerPathEffect(0f)) } - val soundPool = remember { mutableStateOf(null) } - val beepSoundId = remember { mutableIntStateOf(0) } - val aimTargetDifference = remember { mutableFloatStateOf(0f) } +// val soundPool = remember { mutableStateOf(null) } +// val beepSoundId = remember { mutableIntStateOf(0) } +// val aimTargetDifference = remember { mutableFloatStateOf(0f) } // LaunchedEffect(item.azimuth, item.elevation, azimElev.first, azimElev.second) { // val aimAzimuthRadians = azimElev.first.toDouble().toRadians() @@ -95,13 +91,10 @@ fun RadarViewCompose( // val satX = sph2CartX(item.azimuth, item.elevation, radius) // val satY = sph2CartY(item.azimuth, item.elevation, radius) // aimTargetDifference.floatValue = sqrt((satX - aimX).pow(2) + (satY - aimY).pow(2)) -// -// // val minPlaybackRate = 0.5f // val maxPlaybackRate = 2.0f // val playbackRate = // maxPlaybackRate - (aimTargetDifference.floatValue / (maxPlaybackRate - minPlaybackRate)) -// // soundPool.value?.setRate(beepSoundId.intValue, playbackRate) // } // @@ -127,20 +120,16 @@ fun RadarViewCompose( // .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) // .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) // .build() -// // soundPool.value = SoundPool.Builder() // .setMaxStreams(1) // .setAudioAttributes(audioAttributes) // .build() -// // beepSoundId.intValue = soundPool.value?.load(context, R.raw.beep, 1) ?: 0 -// // soundPool.value?.setOnLoadCompleteListener { soundPool, _, status -> // if (status == 0) { // soundPool.play(beepSoundId.intValue, 0.5f, 0.5f, 0, -1, 1f) // } // } -// // onDispose { // soundPool.value?.release() // } @@ -161,7 +150,7 @@ fun RadarViewCompose( drawInfo(radius, trackColor, measurer, 3) translate(center.x, center.y) { drawTrack(trackPath.value, trackEffect.value, aimColor, trackColor) - if (item != null && item.elevation > 0) { + if (item.elevation > 0) { drawPosition(item, radius, animScale.value, trackColor) } if (shouldUseCompass) {