Restored manual location input functionality #40

This commit is contained in:
Arty Bishop committed 2022-02-19 12:13:01 +00:00
1 parent 9d6dbc8d31
commit ffd1fc1551
10 files changed
+196 -10

No files matched your search

@@ -59,13 +59,14 @@ class LocationHandler @Inject constructor(
override fun setStationPosition(latitude: Double, longitude: Double) {
if (QthConverter.isValidPosition(latitude, longitude)) {
val tempLon = if (longitude > 180.0) longitude - 180 else longitude
val newLat = latitude.round(4)
val newLon = longitude.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_gps_null))
DataState.Error(context.getString(R.string.pref_pos_manual_error))
}
override fun setPositionFromGps() {
@@ -0,0 +1,54 @@
package com.rtbishop.look4sat.presentation.settingsScreen
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.appcompat.app.AppCompatDialogFragment
import com.rtbishop.look4sat.R
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
@AndroidEntryPoint
class LocationDialog : AppCompatDialogFragment() {
@Inject
lateinit var locationHandler: ILocationHandler
override fun onCreateView(inflater: LayoutInflater, group: ViewGroup?, state: Bundle?): View? {
return inflater.inflate(R.layout.dialog_location, group, false)
}
override fun onViewCreated(view: View, state: Bundle?) {
super.onViewCreated(view, state)
DialogLocationBinding.bind(view).run {
dialog?.window?.setBackgroundDrawableResource(R.color.transparent)
dialog?.window?.setLayout(
(resources.displayMetrics.widthPixels * 0.94).toInt(),
WindowManager.LayoutParams.WRAP_CONTENT
)
val location = locationHandler.getStationPosition()
locationLatEdit.setText(location.latitude.toString())
locationLonEdit.setText(location.longitude.toString())
locationPosBtn.setOnClickListener {
val latitude = try {
locationLatEdit.text.toString().toDouble()
} catch (exception: Exception) {
180.0
}
val longitude = try {
locationLonEdit.text.toString().toDouble()
} catch (exception: Exception) {
400.0
}
setNavResult("location", Pair(latitude, longitude))
dismiss()
}
locationNegBtn.setOnClickListener { dismiss() }
}
}
}
@@ -111,10 +111,17 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
binding.settingsLocation.locationBtnGps.setOnClickListener {
locationRequest.launch(arrayOf(locationFine, locationCoarse))
}
binding.settingsLocation.locationBtnManual.setOnClickListener {
val action = SettingsFragmentDirections.actionPrefsToLocation()
findNavController().navigate(action)
}
binding.settingsLocation.locationBtnQth.setOnClickListener {
val action = SettingsFragmentDirections.actionPrefsToLocator()
findNavController().navigate(action)
}
getNavResult<Pair<Double, Double>>(R.id.nav_settings, "location") { location ->
viewModel.setStationPosition(location.first, location.second)
}
getNavResult<String>(R.id.nav_settings, "locator") { locator ->
viewModel.setPositionFromQth(locator)
}
@@ -61,6 +61,8 @@ class SettingsViewModel @Inject constructor(
fun getStationPosition(): GeoPos = locationHandler.getStationPosition()
fun setStationPosition(lat: Double, lon: Double) = locationHandler.setStationPosition(lat, lon)
fun setPositionFromGps() = locationHandler.setPositionFromGps()
fun setPositionFromNet() = locationHandler.setPositionFromNet()