mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Swapped SettingsHandler.kt class for its interface
This commit is contained in:
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() {
|
||||
|
||||
|
||||
+2
-2
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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)
|
||||
|
||||
+7
-13
@@ -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)
|
||||
|
||||
+12
-17
@@ -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) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+29
-5
@@ -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()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
Reference in new issue
Block a user