From 573702338997e8dc22866602193071b780876c90 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Fri, 3 Jan 2020 13:27:04 +0000 Subject: [PATCH] Added SettingsFragment entered values sanity check --- .../rtbishop/look4sat/ui/SettingsFragment.kt | 72 ++++++++++++++++++- app/src/main/res/values/strings.xml | 4 ++ 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/SettingsFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/SettingsFragment.kt index d0b56d89..56cc4c31 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/SettingsFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/SettingsFragment.kt @@ -21,6 +21,8 @@ package com.rtbishop.look4sat.ui import android.content.SharedPreferences import android.os.Bundle +import android.text.InputType +import android.widget.Toast import androidx.lifecycle.ViewModelProvider import androidx.preference.EditTextPreference import androidx.preference.PreferenceFragmentCompat @@ -30,21 +32,89 @@ import com.rtbishop.look4sat.R class SettingsFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { + private lateinit var mainActivity: MainActivity private lateinit var viewModel: MainViewModel override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preference, rootKey) - viewModel = ViewModelProvider(activity as MainActivity).get(MainViewModel::class.java) + mainActivity = activity as MainActivity + viewModel = ViewModelProvider(mainActivity).get(MainViewModel::class.java) val provider = EditTextPreference.SimpleSummaryProvider.getInstance() val latPref = findPreference(context!!.getText(R.string.key_lat)) val lonPref = findPreference(context!!.getText(R.string.key_lon)) val altPref = findPreference(context!!.getText(R.string.key_alt)) + val delayPref = findPreference(context!!.getText(R.string.key_delay)) latPref?.summaryProvider = provider lonPref?.summaryProvider = provider altPref?.summaryProvider = provider + delayPref?.summaryProvider = provider + + latPref?.setOnBindEditTextListener { + it.inputType = InputType.TYPE_CLASS_NUMBER or + InputType.TYPE_NUMBER_FLAG_DECIMAL or + InputType.TYPE_NUMBER_FLAG_SIGNED + } + latPref?.setOnPreferenceChangeListener { _, newValue -> + if (newValue.toString().toDouble() < -90.0 || newValue.toString().toDouble() > 90.0) { + Toast.makeText( + mainActivity, + getString(R.string.pref_lat_input_error), + Toast.LENGTH_SHORT + ).show() + return@setOnPreferenceChangeListener false + } + return@setOnPreferenceChangeListener true + } + + lonPref?.setOnBindEditTextListener { + it.inputType = InputType.TYPE_CLASS_NUMBER or + InputType.TYPE_NUMBER_FLAG_DECIMAL or + InputType.TYPE_NUMBER_FLAG_SIGNED + } + lonPref?.setOnPreferenceChangeListener { _, newValue -> + if (newValue.toString().toDouble() < -180.0 || newValue.toString().toDouble() > 180.0) { + Toast.makeText( + mainActivity, + getString(R.string.pref_lon_input_error), + Toast.LENGTH_SHORT + ).show() + return@setOnPreferenceChangeListener false + } + return@setOnPreferenceChangeListener true + } + + altPref?.setOnBindEditTextListener { + it.inputType = InputType.TYPE_CLASS_NUMBER or + InputType.TYPE_NUMBER_FLAG_DECIMAL or + InputType.TYPE_NUMBER_FLAG_SIGNED + } + altPref?.setOnPreferenceChangeListener { _, newValue -> + if (newValue.toString().toDouble() < -413.0 || newValue.toString().toDouble() > 8850.0) { + Toast.makeText( + mainActivity, + getString(R.string.pref_alt_input_error), + Toast.LENGTH_SHORT + ).show() + return@setOnPreferenceChangeListener false + } + return@setOnPreferenceChangeListener true + } + + delayPref?.setOnBindEditTextListener { it.inputType = InputType.TYPE_CLASS_NUMBER } + delayPref?.setOnPreferenceChangeListener { _, newValue -> + if (newValue.toString().toLong() < 250 || newValue.toString().toLong() > 10000) { + Toast.makeText( + mainActivity, + getString(R.string.pref_update_freq_input_error), + Toast.LENGTH_SHORT + ).show() + return@setOnPreferenceChangeListener false + } + return@setOnPreferenceChangeListener true + } } override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 23fd9167..5e933ab0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -50,10 +50,14 @@ Ground station position settings Latitude + Lat should be within -90 to 90 deg Longitude + Lon should be within -180 to 180 deg Altitude + Alt should be within -413 to 8850 m Other settings Update frequency + Value should be within 250 to 10000 ms Views update interval, ms 0.0