From 7d3d746c4d8fa79107c66e222a71d29e55c33536 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sun, 9 Jan 2022 12:53:17 +0000 Subject: [PATCH] Further changes to SettingsFragment.kt --- .../look4sat/framework/LocationProvider.kt | 26 ++++---- .../settingsScreen/SettingsFragment.kt | 59 ++++++++++++------- app/src/main/res/drawable/ic_update_web.xml | 6 +- .../main/res/layout/card_prefs_location.xml | 42 ++++++++++++- app/src/main/res/layout/card_prefs_other.xml | 16 ++--- .../main/res/layout/card_prefs_tracking.xml | 11 ++-- app/src/main/res/layout/card_prefs_update.xml | 40 ++++++++----- .../main/res/layout/card_prefs_warranty.xml | 14 ++--- app/src/main/res/layout/fragment_settings.xml | 30 +++++----- app/src/main/res/values-ru/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/values/styles.xml | 11 ++++ .../look4sat/domain/LocationHandler.kt | 4 +- 13 files changed, 164 insertions(+), 99 deletions(-) diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/LocationProvider.kt b/app/src/main/java/com/rtbishop/look4sat/framework/LocationProvider.kt index 199636a4..32ec966d 100644 --- a/app/src/main/java/com/rtbishop/look4sat/framework/LocationProvider.kt +++ b/app/src/main/java/com/rtbishop/look4sat/framework/LocationProvider.kt @@ -68,29 +68,29 @@ class LocationProvider @Inject constructor( } else _stationPosition.tryEmit(DataState.Error(context.getString(R.string.pref_pos_gps_null))) } - override fun setPositionFromLocation() { + override fun setPositionFromGps() { val result = ContextCompat.checkSelfPermission(context, locationFine) - if (manager.isProviderEnabled(providerDef) && result == PackageManager.PERMISSION_GRANTED) { + if (manager.isProviderEnabled(providerGps) && result == PackageManager.PERMISSION_GRANTED) { val location = manager.getLastKnownLocation(providerDef) if (location != null) { setStationPosition(location.latitude, location.longitude) - } else setPositionFromGps() + } else { + _stationPosition.tryEmit(DataState.Loading) + manager.requestLocationUpdates(providerGps, 0L, 0f, this) + } } else _stationPosition.tryEmit(DataState.Error(context.getString(R.string.pref_pos_gps_null))) } override fun setPositionFromNet() { val result = ContextCompat.checkSelfPermission(context, locationCoarse) if (manager.isProviderEnabled(providerNet) && result == PackageManager.PERMISSION_GRANTED) { - _stationPosition.tryEmit(DataState.Loading) - manager.requestLocationUpdates(providerNet, 0L, 0f, this) - } else _stationPosition.tryEmit(DataState.Error(context.getString(R.string.pref_pos_gps_null))) - } - - override fun setPositionFromGps() { - val result = ContextCompat.checkSelfPermission(context, locationFine) - if (manager.isProviderEnabled(providerGps) && result == PackageManager.PERMISSION_GRANTED) { - _stationPosition.tryEmit(DataState.Loading) - manager.requestLocationUpdates(providerGps, 0L, 0f, this) + val location = manager.getLastKnownLocation(providerDef) + if (location != null) { + setStationPosition(location.latitude, location.longitude) + } else { + _stationPosition.tryEmit(DataState.Loading) + manager.requestLocationUpdates(providerNet, 0L, 0f, this) + } } else _stationPosition.tryEmit(DataState.Error(context.getString(R.string.pref_pos_gps_null))) } 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 e7cb082a..e4975ec8 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 @@ -25,6 +25,7 @@ import android.os.Bundle import android.text.method.LinkMovementMethod import android.view.View import android.widget.EditText +import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog import androidx.core.widget.doOnTextChanged @@ -32,7 +33,6 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.asLiveData import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController -import com.google.android.material.snackbar.Snackbar import com.rtbishop.look4sat.BuildConfig import com.rtbishop.look4sat.R import com.rtbishop.look4sat.databinding.FragmentSettingsBinding @@ -65,9 +65,9 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) { private val locationContract = ActivityResultContracts.RequestMultiplePermissions() private val locationRequest = registerForActivityResult(locationContract) { permissions -> when { - permissions[locationFine] == true -> locationHandler.setPositionFromLocation() + permissions[locationFine] == true -> locationHandler.setPositionFromGps() permissions[locationCoarse] == true -> locationHandler.setPositionFromNet() - else -> showSnack(getString(R.string.pref_pos_gps_error)) + else -> showToast(getString(R.string.pref_pos_gps_error)) } } private val contentContract = ActivityResultContracts.GetContent() @@ -89,7 +89,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) { setupOtherCard(settingsBinding) setupWarrantyCard(settingsBinding) locationHandler.stationPosition.asLiveData().observe(viewLifecycleOwner) { stationPos -> - stationPos?.let { handleStationPosition(it) } + stationPos?.let { handleStationPosition(it, settingsBinding) } } } @@ -107,17 +107,8 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) { } } - private fun setupDataCard(binding: FragmentSettingsBinding) { - binding.prefsData.updateBtnFile.setOnClickListener { contentRequest.launch("*/*") } - binding.prefsData.updateBtnWeb.setOnClickListener { - findNavController().navigateSafe(R.id.action_prefs_to_sources) - } - getNavResult>(R.id.nav_prefs, "sources") { sources -> - lifecycleScope.launchWhenResumed { dataRepository.updateDataFromWeb(sources) } - } - } - private fun setupLocationCard(binding: FragmentSettingsBinding) { + setPositionText(locationHandler.getStationPosition(), binding) binding.prefsLocation.locationBtnGps.setOnClickListener { locationRequest.launch(arrayOf(locationFine, locationCoarse)) } @@ -136,6 +127,16 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) { } } + private fun setupDataCard(binding: FragmentSettingsBinding) { + binding.prefsData.updateBtnFile.setOnClickListener { contentRequest.launch("*/*") } + binding.prefsData.updateBtnWeb.setOnClickListener { + findNavController().navigateSafe(R.id.action_prefs_to_sources) + } + getNavResult>(R.id.nav_prefs, "sources") { sources -> + lifecycleScope.launchWhenResumed { dataRepository.updateDataFromWeb(sources) } + } + } + private fun setupTrackingCard(binding: FragmentSettingsBinding) { binding.prefsTracking.trackingSwitch.apply { isChecked = preferences.getRotatorEnabled() @@ -177,16 +178,32 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) { binding.prefsWarranty.warrantyLicense.movementMethod = LinkMovementMethod.getInstance() } - private fun handleStationPosition(position: DataState) { - when (position) { - is DataState.Success -> showSnack(getString(R.string.pref_pos_success)) - is DataState.Error -> showSnack(position.message.toString()) - DataState.Loading -> showSnack("Fetching position") + private fun setPositionText(geoPos: GeoPos, binding: FragmentSettingsBinding) { + val latFormat = getString(R.string.location_lat) + val lonFormat = getString(R.string.location_lon) + binding.prefsLocation.locationLat.text = String.format(latFormat, geoPos.latitude) + binding.prefsLocation.locationLon.text = String.format(lonFormat, geoPos.longitude) + } + + private fun handleStationPosition(pos: DataState, binding: FragmentSettingsBinding) { + when (pos) { + is DataState.Success -> { + setPositionText(pos.data, binding) + binding.prefsLocation.locationProgress.isIndeterminate = false + showToast(getString(R.string.pref_pos_success)) + } + is DataState.Error -> { + binding.prefsLocation.locationProgress.isIndeterminate = false + showToast(pos.message.toString()) + } + DataState.Loading -> { + binding.prefsLocation.locationProgress.isIndeterminate = true + } } } - private fun showSnack(message: String) { - Snackbar.make(requireView(), message, Snackbar.LENGTH_SHORT).show() + private fun showToast(message: String) { + Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() } private fun gotoUrl(url: String) { diff --git a/app/src/main/res/drawable/ic_update_web.xml b/app/src/main/res/drawable/ic_update_web.xml index 95e5be7c..0bf729e7 100644 --- a/app/src/main/res/drawable/ic_update_web.xml +++ b/app/src/main/res/drawable/ic_update_web.xml @@ -3,7 +3,7 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - + diff --git a/app/src/main/res/layout/card_prefs_location.xml b/app/src/main/res/layout/card_prefs_location.xml index 3e9f6eab..351d7bbb 100644 --- a/app/src/main/res/layout/card_prefs_location.xml +++ b/app/src/main/res/layout/card_prefs_location.xml @@ -6,15 +6,51 @@ + + + + + +