From 91efe324829652b60a24e1f1be3b9e2adfb34450 Mon Sep 17 00:00:00 2001 From: chteufleur Date: Fri, 17 Aug 2018 15:44:05 +0200 Subject: [PATCH] Add found object marker. --- .../mytrackingdog/MainActivity.java | 29 +++++++++++++--- .../mytrackingdog/models/ImportGpx.java | 32 +++++++++++++++++- .../mytrackingdog/models/Traces.java | 18 ++++++---- .../models/beans/MyLocation.java | 5 +++ .../models/beans/WayPointLocation.java | 32 ++++++++++++++---- .../mytrackingdog/services/ServiceGps.java | 12 +++++-- app/src/main/res/drawable/ic_marker.png | Bin 0 -> 9397 bytes app/src/main/res/drawable/ic_marker_blue.png | Bin 0 -> 760 bytes app/src/main/res/drawable/ic_marker_red.png | Bin 0 -> 765 bytes 9 files changed, 106 insertions(+), 22 deletions(-) create mode 100644 app/src/main/res/drawable/ic_marker.png create mode 100644 app/src/main/res/drawable/ic_marker_blue.png create mode 100644 app/src/main/res/drawable/ic_marker_red.png diff --git a/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java b/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java index 8ba9a78..9295889 100644 --- a/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java +++ b/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java @@ -47,6 +47,7 @@ import java.util.Observer; import fr.chteufleur.mytrackingdog.models.beans.MyLocation; import fr.chteufleur.mytrackingdog.models.beans.MyLocationArray; +import fr.chteufleur.mytrackingdog.models.beans.WayPointLocation; import fr.chteufleur.mytrackingdog.services.ServiceGps; public class MainActivity extends AppCompatActivity implements IOrientationConsumer, Observer { @@ -191,17 +192,33 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu private void addMarker() { - MyLocation loc = serviceGps.addPointObject(); + WayPointLocation loc = serviceGps.addPointObject(); GeoPoint gp = new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude()); - addMarker(gp); + addMarker(gp, loc.isFound()); } - private void addMarker(GeoPoint gp) { + private void addMarker(GeoPoint gp, boolean isFound) { Marker marker = new Marker(map); + marker.setIcon(getResources().getDrawable(isFound ? R.drawable.ic_marker_blue : R.drawable.ic_marker_red)); marker.setPosition(gp); marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); marker.setTitle("Object"); marker.setDraggable(false); + marker.setOnMarkerClickListener(new Marker.OnMarkerClickListener() { + @Override + public boolean onMarkerClick(Marker marker, MapView mapView) { + if (serviceGps.isDogActivated()) { + GeoPoint gp = marker.getPosition(); + WayPointLocation wpl = serviceGps.getPoint(gp.getLatitude(), gp.getLongitude()); + if (wpl != null) { + wpl.setFound(); + marker.setIcon(getResources().getDrawable(R.drawable.ic_marker_blue)); + marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); + } + } + return true; + } + }); map.getOverlays().add(marker); } @@ -326,7 +343,11 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu updateTrailTrace(); calculTrailDistance(); for (MyLocation loc: serviceGps.getListGeoPointObjects()) { - addMarker(new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude())); + boolean isFound = false; + if (loc instanceof WayPointLocation) { + isFound = ((WayPointLocation) loc).isFound(); + } + addMarker(new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude()), isFound); } } break; diff --git a/app/src/main/java/fr/chteufleur/mytrackingdog/models/ImportGpx.java b/app/src/main/java/fr/chteufleur/mytrackingdog/models/ImportGpx.java index 055a867..4bc1749 100644 --- a/app/src/main/java/fr/chteufleur/mytrackingdog/models/ImportGpx.java +++ b/app/src/main/java/fr/chteufleur/mytrackingdog/models/ImportGpx.java @@ -143,6 +143,7 @@ public class ImportGpx extends Gpx { double lat = Double.parseDouble(latStr); double lon = Double.parseDouble(lonStr); long time = -1; + boolean isFound = false; while (parser.next() != XmlPullParser.END_TAG) { if (parser.getEventType() != XmlPullParser.START_TAG) { @@ -151,11 +152,13 @@ public class ImportGpx extends Gpx { String name = parser.getName(); if (name.equals("time")) { time = readTime(parser); + } else if (name.equals("extensions")) { + isFound = readExtensions(parser); } else { skip(parser); } } - return new WayPointLocation(lat, lon, time); + return new WayPointLocation(lat, lon, time, isFound); } @@ -182,6 +185,33 @@ public class ImportGpx extends Gpx { return ret; } + private boolean readExtensions(XmlPullParser parser) throws XmlPullParserException, IOException { + boolean ret = false; + parser.require(XmlPullParser.START_TAG, null, "extensions"); + + while (parser.next() != XmlPullParser.END_TAG) { + if (parser.getEventType() != XmlPullParser.START_TAG) { + continue; + } + String name = parser.getName(); + if (name.equals("found")) { + ret = readFound(parser); + } else { + skip(parser); + } + } + return ret; + } + + + private boolean readFound(XmlPullParser parser) throws XmlPullParserException, IOException { + boolean ret = false; + parser.require(XmlPullParser.START_TAG, null, "found"); + ret = Boolean.parseBoolean(readText(parser)); + parser.require(XmlPullParser.END_TAG, null, "found"); + return ret; + } + private String readName(XmlPullParser parser) throws XmlPullParserException, IOException { String ret; diff --git a/app/src/main/java/fr/chteufleur/mytrackingdog/models/Traces.java b/app/src/main/java/fr/chteufleur/mytrackingdog/models/Traces.java index cd8d509..a056c4c 100644 --- a/app/src/main/java/fr/chteufleur/mytrackingdog/models/Traces.java +++ b/app/src/main/java/fr/chteufleur/mytrackingdog/models/Traces.java @@ -2,11 +2,9 @@ package fr.chteufleur.mytrackingdog.models; import android.util.Log; -import java.util.ArrayList; -import java.util.List; - import fr.chteufleur.mytrackingdog.models.beans.MyLocation; import fr.chteufleur.mytrackingdog.models.beans.MyLocationArray; +import fr.chteufleur.mytrackingdog.models.beans.WayPointLocation; public class Traces { @@ -21,17 +19,23 @@ public class Traces { public void addPointTraceur(MyLocation point) { - Log.i(TAG, "add point traceur"); listPointTraceur.add(point); } public void addPointDog(MyLocation point) { - Log.i(TAG, "add point dog"); listPointDog.add(point); } - public void addPointObject(MyLocation point) { - Log.i(TAG, "add point object ("+point.toString()+")"); + public void addPointObject(WayPointLocation point) { listPointObjects.add(point); } + public WayPointLocation getPoint(double lat, double lon) { + WayPointLocation ret = null; + for (MyLocation ml: listPointObjects) { + if (ml.isEquals(lat, lon) && ml instanceof WayPointLocation) { + ret = (WayPointLocation) ml; + } + } + return ret; + } public void addCurrentPoint(MyLocation point) { if (traceurActivated) { addPointTraceur(point); diff --git a/app/src/main/java/fr/chteufleur/mytrackingdog/models/beans/MyLocation.java b/app/src/main/java/fr/chteufleur/mytrackingdog/models/beans/MyLocation.java index 3aae3ce..d5879dd 100644 --- a/app/src/main/java/fr/chteufleur/mytrackingdog/models/beans/MyLocation.java +++ b/app/src/main/java/fr/chteufleur/mytrackingdog/models/beans/MyLocation.java @@ -102,6 +102,11 @@ public class MyLocation { ret += ""; return ret; } + + public boolean isEquals(double lat, double lon) { + return this.latitude == lat && this.longitude == lon; + } + @Override public String toString() { return String.format("lat=%,4f ; lon=%,4f ; time=%s", getLatitude(), getLongitude(), getDate()); diff --git a/app/src/main/java/fr/chteufleur/mytrackingdog/models/beans/WayPointLocation.java b/app/src/main/java/fr/chteufleur/mytrackingdog/models/beans/WayPointLocation.java index f707d91..c0339b2 100644 --- a/app/src/main/java/fr/chteufleur/mytrackingdog/models/beans/WayPointLocation.java +++ b/app/src/main/java/fr/chteufleur/mytrackingdog/models/beans/WayPointLocation.java @@ -1,14 +1,32 @@ package fr.chteufleur.mytrackingdog.models.beans; -import android.location.Location; - - public class WayPointLocation extends MyLocation { - public WayPointLocation(Location l) { - super(l); + + private boolean isFound = false; + + public WayPointLocation(MyLocation l) { + this(l.getLatitude(), l.getLongitude(), l.getTime(), false); + } + public WayPointLocation(double lat, double lon, long time, boolean isFound) { + super(lat, lon, time); + this.isFound = isFound; } - public WayPointLocation(double lat, double lon, long time) { - super(lat, lon, time); + public boolean isFound() { + return isFound; + } + public void setFound() { + isFound = true; + } + public void setNotFound() { + isFound = false; + } + + public String toWayPoint() { + String ret = ""; + ret += ""; + ret += ""+isFound+""; + ret += ""; + return ret; } } diff --git a/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java b/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java index b772858..6869d04 100644 --- a/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java +++ b/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java @@ -146,11 +146,13 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe return traces.isDogActivated(); } - public MyLocation addPointObject() { + public WayPointLocation addPointObject() { + WayPointLocation wpl = null; if (currentLocation != null) { - traces.addPointObject(currentLocation); + wpl = new WayPointLocation(currentLocation); + traces.addPointObject(wpl); } - return currentLocation; + return wpl; } public MyLocationArray getListGeoPointTraceur() { @@ -162,6 +164,9 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe public MyLocationArray getListGeoPointObjects() { return traces.getListPointObjects(); } + public WayPointLocation getPoint(double lat, double lon) { + return traces.getPoint(lat, lon); + } public String getFileName(String prefix) { SimpleDateFormat formater = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); @@ -174,6 +179,7 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe public boolean exportDogTraceToGpx() { File file = new File(getFileName(Gpx.DOG_TRACE_NAME)); ExportGpx exportGpx = new ExportGpx(file, Gpx.DOG_TRACE_NAME); + exportGpx.setObjects(traces.getListPointObjects()); exportGpx.setTrace(traces.getListPointDog()); return exportGpx.export(); } diff --git a/app/src/main/res/drawable/ic_marker.png b/app/src/main/res/drawable/ic_marker.png new file mode 100644 index 0000000000000000000000000000000000000000..78f2b57d657af026ef704dc8fae73a476c02ce82 GIT binary patch literal 9397 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_marker_blue.png b/app/src/main/res/drawable/ic_marker_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..864470c27c4b61a63b97ded00639f8d2f8e47332 GIT binary patch literal 760 zcmVwmF0)t$wrtt5Wy>aSB(#=i zGjX7)1z-!H6M!xO8UjRPKD5V9?AlgrF(d@|0MPja*t&jRUZZhkPMZJ~4DfL;%4@2x z2zq79n1uYYjG+^LLlAu2H?+a;M})6@UkiLU0et1%)bP6r;Va)w1^-R~eB}!O86OJ6 zXm@`BJX7)<4glkoi|-_OtOy1y`6CF*Y+6q`lph;f51$xcmIxV zw3F;HV+^F=+swqiI>h?SjMbJ9V40cJ(|XS)!LH@RT9#;o^9=RA0cKdQ=@^u2@r4m@ zUP6EtBcbmeA4M-1@mdlBaO}6+$YJa`y1okkW5jtA=^W==T?F{WNa%f}b3)`Q)&>_H zy1*hc))S3`Q2+iR=*}?Ik2MInz68%0>U99R0xR4Y2FalTZv>D3VVUGx(6w^EB=2HR6KZ%(_xB^T8;7B3-kt@7s1&k`;8o+ZU@Hc>Y zAw3F@_v;l!cYh_(Z*$sK@Kgz(LIUE zil7}{RD`C$i-^!P_@E**6+VavO@|+e@UejtUT_gs9pG0nomNYPX@##P!nDIbD8gfb qpD4m(gCB{oR(iH<*|KFzV*deFUpo*^_PT!n0000|-a`D4513g*JW&Eo_9`f#63-kfgH@ zk`(D}lTvavhH&ISm=x~8j&_kY9A>>eabmMmGaWXZHml-9=D zR29$yE#R%dvB0^&P(a3f=)XJmYg<)|p&`JUz}YRZdHqaat#M^8uqn`w03Y|hz^3_% z5SaC4EJ}VZFl!ZlLlJ!3H>|<$RR}-wJuC3t8sJCXts8!)M);BM)CIq20Dk1J1zZsh z7t!wi0FRAqLjzYZm!gy4dqeO5ZMn%ww*vf|e+K+AI*L38`cA6?{Db!m&tm&ddk+xf z)2It%nhGg@f%Ot|y#~H|zb>&mt*gBufs+zi)^~wdw>t`lA6 zB-x9MG0=i=Uz$A4mu2_<8Xl(M~3;23J4Zl0j96S9Q0Kyzy~-q2!9v~U#J2ym2d?-F#`YF z!Bg!~c)VXP8+!Z8wd~9STL%6W+NxE0frA?14@}fwP5%&gO>MyfyA{Iknry-X+ZDiX zTb@L3;a%e