Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
7e8fa734ce
3 changed files with 77 additions and 69 deletions
|
@ -980,7 +980,7 @@ public class OsmandSettings {
|
|||
|
||||
public final OsmandPreference<Boolean> OSMO_SHOW_GROUP_NOTIFICATIONS = new BooleanPreference("osmo_show_toast_notifications", true).makeGlobal();
|
||||
|
||||
public final CommonPreference<Integer> OSMO_SAVE_TRACK_INTERVAL = new IntPreference("osmo_save_track_interval", 5000).makeGlobal().cache();
|
||||
public final CommonPreference<Integer> OSMO_SAVE_TRACK_INTERVAL = new IntPreference("osmo_save_track_interval", 10000).makeGlobal().cache();
|
||||
|
||||
public final OsmandPreference<String> OSMO_GROUPS = new StringPreference("osmo_groups", "{}").makeGlobal();
|
||||
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
package net.osmand.plus.osmo;
|
||||
|
||||
import net.osmand.Location;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.osmo.OsMoGroupsStorage.OsMoDevice;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
|
||||
import net.osmand.Location;
|
||||
import net.osmand.plus.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.osmo.OsMoGroupsStorage.OsMoDevice;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class OsMoTracker implements OsMoReactor {
|
||||
private ConcurrentLinkedQueue<Location> bufferOfLocations = new ConcurrentLinkedQueue<Location>();
|
||||
private OsMoService service;
|
||||
|
@ -22,70 +24,71 @@ public class OsMoTracker implements OsMoReactor {
|
|||
private String sessionURL;
|
||||
private Map<String, OsMoDevice> trackingDevices = new java.util.concurrent.ConcurrentHashMap<String, OsMoGroupsStorage.OsMoDevice>();
|
||||
private OsmandPreference<Boolean> stateSendLocation;
|
||||
|
||||
protected static final Log LOG = PlatformUtil.getLog(OsMoTracker.class);
|
||||
|
||||
public interface OsmoTrackerListener {
|
||||
|
||||
|
||||
public void locationChange(String trackerId, Location location);
|
||||
}
|
||||
|
||||
|
||||
public OsMoTracker(OsMoService service, OsmandPreference<Integer> interval,
|
||||
OsmandPreference<Boolean> stateSendLocation) {
|
||||
|
||||
public OsMoTracker(OsMoService service, OsmandPreference<Integer> interval,
|
||||
OsmandPreference<Boolean> stateSendLocation) {
|
||||
this.service = service;
|
||||
this.pref = interval;
|
||||
this.stateSendLocation = stateSendLocation;
|
||||
service.registerReactor(this);
|
||||
}
|
||||
|
||||
|
||||
public String getSessionURL() {
|
||||
if (!isEnabledTracker() || sessionURL == null) {
|
||||
return null;
|
||||
}
|
||||
return OsMoService.TRACK_URL + sessionURL;
|
||||
}
|
||||
|
||||
|
||||
public boolean isEnabledTracker() {
|
||||
return stateSendLocation.get();
|
||||
}
|
||||
|
||||
|
||||
public void enableTracker() {
|
||||
if(!isEnabledTracker()) {
|
||||
if (!isEnabledTracker()) {
|
||||
enableTrackerCmd();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void enableTrackerCmd() {
|
||||
stateSendLocation.set(true);
|
||||
service.pushCommand("TRACKER_SESSION_OPEN");
|
||||
}
|
||||
|
||||
|
||||
public void disableTracker() {
|
||||
if(isEnabledTracker()) {
|
||||
if (isEnabledTracker()) {
|
||||
stateSendLocation.set(false);
|
||||
service.pushCommand("TRACKER_SESSION_CLOSE");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void startTrackingId(OsMoDevice d) {
|
||||
service.pushCommand("LISTEN:"+d.getTrackerId());
|
||||
service.pushCommand("LISTEN:" + d.getTrackerId());
|
||||
trackingDevices.put(d.getTrackerId(), d);
|
||||
}
|
||||
|
||||
|
||||
public void stopTrackingId(OsMoDevice d) {
|
||||
service.pushCommand("UNLISTEN:"+d.getTrackerId());
|
||||
service.pushCommand("UNLISTEN:" + d.getTrackerId());
|
||||
trackingDevices.remove(d.getTrackerId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String nextSendCommand(OsMoThread thread) {
|
||||
if(!bufferOfLocations.isEmpty()){
|
||||
if (!bufferOfLocations.isEmpty()) {
|
||||
Location loc = bufferOfLocations.poll();
|
||||
lastSendLocation = loc;
|
||||
locationsSent ++;
|
||||
if((System.currentTimeMillis() - loc.getTime()) > 2 * 60000 && loc.getTime() != 0) {
|
||||
return "B|"+formatLocation(loc);
|
||||
locationsSent++;
|
||||
if ((System.currentTimeMillis() - loc.getTime()) > 2 * 60000 && loc.getTime() != 0) {
|
||||
return "B|" + formatLocation(loc);
|
||||
} else {
|
||||
return "T|"+formatLocation(loc);
|
||||
return "T|" + formatLocation(loc);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
@ -93,37 +96,38 @@ public class OsMoTracker implements OsMoReactor {
|
|||
|
||||
public static String formatLocation(Location loc) {
|
||||
StringBuilder cmd = new StringBuilder();
|
||||
cmd.append("L").append((float)loc.getLatitude()).append(":").append((float)loc.getLongitude());
|
||||
if(loc.hasAccuracy()) {
|
||||
cmd.append("H").append((int)loc.getAccuracy());
|
||||
cmd.append("L").append((float) loc.getLatitude()).append(":").append((float) loc.getLongitude());
|
||||
if (loc.hasAccuracy()) {
|
||||
cmd.append("H").append((int) loc.getAccuracy());
|
||||
}
|
||||
if(loc.hasAltitude()) {
|
||||
cmd.append("A").append((int)loc.getAltitude());
|
||||
if (loc.hasAltitude()) {
|
||||
cmd.append("A").append((int) loc.getAltitude());
|
||||
}
|
||||
if(loc.hasSpeed()) {
|
||||
cmd.append("S").append((float)((int)(loc.getSpeed()*100))/100f);
|
||||
if (loc.hasSpeed() && (int) (loc.getSpeed() * 100) != 0) {
|
||||
cmd.append("S").append((float) ((int) (loc.getSpeed() * 100)) / 100f);
|
||||
}
|
||||
if(loc.hasBearing()) {
|
||||
cmd.append("C").append((int)loc.getBearing());
|
||||
if (loc.hasBearing()) {
|
||||
cmd.append("C").append((int) loc.getBearing());
|
||||
}
|
||||
if((System.currentTimeMillis() - loc.getTime()) > 30000 && loc.getTime() != 0) {
|
||||
if ((System.currentTimeMillis() - loc.getTime()) > 30000 && loc.getTime() != 0) {
|
||||
cmd.append("T").append(loc.getTime());
|
||||
}
|
||||
LOG.debug("formatLocation cmd=" + cmd);
|
||||
return cmd.toString();
|
||||
}
|
||||
|
||||
|
||||
public Location getLastSendLocation() {
|
||||
return lastSendLocation;
|
||||
}
|
||||
|
||||
public void sendCoordinate(Location location) {
|
||||
if(stateSendLocation.get() && location != null) {
|
||||
if (stateSendLocation.get() && location != null) {
|
||||
long ltime = lastBufferLocation == null ? 0 : lastBufferLocation.getTime();
|
||||
|
||||
if (location.getTime() - ltime > pref.get()) {
|
||||
if(lastBufferLocation != null && (!lastBufferLocation.hasSpeed() || lastBufferLocation.getSpeed() < 1) &&
|
||||
lastBufferLocation.distanceTo(location) < 20){
|
||||
if(lastBufferLocation != null && location.getTime() - ltime < 60000) {
|
||||
|
||||
if (location.getTime() - ltime > pref.get()) {
|
||||
if (lastBufferLocation != null && (!lastBufferLocation.hasSpeed() || lastBufferLocation.getSpeed() < 1) &&
|
||||
lastBufferLocation.distanceTo(location) < 20) {
|
||||
if (lastBufferLocation != null && location.getTime() - ltime < 60000) {
|
||||
// ignores
|
||||
return;
|
||||
}
|
||||
|
@ -133,11 +137,11 @@ public class OsMoTracker implements OsMoReactor {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int getLocationsSent() {
|
||||
return locationsSent;
|
||||
}
|
||||
|
||||
|
||||
public int getBufferLocationsSize() {
|
||||
return bufferOfLocations.size();
|
||||
}
|
||||
|
@ -149,17 +153,17 @@ public class OsMoTracker implements OsMoReactor {
|
|||
l.setLongitude(lon);
|
||||
sendCoordinate(l);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public boolean acceptCommand(String command, String tid, String data, JSONObject obj, OsMoThread thread) {
|
||||
if(command.equals("LISTEN")) {
|
||||
if (command.equals("LISTEN")) {
|
||||
return true;
|
||||
} else if(command.equals("UNLISTEN")) {
|
||||
} else if (command.equals("UNLISTEN")) {
|
||||
return true;
|
||||
} else if(command.equals("TRACKER_SESSION_CLOSE")) {
|
||||
} else if (command.equals("TRACKER_SESSION_CLOSE")) {
|
||||
return true;
|
||||
} else if(command.equals("TRACKER_SESSION_OPEN")) {
|
||||
} else if (command.equals("TRACKER_SESSION_OPEN")) {
|
||||
try {
|
||||
sessionURL = obj.getString("url");
|
||||
} catch (JSONException e) {
|
||||
|
@ -167,15 +171,15 @@ public class OsMoTracker implements OsMoReactor {
|
|||
e.printStackTrace();
|
||||
}
|
||||
return true;
|
||||
} else if(command.equals("LT")) {
|
||||
} else if (command.equals("LT")) {
|
||||
double lat = 0;
|
||||
double lon = 0;
|
||||
double speed = 0;
|
||||
int k = 0;
|
||||
for (int i = 1; i <= data.length(); i++) {
|
||||
boolean separator = i == data.length() ||
|
||||
!(Character.isDigit(data.charAt(i)) ||
|
||||
data.charAt(i) == ':' || data.charAt(i) == '.' || data.charAt(i) == '-');
|
||||
boolean separator = i == data.length() ||
|
||||
!(Character.isDigit(data.charAt(i)) ||
|
||||
data.charAt(i) == ':' || data.charAt(i) == '.' || data.charAt(i) == '-');
|
||||
if (separator) {
|
||||
char ch = data.charAt(k);
|
||||
String vl = data.substring(k + 1, i);
|
||||
|
@ -189,15 +193,15 @@ public class OsMoTracker implements OsMoReactor {
|
|||
k = i;
|
||||
}
|
||||
}
|
||||
if(lat != 0 || lon != 0) {
|
||||
if (lat != 0 || lon != 0) {
|
||||
Location loc = new Location("osmo");
|
||||
loc.setTime(System.currentTimeMillis());
|
||||
loc.setLatitude(lat);
|
||||
loc.setLongitude(lon);
|
||||
if(speed > 0) {
|
||||
if (speed > 0) {
|
||||
loc.setSpeed((float) speed);
|
||||
}
|
||||
if(trackerListener != null) {
|
||||
if (trackerListener != null) {
|
||||
trackerListener.locationChange(tid, loc);
|
||||
}
|
||||
}
|
||||
|
@ -205,15 +209,15 @@ public class OsMoTracker implements OsMoReactor {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public void setTrackerListener(OsmoTrackerListener trackerListener) {
|
||||
this.trackerListener = trackerListener;
|
||||
}
|
||||
|
||||
|
||||
public OsmoTrackerListener getTrackerListener() {
|
||||
return trackerListener;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public Collection<OsMoDevice> getTrackingDevices() {
|
||||
return trackingDevices.values();
|
||||
|
@ -221,7 +225,7 @@ public class OsMoTracker implements OsMoReactor {
|
|||
|
||||
@Override
|
||||
public void onConnected() {
|
||||
if(stateSendLocation.get()) {
|
||||
if (stateSendLocation.get()) {
|
||||
enableTrackerCmd();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -104,11 +104,15 @@ public class DoubleTapScaleDetector {
|
|||
return false;
|
||||
}
|
||||
|
||||
int deltaX = (int) firstDown.getX() - (int) secondDown.getX();
|
||||
int deltaY = (int) firstDown.getY() - (int) secondDown.getY();
|
||||
int squared = deltaX * deltaX + deltaY * deltaY;
|
||||
boolean toReturn = squared < mDoubleTapSlopSquare;
|
||||
return toReturn;
|
||||
int deltaXDown = (int) firstDown.getX() - (int) secondDown.getX();
|
||||
int deltaYDown = (int) firstDown.getY() - (int) secondDown.getY();
|
||||
int squaredDown = deltaXDown * deltaXDown + deltaYDown * deltaYDown;
|
||||
|
||||
int deltaXUp = (int) firstUp.getX() - (int) secondDown.getX();
|
||||
int deltaYUp = (int) firstUp.getY() - (int) secondDown.getY();
|
||||
int squaredUp = deltaXUp * deltaXUp + deltaYUp * deltaYUp;
|
||||
|
||||
return squaredDown < mDoubleTapSlopSquare && squaredUp < mDoubleTapSlopSquare;
|
||||
}
|
||||
|
||||
private static final boolean isConfirmedScale(MotionEvent secondDown,
|
||||
|
|
Loading…
Reference in a new issue