From e06b1bcb1138c539250696fea9614b9ab763b9e9 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sun, 25 Oct 2020 21:32:06 +0000 Subject: [PATCH] Cleaned up preference.xml, added setPositionFromGPS button --- app/build.gradle | 25 +++-- .../com/rtbishop/look4sat/SharedViewModel.kt | 2 - .../com/rtbishop/look4sat/di/UtilityModule.kt | 6 -- .../look4sat/ui/fragments/PrefsFragment.kt | 93 +++++++------------ .../rtbishop/look4sat/utility/PrefsManager.kt | 50 ++++------ app/src/main/res/layout/item_trans.xml | 6 +- app/src/main/res/values-ru/strings.xml | 12 +-- app/src/main/res/values/strings.xml | 12 +-- app/src/main/res/xml/preference.xml | 24 +---- build.gradle | 1 + 10 files changed, 88 insertions(+), 143 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 90af9684..3f2aff26 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,23 +17,27 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -apply plugin: "com.android.application" -apply plugin: "kotlin-android" -apply plugin: "kotlin-kapt" -apply plugin: "kotlin-android-extensions" -apply plugin: "dagger.hilt.android.plugin" +plugins { + id "com.android.application" + id "kotlin-android" + id "kotlin-kapt" + id "kotlin-android-extensions" + id "dagger.hilt.android.plugin" +} android { compileSdkVersion 30 buildToolsVersion "30.0.2" + defaultConfig { applicationId "com.rtbishop.look4sat" minSdkVersion 21 targetSdkVersion 30 versionCode 18 - versionName '1.4.8' + versionName "1.4.8" resConfigs "en", "ru" } + buildTypes { release { postprocessing { @@ -44,14 +48,15 @@ android { } } } + configurations { all { - exclude module: 'commons-logging' + exclude module: "commons-logging" } } compileOptions { - sourceCompatibility = 1.8 - targetCompatibility = 1.8 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" @@ -81,4 +86,6 @@ dependencies { implementation "org.osmdroid:osmdroid-android:$osmdroid_version" implementation "com.github.davidmoten:predict4java:$predict4java_version" + + testImplementation "junit:junit:$junit_version" } diff --git a/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt index 2841b21f..d371c0b2 100644 --- a/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt @@ -35,9 +35,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.util.* -import javax.inject.Singleton -@Singleton class SharedViewModel @ViewModelInject constructor( private val prefsManager: PrefsManager, private val sourcesRepo: SourcesRepo, diff --git a/app/src/main/java/com/rtbishop/look4sat/di/UtilityModule.kt b/app/src/main/java/com/rtbishop/look4sat/di/UtilityModule.kt index 41e88187..f0463d0d 100644 --- a/app/src/main/java/com/rtbishop/look4sat/di/UtilityModule.kt +++ b/app/src/main/java/com/rtbishop/look4sat/di/UtilityModule.kt @@ -23,7 +23,6 @@ import android.content.Context import android.content.SharedPreferences import android.location.LocationManager import androidx.preference.PreferenceManager -import com.rtbishop.look4sat.utility.PrefsManager import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -43,9 +42,4 @@ object UtilityModule { fun getLocationManager(@ActivityContext context: Context): LocationManager { return context.getSystemService(Context.LOCATION_SERVICE) as LocationManager } - - @Provides - fun getPrefsManager(prefs: SharedPreferences, locationManager: LocationManager): PrefsManager { - return PrefsManager(prefs, locationManager) - } } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt index a5d3fcaa..6d23ab25 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt @@ -19,81 +19,56 @@ package com.rtbishop.look4sat.ui.fragments -import android.content.SharedPreferences +import android.location.LocationManager import android.os.Bundle -import android.text.InputType -import androidx.preference.EditTextPreference +import android.view.View +import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import com.rtbishop.look4sat.R import com.rtbishop.look4sat.utility.PrefsManager +import com.rtbishop.look4sat.utility.Utilities.round import com.rtbishop.look4sat.utility.Utilities.snack import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint -class PrefsFragment : PreferenceFragmentCompat(), - SharedPreferences.OnSharedPreferenceChangeListener { +class PrefsFragment : PreferenceFragmentCompat() { + + @Inject + lateinit var locationManager: LocationManager + + @Inject + lateinit var prefsManager: PrefsManager override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preference, rootKey) + } - findPreference(PrefsManager.keyLatitude)?.apply { - setOnBindEditTextListener { - it.inputType = InputType.TYPE_CLASS_NUMBER or - InputType.TYPE_NUMBER_FLAG_DECIMAL or - InputType.TYPE_NUMBER_FLAG_SIGNED - } - setOnPreferenceChangeListener { _, newValue -> - val valueStr = newValue.toString() - if (valueStr.isEmpty() || valueStr == "-" || valueStr.toDouble() < -90.0 || valueStr.toDouble() > 90.0) { - getString(R.string.pref_lat_input_error).snack(requireView()) - return@setOnPreferenceChangeListener false - } - return@setOnPreferenceChangeListener true - } - } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) - findPreference(PrefsManager.keyLongitude)?.apply { - setOnBindEditTextListener { - it.inputType = InputType.TYPE_CLASS_NUMBER or - InputType.TYPE_NUMBER_FLAG_DECIMAL or - InputType.TYPE_NUMBER_FLAG_SIGNED - } - setOnPreferenceChangeListener { _, newValue -> - val valueStr = newValue.toString() - if (valueStr.isEmpty() || valueStr == "-" || valueStr.toDouble() < -180.0 || valueStr.toDouble() > 180.0) { - getString(R.string.pref_lon_input_error).snack(requireView()) - return@setOnPreferenceChangeListener false - } - return@setOnPreferenceChangeListener true - } - } - - findPreference(PrefsManager.keyAltitude)?.apply { - setOnBindEditTextListener { - it.inputType = InputType.TYPE_CLASS_NUMBER or - InputType.TYPE_NUMBER_FLAG_DECIMAL or - InputType.TYPE_NUMBER_FLAG_SIGNED - } - setOnPreferenceChangeListener { _, newValue -> - val valueStr = newValue.toString() - if (valueStr.isEmpty() || valueStr == "-" || valueStr.toDouble() < -413.0 || valueStr.toDouble() > 8850.0) { - getString(R.string.pref_alt_input_error).snack(requireView()) - return@setOnPreferenceChangeListener false - } - return@setOnPreferenceChangeListener true + findPreference(PrefsManager.keyPositionGPS)?.apply { + setOnPreferenceClickListener { + setPositionFromGPS() + return@setOnPreferenceClickListener true } } } - override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {} - - override fun onResume() { - super.onResume() - preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(this) - } - - override fun onPause() { - super.onPause() - preferenceManager.sharedPreferences.unregisterOnSharedPreferenceChangeListener(this) + private fun setPositionFromGPS() { + try { + val location = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER) + if (location != null) { + val latitude = location.latitude.round(4) + val longitude = location.longitude.round(4) + val altitude = location.altitude.round(1) + prefsManager.setStationPosition(latitude, longitude, altitude) + getString(R.string.pref_pos_gps_success).snack(requireView()) + } else { + getString(R.string.pref_pos_gps_null).snack(requireView()) + } + } catch (e: SecurityException) { + getString(R.string.pref_pos_gps_error).snack(requireView()) + } } } diff --git a/app/src/main/java/com/rtbishop/look4sat/utility/PrefsManager.kt b/app/src/main/java/com/rtbishop/look4sat/utility/PrefsManager.kt index da313fdd..1ecb8177 100644 --- a/app/src/main/java/com/rtbishop/look4sat/utility/PrefsManager.kt +++ b/app/src/main/java/com/rtbishop/look4sat/utility/PrefsManager.kt @@ -21,42 +21,47 @@ package com.rtbishop.look4sat.utility import android.content.SharedPreferences import android.hardware.GeomagneticField -import android.location.LocationManager import androidx.core.content.edit import com.github.amsacode.predict4java.GroundStationPosition import com.rtbishop.look4sat.data.PassPrefs -import com.rtbishop.look4sat.utility.Utilities.round import javax.inject.Inject -class PrefsManager @Inject constructor( - private val preferences: SharedPreferences, - private val locationManager: LocationManager -) { +class PrefsManager @Inject constructor(private val preferences: SharedPreferences) { companion object { - const val hoursAhead = "hoursAhead" - const val minimalElevation = "minimalElevation" const val keyLatitude = "latitude" const val keyLongitude = "longitude" const val keyAltitude = "altitude" const val keyCompass = "compass" - const val keyTimeUtc = "timeUTC" - const val defaultGSP = "0.0" - const val keyIsFirstLaunch = "keyIsFirstLaunch" + const val keyTimeUTC = "timeUTC" + const val keyHoursAhead = "hoursAhead" + const val keyMinElevation = "minElevation" + const val keyPositionGPS = "setPositionGPS" + const val keyIsFirstLaunch = "isFirstLaunch" } fun getPassPrefs(): PassPrefs { - val hoursAhead = preferences.getInt(hoursAhead, 8) - val minEl = preferences.getInt(minimalElevation, 16).toDouble() + val hoursAhead = preferences.getInt(keyHoursAhead, 8) + val minEl = preferences.getInt(keyMinElevation, 16).toDouble() return PassPrefs(hoursAhead, minEl) } fun getStationPosition(): GroundStationPosition { + val defaultGSP = "0.0" val lat = preferences.getString(keyLatitude, defaultGSP)!!.toDouble() val lon = preferences.getString(keyLongitude, defaultGSP)!!.toDouble() val alt = preferences.getString(keyAltitude, defaultGSP)!!.toDouble() return GroundStationPosition(lat, lon, alt) } + fun setStationPosition(latitude: Double, longitude: Double, altitude: Double) { + preferences.edit { + putString(keyLatitude, latitude.toString()) + putString(keyLongitude, longitude.toString()) + putString(keyAltitude, altitude.toString()) + apply() + } + } + fun getMagDeclination(): Float { val stationPosition = getStationPosition() val lat = stationPosition.latitude.toFloat() @@ -65,25 +70,8 @@ class PrefsManager @Inject constructor( return GeomagneticField(lat, lon, alt, System.currentTimeMillis()).declination } - fun setStationPositionFromGPS() { - try { - locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER)?.let { - val lat = it.latitude.round(4) - val lon = it.longitude.round(4) - val alt = it.altitude.round(1) - preferences.edit { - putString(keyLatitude, lat.toString()) - putString(keyLongitude, lon.toString()) - putString(keyAltitude, alt.toString()) - apply() - } - } - } catch (e: SecurityException) { - } - } - fun shouldUseUTC(): Boolean { - return preferences.getBoolean(keyTimeUtc, false) + return preferences.getBoolean(keyTimeUTC, false) } fun shouldUseCompass(): Boolean { diff --git a/app/src/main/res/layout/item_trans.xml b/app/src/main/res/layout/item_trans.xml index 2f88b245..2b80d887 100644 --- a/app/src/main/res/layout/item_trans.xml +++ b/app/src/main/res/layout/item_trans.xml @@ -38,7 +38,7 @@ android:gravity="center" android:maxLines="1" android:text="@string/trans_description" - android:textSize="16sp" + android:textSize="15sp" app:layout_constraintEnd_toStartOf="@+id/img_uplink" app:layout_constraintHorizontal_chainStyle="spread_inside" app:layout_constraintStart_toEndOf="@+id/img_downlink" @@ -77,7 +77,7 @@ android:layout_marginTop="4dp" android:layout_marginBottom="2dp" android:text="@string/trans_mode" - android:textSize="16sp" + android:textSize="15sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/isInverted" app:layout_constraintHorizontal_chainStyle="spread_inside" @@ -90,7 +90,7 @@ android:layout_height="wrap_content" android:layout_marginEnd="6dp" android:text="@string/trans_inverted" - android:textSize="16sp" + android:textSize="15sp" app:layout_constraintBaseline_toBaselineOf="@+id/mode" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/mode" /> diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 9b3ab585..5c53f25f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -52,16 +52,14 @@ Шир: %.1f°, Дол: %.1f° Скор: %.2f км/с + Местоположение наземной станции + Установить позицию по данным GPS + Позиция успешно обновлена + Местоположение отключено + Нет разрешения использовать геоданные Настройки пролетов спутников Количество часов Минимальная элевация - Местоположение наземной станции - Широта, град - Введите значение между -90° и 90° - Долгота, град - Введите значение между -180° и 180° - Высота, м - Введите значение между -413м и 8850м Другие настройки Использовать компас Показывать время пролета по UTC diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0689c3f2..e15b8a62 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -71,16 +71,14 @@ Lat: %.1f°, Lon: %.1f° Vel: %.2f km/s + Ground station position + Set position from GPS + Position updated successfully + Location is switched off + Check your location permissions Satellite pass preferences Hours ahead Minimal elevation - Ground station position - Latitude, deg - Set the value between -90° and 90° - Longitude, deg - Set the value between -180° and 180° - Altitude, m - Set the value between -413m and 8850m Other Show pass time in UTC Use sensors to rotate PolarView diff --git a/app/src/main/res/xml/preference.xml b/app/src/main/res/xml/preference.xml index 0d668e25..c2089254 100644 --- a/app/src/main/res/xml/preference.xml +++ b/app/src/main/res/xml/preference.xml @@ -22,24 +22,10 @@ - - - +