Changes to location and settings handlers

This commit is contained in:
Arty Bishop committed 2022-02-19 12:13:02 +00:00
1 parent ffd1fc1551
commit 72f78e5c6b
7 files changed
+64 -36

No files matched your search

@@ -29,9 +29,9 @@ 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.QthConverter.round
import com.rtbishop.look4sat.domain.model.DataState
import com.rtbishop.look4sat.domain.predict.GeoPos
import com.rtbishop.look4sat.presentation.round
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -51,10 +51,13 @@ class LocationHandler @Inject constructor(
private val locationCoarse = Manifest.permission.ACCESS_COARSE_LOCATION
private val locationFine = Manifest.permission.ACCESS_FINE_LOCATION
private val _stationPosition = MutableStateFlow<DataState<GeoPos>>(DataState.Handled)
private var currentLocator = settingsHandler.loadStationLocator()
private var currentPosition = settingsHandler.loadStationPosition()
override val stationPosition: StateFlow<DataState<GeoPos>> = _stationPosition
override fun getStationLocator(): String = currentLocator
override fun getStationPosition(): GeoPos = currentPosition
override fun setStationPosition(latitude: Double, longitude: Double) {
@@ -62,11 +65,17 @@ class LocationHandler @Inject constructor(
val tempLon = if (longitude > 180.0) longitude - 180 else longitude
val newLat = latitude.round(4)
val newLon = tempLon.round(4)
currentPosition = GeoPos(newLat, newLon)
settingsHandler.saveStationPosition(newLat, newLon)
_stationPosition.value = DataState.Success(currentPosition)
} else _stationPosition.value =
DataState.Error(context.getString(R.string.pref_pos_manual_error))
QthConverter.positionToQth(newLat, newLon)?.let { locator ->
currentLocator = locator
currentPosition = GeoPos(newLat, newLon)
settingsHandler.saveStationLocator(locator)
settingsHandler.saveStationPosition(currentPosition)
_stationPosition.value = DataState.Success(currentPosition)
}
} else {
_stationPosition.value =
DataState.Error(context.getString(R.string.pref_pos_manual_error))
}
}
override fun setPositionFromGps() {
@@ -79,8 +88,9 @@ class LocationHandler @Inject constructor(
_stationPosition.value = DataState.Loading
manager.requestLocationUpdates(providerGps, 0L, 0f, this)
}
} else _stationPosition.value =
DataState.Error(context.getString(R.string.pref_pos_gps_null))
} else {
_stationPosition.value = DataState.Error(context.getString(R.string.pref_pos_gps_null))
}
}
override fun setPositionFromNet() {
@@ -93,16 +103,22 @@ class LocationHandler @Inject constructor(
_stationPosition.value = DataState.Loading
manager.requestLocationUpdates(providerNet, 0L, 0f, this)
}
} else _stationPosition.value =
DataState.Error(context.getString(R.string.pref_pos_gps_null))
} else {
_stationPosition.value = DataState.Error(context.getString(R.string.pref_pos_gps_null))
}
}
override fun setPositionFromQth(qthString: String) {
val position = QthConverter.qthToPosition(qthString)
override fun setPositionFromQth(locator: String) {
val position = QthConverter.qthToPosition(locator)
if (position != null) {
setStationPosition(position.latitude, position.longitude)
} else _stationPosition.value =
DataState.Error(context.getString(R.string.pref_pos_qth_error))
currentLocator = locator
currentPosition = position
settingsHandler.saveStationLocator(locator)
settingsHandler.saveStationPosition(currentPosition)
_stationPosition.value = DataState.Success(currentPosition)
} else {
_stationPosition.value = DataState.Error(context.getString(R.string.pref_pos_qth_error))
}
}
override fun setPositionHandled() {
@@ -42,11 +42,18 @@ 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 keyLocator = "stationQTH"
const val keySelection = "selection"
}
override fun loadStationLocator(): String {
return prefs.getString(keyLocator, null) ?: "null"
}
override fun saveStationLocator(locator: String) {
prefs.edit { putString(keyLocator, locator) }
}
override fun loadStationPosition(): GeoPos {
val defaultSP = "0.0"
val latitude = prefs.getString(keyLatitude, null) ?: defaultSP
@@ -54,10 +61,10 @@ class SettingsHandler @Inject constructor(private val prefs: SharedPreferences)
return GeoPos(latitude.toDouble(), longitude.toDouble())
}
override fun saveStationPosition(latitude: Double, longitude: Double) {
override fun saveStationPosition(position: GeoPos) {
prefs.edit {
putString(keyLatitude, latitude.toString())
putString(keyLongitude, longitude.toString())
putString(keyLatitude, position.latitude.toString())
putString(keyLongitude, position.longitude.toString())
}
}
@@ -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.DialogLocationBinding
import com.rtbishop.look4sat.domain.ILocationHandler
import com.rtbishop.look4sat.presentation.setNavResult
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@@ -17,7 +17,7 @@ import javax.inject.Inject
class LocationDialog : AppCompatDialogFragment() {
@Inject
lateinit var locationHandler: ILocationHandler
lateinit var preferences: ISettingsHandler
override fun onCreateView(inflater: LayoutInflater, group: ViewGroup?, state: Bundle?): View? {
return inflater.inflate(R.layout.dialog_location, group, false)
@@ -31,7 +31,7 @@ class LocationDialog : AppCompatDialogFragment() {
(resources.displayMetrics.widthPixels * 0.94).toInt(),
WindowManager.LayoutParams.WRAP_CONTENT
)
val location = locationHandler.getStationPosition()
val location = preferences.loadStationPosition()
locationLatEdit.setText(location.latitude.toString())
locationLonEdit.setText(location.longitude.toString())
locationPosBtn.setOnClickListener {
@@ -31,7 +31,7 @@ class LocatorDialog : AppCompatDialogFragment() {
(resources.displayMetrics.widthPixels * 0.94).toInt(),
WindowManager.LayoutParams.WRAP_CONTENT
)
// locatorEdit.setText(preferences.getQthLocator())
locatorEdit.setText(preferences.loadStationLocator())
locatorPosBtn.setOnClickListener {
setNavResult("locator", locatorEdit.text.toString())
dismiss()