Swapped SettingsHandler.kt class for its interface

This commit is contained in:
Arty Bishop committed 2022-02-06 19:22:39 +00:00
1 parent 27156b5070
commit 61cbc212b5
18 files changed
+152 -107

No files matched your search

@@ -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
@@ -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<String>) {
prefs.edit { putStringSet(keyModes, modes.toSet()) }
}
fun setSetupDone() {
prefs.edit { putBoolean(keyInitialSetup, true) }
override fun loadModesSelection(): List<String> {
return prefs.getStringSet(keyModes, null)?.toList()?.sorted() ?: emptyList()
}
fun saveModesSelection(modes: List<String>) {
val modesSet = modes.toSet()
prefs.edit {
putStringSet(keyModes, modesSet)
}
}
fun loadModesSelection(): List<String> {
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<String, Int> {
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) }
}
@@ -70,7 +70,7 @@ object CoreModule {
@Singleton
fun provideLocationHandler(
@ApplicationContext context: Context,
settingsHandler: SettingsHandler
settingsHandler: ISettingsHandler
): ILocationHandler {
return LocationHandler(context, settingsHandler)
}
@@ -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() {
@@ -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 {
@@ -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()
@@ -78,6 +78,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
handleNewPasses(passesResult, adapter, binding)
}
getNavResult<Pair<Int, Double>>(R.id.nav_passes, "prefs") { prefs ->
passesViewModel.saveCalculationPrefs(prefs.first, prefs.second)
passesViewModel.forceCalculation(prefs.first, prefs.second)
}
}
@@ -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)
@@ -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<DataState<List<SatPass>>>()
@@ -42,17 +42,6 @@ class PassesViewModel @Inject constructor(
val passes: LiveData<DataState<List<SatPass>>> = _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<SatPass>) = withContext(Dispatchers.Default) {
var currentPasses = passes
while (isActive) {
@@ -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
@@ -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)
@@ -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) }
}
}
@@ -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<String>) {
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<DataState<GeoPos>> = locationHandler.stationPosition
override fun getStationPosition(): GeoPos = locationHandler.getStationPosition()
+2 -2
View File
@@ -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" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/sources_recycler"
+5 -3
View File
@@ -78,7 +78,7 @@
<com.google.android.material.button.MaterialButton
android:id="@+id/entries_select_all"
style="@style/Widget.AppCompat.Button.Borderless.Colored"
style="@style/Widget.MaterialComponents.Button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
@@ -87,6 +87,7 @@
android:backgroundTint="@color/surfaceCard"
android:text="@string/entries_select_all"
android:textAllCaps="false"
android:textColor="@color/themeAccent"
android:textSize="@dimen/text_size_medium"
app:cornerRadius="@dimen/card_corner_high"
app:layout_constraintBottom_toBottomOf="parent"
@@ -96,13 +97,14 @@
<com.google.android.material.button.MaterialButton
android:id="@+id/entries_accept"
style="@style/Widget.AppCompat.Button.Borderless.Colored"
style="@style/Widget.MaterialComponents.Button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="8dp"
android:backgroundTint="@color/surfaceCard"
android:backgroundTint="@color/themeAccent"
android:text="@string/btn_accept"
android:textColor="@color/surfaceBg"
android:textAllCaps="false"
android:textSize="@dimen/text_size_medium"
app:cornerRadius="@dimen/card_corner_high"
+4 -4
View File
@@ -156,9 +156,9 @@
android:backgroundTint="@color/surfaceToolbar"
android:rotation="180"
android:src="@drawable/ic_arrow"
android:tint="@color/themeLight"
app:layout_constraintBottom_toTopOf="@+id/map_card_info"
app:layout_constraintStart_toStartOf="parent" />
app:layout_constraintStart_toStartOf="parent"
app:tint="@color/themeLight" />
<ImageButton
android:id="@+id/map_btn_next"
@@ -167,10 +167,10 @@
android:layout_marginEnd="12dp"
android:backgroundTint="@color/surfaceToolbar"
android:src="@drawable/ic_arrow"
android:tint="@color/themeLight"
app:layout_constraintBottom_toBottomOf="@+id/map_btn_prev"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/map_btn_prev" />
app:layout_constraintTop_toTopOf="@+id/map_btn_prev"
app:tint="@color/themeLight" />
<TextView
android:id="@+id/map_copyright"
+2 -2
View File
@@ -15,6 +15,6 @@
<color name="surfaceBg">#121212</color>
<color name="mapInfoLayout">#B3181818</color>
<color name="transparent">@android:color/transparent</color>
<color name="mtrl_textinput_disabled_color">@color/surfaceButton</color>
<color name="mtrl_textinput_default_box_stroke_color">@color/themeLight</color>
<!-- <color name="mtrl_textinput_disabled_color">@color/surfaceButton</color>-->
<!-- <color name="mtrl_textinput_default_box_stroke_color">@color/themeLight</color>-->
</resources>
@@ -17,6 +17,8 @@
*/
package com.rtbishop.look4sat.data
import com.rtbishop.look4sat.domain.predict.GeoPos
interface ISettingsHandler {
val defaultSources: List<String>
@@ -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<String>)
fun loadModesSelection(): List<String>
fun getRotatorEnabled(): Boolean
fun setRotatorEnabled(value: Boolean)
fun getRotatorServer(): String
fun setRotatorServer(value: String)
fun getRotatorPort(): String
fun setRotatorPort(value: String)
fun loadDataSources(): List<String>
fun saveDataSources(sources: List<String>)