diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/SeekBarPreference.java b/app/src/main/java/de/apps4ics/mountainnavigation/SeekBarPreference.java
new file mode 100644
index 0000000..916666e
--- /dev/null
+++ b/app/src/main/java/de/apps4ics/mountainnavigation/SeekBarPreference.java
@@ -0,0 +1,134 @@
+package de.apps4ics.mountainnavigation;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.View;
+import android.preference.DialogPreference;
+import android.widget.SeekBar;
+import android.widget.TextView;
+import android.widget.LinearLayout;
+
+/**
+ * This file is part of MountainNavigation.
+ *
+ * MountainNavigation is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MountainNavigation is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with MountainNavigation. If not, see .
+ *
+ * @copyright Copyright (c) 2016 Vinzenz Rosenkanz
+ *
+ * @author Vinzenz Rosenkranz
+ */
+public class SeekBarPreference extends DialogPreference implements SeekBar.OnSeekBarChangeListener {
+ private Context context;
+ private int maxValue;
+ private int minValue;
+ private int currentValue;
+ private int defaultStart;
+ private String title;
+ private String text;
+
+ private SeekBar seekBar;
+ private TextView infoText;
+
+ private final static int DEFAULT_MAX_VALUE = 100;
+ private final static int DEFAULT_MIN_VALUE = 0;
+ private final static String TEXT = "text";
+ private final static String MAX = "max";
+ private final static String MIN = "min";
+ private final static String DEFAULT_VALUE = "defaultValue";
+ private final static String DIALOG_MESSAGE = "dialogMessage";
+ private static final String AND_NAMESPACE = "http://schemas.android.com/apk/res/android";
+
+ public SeekBarPreference(Context context) {
+ super(context, null);
+ }
+
+ public SeekBarPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ this.context = context;
+ this.defaultStart = attrs.getAttributeIntValue(AND_NAMESPACE, DEFAULT_VALUE, DEFAULT_MIN_VALUE);
+ init(attrs);
+ }
+
+ private void init(AttributeSet attrs) {
+ TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.MinSeekBar);
+ this.text = ta.getString(R.styleable.MinSeekBar_android_text);
+ this.maxValue = ta.getInt(R.styleable.MinSeekBar_android_max, DEFAULT_MAX_VALUE);
+ this.minValue = ta.getInt(R.styleable.MinSeekBar_min, DEFAULT_MIN_VALUE);
+ }
+
+ @Override
+ protected View onCreateDialogView() {
+ LinearLayout layout = new LinearLayout(context);
+ layout.setOrientation(LinearLayout.VERTICAL);
+ layout.setPadding(15, 15, 15, 15);
+
+ infoText = new TextView(context);
+ if(text != null) {
+ infoText.setText(String.format(text, defaultStart + minValue));
+ }
+ infoText.setGravity(Gravity.CENTER_HORIZONTAL);
+ infoText.setTextSize(32);
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT,
+ LinearLayout.LayoutParams.WRAP_CONTENT);
+ layout.addView(infoText, params);
+
+ seekBar = new SeekBar(context);
+ if(shouldPersist()) currentValue = getPersistedInt(defaultStart);
+ seekBar.setMax(maxValue);
+ seekBar.setProgress(currentValue + minValue);
+ seekBar.setOnSeekBarChangeListener(this);
+ layout.addView(seekBar, params);
+ return layout;
+ }
+
+ @Override
+ protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
+ super.onSetInitialValue(restorePersistedValue, defaultValue);
+ if(restorePersistedValue) {
+ if(shouldPersist()) {
+ currentValue = getPersistedInt(defaultStart);
+ } else {
+ currentValue = 0;
+ }
+ } else {
+ currentValue = (int) defaultValue;
+ }
+ }
+
+ @Override
+ protected void onBindDialogView(View v) {
+ super.onBindDialogView(v);
+ seekBar.setMax(maxValue);
+ seekBar.setProgress(currentValue);
+ infoText.setText(String.format(text, currentValue + minValue));
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+ infoText.setText(String.format(text, progress + minValue));
+ if(shouldPersist()) persistInt(progress);
+ callChangeListener(progress);
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ }
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/SettingsActivity.java b/app/src/main/java/de/apps4ics/mountainnavigation/SettingsActivity.java
index f8c6c30..1323251 100644
--- a/app/src/main/java/de/apps4ics/mountainnavigation/SettingsActivity.java
+++ b/app/src/main/java/de/apps4ics/mountainnavigation/SettingsActivity.java
@@ -4,6 +4,7 @@
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.SharedPreferences;
+import android.content.res.Resources;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceCategory;
@@ -41,6 +42,26 @@
mFragmentTransaction.commit();
}
+
+ public static int getMaxColdFromPrefs(int defaultValue) {
+ return getIntWithMinFromPrefs(R.string.preferences_maximal_cold_temp_min, R.string.settings_hint_max_cold_temp_key, defaultValue);
+ }
+
+ public static int getMinHotFromPrefs(int defaultValue) {
+ return getIntWithMinFromPrefs(R.string.preferences_minimal_hot_temp_min, R.string.settings_hint_min_hot_temp_key, defaultValue);
+ }
+
+ public static int getDaysForecastFromPrefs(int defaultValue) {
+ return getIntWithMinFromPrefs(R.string.preferences_days_of_forecast_min, R.string.settings_weather_days_forecast_key, defaultValue);
+ }
+
+ private static int getIntWithMinFromPrefs(int minId, int resId, int defaultValue) {
+ Resources res = MainActivity.getRes();
+ SharedPreferences sharedPrefs = MainActivity.getSharedPrefs();
+ int min = Integer.parseInt(res.getString(minId));
+ return sharedPrefs.getInt(res.getString(resId), (defaultValue-min)) + min;
+ }
+
public static class PrefsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -60,6 +81,7 @@
}
}
}
+
@Override
public void onResume() {
super.onResume();
diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/WeatherHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/WeatherHandler.java
index b7879f4..fdbf177 100644
--- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/WeatherHandler.java
+++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/WeatherHandler.java
@@ -32,6 +32,7 @@
import de.apps4ics.mountainnavigation.OnSingleWeatherRetrieved;
import de.apps4ics.mountainnavigation.OnWeatherRetrieved;
import de.apps4ics.mountainnavigation.R;
+import de.apps4ics.mountainnavigation.SettingsActivity;
import de.apps4ics.mountainnavigation.WeatherDatabase;
import de.apps4ics.mountainnavigation.adapters.WarningListAdapter;
@@ -64,11 +65,11 @@
private HistoricalWeather histWeather;
private DayForecast[] forecasts;
private Weather[] weathers;
- private final static float MIN_HOT_TEMP_DEFAULT = 30.0f;
- private final static float MAX_COLD_TEMP_DEFAULT = 10.0f;
+ private final static int MIN_HOT_TEMP_DEFAULT = 30;
+ private final static int MAX_COLD_TEMP_DEFAULT = 10;
private final static int MAX_DAYS_FORECAST_DEFAULT = 3;
- private static float MIN_HOT_TEMP;
- private static float MAX_COLD_TEMP;
+ private static int MIN_HOT_TEMP;
+ private static int MAX_COLD_TEMP;
private static int MAX_DAYS_FORECAST;
private static float MIN_WINDY_SPEED;
@@ -88,10 +89,7 @@
}
Resources res = MainActivity.getRes();
- SharedPreferences sharedPrefs = MainActivity.getSharedPrefs();
- MAX_DAYS_FORECAST = Integer.parseInt(MainActivity.getSharedPrefs().getString(
- res.getString(R.string.settings_weather_days_forecast),
- String.valueOf(MAX_DAYS_FORECAST_DEFAULT)));
+ MAX_DAYS_FORECAST = SettingsActivity.getDaysForecastFromPrefs(MAX_DAYS_FORECAST_DEFAULT);
WeatherClient.ClientBuilder weatherBuilder = new WeatherClient.ClientBuilder();
weatherConfig = new WeatherConfig();
weatherConfig.unitSystem = WeatherConfig.UNIT_SYSTEM.M;
@@ -99,13 +97,13 @@
weatherConfig.lang = res.getString(R.string.lang_identifier);
weatherConfig.numDays = MAX_DAYS_FORECAST;
- MIN_HOT_TEMP = Float.parseFloat(sharedPrefs.getString(res.getString(R.string.settings_hint_min_hot_temp_key), String.valueOf(MIN_HOT_TEMP_DEFAULT)));
- MAX_COLD_TEMP = Float.parseFloat(sharedPrefs.getString(res.getString(R.string.settings_hint_max_cold_temp_key), String.valueOf(MAX_COLD_TEMP_DEFAULT)));
+ MIN_HOT_TEMP = SettingsActivity.getMinHotFromPrefs(MIN_HOT_TEMP_DEFAULT);
+ MAX_COLD_TEMP = SettingsActivity.getMaxColdFromPrefs(MAX_COLD_TEMP_DEFAULT);
MIN_WINDY_SPEED = 8; //http://www.wettergefahren-fruehwarnung.de/Artikel/beaufort.html
if(weatherConfig.unitSystem.equals(WeatherConfig.UNIT_SYSTEM.I)){
- MIN_HOT_TEMP = celsiusToFahrenheit(MIN_HOT_TEMP);
- MAX_COLD_TEMP = celsiusToFahrenheit(MAX_COLD_TEMP);
+ MIN_HOT_TEMP = (int) celsiusToFahrenheit(MIN_HOT_TEMP);
+ MAX_COLD_TEMP = (int) celsiusToFahrenheit(MAX_COLD_TEMP);
}
weatherClient = null;
diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml
index 54603e9..4bab231 100644
--- a/app/src/main/res/values-de-rDE/strings.xml
+++ b/app/src/main/res/values-de-rDE/strings.xml
@@ -72,6 +72,8 @@
Welche Wetterart möchtest du herunterladen?
Spezieller Ort
Ort...
+ %1$s Tage
+ %1$s°C
© OpenStreetMap-Mitwirkende
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
new file mode 100644
index 0000000..b8a43e1
--- /dev/null
+++ b/app/src/main/res/values/attrs.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index be7aacd..823f4f9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -74,6 +74,8 @@
What kind of weather do you want to download?
Custom location
Location...
+ %1$s days
+ %1$s°C
© OpenStreetMap contributors
@@ -90,13 +92,20 @@
maxHotTemp
minColdTemp
useModernMarkers
- daysOfForecast
+ daysOfForecast
username
password
forecast
current
day
+ 5
+ 20
+ 1
+ 15
+ 20
+ 23
+
- Fountain
- Path
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 255e125..731a2c1 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -1,5 +1,6 @@
-
+
@@ -8,26 +9,24 @@
android:key="@string/settings_hint_enable_key"
android:defaultValue="true">
-
-
-
+
+
-
+ android:summary="@string/maximal_cold_temp_summary"
+ android:defaultValue="2"
+ android:text="@string/preferences_n_degree"
+ app:min="@string/preferences_maximal_cold_temp_min"
+ android:max="@string/preferences_maximal_cold_temp_max">
+
@@ -39,16 +38,15 @@
-
-
+ android:text="@string/preferences_n_days"
+ app:min="@string/preferences_days_of_forecast_min"
+ android:max="@string/preferences_days_of_forecast_max">
+