From 01b4831a45fa37916cb366494714efe554233521 Mon Sep 17 00:00:00 2001 From: Hans-Joachim Zimmer Date: Wed, 24 Oct 2018 13:49:25 +0200 Subject: [PATCH 1/2] New preference: Minimum distance between subsequent track points --- .../main/java/net/osmtracker/OSMTracker.java | 2 ++ .../net/osmtracker/activity/Preferences.java | 17 +++++++++++++++++ .../net/osmtracker/service/gps/GPSLogger.java | 7 +++++-- .../main/res/values-de/strings-preferences.xml | 4 ++++ app/src/main/res/values/strings-preferences.xml | 4 ++++ app/src/main/res/xml/preferences.xml | 3 +++ 6 files changed, 35 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/net/osmtracker/OSMTracker.java b/app/src/main/java/net/osmtracker/OSMTracker.java index 5a667ae7a..94c8441db 100644 --- a/app/src/main/java/net/osmtracker/OSMTracker.java +++ b/app/src/main/java/net/osmtracker/OSMTracker.java @@ -22,6 +22,7 @@ public static final class Preferences { public final static String KEY_GPS_CHECKSTARTUP = "gps.checkstartup"; public final static String KEY_GPS_IGNORE_CLOCK = "gps.ignoreclock"; public final static String KEY_GPS_LOGGING_INTERVAL = "gps.logging.interval"; + public final static String KEY_GPS_LOGGING_MIN_DISTANCE = "gps.logging.min_distance"; public final static String KEY_OUTPUT_FILENAME = "gpx.filename"; public final static String KEY_OUTPUT_ACCURACY = "gpx.accuracy"; public final static String KEY_OUTPUT_GPX_HDOP_APPROXIMATION = "gpx.hdop.approximation"; @@ -53,6 +54,7 @@ public static final class Preferences { public final static boolean VAL_GPS_CHECKSTARTUP = true; public final static boolean VAL_GPS_IGNORE_CLOCK = false; public final static String VAL_GPS_LOGGING_INTERVAL = "0"; + public final static String VAL_GPS_LOGGING_MIN_DISTANCE = "0"; public final static String VAL_OUTPUT_FILENAME_NAME = "name"; public final static String VAL_OUTPUT_FILENAME_NAME_DATE = "name_date"; diff --git a/app/src/main/java/net/osmtracker/activity/Preferences.java b/app/src/main/java/net/osmtracker/activity/Preferences.java index e21966f82..9cef7ac17 100644 --- a/app/src/main/java/net/osmtracker/activity/Preferences.java +++ b/app/src/main/java/net/osmtracker/activity/Preferences.java @@ -110,6 +110,23 @@ public boolean onPreferenceChange(Preference preference, Object newValue) { } }); + // Update GPS min. distance summary to the current value + pref = findPreference(OSMTracker.Preferences.KEY_GPS_LOGGING_MIN_DISTANCE); + pref.setSummary( + prefs.getString(OSMTracker.Preferences.KEY_GPS_LOGGING_MIN_DISTANCE, OSMTracker.Preferences.VAL_GPS_LOGGING_MIN_DISTANCE) + + " " + getResources().getString(R.string.prefs_gps_logging_min_distance_meters) + + ". " + getResources().getString(R.string.prefs_gps_logging_min_distance_summary)); + pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + // Set summary with the interval and "seconds" + preference.setSummary(newValue + + " " + getResources().getString(R.string.prefs_gps_logging_min_distance_meters) + + ". " + getResources().getString(R.string.prefs_gps_logging_min_distance_summary)); + return true; + } + }); + pref = findPreference(OSMTracker.Preferences.KEY_GPS_OSSETTINGS); pref.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override diff --git a/app/src/main/java/net/osmtracker/service/gps/GPSLogger.java b/app/src/main/java/net/osmtracker/service/gps/GPSLogger.java index d9a6d13f3..7be81c6c0 100644 --- a/app/src/main/java/net/osmtracker/service/gps/GPSLogger.java +++ b/app/src/main/java/net/osmtracker/service/gps/GPSLogger.java @@ -90,6 +90,7 @@ public class GPSLogger extends Service implements LocationListener { * the interval (in ms) to log GPS fixes defined in the preferences */ private long gpsLoggingInterval; + private long gpsLoggingMinDistance; /** * sensors for magnetic orientation @@ -200,6 +201,8 @@ public void onCreate() { //read the logging interval from preferences gpsLoggingInterval = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext()).getString( OSMTracker.Preferences.KEY_GPS_LOGGING_INTERVAL, OSMTracker.Preferences.VAL_GPS_LOGGING_INTERVAL)) * 1000; + gpsLoggingMinDistance = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext()).getString( + OSMTracker.Preferences.KEY_GPS_LOGGING_MIN_DISTANCE, OSMTracker.Preferences.VAL_GPS_LOGGING_MIN_DISTANCE)); // Register our broadcast receiver IntentFilter filter = new IntentFilter(); @@ -214,8 +217,8 @@ public void onCreate() { lmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { - lmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); - } + lmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, gpsLoggingInterval, gpsLoggingMinDistance, this); + } //register for Orientation updates sensorListener.register(this); diff --git a/app/src/main/res/values-de/strings-preferences.xml b/app/src/main/res/values-de/strings-preferences.xml index 514889801..c68dd2ba4 100644 --- a/app/src/main/res/values-de/strings-preferences.xml +++ b/app/src/main/res/values-de/strings-preferences.xml @@ -12,6 +12,10 @@ GPS Intervall 0 für das kürzest mögliche Intervall Sekunden + GPS Distanz Trackpoints + Min. Abstand zweier Trackpoints + Meter + Benutzeroberfläche Standard Foto-Quelle Foto von Kamera oder Galerie? diff --git a/app/src/main/res/values/strings-preferences.xml b/app/src/main/res/values/strings-preferences.xml index bd4df8334..ed6b6c458 100644 --- a/app/src/main/res/values/strings-preferences.xml +++ b/app/src/main/res/values/strings-preferences.xml @@ -19,6 +19,10 @@ Use 0 for the shortest possible (affects battery life) seconds + GPS logging distance + Min. distance between track points in meters, use 0 for the shortest possible + meters + User interface Default photo source diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index f7ec5fbd7..6f55061a6 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -21,6 +21,9 @@ + From 33f2db0cde4dbad92c6f405549de458aded966c8 Mon Sep 17 00:00:00 2001 From: Hans-Joachim Zimmer Date: Mon, 14 Jan 2019 16:30:40 +0100 Subject: [PATCH 2/2] Do not allow empty string in min_logging_distance --- .../net/osmtracker/activity/Preferences.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/app/src/main/java/net/osmtracker/activity/Preferences.java b/app/src/main/java/net/osmtracker/activity/Preferences.java index 9cef7ac17..a4fa3fcc2 100644 --- a/app/src/main/java/net/osmtracker/activity/Preferences.java +++ b/app/src/main/java/net/osmtracker/activity/Preferences.java @@ -7,6 +7,7 @@ import net.osmtracker.R; import android.Manifest; +import android.app.AlertDialog; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; @@ -22,6 +23,10 @@ import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.provider.Settings; +import android.text.Editable; +import android.text.TextWatcher; +import android.widget.Button; +import android.widget.EditText; /** @@ -127,6 +132,36 @@ public boolean onPreferenceChange(Preference preference, Object newValue) { } }); + // don't allow the logging_min_distance to be empty + final EditText et = ((EditTextPreference)pref).getEditText(); + final EditTextPreference etp = (EditTextPreference)pref; + et.addTextChangedListener( + new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (s.length() >= 0) { + try { + Button bt_ok = ((AlertDialog) etp.getDialog()).getButton(AlertDialog.BUTTON_POSITIVE); + if (s.length() == 0) { + bt_ok.setEnabled(false); + } else { + ((AlertDialog) etp.getDialog()).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); + } + } catch (Exception ex) { + } + } + } + + @Override + public void afterTextChanged(Editable s) { + } + } + ); + pref = findPreference(OSMTracker.Preferences.KEY_GPS_OSSETTINGS); pref.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override