From 7eb25e45b37bb34728371fe7c56f12c591417af5 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Mon, 7 Feb 2022 18:36:24 +0000 Subject: [PATCH] Disabled navigation to satellites fragment on empty database --- .../passesScreen/PassesFragment.kt | 14 +++++++++- .../passesScreen/PassesViewModel.kt | 26 +++++++++---------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesFragment.kt index 83fe6b43..c9dde0e9 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesFragment.kt @@ -19,6 +19,7 @@ package com.rtbishop.look4sat.presentation.passesScreen import android.os.Bundle import android.view.View +import android.widget.Toast import androidx.core.os.bundleOf import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels @@ -72,11 +73,22 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC } passesFilter.setOnClickListener { findNavController().navigate(R.id.nav_pass_prefs) } passesSettings.setOnClickListener { findNavController().navigate(R.id.nav_settings) } - passesFab.setOnClickListener { findNavController().navigate(R.id.nav_satellites) } +// passesFab.setOnClickListener { findNavController().navigate(R.id.nav_satellites) } } passesViewModel.passes.observe(viewLifecycleOwner) { passesResult -> handleNewPasses(passesResult, adapter, binding) } + passesViewModel.satellites.observe(viewLifecycleOwner) { satellites -> + satellites?.let { + if (satellites.isEmpty()) { + binding.passesFab.setOnClickListener { + Toast.makeText(requireContext(), "Nothing to show", Toast.LENGTH_SHORT).show() + } + } else { + binding.passesFab.setOnClickListener { findNavController().navigate(R.id.nav_satellites) } + } + } + } getNavResult>(R.id.nav_passes, "prefs") { prefs -> passesViewModel.saveCalculationPrefs(prefs.first, prefs.second) passesViewModel.forceCalculation(prefs.first, prefs.second) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt index d982421f..684b32c2 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt @@ -17,10 +17,7 @@ */ package com.rtbishop.look4sat.presentation.passesScreen -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope +import androidx.lifecycle.* import com.rtbishop.look4sat.data.ISettingsHandler import com.rtbishop.look4sat.domain.IDataRepository import com.rtbishop.look4sat.domain.model.DataState @@ -32,14 +29,15 @@ import javax.inject.Inject @HiltViewModel class PassesViewModel @Inject constructor( - private val dataRepository: IDataRepository, private val predictor: Predictor, - private val preferences: ISettingsHandler + private val settings: ISettingsHandler, + private val repository: IDataRepository ) : ViewModel() { - private val _passes = MutableLiveData>>() private var passesProcessing: Job? = null + private val _passes = MutableLiveData>>() val passes: LiveData>> = _passes + val satellites = repository.getSatelliteItems().asLiveData() init { viewModelScope.launch { @@ -51,26 +49,26 @@ class PassesViewModel @Inject constructor( } fun forceCalculation( - hoursAhead: Int = preferences.getHoursAhead(), - minElevation: Double = preferences.getMinElevation(), + hoursAhead: Int = settings.getHoursAhead(), + minElevation: Double = settings.getMinElevation(), timeRef: Long = System.currentTimeMillis() ) { viewModelScope.launch { _passes.postValue(DataState.Loading) passesProcessing?.cancelAndJoin() - val satellites = dataRepository.getSelectedSatellites() - val stationPos = preferences.loadStationPosition() + val satellites = repository.getSelectedSatellites() + val stationPos = settings.loadStationPosition() predictor.forceCalculation(satellites, stationPos, timeRef, hoursAhead, minElevation) } } fun shouldUseUTC(): Boolean { - return preferences.getUseUTC() + return settings.getUseUTC() } fun saveCalculationPrefs(hoursAhead: Int, minElevation: Double) { - preferences.setHoursAhead(hoursAhead) - preferences.setMinElevation(minElevation) + settings.setHoursAhead(hoursAhead) + settings.setMinElevation(minElevation) } private suspend fun tickPasses(passes: List) = withContext(Dispatchers.Default) {