summaryrefslogtreecommitdiff
path: root/android-app/app/src/main/kotlin
diff options
context:
space:
mode:
Diffstat (limited to 'android-app/app/src/main/kotlin')
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt10
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt19
2 files changed, 25 insertions, 4 deletions
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt b/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt
index d0b0d87..f531a68 100644
--- a/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt
+++ b/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt
@@ -514,6 +514,16 @@ class MainActivity : AppCompatActivity(), SafetyFragment.SafetyListener {
applyConditions(c)
}
}
+ val conditionSpinners = listOf(
+ R.id.spinner_tws, R.id.spinner_temp, R.id.spinner_baro,
+ R.id.spinner_curr, R.id.spinner_waves, R.id.spinner_swell
+ ).mapNotNull { findViewById<android.view.View>(it) }
+ lifecycleScope.launch {
+ viewModel.conditionsLoading.collect { loading ->
+ val vis = if (loading) android.view.View.VISIBLE else android.view.View.GONE
+ conditionSpinners.forEach { it.visibility = vis }
+ }
+ }
lifecycleScope.launch {
LocationService.nmeaDepthDataFlow.collect { depthData ->
lastDepthMeters = depthData.depthMeters
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt b/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt
index 6ec8c76..36811f7 100644
--- a/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt
+++ b/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt
@@ -20,6 +20,7 @@ import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import org.terst.nav.track.TrackSummary
import retrofit2.Retrofit
@@ -52,6 +53,10 @@ class MainViewModel(
private val _marineConditions = MutableStateFlow<MarineConditions?>(null)
val marineConditions: StateFlow<MarineConditions?> = _marineConditions.asStateFlow()
+ private val _conditionsLoading = MutableStateFlow(false)
+ val conditionsLoading: StateFlow<Boolean> = _conditionsLoading.asStateFlow()
+ private var conditionsJob: Job? = null
+
private val _aisTargets = MutableStateFlow<List<AisVessel>>(emptyList())
val aisTargets: StateFlow<List<AisVessel>> = _aisTargets.asStateFlow()
@@ -166,10 +171,16 @@ class MainViewModel(
* Silently ignored on network failure — the UI keeps showing dashes.
*/
fun loadConditions(lat: Double, lon: Double) {
- viewModelScope.launch {
- repository.fetchCurrentConditions(lat, lon)
- .onSuccess { _marineConditions.value = it }
- .onFailure { android.util.Log.e("Nav", "fetchCurrentConditions failed", it) }
+ conditionsJob?.cancel()
+ conditionsJob = viewModelScope.launch {
+ _conditionsLoading.value = true
+ try {
+ repository.fetchCurrentConditions(lat, lon)
+ .onSuccess { _marineConditions.value = it }
+ .onFailure { android.util.Log.e("Nav", "fetchCurrentConditions failed", it) }
+ } finally {
+ _conditionsLoading.value = false
+ }
}
}