Further code cleanup, injected PrefsManager, libs update

This commit is contained in:
Arty Bishop committed 2020-10-06 23:24:17 +01:00
1 parent 1d753ba81f
commit 75374ca4d9
8 files changed
+84 -89

No files matched your search

+4 -3
View File
@@ -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
View File
@@ -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'