Add object location received on XMPP.

This commit is contained in:
chteufleur 2018-10-03 15:59:38 +02:00
parent 367c72bf8c
commit f1ad139832
5 changed files with 169 additions and 20 deletions

View File

@ -182,7 +182,11 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
@Override
public void onClick(View view) {
if (serviceGps.isTraceurActivated()) {
addMarker();
WayPointLocation loc = serviceGps.addPointObjectTrail();
if (loc != null) {
GeoPoint gp = new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude());
addMarker(gp, loc.isFound());
}
} else if (serviceGps.isDogActivated()) {
markAsFound();
}
@ -248,13 +252,6 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
}
}
private void addMarker() {
WayPointLocation loc = serviceGps.addPointObjectTrail();
GeoPoint gp = new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude());
addMarker(gp, loc.isFound());
}
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));
@ -620,7 +617,7 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
public void updateServiceGps(Object o) {
if (o instanceof String && o.equals(ServiceGps.NOTIF_NEW_LOCATION)) {
MyLocation loc = serviceGps.getCurrentLocation();
onNewGeoloc(loc);
onNewLocation(loc);
}
}
@ -631,7 +628,17 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
@Override
public void run() {
MyLocation loc = serviceXmpp.getCurrentLocation();
onNewGeoloc(loc);
onNewLocation(loc);
}
});
} else if (o.equals(ServiceXmpp.NOTIF_NEW_OBJECT)){
runOnUiThread(new Runnable() {
@Override
public void run() {
MyLocation locObj = serviceXmpp.getLastObjectXmppLocation();
WayPointLocation loc = serviceGps.addPointObjectTrail(locObj);
GeoPoint gp = new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude());
addMarker(gp, loc.isFound());
}
});
} else if (o.equals(ServiceXmpp.NOTIF_START_TRAIL)){
@ -652,7 +659,7 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
}
}
private void onNewGeoloc(MyLocation loc) {
private void onNewLocation(MyLocation loc) {
if (loc != null) {
serviceGps.addPoint(loc);
GeoPoint currentPoint = new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude());

View File

@ -0,0 +1,119 @@
package fr.chteufleur.mytrackingdog.models.xmpp.commands;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.commands.AdHocCommandNote;
import org.jivesoftware.smackx.commands.LocalCommand;
import org.jivesoftware.smackx.xdata.Form;
import org.jivesoftware.smackx.xdata.FormField;
import org.jivesoftware.smackx.xdata.packet.DataForm;
import org.jxmpp.jid.Jid;
import java.util.List;
import fr.chteufleur.mytrackingdog.services.ServiceXmpp;
public class ObjectGeolocCommand extends LocalCommand {
public static final String TAG = ObjectGeolocCommand.class.getName();
public static final String FIELD_PARAM_LATITUDE = "latitude";
public static final String FIELD_PARAM_LONGITUDE = "longitude";
public static final String FIELD_PARAM_TIME = "time";
private final ServiceXmpp serviceXmpp;
public ObjectGeolocCommand(ServiceXmpp serviceXmpp) {
this.serviceXmpp = serviceXmpp;
}
@Override
public boolean isLastStage() {
return getCurrentStage() == 1;
}
@Override
public boolean hasPermission(Jid jid) {
return true;
}
@Override
public void execute() throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {
Form result = new Form(DataForm.Type.form);
setExecuteAction(Action.next);
FormField resultFieldLatitude = new FormField(FIELD_PARAM_LATITUDE);
resultFieldLatitude.setLabel(FIELD_PARAM_LATITUDE);
resultFieldLatitude.setType(FormField.Type.text_single);
result.addField(resultFieldLatitude);
FormField resultFieldLongitude = new FormField(FIELD_PARAM_LONGITUDE);
resultFieldLongitude.setLabel(FIELD_PARAM_LONGITUDE);
resultFieldLongitude.setType(FormField.Type.text_single);
result.addField(resultFieldLongitude);
FormField resultFieldTime = new FormField(FIELD_PARAM_TIME);
resultFieldTime.setLabel(FIELD_PARAM_TIME);
resultFieldTime.setType(FormField.Type.text_single);
result.addField(resultFieldTime);
this.addActionAvailable(Action.next);
setForm(result);
}
@Override
public void next(Form response) throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {
FormField formLatitude = response.getField(FIELD_PARAM_LATITUDE);
FormField formLongitude = response.getField(FIELD_PARAM_LONGITUDE);
FormField formTime = response.getField(FIELD_PARAM_TIME);
if (formLatitude != null && formLongitude != null && formTime != null) {
List<String> latitudeStrs = formLatitude.getValues();
List<String> longitudeStrs = response.getField(FIELD_PARAM_LONGITUDE).getValues();
List<String> timeStrs = response.getField(FIELD_PARAM_TIME).getValues();
double latitude = 0, longitude = 0;
int time = 0;
for (String latitudeStr : latitudeStrs) {
try {
latitude = Double.parseDouble(latitudeStr);
break;
} catch (NumberFormatException ex) {
}
}
for (String longitudeStr : longitudeStrs) {
try {
longitude = Double.parseDouble(longitudeStr);
break;
} catch (NumberFormatException ex) {
}
}
for (String timeStr : timeStrs) {
try {
time = Integer.parseInt(timeStr);
break;
} catch (NumberFormatException ex) {
}
}
if (serviceXmpp != null && latitude != 0 && longitude != 0 && time != 0) {
serviceXmpp.addObjectGeoloc(latitude, longitude, time);
}
this.addNote(new AdHocCommandNote(AdHocCommandNote.Type.info, "SUCCESS"));
} else {
this.addNote((new AdHocCommandNote(AdHocCommandNote.Type.error, "FAIL")));
}
}
@Override
public void complete(Form response) throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {
}
@Override
public void prev() throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {
}
@Override
public void cancel() throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {
}
}

View File

@ -1,8 +1,5 @@
package fr.chteufleur.mytrackingdog.models.xmpp.commands;
import android.app.Service;
import android.util.Log;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.commands.AdHocCommandNote;
@ -75,18 +72,18 @@ public class TrailGeolocCommand extends LocalCommand {
List<String> longitudeStrs = response.getField(FIELD_PARAM_LONGITUDE).getValues();
List<String> timeStrs = response.getField(FIELD_PARAM_TIME).getValues();
long latitude = 0, longitude = 0;
double latitude = 0, longitude = 0;
int time = 0;
for (String latitudeStr : latitudeStrs) {
try {
latitude = Long.parseLong(latitudeStr);
latitude = Double.parseDouble(latitudeStr);
break;
} catch (NumberFormatException ex) {
}
}
for (String longitudeStr : longitudeStrs) {
try {
longitude = Long.parseLong(longitudeStr);
longitude = Double.parseDouble(longitudeStr);
break;
} catch (NumberFormatException ex) {
}

View File

@ -205,9 +205,13 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe
}
public WayPointLocation addPointObjectTrail() {
return addPointObjectTrail(currentLocation);
}
public WayPointLocation addPointObjectTrail(MyLocation location) {
WayPointLocation wpl = null;
if (currentLocation != null) {
wpl = new WayPointLocation(currentLocation);
if (location != null) {
wpl = new WayPointLocation(location);
traces.addPointObjectTrail(wpl);
}
return wpl;

View File

@ -31,6 +31,7 @@ import java.util.Observable;
import fr.chteufleur.mytrackingdog.QRCodeGeneratorActivity;
import fr.chteufleur.mytrackingdog.models.beans.MyLocation;
import fr.chteufleur.mytrackingdog.models.xmpp.commands.ObjectGeolocCommand;
import fr.chteufleur.mytrackingdog.models.xmpp.commands.StartTrailGeolocCommand;
import fr.chteufleur.mytrackingdog.models.xmpp.commands.StopTrailGeolocCommand;
import fr.chteufleur.mytrackingdog.models.xmpp.commands.TrailGeolocCommand;
@ -40,10 +41,12 @@ public class ServiceXmpp extends Observable implements PresenceEventListener {
public static final String TAG = ServiceXmpp.class.getName();
public static final String NOTIF_NEW_LOCATION = ServiceXmpp.class.getName()+".newlocation";
public static final String NOTIF_NEW_OBJECT = ServiceXmpp.class.getName()+".newobject";
public static final String NOTIF_START_TRAIL = ServiceXmpp.class.getName()+".starttrail";
public static final String NOTIF_STOP_TRAIL = ServiceXmpp.class.getName()+".stoptrail";
private static final String XMPP_NODE_TRAIL_GEOLOC = "trail_geoloc";
private static final String XMPP_NODE_OBJECT_GEOLOC = "object_geoloc";
private static final String XMPP_NODE_START_TRAIL_GEOLOC = "start_trail_geoloc";
private static final String XMPP_NODE_STOP_TRAIL_GEOLOC = "stop_trail_geoloc";
@ -92,6 +95,12 @@ public class ServiceXmpp extends Observable implements PresenceEventListener {
return new TrailGeolocCommand(thsi);
}
});
commandManager.registerCommand(XMPP_NODE_OBJECT_GEOLOC, XMPP_NODE_OBJECT_GEOLOC, new LocalCommandFactory() {
@Override
public LocalCommand getInstance() throws InstantiationException, IllegalAccessException {
return new ObjectGeolocCommand(thsi);
}
});
commandManager.registerCommand(XMPP_NODE_START_TRAIL_GEOLOC, XMPP_NODE_START_TRAIL_GEOLOC, new LocalCommandFactory() {
@Override
public LocalCommand getInstance() throws InstantiationException, IllegalAccessException {
@ -201,22 +210,35 @@ public class ServiceXmpp extends Observable implements PresenceEventListener {
//<editor-fold defaultstate="collapsed" desc="Commands">
private MyLocation currentXmppLocation = null;
private MyLocation lastObjectXmppLocation = null;
public void startTrailGeoloc() {
Log.i(TAG, "Start trail");
setChanged();
notifyObservers(NOTIF_START_TRAIL);
}
public void stopTrailGeoloc() {
Log.i(TAG, "Stop trail");
setChanged();
notifyObservers(NOTIF_STOP_TRAIL);
}
public void addTrailGeoloc(long lat, long lon, int time) {
public void addTrailGeoloc(double lat, double lon, int time) {
Log.i(TAG, "Add location");
currentXmppLocation = new MyLocation(lat, lon, time);
setChanged();
notifyObservers(NOTIF_NEW_LOCATION);
}
public void addObjectGeoloc(double lat, double lon, int time) {
Log.i(TAG, "Add object");
lastObjectXmppLocation = new MyLocation(lat, lon, time);
setChanged();
notifyObservers(NOTIF_NEW_OBJECT);
}
public MyLocation getCurrentLocation() {
return currentXmppLocation;
}
public MyLocation getLastObjectXmppLocation() {
return lastObjectXmppLocation;
}
//</editor-fold>
public void setOtherJid(String otherJid) {