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 a26f1e87..28b4f7dd 100644 --- a/app/src/main/java/com/rtbishop/look4sat/framework/LocationHandler.kt +++ b/app/src/main/java/com/rtbishop/look4sat/framework/LocationHandler.kt @@ -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() { diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/LocationDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/LocationDialog.kt new file mode 100644 index 00000000..f5fcf277 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/LocationDialog.kt @@ -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() } + } + } +} 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 9c0507e8..59bad8bb 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 @@ -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>(R.id.nav_settings, "location") { location -> + viewModel.setStationPosition(location.first, location.second) + } getNavResult(R.id.nav_settings, "locator") { locator -> viewModel.setPositionFromQth(locator) } 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 5bf0a81b..213e3fb9 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 @@ -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() diff --git a/app/src/main/res/layout/card_prefs_location.xml b/app/src/main/res/layout/card_prefs_location.xml index 5e0db25b..16a9d95f 100644 --- a/app/src/main/res/layout/card_prefs_location.xml +++ b/app/src/main/res/layout/card_prefs_location.xml @@ -59,30 +59,41 @@ style="@style/NormalButton" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="4dp" - android:layout_marginTop="4dp" - android:layout_marginBottom="4dp" + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" android:drawableStart="@drawable/ic_gps" android:text="@string/location_gps" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/location_btn_qth" + app:layout_constraintEnd_toStartOf="@+id/location_btn_manual" app:layout_constraintHorizontal_bias="0.5" - app:layout_constraintHorizontal_chainStyle="spread_inside" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/location_lat" /> +