diff --git a/app/build.gradle b/app/build.gradle index 570ea6d7..6715e645 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,8 +30,8 @@ android { applicationId "com.rtbishop.look4sat" minSdkVersion 21 targetSdkVersion 29 - versionCode 10 - versionName '1.3.3' + versionCode 11 + versionName '1.3.4' } buildTypes { release { diff --git a/app/src/main/java/com/rtbishop/look4sat/MainViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/MainViewModel.kt index a1eb7f95..0970f0de 100644 --- a/app/src/main/java/com/rtbishop/look4sat/MainViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/MainViewModel.kt @@ -63,6 +63,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { setGroundStationPosition() } + var isFirstLaunch = true var tleMainList = dataManager.loadTleList() var tleSelection = dataManager.loadSelectionList() diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/MapViewFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/MapViewFragment.kt index d2b1cb39..83900513 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/MapViewFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/MapViewFragment.kt @@ -28,6 +28,7 @@ import androidx.appcompat.app.AlertDialog import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope import com.github.amsacode.predict4java.GroundStationPosition import com.github.amsacode.predict4java.Position import com.github.amsacode.predict4java.SatPos @@ -37,9 +38,9 @@ import com.rtbishop.look4sat.R import com.rtbishop.look4sat.databinding.FragmentMapViewBinding import com.rtbishop.look4sat.predict4kotlin.PassPredictor import com.rtbishop.look4sat.repo.SatPass +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import java.util.* -import java.util.concurrent.Executors -import java.util.concurrent.TimeUnit import kotlin.math.abs class MapViewFragment : Fragment(R.layout.fragment_map_view) { @@ -56,7 +57,6 @@ class MapViewFragment : Fragment(R.layout.fragment_map_view) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val binding = FragmentMapViewBinding.bind(view) - val service = Executors.newSingleThreadScheduledExecutor() mainActivity = activity as MainActivity viewModel = ViewModelProvider(mainActivity).get(MainViewModel::class.java) gsp = viewModel.getGSP().value ?: GroundStationPosition(0.0, 0.0, 0.0) @@ -70,12 +70,7 @@ class MapViewFragment : Fragment(R.layout.fragment_map_view) { predictor = satPassList.first().predictor mapView = MapView(mainActivity, binding) binding.frameMap.addView(mapView) - service.scheduleAtFixedRate( - { mapView.invalidate() }, - viewModel.getRefreshRate(), - viewModel.getRefreshRate(), - TimeUnit.MILLISECONDS - ) + refreshView() } else { binding.fabMap.setOnClickListener { Toast.makeText( @@ -87,6 +82,15 @@ class MapViewFragment : Fragment(R.layout.fragment_map_view) { } } + private fun refreshView() { + lifecycleScope.launch { + while (true) { + mapView.invalidate() + delay(viewModel.getRefreshRate()) + } + } + } + private fun showSelectSatDialog(list: List) { val tleArray = arrayOfNulls(list.size).apply { list.withIndex().forEach { diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/PassListFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/PassListFragment.kt index bc125c2b..a9dfa3ea 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/PassListFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/PassListFragment.kt @@ -50,9 +50,8 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { private lateinit var aosTimer: CountDownTimer private lateinit var aosTimerText: TextView private lateinit var mainActivity: MainActivity - private lateinit var satPassList: MutableList + private var satPassList: MutableList = mutableListOf() private var isTimerSet: Boolean = false - private var isFirstLaunch: Boolean = true override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -60,14 +59,15 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { mainActivity = activity as MainActivity viewModel = ViewModelProvider(mainActivity).get(MainViewModel::class.java) satPassAdapter = SatPassAdapter(viewModel) - satPassList = mutableListOf() aosTimerText = mainActivity.findViewById(R.id.toolbar_timer) btnPassPrefs = mainActivity.findViewById(R.id.toolbar_filter) + setupComponents(fragmentBinding) setupObservers(fragmentBinding) - if (viewModel.tleSelection.isNotEmpty() && isFirstLaunch) { + + if (viewModel.tleSelection.isNotEmpty() && viewModel.isFirstLaunch) { viewModel.getPasses() - isFirstLaunch = false + viewModel.isFirstLaunch = false } } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/PolarViewFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/PolarViewFragment.kt index e1e1952d..f60f0508 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/PolarViewFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/PolarViewFragment.kt @@ -37,16 +37,14 @@ import com.rtbishop.look4sat.R import com.rtbishop.look4sat.databinding.FragmentPolarViewBinding import com.rtbishop.look4sat.repo.SatPass import com.rtbishop.look4sat.ui.adapters.TransmitterAdapter +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.util.* -import java.util.concurrent.Executors -import java.util.concurrent.TimeUnit import kotlin.math.cos import kotlin.math.sin class PolarViewFragment : Fragment(R.layout.fragment_polar_view) { - private val service = Executors.newSingleThreadScheduledExecutor() private val args: PolarViewFragmentArgs by navArgs() private lateinit var viewModel: MainViewModel @@ -67,14 +65,18 @@ class PolarViewFragment : Fragment(R.layout.fragment_polar_view) { polarView = PolarView(mainActivity, refreshRate, binding) binding.framePolar.addView(polarView) - service.scheduleAtFixedRate( - { polarView.invalidate() }, - refreshRate, - refreshRate, - TimeUnit.MILLISECONDS - ) setupTransRecycler(binding) + refreshView() + } + } + + private fun refreshView() { + lifecycleScope.launch { + while (true) { + polarView.invalidate() + delay(viewModel.getRefreshRate()) + } } } diff --git a/build.gradle b/build.gradle index 01b8585b..a315222e 100644 --- a/build.gradle +++ b/build.gradle @@ -26,7 +26,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.6.1' + classpath 'com.android.tools.build:gradle:3.6.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.71" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.2.1" }