diff --git a/app/src/main/java/net/osmtracker/OSMTracker.java b/app/src/main/java/net/osmtracker/OSMTracker.java
index 5a667ae7a..710c22eef 100644
--- a/app/src/main/java/net/osmtracker/OSMTracker.java
+++ b/app/src/main/java/net/osmtracker/OSMTracker.java
@@ -27,6 +27,7 @@ public static final class Preferences {
public final static String KEY_OUTPUT_GPX_HDOP_APPROXIMATION = "gpx.hdop.approximation";
public final static String KEY_OUTPUT_DIR_PER_TRACK = "gpx.directory_per_track";
public final static String KEY_OUTPUT_COMPASS = "gpx.compass_heading";
+ public final static String KEY_INCREMENTAL_WAYPOINT_COUNTER ="gpx.incremental_waypoint_counter";
public final static String KEY_UI_PICTURE_SOURCE = "ui.picture.source";
public final static String KEY_UI_BUTTONS_LAYOUT = "ui.buttons.layout";
@@ -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_INCREMENTAL_WAYPOINT_COUNTER = "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..a4727febe 100644
--- a/app/src/main/java/net/osmtracker/activity/Preferences.java
+++ b/app/src/main/java/net/osmtracker/activity/Preferences.java
@@ -52,8 +52,23 @@ public class Preferences extends PreferenceActivity {
* water_supply_icons <- icon directory
*/
+ /**
+ * Utility to place cursor at end of EditTextPreference
+ */
public static final String ICONS_DIR_SUFFIX = "_icons";
+ final OnPreferenceClickListener _moveCursorToEndClickListener =
+ new OnPreferenceClickListener()
+ {
+ @Override
+ public boolean onPreferenceClick(Preference preference)
+ {
+ EditTextPreference editPref = (EditTextPreference)preference;
+ editPref.getEditText().setSelection( editPref.getText().length() );
+ return true;
+ }
+ };
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -166,6 +181,19 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
}
});
+ // Counter value for incremental waypoints
+ ((EditTextPreference)findPreference(OSMTracker.Preferences.KEY_INCREMENTAL_WAYPOINT_COUNTER)).setOnPreferenceClickListener(_moveCursorToEndClickListener);
+ pref = findPreference(OSMTracker.Preferences.KEY_INCREMENTAL_WAYPOINT_COUNTER);
+ String incremental_waypoint_counter_current = prefs.getString(OSMTracker.Preferences.KEY_INCREMENTAL_WAYPOINT_COUNTER,OSMTracker.Preferences.VAL_INCREMENTAL_WAYPOINT_COUNTER);
+ pref.setSummary(getResources().getString(R.string.prefs_incremental_waypoint_counter_summary) + ": " + incremental_waypoint_counter_current);
+ pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ ((EditTextPreference)preference).setSummary(getResources().getString(R.string.prefs_incremental_waypoint_counter_summary) + ": " + newValue.toString());
+ return true;
+ }
+ });
+
}
}
diff --git a/app/src/main/java/net/osmtracker/listener/IncrementalWaypointOnclickListener.java b/app/src/main/java/net/osmtracker/listener/IncrementalWaypointOnclickListener.java
new file mode 100644
index 000000000..52182ba64
--- /dev/null
+++ b/app/src/main/java/net/osmtracker/listener/IncrementalWaypointOnclickListener.java
@@ -0,0 +1,70 @@
+package net.osmtracker.listener;
+
+import net.osmtracker.OSMTracker;
+import net.osmtracker.R;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.graphics.Color;
+import android.util.TypedValue;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.TextView;
+import android.widget.Toast;
+import android.preference.PreferenceManager;
+
+import net.osmtracker.activity.TrackLogger;
+import net.osmtracker.db.TrackContentProvider;
+
+import java.util.UUID;
+
+/**
+ * Listener for standard waypoint tag button.
+ * Sends an Intent to track waypoint. Waypoint name is the
+ * label of the button.
+ *
+ * @author Nicolas Guillaumin
+ *
+ */
+public class IncrementalWaypointOnclickListener implements OnClickListener {
+
+ private long currentTrackId;
+ private Context context;
+ private final SharedPreferences prefs;
+ private String incremental_waypoint_format;
+
+ public IncrementalWaypointOnclickListener(long trackId, String incremental_waypoint_format, Context context) {
+ currentTrackId = trackId;
+ this.context = context;
+ prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ this.incremental_waypoint_format = incremental_waypoint_format;
+ }
+
+ @Override
+ public void onClick(View view) {
+ Button button = (Button) view;
+ Integer wpnum = Integer.parseInt(prefs.getString(OSMTracker.Preferences.KEY_INCREMENTAL_WAYPOINT_COUNTER,OSMTracker.Preferences.VAL_INCREMENTAL_WAYPOINT_COUNTER));
+ String wptext = String.format(incremental_waypoint_format, wpnum);
+ // Send an intent to inform service to track the waypoint.
+ Intent intent = new Intent(OSMTracker.INTENT_TRACK_WP);
+ intent.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, currentTrackId);
+ intent.putExtra(OSMTracker.INTENT_KEY_NAME, wptext);
+ intent.putExtra(OSMTracker.INTENT_KEY_UUID, UUID.randomUUID().toString());
+ view.getContext().sendBroadcast(intent);
+ wpnum++;
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putString(OSMTracker.Preferences.KEY_INCREMENTAL_WAYPOINT_COUNTER,Integer.toString(wpnum));
+ editor.commit();
+
+ // Inform user that the waypoint was tracked
+ Toast toast = Toast.makeText(view.getContext(), view.getContext().getResources().getString(R.string.tracklogger_tracked) + " " + wptext, Toast.LENGTH_LONG);
+ TextView v = (TextView) toast.getView().findViewById(android.R.id.message);
+ v.setTextColor(Color.argb(200,255,0,0));
+ v.setTextSize(TypedValue.COMPLEX_UNIT_DIP,20);
+ toast.show();
+
+ }
+
+}
diff --git a/app/src/main/java/net/osmtracker/util/UserDefinedLayoutReader.java b/app/src/main/java/net/osmtracker/util/UserDefinedLayoutReader.java
index f42ec9dbb..721c4fcad 100644
--- a/app/src/main/java/net/osmtracker/util/UserDefinedLayoutReader.java
+++ b/app/src/main/java/net/osmtracker/util/UserDefinedLayoutReader.java
@@ -8,6 +8,7 @@
import net.osmtracker.activity.TrackLogger;
import net.osmtracker.layout.DisablableTableLayout;
import net.osmtracker.layout.UserDefinedLayout;
+import net.osmtracker.listener.IncrementalWaypointOnclickListener;
import net.osmtracker.listener.PageButtonOnClickListener;
import net.osmtracker.listener.StillImageOnClickListener;
import net.osmtracker.listener.TagButtonOnClickListener;
@@ -79,7 +80,7 @@ public class UserDefinedLayoutReader {
* Lister bound to picture buttons
*/
private StillImageOnClickListener stillImageOnClickListener;
-
+
/**
* {@link Resources} to retrieve String resources
*/
@@ -283,7 +284,12 @@ public void inflateButton(TableRow row) {
button.setText(findLabel(parser.getAttributeValue(null, XmlSchema.ATTR_LABEL), resources));
buttonIcon = iconResolver.getIcon(parser.getAttributeValue(null, XmlSchema.ATTR_ICON));
button.setOnClickListener(new TagButtonOnClickListener(currentTrackId));
- } else if (XmlSchema.ATTR_VAL_VOICEREC.equals(buttonType)) {
+ } else if (XmlSchema.ATTR_VAL_INCREMENTAL_WAYPOINT.equals(buttonType)) {
+ button.setText(resources.getString(R.string.gpsstatus_record_incremental_waypoint));
+ buttonIcon = iconResolver.getIcon(parser.getAttributeValue(null, XmlSchema.ATTR_ICON));
+ String incremental_waypoint_format = parser.getAttributeValue(null,XmlSchema.ATTR_FORMAT);
+ button.setOnClickListener(new IncrementalWaypointOnclickListener(currentTrackId, incremental_waypoint_format, context));
+ } else if ((XmlSchema.ATTR_VAL_VOICEREC.equals(buttonType))) {
// Voice record button
button.setText(resources.getString(R.string.gpsstatus_record_voicerec));
buttonIcon = resources.getDrawable(R.drawable.voice_32x32);
@@ -369,12 +375,14 @@ private static final class XmlSchema {
public static final String ATTR_TARGETLAYOUT = "targetlayout";
public static final String ATTR_ICON = "icon";
public static final String ATTR_ICONPOS = "iconpos";
+ public static final String ATTR_FORMAT = "format";
public static final String ATTR_VAL_TAG = "tag";
public static final String ATTR_VAL_PAGE = "page";
public static final String ATTR_VAL_VOICEREC = "voicerec";
public static final String ATTR_VAL_TEXTNOTE = "textnote";
public static final String ATTR_VAL_PICTURE = "picture";
+ public static final String ATTR_VAL_INCREMENTAL_WAYPOINT = "incwp";
public static final String ATTR_VAL_ICONPOS_TOP = "top";
public static final String ATTR_VAL_ICONPOS_RIGHT = "right";
diff --git a/app/src/main/res/values/strings-preferences.xml b/app/src/main/res/values/strings-preferences.xml
index bd4df8334..ba2711d48 100644
--- a/app/src/main/res/values/strings-preferences.xml
+++ b/app/src/main/res/values/strings-preferences.xml
@@ -19,6 +19,9 @@
Use 0 for the shortest possible (affects battery life)
seconds
+ Incremental waypoint counter
+ Next value for incremental waypoints (normally you shouldn\'t change this)
+
User interface
Default photo source
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 74cb3aaaa..ce520da6b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -88,6 +88,7 @@
Voice record
Take photo
Text note
+ Incremental waypoint
Settings
diff --git a/app/src/main/res/xml/default_buttons_layout.xml b/app/src/main/res/xml/default_buttons_layout.xml
index 6a62ef9a0..a3f11413e 100644
--- a/app/src/main/res/xml/default_buttons_layout.xml
+++ b/app/src/main/res/xml/default_buttons_layout.xml
@@ -1,12 +1,15 @@
+
+
+
+
-
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index f7ec5fbd7..69946dd59 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -8,7 +8,11 @@
-
+