From dc86b9578b22edaebbb8a981f4dd216fb6a6e091 Mon Sep 17 00:00:00 2001 From: Volker Richert <v.richert@addmore.de> Date: Wed, 4 Jan 2017 20:43:42 +0100 Subject: [PATCH] limit low battery poll intervals in settings to useful (>= pollInterval) values --- .../android/settings/SettingsFragment.java | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/android/settings/SettingsFragment.java b/app/src/main/java/info/nightscout/android/settings/SettingsFragment.java index 7519a5c..d14c7ed 100644 --- a/app/src/main/java/info/nightscout/android/settings/SettingsFragment.java +++ b/app/src/main/java/info/nightscout/android/settings/SettingsFragment.java @@ -25,11 +25,51 @@ public class SettingsFragment extends PreferenceFragment implements OnSharedPref for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) { initSummary(getPreferenceScreen().getPreference(i)); } + + setMinBatPollIntervall((ListPreference) findPreference("pollInterval"), (ListPreference) findPreference("lowBatPollInterval")); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - updatePrefSummary(findPreference(key)); + Preference pref = findPreference(key); + + + if ("pollInterval".equals(key)) { + setMinBatPollIntervall((ListPreference) pref, (ListPreference) findPreference("lowBatPollInterval")); + } + updatePrefSummary(pref); + } + + // + + /** + * set lowBatPollInterval to normal poll interval at least + * and adapt the selectable values + * + * @param pollIntervalPref + * @param lowBatPollIntervalPref + */ + private void setMinBatPollIntervall(ListPreference pollIntervalPref, ListPreference lowBatPollIntervalPref) { + final String currentValue = lowBatPollIntervalPref.getValue(); + final int pollIntervalPos = pollIntervalPref.findIndexOfValue(pollIntervalPref.getValue()), + lowBatPollIntervalPos = lowBatPollIntervalPref.findIndexOfValue(currentValue), + length = pollIntervalPref.getEntries().length; + + CharSequence[] entries = new String[length - pollIntervalPos], + entryValues = new String[length - pollIntervalPos]; + + // generate temp Entries and EntryValues + for(int i = pollIntervalPos; i < length; i++) { + entries[i - pollIntervalPos] = pollIntervalPref.getEntries()[i]; + entryValues[i - pollIntervalPos] = pollIntervalPref.getEntryValues()[i]; + } + lowBatPollIntervalPref.setEntries(entries); + lowBatPollIntervalPref.setEntryValues(entryValues); + + // and set the correct one + if (lowBatPollIntervalPref.findIndexOfValue(currentValue) == -1) { + lowBatPollIntervalPref.setValueIndex(0); + } } @Override -- GitLab