From 61cbc212b50ee1134363bcdb0b9845948c758a52 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sun, 6 Feb 2022 19:22:39 +0000 Subject: [PATCH] Swapped SettingsHandler.kt class for its interface --- .../look4sat/framework/LocationHandler.kt | 3 +- .../look4sat/framework/SettingsHandler.kt | 76 ++++++++----------- .../rtbishop/look4sat/injection/CoreModule.kt | 2 +- .../look4sat/presentation/MainViewModel.kt | 4 +- .../entriesScreen/EntriesViewModel.kt | 4 +- .../presentation/mapScreen/MapViewModel.kt | 4 +- .../passesScreen/PassesFragment.kt | 1 + .../passesScreen/PassesPrefsDialog.kt | 4 +- .../passesScreen/PassesViewModel.kt | 20 ++--- .../presentation/radarScreen/RadarFragment.kt | 4 +- .../radarScreen/RadarViewModel.kt | 8 +- .../settingsScreen/SettingsFragment.kt | 29 +++---- .../settingsScreen/SettingsViewModel.kt | 34 +++++++-- app/src/main/res/layout/dialog_sources.xml | 4 +- app/src/main/res/layout/fragment_entries.xml | 8 +- app/src/main/res/layout/fragment_map.xml | 8 +- app/src/main/res/values/colors.xml | 4 +- .../look4sat/data/ISettingsHandler.kt | 42 ++++++++++ 18 files changed, 152 insertions(+), 107 deletions(-) diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/LocationHandler.kt b/app/src/main/java/com/rtbishop/look4sat/framework/LocationHandler.kt index 9827e262..a26f1e87 100644 --- a/app/src/main/java/com/rtbishop/look4sat/framework/LocationHandler.kt +++ b/app/src/main/java/com/rtbishop/look4sat/framework/LocationHandler.kt @@ -26,6 +26,7 @@ import android.location.LocationManager import android.os.Bundle import androidx.core.content.ContextCompat import com.rtbishop.look4sat.R +import com.rtbishop.look4sat.data.ISettingsHandler import com.rtbishop.look4sat.domain.ILocationHandler import com.rtbishop.look4sat.domain.QthConverter import com.rtbishop.look4sat.domain.model.DataState @@ -40,7 +41,7 @@ import javax.inject.Singleton @Singleton class LocationHandler @Inject constructor( @ApplicationContext private val context: Context, - private val settingsHandler: SettingsHandler, + private val settingsHandler: ISettingsHandler, ) : LocationListener, ILocationHandler { private val manager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/SettingsHandler.kt b/app/src/main/java/com/rtbishop/look4sat/framework/SettingsHandler.kt index 688dce3a..838d5ce1 100644 --- a/app/src/main/java/com/rtbishop/look4sat/framework/SettingsHandler.kt +++ b/app/src/main/java/com/rtbishop/look4sat/framework/SettingsHandler.kt @@ -19,17 +19,15 @@ package com.rtbishop.look4sat.framework import android.content.SharedPreferences import androidx.core.content.edit -import com.rtbishop.look4sat.BuildConfig import com.rtbishop.look4sat.data.ISettingsHandler import com.rtbishop.look4sat.domain.predict.GeoPos +import com.rtbishop.look4sat.presentation.putDouble import javax.inject.Inject import javax.inject.Singleton @Singleton class SettingsHandler @Inject constructor(private val prefs: SharedPreferences) : ISettingsHandler { - private val keyInitialSetup = "${BuildConfig.VERSION_NAME}update" - companion object { const val keyDataSources = "dataSources" const val keyModes = "satModes" @@ -43,105 +41,93 @@ class SettingsHandler @Inject constructor(private val prefs: SharedPreferences) const val keyRotatorPort = "rotatorPort" const val keyLatitude = "stationLat" const val keyLongitude = "stationLon" - const val keyPositionGPS = "setPositionGPS" - const val keyPositionQTH = "setPositionQTH" +// const val keyPositionGPS = "setPositionGPS" +// const val keyPositionQTH = "setPositionQTH" } - fun loadStationPosition(): GeoPos { + override fun loadStationPosition(): GeoPos { val defaultSP = "0.0" val latitude = prefs.getString(keyLatitude, null) ?: defaultSP val longitude = prefs.getString(keyLongitude, null) ?: defaultSP return GeoPos(latitude.toDouble(), longitude.toDouble()) } - fun saveStationPosition(latitude: Double, longitude: Double) { + override fun saveStationPosition(latitude: Double, longitude: Double) { prefs.edit { putString(keyLatitude, latitude.toString()) putString(keyLongitude, longitude.toString()) } } - fun getHoursAhead(): Int { + override fun getHoursAhead(): Int { return prefs.getInt(keyHoursAhead, 8) } - fun getMinElevation(): Double { + override fun setHoursAhead(hoursAhead: Int) { + prefs.edit { putInt(keyHoursAhead, hoursAhead) } + } + + override fun getMinElevation(): Double { return prefs.getInt(keyMinElevation, 16).toDouble() } - fun getUseUTC(): Boolean { + override fun setMinElevation(minElevation: Double) { + prefs.edit { putDouble(keyMinElevation, minElevation) } + } + + override fun getUseUTC(): Boolean { return prefs.getBoolean(keyTimeUTC, false) } - fun setUseUTC(value: Boolean) { + override fun setUseUTC(value: Boolean) { prefs.edit { putBoolean(keyTimeUTC, value) } } - fun getUseCompass(): Boolean { + override fun getUseCompass(): Boolean { return prefs.getBoolean(keyCompass, true) } - fun setUseCompass(value: Boolean) { + override fun setUseCompass(value: Boolean) { prefs.edit { putBoolean(keyCompass, value) } } - fun getShowSweep(): Boolean { + override fun getShowSweep(): Boolean { return prefs.getBoolean(keyRadarSweep, true) } - fun setShowSweep(value: Boolean) { + override fun setShowSweep(value: Boolean) { prefs.edit { putBoolean(keyRadarSweep, value) } } - fun getSetupDone(): Boolean { - return prefs.getBoolean(keyInitialSetup, false) + override fun saveModesSelection(modes: List) { + prefs.edit { putStringSet(keyModes, modes.toSet()) } } - fun setSetupDone() { - prefs.edit { putBoolean(keyInitialSetup, true) } + override fun loadModesSelection(): List { + return prefs.getStringSet(keyModes, null)?.toList()?.sorted() ?: emptyList() } - fun saveModesSelection(modes: List) { - val modesSet = modes.toSet() - prefs.edit { - putStringSet(keyModes, modesSet) - } - } - - fun loadModesSelection(): List { - prefs.getStringSet(keyModes, setOf())?.let { modesSet -> - return modesSet.toList().sorted() - } - return emptyList() - } - - fun getRotatorEnabled(): Boolean { + override fun getRotatorEnabled(): Boolean { return prefs.getBoolean(keyRotator, false) } - fun setRotatorEnabled(value: Boolean) { + override fun setRotatorEnabled(value: Boolean) { prefs.edit { putBoolean(keyRotator, value) } } - fun getRotatorServer(): Pair { - val address = prefs.getString(keyRotatorAddress, null) ?: "127.0.0.1" - val port = prefs.getString(keyRotatorPort, null) ?: "4533" - return Pair(address, port.toInt()) - } - - fun getRotatorIp(): String { + override fun getRotatorServer(): String { return prefs.getString(keyRotatorAddress, null) ?: "127.0.0.1" } - fun setRotatorIp(value: String) { + override fun setRotatorServer(value: String) { prefs.edit { putString(keyRotatorAddress, value) } } - fun getRotatorPort(): String { + override fun getRotatorPort(): String { return prefs.getString(keyRotatorPort, null) ?: "4533" } - fun setRotatorPort(value: String) { + override fun setRotatorPort(value: String) { prefs.edit { putString(keyRotatorPort, value) } } diff --git a/app/src/main/java/com/rtbishop/look4sat/injection/CoreModule.kt b/app/src/main/java/com/rtbishop/look4sat/injection/CoreModule.kt index ca511f8f..205c7b18 100644 --- a/app/src/main/java/com/rtbishop/look4sat/injection/CoreModule.kt +++ b/app/src/main/java/com/rtbishop/look4sat/injection/CoreModule.kt @@ -70,7 +70,7 @@ object CoreModule { @Singleton fun provideLocationHandler( @ApplicationContext context: Context, - settingsHandler: SettingsHandler + settingsHandler: ISettingsHandler ): ILocationHandler { return LocationHandler(context, settingsHandler) } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/MainViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/MainViewModel.kt index 6c0e4505..1c37bb8b 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/MainViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/MainViewModel.kt @@ -2,9 +2,9 @@ package com.rtbishop.look4sat.presentation import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.rtbishop.look4sat.data.ISettingsHandler import com.rtbishop.look4sat.domain.IDataRepository import com.rtbishop.look4sat.domain.predict.Predictor -import com.rtbishop.look4sat.framework.SettingsHandler import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import javax.inject.Inject @@ -12,7 +12,7 @@ import javax.inject.Inject @HiltViewModel class MainViewModel @Inject constructor( private val predictor: Predictor, - private val preferences: SettingsHandler, + private val preferences: ISettingsHandler, private val dataRepository: IDataRepository ) : ViewModel() { diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt index 119ea24b..6af0c85a 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt @@ -19,10 +19,10 @@ package com.rtbishop.look4sat.presentation.entriesScreen import android.widget.SearchView import androidx.lifecycle.* +import com.rtbishop.look4sat.data.ISettingsHandler import com.rtbishop.look4sat.domain.IDataRepository import com.rtbishop.look4sat.domain.model.DataState import com.rtbishop.look4sat.domain.model.SatItem -import com.rtbishop.look4sat.framework.SettingsHandler import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import java.util.* @@ -30,7 +30,7 @@ import javax.inject.Inject @HiltViewModel class EntriesViewModel @Inject constructor( - private val preferences: SettingsHandler, + private val preferences: ISettingsHandler, private val dataRepository: IDataRepository ) : ViewModel(), SearchView.OnQueryTextListener, EntriesAdapter.EntriesClickListener { diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt index 545bb451..8e272993 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt @@ -18,12 +18,12 @@ package com.rtbishop.look4sat.presentation.mapScreen import androidx.lifecycle.* +import com.rtbishop.look4sat.data.ISettingsHandler import com.rtbishop.look4sat.domain.IDataRepository import com.rtbishop.look4sat.domain.QthConverter import com.rtbishop.look4sat.domain.predict.GeoPos import com.rtbishop.look4sat.domain.predict.Predictor import com.rtbishop.look4sat.domain.predict.Satellite -import com.rtbishop.look4sat.framework.SettingsHandler import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.* import java.util.* @@ -35,7 +35,7 @@ import kotlin.math.min class MapViewModel @Inject constructor( private val dataRepository: IDataRepository, private val predictor: Predictor, - preferences: SettingsHandler, + preferences: ISettingsHandler, ) : ViewModel() { private val stationPos = preferences.loadStationPosition() 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 1a20cefa..83fe6b43 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 @@ -78,6 +78,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC handleNewPasses(passesResult, adapter, binding) } 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/PassesPrefsDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesPrefsDialog.kt index 6eaa0283..c3bb2de8 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesPrefsDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesPrefsDialog.kt @@ -7,8 +7,8 @@ import android.view.ViewGroup import android.view.WindowManager import androidx.appcompat.app.AppCompatDialogFragment import com.rtbishop.look4sat.R +import com.rtbishop.look4sat.data.ISettingsHandler import com.rtbishop.look4sat.databinding.DialogPassesBinding -import com.rtbishop.look4sat.framework.SettingsHandler import com.rtbishop.look4sat.presentation.setNavResult import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject @@ -17,7 +17,7 @@ import javax.inject.Inject class PassesPrefsDialog : AppCompatDialogFragment() { @Inject - lateinit var preferences: SettingsHandler + lateinit var preferences: ISettingsHandler override fun onCreateView(inflater: LayoutInflater, group: ViewGroup?, state: Bundle?): View? { return inflater.inflate(R.layout.dialog_passes, group, false) 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 d2d236ef..d982421f 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 @@ -21,11 +21,11 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.rtbishop.look4sat.data.ISettingsHandler import com.rtbishop.look4sat.domain.IDataRepository import com.rtbishop.look4sat.domain.model.DataState import com.rtbishop.look4sat.domain.predict.Predictor import com.rtbishop.look4sat.domain.predict.SatPass -import com.rtbishop.look4sat.framework.SettingsHandler import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.* import javax.inject.Inject @@ -34,7 +34,7 @@ import javax.inject.Inject class PassesViewModel @Inject constructor( private val dataRepository: IDataRepository, private val predictor: Predictor, - private val preferences: SettingsHandler + private val preferences: ISettingsHandler ) : ViewModel() { private val _passes = MutableLiveData>>() @@ -42,17 +42,6 @@ class PassesViewModel @Inject constructor( val passes: LiveData>> = _passes init { - if (preferences.getSetupDone()) { - viewModelScope.launch { - _passes.postValue(DataState.Loading) - val timeNow = System.currentTimeMillis() - val satellites = dataRepository.getSelectedSatellites() - val stationPos = preferences.loadStationPosition() - val hoursAhead = preferences.getHoursAhead() - val minElev = preferences.getMinElevation() - predictor.triggerCalculation(satellites, stationPos, timeNow, hoursAhead, minElev) - } - } viewModelScope.launch { predictor.passes.collect { passes -> passesProcessing?.cancelAndJoin() @@ -79,6 +68,11 @@ class PassesViewModel @Inject constructor( return preferences.getUseUTC() } + fun saveCalculationPrefs(hoursAhead: Int, minElevation: Double) { + preferences.setHoursAhead(hoursAhead) + preferences.setMinElevation(minElevation) + } + private suspend fun tickPasses(passes: List) = withContext(Dispatchers.Default) { var currentPasses = passes while (isActive) { diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarFragment.kt index e21c0234..1ec80d9e 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarFragment.kt @@ -27,10 +27,10 @@ import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.SimpleItemAnimator import com.rtbishop.look4sat.R +import com.rtbishop.look4sat.data.ISettingsHandler import com.rtbishop.look4sat.databinding.FragmentRadarBinding import com.rtbishop.look4sat.domain.predict.SatPass import com.rtbishop.look4sat.domain.predict.SatPos -import com.rtbishop.look4sat.framework.SettingsHandler import com.rtbishop.look4sat.presentation.navigateSafe import com.rtbishop.look4sat.presentation.toTimerString import dagger.hilt.android.AndroidEntryPoint @@ -40,7 +40,7 @@ import javax.inject.Inject class RadarFragment : Fragment(R.layout.fragment_radar) { @Inject - lateinit var preferences: SettingsHandler + lateinit var preferences: ISettingsHandler private val viewModel: RadarViewModel by viewModels() private var radarView: RadarView? = null diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarViewModel.kt index 2a0a58fb..8c2bc8bc 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarViewModel.kt @@ -19,6 +19,7 @@ package com.rtbishop.look4sat.presentation.radarScreen import android.hardware.GeomagneticField import androidx.lifecycle.* +import com.rtbishop.look4sat.data.ISettingsHandler import com.rtbishop.look4sat.domain.DataReporter import com.rtbishop.look4sat.domain.IDataRepository import com.rtbishop.look4sat.domain.model.Transmitter @@ -27,7 +28,6 @@ import com.rtbishop.look4sat.domain.predict.Predictor import com.rtbishop.look4sat.domain.predict.SatPass import com.rtbishop.look4sat.domain.predict.SatPos import com.rtbishop.look4sat.framework.OrientationHandler -import com.rtbishop.look4sat.framework.SettingsHandler import com.rtbishop.look4sat.presentation.round import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.delay @@ -39,7 +39,7 @@ import javax.inject.Inject @HiltViewModel class RadarViewModel @Inject constructor( private val orientationHandler: OrientationHandler, - private val preferences: SettingsHandler, + private val preferences: ISettingsHandler, private val predictor: Predictor, private val dataRepository: IDataRepository, private val dataReporter: DataReporter @@ -93,8 +93,8 @@ class RadarViewModel @Inject constructor( while (isActive) { val satPos = predictor.getSatPos(satPass.satellite, stationPos, Date().time) if (preferences.getRotatorEnabled()) { - val server = preferences.getRotatorServer().first - val port = preferences.getRotatorServer().second + val server = preferences.getRotatorServer() + val port = preferences.getRotatorPort().toInt() val azimuth = Math.toDegrees(satPos.azimuth).round(1) val elevation = Math.toDegrees(satPos.elevation).round(1) dataReporter.reportRotation(server, port, azimuth, elevation) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsFragment.kt index 432df3ec..6783dcc3 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsFragment.kt @@ -37,17 +37,12 @@ import com.rtbishop.look4sat.R import com.rtbishop.look4sat.databinding.FragmentSettingsBinding import com.rtbishop.look4sat.domain.model.DataState import com.rtbishop.look4sat.domain.predict.GeoPos -import com.rtbishop.look4sat.framework.SettingsHandler import com.rtbishop.look4sat.presentation.* import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject @AndroidEntryPoint class SettingsFragment : Fragment(R.layout.fragment_settings) { - @Inject - lateinit var preferences: SettingsHandler - private val viewModel: SettingsViewModel by viewModels() private val locationFine = Manifest.permission.ACCESS_FINE_LOCATION private val locationCoarse = Manifest.permission.ACCESS_COARSE_LOCATION @@ -125,37 +120,37 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) { private fun setupTrackingCard(binding: FragmentSettingsBinding) { binding.prefsTracking.trackingSwitch.apply { - isChecked = preferences.getRotatorEnabled() + isChecked = viewModel.getRotatorEnabled() binding.prefsTracking.trackingIp.isEnabled = isChecked - binding.prefsTracking.trackingIpEdit.setText(preferences.getRotatorIp()) + binding.prefsTracking.trackingIpEdit.setText(viewModel.getRotatorServer()) binding.prefsTracking.trackingPort.isEnabled = isChecked - binding.prefsTracking.trackingPortEdit.setText(preferences.getRotatorPort()) + binding.prefsTracking.trackingPortEdit.setText(viewModel.getRotatorPort()) setOnCheckedChangeListener { _, isChecked -> - preferences.setRotatorEnabled(isChecked) + viewModel.setRotatorEnabled(isChecked) binding.prefsTracking.trackingIp.isEnabled = isChecked binding.prefsTracking.trackingPort.isEnabled = isChecked } } binding.prefsTracking.trackingIpEdit.doOnTextChanged { text, _, _, _ -> - if (text.toString().isValidIPv4()) preferences.setRotatorIp(text.toString()) + if (text.toString().isValidIPv4()) viewModel.setRotatorServer(text.toString()) } binding.prefsTracking.trackingPortEdit.doOnTextChanged { text, _, _, _ -> - if (text.toString().isValidPort()) preferences.setRotatorPort(text.toString()) + if (text.toString().isValidPort()) viewModel.setRotatorPort(text.toString()) } } private fun setupOtherCard(binding: FragmentSettingsBinding) { binding.prefsOther.otherSwitchUtc.apply { - isChecked = preferences.getUseUTC() - setOnCheckedChangeListener { _, isChecked -> preferences.setUseUTC(isChecked) } + isChecked = viewModel.getUseUTC() + setOnCheckedChangeListener { _, isChecked -> viewModel.setUseUTC(isChecked) } } binding.prefsOther.otherSwitchSweep.apply { - isChecked = preferences.getShowSweep() - setOnCheckedChangeListener { _, isChecked -> preferences.setShowSweep(isChecked) } + isChecked = viewModel.getShowSweep() + setOnCheckedChangeListener { _, isChecked -> viewModel.setShowSweep(isChecked) } } binding.prefsOther.otherSwitchSensors.apply { - isChecked = preferences.getUseCompass() - setOnCheckedChangeListener { _, isChecked -> preferences.setUseCompass(isChecked) } + isChecked = viewModel.getUseCompass() + setOnCheckedChangeListener { _, isChecked -> viewModel.setUseCompass(isChecked) } } } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsViewModel.kt index d3bf915b..8ae0de3b 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsViewModel.kt @@ -4,11 +4,11 @@ import android.content.ContentResolver import android.net.Uri import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.rtbishop.look4sat.data.ISettingsHandler import com.rtbishop.look4sat.domain.IDataRepository import com.rtbishop.look4sat.domain.ILocationHandler import com.rtbishop.look4sat.domain.model.DataState import com.rtbishop.look4sat.domain.predict.GeoPos -import com.rtbishop.look4sat.framework.SettingsHandler import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.flow.SharedFlow @@ -18,8 +18,8 @@ import javax.inject.Inject @HiltViewModel class SettingsViewModel @Inject constructor( private val resolver: ContentResolver, - private val settingsHandler: SettingsHandler, - private val dataRepository: IDataRepository, + private val settings: ISettingsHandler, + private val repository: IDataRepository, private val locationHandler: ILocationHandler ) : ViewModel(), ILocationHandler { @@ -31,17 +31,41 @@ class SettingsViewModel @Inject constructor( viewModelScope.launch(exceptionHandler) { @Suppress("BlockingMethodInNonBlockingContext") resolver.openInputStream(uri)?.use { fileUri -> - dataRepository.updateDataFromFile(fileUri) + repository.updateDataFromFile(fileUri) } } } fun updateDataFromWeb(sources: List) { viewModelScope.launch(exceptionHandler) { - dataRepository.updateDataFromWeb(sources) + repository.updateDataFromWeb(sources) } } + fun getUseUTC(): Boolean = settings.getUseUTC() + + fun setUseUTC(value: Boolean) = settings.setUseUTC(value) + + fun getUseCompass(): Boolean = settings.getUseCompass() + + fun setUseCompass(value: Boolean) = settings.setUseCompass(value) + + fun getShowSweep(): Boolean = settings.getShowSweep() + + fun setShowSweep(value: Boolean) = settings.setShowSweep(value) + + fun getRotatorEnabled(): Boolean = settings.getRotatorEnabled() + + fun setRotatorEnabled(value: Boolean) = settings.setRotatorEnabled(value) + + fun getRotatorServer(): String = settings.getRotatorServer() + + fun setRotatorServer(value: String) = settings.setRotatorServer(value) + + fun getRotatorPort(): String = settings.getRotatorPort() + + fun setRotatorPort(value: String) = settings.setRotatorPort(value) + override val stationPosition: SharedFlow> = locationHandler.stationPosition override fun getStationPosition(): GeoPos = locationHandler.getStationPosition() diff --git a/app/src/main/res/layout/dialog_sources.xml b/app/src/main/res/layout/dialog_sources.xml index 857d5d93..fdcbf517 100644 --- a/app/src/main/res/layout/dialog_sources.xml +++ b/app/src/main/res/layout/dialog_sources.xml @@ -35,11 +35,11 @@ android:layout_height="48dp" android:backgroundTint="@color/surfaceButton" android:src="@drawable/ic_add" - android:tint="@color/themeAccent" app:layout_constraintBottom_toBottomOf="@+id/sources_warning" app:layout_constraintDimensionRatio="h,1:1" app:layout_constraintEnd_toEndOf="@+id/sources_recycler" - app:layout_constraintTop_toTopOf="@+id/sources_title" /> + app:layout_constraintTop_toTopOf="@+id/sources_title" + app:tint="@color/themeAccent" /> + app:layout_constraintStart_toStartOf="parent" + app:tint="@color/themeLight" /> + app:layout_constraintTop_toTopOf="@+id/map_btn_prev" + app:tint="@color/themeLight" /> #121212 #B3181818 @android:color/transparent - @color/surfaceButton - @color/themeLight + + diff --git a/core/src/main/java/com/rtbishop/look4sat/data/ISettingsHandler.kt b/core/src/main/java/com/rtbishop/look4sat/data/ISettingsHandler.kt index 3c2b130e..c5850c89 100644 --- a/core/src/main/java/com/rtbishop/look4sat/data/ISettingsHandler.kt +++ b/core/src/main/java/com/rtbishop/look4sat/data/ISettingsHandler.kt @@ -17,6 +17,8 @@ */ package com.rtbishop.look4sat.data +import com.rtbishop.look4sat.domain.predict.GeoPos + interface ISettingsHandler { val defaultSources: List @@ -29,6 +31,46 @@ interface ISettingsHandler { val transmittersSource: String get() = "https://db.satnogs.org/api/transmitters/?format=json" + fun loadStationPosition(): GeoPos + + fun saveStationPosition(latitude: Double, longitude: Double) + + fun getHoursAhead(): Int + + fun setHoursAhead(hoursAhead: Int) + + fun getMinElevation(): Double + + fun setMinElevation(minElevation: Double) + + fun getUseUTC(): Boolean + + fun setUseUTC(value: Boolean) + + fun getUseCompass(): Boolean + + fun setUseCompass(value: Boolean) + + fun getShowSweep(): Boolean + + fun setShowSweep(value: Boolean) + + fun saveModesSelection(modes: List) + + fun loadModesSelection(): List + + fun getRotatorEnabled(): Boolean + + fun setRotatorEnabled(value: Boolean) + + fun getRotatorServer(): String + + fun setRotatorServer(value: String) + + fun getRotatorPort(): String + + fun setRotatorPort(value: String) + fun loadDataSources(): List fun saveDataSources(sources: List)