Fixed NPE in PassListFragment

This commit is contained in:
Arty Bishop committed 2020-03-27 18:54:07 +00:00
1 parent 6167b371ed
commit 18c74bf5f3
2 files changed
+17 -34

No files matched your search

@@ -48,6 +48,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
private val _satPassList = MutableLiveData<MutableList<SatPass>>() private val _satPassList = MutableLiveData<MutableList<SatPass>>()
private val _debugMessage = MutableLiveData<String>() private val _debugMessage = MutableLiveData<String>()
private val _gsp = MutableLiveData<GroundStationPosition>() private val _gsp = MutableLiveData<GroundStationPosition>()
private val _isListRefreshing = MutableLiveData<Boolean>()
private var calculationJob: Job? = null private var calculationJob: Job? = null
@Inject @Inject
@@ -68,6 +69,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
fun getGSP(): LiveData<GroundStationPosition> = _gsp fun getGSP(): LiveData<GroundStationPosition> = _gsp
fun getDebugMessage(): LiveData<String> = _debugMessage fun getDebugMessage(): LiveData<String> = _debugMessage
fun getSatPassList(): LiveData<MutableList<SatPass>> = _satPassList fun getSatPassList(): LiveData<MutableList<SatPass>> = _satPassList
fun getRefreshing(): LiveData<Boolean> = _isListRefreshing
fun getRefreshRate() = prefsManager.getRefreshRate() fun getRefreshRate() = prefsManager.getRefreshRate()
fun getHoursAhead() = prefsManager.getHoursAhead() fun getHoursAhead() = prefsManager.getHoursAhead()
fun getMinElevation() = prefsManager.getMinElevation() fun getMinElevation() = prefsManager.getMinElevation()
@@ -117,6 +119,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
} }
fun getPasses() { fun getPasses() {
_isListRefreshing.value = true
calculationJob?.cancel() calculationJob?.cancel()
var passList = mutableListOf<SatPass>() var passList = mutableListOf<SatPass>()
calculationJob = viewModelScope.launch { calculationJob = viewModelScope.launch {
@@ -144,6 +147,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
_satPassList.postValue(mutableListOf()) _satPassList.postValue(mutableListOf())
_debugMessage.postValue(app.getString(R.string.err_no_sat_selected)) _debugMessage.postValue(app.getString(R.string.err_no_sat_selected))
} }
_isListRefreshing.value = false
} }
} }
@@ -21,9 +21,7 @@ package com.rtbishop.look4sat.ui
import android.os.Bundle import android.os.Bundle
import android.os.CountDownTimer import android.os.CountDownTimer
import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup
import android.widget.EditText import android.widget.EditText
import android.widget.ImageButton import android.widget.ImageButton
import android.widget.TextView import android.widget.TextView
@@ -44,10 +42,7 @@ import com.rtbishop.look4sat.ui.adapters.SatPassAdapter
import java.util.* import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
class PassListFragment : Fragment() { class PassListFragment : Fragment(R.layout.fragment_pass_list) {
private var _binding: FragmentPassListBinding? = null
private val binding get() = _binding!!
private lateinit var viewModel: MainViewModel private lateinit var viewModel: MainViewModel
private lateinit var satPassAdapter: SatPassAdapter private lateinit var satPassAdapter: SatPassAdapter
@@ -66,24 +61,16 @@ class PassListFragment : Fragment() {
satPassList = mutableListOf() satPassList = mutableListOf()
} }
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentPassListBinding.inflate(layoutInflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
val fragmentBinding = FragmentPassListBinding.bind(view)
aosTimerText = mainActivity.findViewById(R.id.toolbar_timer) aosTimerText = mainActivity.findViewById(R.id.toolbar_timer)
btnPassPrefs = mainActivity.findViewById(R.id.toolbar_filter) btnPassPrefs = mainActivity.findViewById(R.id.toolbar_filter)
setupComponents() setupComponents(fragmentBinding)
setupObservers() setupObservers(fragmentBinding)
} }
private fun setupComponents() { private fun setupComponents(binding: FragmentPassListBinding) {
binding.recPassList.apply { binding.recPassList.apply {
layoutManager = LinearLayoutManager(mainActivity) layoutManager = LinearLayoutManager(mainActivity)
adapter = satPassAdapter adapter = satPassAdapter
@@ -95,7 +82,7 @@ class PassListFragment : Fragment() {
binding.refLayoutPassList.setProgressBackgroundColorSchemeResource(R.color.themeAccent) binding.refLayoutPassList.setProgressBackgroundColorSchemeResource(R.color.themeAccent)
binding.refLayoutPassList.setColorSchemeResources(R.color.backgroundDark) binding.refLayoutPassList.setColorSchemeResources(R.color.backgroundDark)
binding.refLayoutPassList.setOnRefreshListener { calculatePasses() } binding.refLayoutPassList.setOnRefreshListener { viewModel.getPasses() }
btnPassPrefs.setOnClickListener { btnPassPrefs.setOnClickListener {
showSatPassPrefsDialog(viewModel.getHoursAhead(), viewModel.getMinElevation()) showSatPassPrefsDialog(viewModel.getHoursAhead(), viewModel.getMinElevation())
} }
@@ -104,7 +91,7 @@ class PassListFragment : Fragment() {
} }
} }
private fun setupObservers() { private fun setupObservers(binding: FragmentPassListBinding) {
viewModel.getSatPassList().observe(viewLifecycleOwner, Observer { viewModel.getSatPassList().observe(viewLifecycleOwner, Observer {
satPassList = it satPassList = it
satPassAdapter.setList(satPassList) satPassAdapter.setList(satPassList)
@@ -116,13 +103,10 @@ class PassListFragment : Fragment() {
binding.recPassList.visibility = View.INVISIBLE binding.recPassList.visibility = View.INVISIBLE
} }
setTimer() setTimer()
binding.refLayoutPassList.isRefreshing = false
}) })
} viewModel.getRefreshing().observe(viewLifecycleOwner, Observer {
binding.refLayoutPassList.isRefreshing = it
private fun calculatePasses() { })
binding.refLayoutPassList.isRefreshing = true
viewModel.getPasses()
} }
private fun showSatPassPrefsDialog(hoursAhead: Int, minEl: Double) { private fun showSatPassPrefsDialog(hoursAhead: Int, minEl: Double) {
@@ -157,7 +141,7 @@ class PassListFragment : Fragment() {
} }
else -> { else -> {
viewModel.setPassPrefs(hours, elevation) viewModel.setPassPrefs(hours, elevation)
calculatePasses() viewModel.getPasses()
} }
} }
} else Toast.makeText( } else Toast.makeText(
@@ -189,7 +173,7 @@ class PassListFragment : Fragment() {
val listener = object : SatEntryDialog.EntriesSubmitListener { val listener = object : SatEntryDialog.EntriesSubmitListener {
override fun onEntriesSubmit(list: MutableList<Int>) { override fun onEntriesSubmit(list: MutableList<Int>) {
viewModel.updateAndSaveSelectionList(list) viewModel.updateAndSaveSelectionList(list)
calculatePasses() viewModel.getPasses()
} }
} }
@@ -244,7 +228,7 @@ class PassListFragment : Fragment() {
val millisBeforeEnd = lastPass.pass.endTime.time.minus(timeNow.time) val millisBeforeEnd = lastPass.pass.endTime.time.minus(timeNow.time)
aosTimer = object : CountDownTimer(millisBeforeEnd, 1000) { aosTimer = object : CountDownTimer(millisBeforeEnd, 1000) {
override fun onFinish() { override fun onFinish() {
calculatePasses() viewModel.getPasses()
} }
override fun onTick(millisUntilFinished: Long) { override fun onTick(millisUntilFinished: Long) {
@@ -267,9 +251,4 @@ class PassListFragment : Fragment() {
if (resetToNull) aosTimerText.text = if (resetToNull) aosTimerText.text =
String.format(getString(R.string.pat_timer), 0, 0, 0) String.format(getString(R.string.pat_timer), 0, 0, 0)
} }
override fun onDestroyView() {
_binding = null
super.onDestroyView()
}
} }