mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-04 19:47:22 +00:00
Further code cleanup, injected PrefsManager, libs update
This commit is contained in:
1 parent
1d753ba81f
commit
75374ca4d9
8 files changed
+84
-89
No files matched your search
+4
-3
@@ -24,14 +24,15 @@ apply plugin: 'kotlin-kapt'
|
|||||||
apply plugin: "androidx.navigation.safeargs.kotlin"
|
apply plugin: "androidx.navigation.safeargs.kotlin"
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 29
|
compileSdkVersion 30
|
||||||
buildToolsVersion "29.0.3"
|
buildToolsVersion "30.0.2"
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "com.rtbishop.look4sat"
|
applicationId "com.rtbishop.look4sat"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 29
|
targetSdkVersion 30
|
||||||
versionCode 18
|
versionCode 18
|
||||||
versionName '1.4.8'
|
versionName '1.4.8'
|
||||||
|
resConfigs "en", "ru"
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
|
|||||||
@@ -22,7 +22,10 @@ package com.rtbishop.look4sat.ui
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.lifecycle.*
|
import androidx.lifecycle.*
|
||||||
import com.github.amsacode.predict4java.GroundStationPosition
|
import com.github.amsacode.predict4java.GroundStationPosition
|
||||||
import com.rtbishop.look4sat.data.*
|
import com.rtbishop.look4sat.data.Result
|
||||||
|
import com.rtbishop.look4sat.data.SatEntry
|
||||||
|
import com.rtbishop.look4sat.data.SatPass
|
||||||
|
import com.rtbishop.look4sat.data.TleSource
|
||||||
import com.rtbishop.look4sat.repo.Repository
|
import com.rtbishop.look4sat.repo.Repository
|
||||||
import com.rtbishop.look4sat.utility.PassPredictor
|
import com.rtbishop.look4sat.utility.PassPredictor
|
||||||
import com.rtbishop.look4sat.utility.PrefsManager
|
import com.rtbishop.look4sat.utility.PrefsManager
|
||||||
@@ -39,6 +42,7 @@ class SharedViewModel @Inject constructor(
|
|||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
||||||
private val _passes = MutableLiveData<Result<MutableList<SatPass>>>()
|
private val _passes = MutableLiveData<Result<MutableList<SatPass>>>()
|
||||||
|
private var selectedEntries = emptyList<SatEntry>()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (prefsManager.isFirstLaunch()) {
|
if (prefsManager.isFirstLaunch()) {
|
||||||
@@ -46,35 +50,15 @@ class SharedViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setSelectedEntries(entries: List<SatEntry>) {
|
||||||
|
selectedEntries = entries.filter { it.isSelected }
|
||||||
|
}
|
||||||
|
|
||||||
fun getSources() = repository.getSources()
|
fun getSources() = repository.getSources()
|
||||||
fun getEntries() = repository.getEntries()
|
fun getEntries() = repository.getEntries()
|
||||||
fun getPasses(): LiveData<Result<MutableList<SatPass>>> = _passes
|
fun getPasses(): LiveData<Result<MutableList<SatPass>>> = _passes
|
||||||
fun getTransmittersForSat(id: Int) = liveData { emit(repository.getTransmittersForSatId(id)) }
|
fun getTransmittersForSat(id: Int) = liveData { emit(repository.getTransmittersForSatId(id)) }
|
||||||
|
|
||||||
fun getPassPrefs(): PassPrefs {
|
|
||||||
return prefsManager.getPassPrefs()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setPassPrefs(hoursAhead: Int, minEl: Double) {
|
|
||||||
prefsManager.setPassPrefs(hoursAhead, minEl)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getStationPosition(): GroundStationPosition {
|
|
||||||
return prefsManager.getStationPosition()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setStationPositionFromGPS() {
|
|
||||||
prefsManager.setStationPositionFromGPS()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun shouldUseUTC(): Boolean {
|
|
||||||
return prefsManager.shouldUseUTC()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun shouldUseCompass(): Boolean {
|
|
||||||
return prefsManager.shouldUseCompass()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun updateEntriesFromFile(uri: Uri) {
|
fun updateEntriesFromFile(uri: Uri) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
repository.updateEntriesFromFile(uri)
|
repository.updateEntriesFromFile(uri)
|
||||||
@@ -89,31 +73,35 @@ class SharedViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateEntriesSelection(satIds: MutableList<Int>) {
|
fun updateEntriesSelection(entries: List<SatEntry>) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
repository.updateEntriesSelection(satIds)
|
selectedEntries = entries.filter { it.isSelected }
|
||||||
|
calculatePasses()
|
||||||
|
repository.updateEntriesSelection(selectedEntries.map { it.catNum })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun calculatePassesForEntries(entries: List<SatEntry>) {
|
fun calculatePasses(dateNow: Date = Date(System.currentTimeMillis())) {
|
||||||
_passes.value = Result.InProgress
|
_passes.value = Result.InProgress
|
||||||
val dateNow = Date(System.currentTimeMillis())
|
|
||||||
val passes = mutableListOf<SatPass>()
|
|
||||||
viewModelScope.launch(Dispatchers.Default) {
|
viewModelScope.launch(Dispatchers.Default) {
|
||||||
entries.forEach {
|
val passes = mutableListOf<SatPass>()
|
||||||
passes.addAll(getPassesForEntries(it, dateNow, getStationPosition()))
|
selectedEntries.forEach {
|
||||||
|
passes.addAll(getPassesForEntries(it, dateNow, prefsManager.getStationPosition()))
|
||||||
}
|
}
|
||||||
val filteredPasses = filterAndSortPasses(passes, dateNow, getPassPrefs().hoursAhead)
|
val filteredPasses =
|
||||||
|
filterAndSortPasses(passes, dateNow, prefsManager.getPassPrefs().hoursAhead)
|
||||||
_passes.postValue(Result.Success(filteredPasses))
|
_passes.postValue(Result.Success(filteredPasses))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setDefaultTleSources() {
|
private fun setDefaultTleSources() {
|
||||||
val defaultTleSources = listOf(
|
viewModelScope.launch {
|
||||||
TleSource("https://celestrak.com/NORAD/elements/active.txt"),
|
val defaultTleSources = listOf(
|
||||||
TleSource("https://amsat.org/tle/current/nasabare.txt")
|
TleSource("https://celestrak.com/NORAD/elements/active.txt"),
|
||||||
)
|
TleSource("https://amsat.org/tle/current/nasabare.txt")
|
||||||
viewModelScope.launch { repository.updateSources(defaultTleSources) }
|
)
|
||||||
|
repository.updateSources(defaultTleSources)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getPassesForEntries(
|
private fun getPassesForEntries(
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import android.view.View
|
|||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.res.ResourcesCompat
|
import androidx.core.content.res.ResourcesCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.navigation.findNavController
|
import androidx.navigation.findNavController
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration
|
import androidx.recyclerview.widget.DividerItemDecoration
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
@@ -26,7 +26,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
|||||||
lateinit var factory: ViewModelFactory
|
lateinit var factory: ViewModelFactory
|
||||||
|
|
||||||
private lateinit var binding: FragmentEntriesBinding
|
private lateinit var binding: FragmentEntriesBinding
|
||||||
private lateinit var viewModel: SharedViewModel
|
private val viewModel: SharedViewModel by activityViewModels { factory }
|
||||||
private val pickFileReqCode = 100
|
private val pickFileReqCode = 100
|
||||||
private val entriesAdapter = EntriesAdapter()
|
private val entriesAdapter = EntriesAdapter()
|
||||||
private var tleSources = listOf<TleSource>()
|
private var tleSources = listOf<TleSource>()
|
||||||
@@ -35,7 +35,6 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
|||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
binding = FragmentEntriesBinding.bind(view)
|
binding = FragmentEntriesBinding.bind(view)
|
||||||
(requireActivity().application as Look4SatApp).appComponent.inject(this)
|
(requireActivity().application as Look4SatApp).appComponent.inject(this)
|
||||||
viewModel = ViewModelProvider(requireActivity(), factory).get(SharedViewModel::class.java)
|
|
||||||
setupComponents()
|
setupComponents()
|
||||||
setupObservers()
|
setupObservers()
|
||||||
}
|
}
|
||||||
@@ -51,6 +50,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
|||||||
layoutManager = linearLayoutMgr
|
layoutManager = linearLayoutMgr
|
||||||
adapter = entriesAdapter
|
adapter = entriesAdapter
|
||||||
addItemDecoration(divider)
|
addItemDecoration(divider)
|
||||||
|
setHasFixedSize(true)
|
||||||
}
|
}
|
||||||
importWeb.setOnClickListener { showImportFromWebDialog() }
|
importWeb.setOnClickListener { showImportFromWebDialog() }
|
||||||
importFile.setOnClickListener { showImportFromFileDialog() }
|
importFile.setOnClickListener { showImportFromFileDialog() }
|
||||||
@@ -64,6 +64,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
|||||||
private fun setupObservers() {
|
private fun setupObservers() {
|
||||||
viewModel.getSources().observe(viewLifecycleOwner, { tleSources = it })
|
viewModel.getSources().observe(viewLifecycleOwner, { tleSources = it })
|
||||||
viewModel.getEntries().observe(viewLifecycleOwner, {
|
viewModel.getEntries().observe(viewLifecycleOwner, {
|
||||||
|
viewModel.setSelectedEntries(it)
|
||||||
entriesAdapter.setEntries(it as MutableList<SatEntry>)
|
entriesAdapter.setEntries(it as MutableList<SatEntry>)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -81,9 +82,8 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun navigateToPasses() {
|
private fun navigateToPasses() {
|
||||||
val catNumList = mutableListOf<Int>()
|
binding.searchBar.clearFocus()
|
||||||
entriesAdapter.getEntries().forEach { if (it.isSelected) catNumList.add(it.catNum) }
|
viewModel.updateEntriesSelection(entriesAdapter.getEntries())
|
||||||
viewModel.updateEntriesSelection(catNumList)
|
|
||||||
requireView().findNavController().navigate(R.id.action_entries_to_passes)
|
requireView().findNavController().navigate(R.id.action_entries_to_passes)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import androidx.core.content.ContextCompat
|
|||||||
import androidx.core.content.res.ResourcesCompat
|
import androidx.core.content.res.ResourcesCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.github.amsacode.predict4java.GroundStationPosition
|
import com.github.amsacode.predict4java.GroundStationPosition
|
||||||
@@ -22,6 +22,7 @@ import com.rtbishop.look4sat.data.SatItem
|
|||||||
import com.rtbishop.look4sat.data.SatPass
|
import com.rtbishop.look4sat.data.SatPass
|
||||||
import com.rtbishop.look4sat.databinding.FragmentMapBinding
|
import com.rtbishop.look4sat.databinding.FragmentMapBinding
|
||||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
import com.rtbishop.look4sat.ui.SharedViewModel
|
||||||
|
import com.rtbishop.look4sat.utility.PrefsManager
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -42,22 +43,24 @@ import kotlin.math.sqrt
|
|||||||
class MapFragment : Fragment(R.layout.fragment_map) {
|
class MapFragment : Fragment(R.layout.fragment_map) {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var modelFactory: ViewModelFactory
|
lateinit var factory: ViewModelFactory
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
lateinit var prefsManager: PrefsManager
|
||||||
|
|
||||||
private lateinit var mainActivity: FragmentActivity
|
private lateinit var mainActivity: FragmentActivity
|
||||||
private lateinit var viewModel: SharedViewModel
|
|
||||||
private lateinit var binding: FragmentMapBinding
|
private lateinit var binding: FragmentMapBinding
|
||||||
private lateinit var trackPaint: Paint
|
private lateinit var trackPaint: Paint
|
||||||
private lateinit var footprintPaint: Paint
|
private lateinit var footprintPaint: Paint
|
||||||
private lateinit var selectedPass: SatPass
|
private lateinit var selectedPass: SatPass
|
||||||
private val dateNow = Date(System.currentTimeMillis())
|
private val dateNow = Date(System.currentTimeMillis())
|
||||||
|
private val viewModel: SharedViewModel by activityViewModels { factory }
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
binding = FragmentMapBinding.bind(view)
|
binding = FragmentMapBinding.bind(view)
|
||||||
mainActivity = requireActivity()
|
mainActivity = requireActivity()
|
||||||
(mainActivity.application as Look4SatApp).appComponent.inject(this)
|
(mainActivity.application as Look4SatApp).appComponent.inject(this)
|
||||||
viewModel = ViewModelProvider(mainActivity, modelFactory).get(SharedViewModel::class.java)
|
|
||||||
|
|
||||||
val prefs = PreferenceManager.getDefaultSharedPreferences(mainActivity.applicationContext)
|
val prefs = PreferenceManager.getDefaultSharedPreferences(mainActivity.applicationContext)
|
||||||
Configuration.getInstance().load(mainActivity.applicationContext, prefs)
|
Configuration.getInstance().load(mainActivity.applicationContext, prefs)
|
||||||
@@ -78,7 +81,7 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setupMapView()
|
setupMapView()
|
||||||
setupPosOverlay(viewModel.getStationPosition())
|
setupPosOverlay(prefsManager.getStationPosition())
|
||||||
setupObservers()
|
setupObservers()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,25 +19,27 @@
|
|||||||
|
|
||||||
package com.rtbishop.look4sat.ui.fragments
|
package com.rtbishop.look4sat.ui.fragments
|
||||||
|
|
||||||
|
import android.animation.ObjectAnimator
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.CountDownTimer
|
import android.os.CountDownTimer
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||||
import com.rtbishop.look4sat.Look4SatApp
|
import com.rtbishop.look4sat.Look4SatApp
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
import com.rtbishop.look4sat.dagger.ViewModelFactory
|
import com.rtbishop.look4sat.dagger.ViewModelFactory
|
||||||
import com.rtbishop.look4sat.data.Result
|
import com.rtbishop.look4sat.data.Result
|
||||||
import com.rtbishop.look4sat.data.SatEntry
|
|
||||||
import com.rtbishop.look4sat.data.SatPass
|
import com.rtbishop.look4sat.data.SatPass
|
||||||
import com.rtbishop.look4sat.databinding.FragmentPassesBinding
|
import com.rtbishop.look4sat.databinding.FragmentPassesBinding
|
||||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
import com.rtbishop.look4sat.ui.SharedViewModel
|
||||||
import com.rtbishop.look4sat.ui.adapters.PassesAdapter
|
import com.rtbishop.look4sat.ui.adapters.PassesAdapter
|
||||||
|
import com.rtbishop.look4sat.utility.PrefsManager
|
||||||
import com.rtbishop.look4sat.utility.Utilities
|
import com.rtbishop.look4sat.utility.Utilities
|
||||||
|
import com.rtbishop.look4sat.utility.Utilities.getRotationAnimator
|
||||||
import com.rtbishop.look4sat.utility.Utilities.snack
|
import com.rtbishop.look4sat.utility.Utilities.snack
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -47,44 +49,35 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
|||||||
@Inject
|
@Inject
|
||||||
lateinit var factory: ViewModelFactory
|
lateinit var factory: ViewModelFactory
|
||||||
|
|
||||||
private lateinit var viewModel: SharedViewModel
|
@Inject
|
||||||
|
lateinit var prefsManager: PrefsManager
|
||||||
|
|
||||||
private lateinit var aosTimer: CountDownTimer
|
private lateinit var aosTimer: CountDownTimer
|
||||||
private lateinit var binding: FragmentPassesBinding
|
private lateinit var binding: FragmentPassesBinding
|
||||||
private var isTimerSet: Boolean = false
|
private lateinit var animator: ObjectAnimator
|
||||||
|
private val viewModel: SharedViewModel by activityViewModels { factory }
|
||||||
private val passesAdapter = PassesAdapter()
|
private val passesAdapter = PassesAdapter()
|
||||||
private var selectedEntries = listOf<SatEntry>()
|
private var isTimerSet: Boolean = false
|
||||||
private var passes = mutableListOf<SatPass>()
|
private var passes = mutableListOf<SatPass>()
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
binding = FragmentPassesBinding.bind(view)
|
binding = FragmentPassesBinding.bind(view)
|
||||||
(requireActivity().application as Look4SatApp).appComponent.inject(this)
|
(requireActivity().application as Look4SatApp).appComponent.inject(this)
|
||||||
viewModel = ViewModelProvider(requireActivity(), factory).get(SharedViewModel::class.java)
|
|
||||||
setupObservers()
|
|
||||||
setupComponents()
|
setupComponents()
|
||||||
|
setupObservers()
|
||||||
}
|
}
|
||||||
|
|
||||||
// override fun onStart() {
|
|
||||||
// super.onStart()
|
|
||||||
// if (selectedEntries.isEmpty()) {
|
|
||||||
// viewModel.calculatePassesForEntries(selectedEntries)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
private fun setupObservers() {
|
private fun setupObservers() {
|
||||||
viewModel.getEntries().observe(viewLifecycleOwner, { allEntries ->
|
|
||||||
selectedEntries = allEntries.filter { it.isSelected }
|
|
||||||
// viewModel.calculatePassesForEntries(selectedEntries)
|
|
||||||
})
|
|
||||||
viewModel.getPasses().observe(viewLifecycleOwner, { result ->
|
viewModel.getPasses().observe(viewLifecycleOwner, { result ->
|
||||||
when (result) {
|
when (result) {
|
||||||
is Result.Success -> {
|
is Result.Success -> {
|
||||||
|
animator.cancel()
|
||||||
passes = result.data
|
passes = result.data
|
||||||
passesAdapter.setList(passes)
|
passesAdapter.setList(passes)
|
||||||
setTimerForPasses(passes)
|
setTimerForPasses(passes)
|
||||||
}
|
}
|
||||||
is Result.InProgress -> {
|
is Result.InProgress -> animator.start()
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -96,15 +89,22 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
|||||||
adapter = passesAdapter
|
adapter = passesAdapter
|
||||||
isVerticalScrollBarEnabled = false
|
isVerticalScrollBarEnabled = false
|
||||||
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
|
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
|
||||||
|
setHasFixedSize(true)
|
||||||
}
|
}
|
||||||
passesFilter.setOnClickListener {
|
passesFilter.setOnClickListener {
|
||||||
val passPrefs = viewModel.getPassPrefs()
|
val passPrefs = prefsManager.getPassPrefs()
|
||||||
showSatPassPrefsDialog(passPrefs.hoursAhead, passPrefs.minEl)
|
showSatPassPrefsDialog(passPrefs.hoursAhead, passPrefs.minEl)
|
||||||
}
|
}
|
||||||
passesFab.setOnClickListener { viewModel.calculatePassesForEntries(selectedEntries) }
|
animator = passesFab.getRotationAnimator()
|
||||||
|
passesFab.setOnClickListener {
|
||||||
|
if (animator.isRunning) {
|
||||||
|
animator.cancel()
|
||||||
|
} else {
|
||||||
|
viewModel.calculatePasses()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
passesAdapter.setShouldUseUTC(viewModel.shouldUseUTC())
|
passesAdapter.setShouldUseUTC(prefsManager.shouldUseUTC())
|
||||||
passesAdapter.setList(passes)
|
|
||||||
setTimerForPasses(passes)
|
setTimerForPasses(passes)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,8 +130,8 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
|||||||
getString(R.string.pref_min_el_input_error).snack(requireView())
|
getString(R.string.pref_min_el_input_error).snack(requireView())
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
viewModel.setPassPrefs(hours, elevation)
|
prefsManager.setPassPrefs(hours, elevation)
|
||||||
viewModel.calculatePassesForEntries(selectedEntries)
|
viewModel.calculatePasses()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else getString(R.string.err_enter_value).snack(requireView())
|
} else getString(R.string.err_enter_value).snack(requireView())
|
||||||
@@ -183,7 +183,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
|||||||
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() {
|
||||||
viewModel.calculatePassesForEntries(selectedEntries)
|
viewModel.calculatePasses()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onTick(millisUntilFinished: Long) {
|
override fun onTick(millisUntilFinished: Long) {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import android.os.Bundle
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
@@ -38,6 +38,7 @@ import com.rtbishop.look4sat.databinding.FragmentPolarBinding
|
|||||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
import com.rtbishop.look4sat.ui.SharedViewModel
|
||||||
import com.rtbishop.look4sat.ui.adapters.TransAdapter
|
import com.rtbishop.look4sat.ui.adapters.TransAdapter
|
||||||
import com.rtbishop.look4sat.ui.views.PolarView
|
import com.rtbishop.look4sat.ui.views.PolarView
|
||||||
|
import com.rtbishop.look4sat.utility.PrefsManager
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -47,24 +48,26 @@ import kotlin.math.round
|
|||||||
class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener {
|
class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var modelFactory: ViewModelFactory
|
lateinit var factory: ViewModelFactory
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
lateinit var prefsManager: PrefsManager
|
||||||
|
|
||||||
private lateinit var mainActivity: FragmentActivity
|
private lateinit var mainActivity: FragmentActivity
|
||||||
private lateinit var viewModel: SharedViewModel
|
|
||||||
private lateinit var binding: FragmentPolarBinding
|
private lateinit var binding: FragmentPolarBinding
|
||||||
private lateinit var satPass: SatPass
|
private lateinit var satPass: SatPass
|
||||||
private lateinit var sensorManager: SensorManager
|
private lateinit var sensorManager: SensorManager
|
||||||
private var polarView: PolarView? = null
|
private val viewModel: SharedViewModel by activityViewModels { factory }
|
||||||
private val args: PolarFragmentArgs by navArgs()
|
private val args: PolarFragmentArgs by navArgs()
|
||||||
private val transmitterAdapter = TransAdapter()
|
private val transmitterAdapter = TransAdapter()
|
||||||
private var magneticDeclination = 0f
|
private var magneticDeclination = 0f
|
||||||
|
private var polarView: PolarView? = null
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
mainActivity = requireActivity()
|
mainActivity = requireActivity()
|
||||||
binding = FragmentPolarBinding.bind(view)
|
binding = FragmentPolarBinding.bind(view)
|
||||||
(mainActivity.application as Look4SatApp).appComponent.inject(this)
|
(mainActivity.application as Look4SatApp).appComponent.inject(this)
|
||||||
viewModel = ViewModelProvider(mainActivity, modelFactory).get(SharedViewModel::class.java)
|
|
||||||
sensorManager = mainActivity.getSystemService(Context.SENSOR_SERVICE) as SensorManager
|
sensorManager = mainActivity.getSystemService(Context.SENSOR_SERVICE) as SensorManager
|
||||||
binding.recycler.apply {
|
binding.recycler.apply {
|
||||||
layoutManager = LinearLayoutManager(mainActivity)
|
layoutManager = LinearLayoutManager(mainActivity)
|
||||||
@@ -76,7 +79,7 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener {
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
if (viewModel.shouldUseCompass()) {
|
if (prefsManager.shouldUseCompass()) {
|
||||||
sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR).also { sensor ->
|
sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR).also { sensor ->
|
||||||
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL)
|
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL)
|
||||||
}
|
}
|
||||||
@@ -85,7 +88,7 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener {
|
|||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
if (viewModel.shouldUseCompass()) {
|
if (prefsManager.shouldUseCompass()) {
|
||||||
sensorManager.unregisterListener(this)
|
sensorManager.unregisterListener(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -134,7 +137,7 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun calculateMagneticDeclination() {
|
private fun calculateMagneticDeclination() {
|
||||||
val position = viewModel.getStationPosition()
|
val position = prefsManager.getStationPosition()
|
||||||
val geoField = GeomagneticField(
|
val geoField = GeomagneticField(
|
||||||
position.latitude.toFloat(),
|
position.latitude.toFloat(),
|
||||||
position.longitude.toFloat(),
|
position.longitude.toFloat(),
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ object Utilities {
|
|||||||
|
|
||||||
fun View.getRotationAnimator(): ObjectAnimator {
|
fun View.getRotationAnimator(): ObjectAnimator {
|
||||||
return ObjectAnimator.ofFloat(this, "rotation", 0f, 360f).apply {
|
return ObjectAnimator.ofFloat(this, "rotation", 0f, 360f).apply {
|
||||||
duration = 800
|
duration = 333
|
||||||
repeatCount = ObjectAnimator.INFINITE
|
repeatCount = ObjectAnimator.INFINITE
|
||||||
repeatMode = ObjectAnimator.RESTART
|
repeatMode = ObjectAnimator.RESTART
|
||||||
interpolator = LinearInterpolator()
|
interpolator = LinearInterpolator()
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ buildscript {
|
|||||||
gradle_plugin_version = '1.4.10'
|
gradle_plugin_version = '1.4.10'
|
||||||
material_version = '1.2.1'
|
material_version = '1.2.1'
|
||||||
constraint_layout_version = '2.0.1'
|
constraint_layout_version = '2.0.1'
|
||||||
ktx_version = '1.3.1'
|
ktx_version = '1.3.2'
|
||||||
preference_version = '1.1.1'
|
preference_version = '1.1.1'
|
||||||
navigation_version = '2.3.0'
|
navigation_version = '2.3.0'
|
||||||
lifecycle_version = '2.2.0'
|
lifecycle_version = '2.2.0'
|
||||||
|
|||||||
Reference in new issue
Block a user