commit
604e8ed44e
7 changed files with 607 additions and 105 deletions
9
OsmAnd/src/com/OsMoDroid/IRemoteOsMoDroidListener.aidl
Normal file
9
OsmAnd/src/com/OsMoDroid/IRemoteOsMoDroidListener.aidl
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
package com.OsMoDroid;
|
||||||
|
|
||||||
|
interface IRemoteOsMoDroidListener {
|
||||||
|
|
||||||
|
void channelUpdated();
|
||||||
|
void channelsListUpdated();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,27 +1,46 @@
|
||||||
package com.OsMoDroid;
|
package com.OsMoDroid;
|
||||||
|
|
||||||
|
import com.OsMoDroid.IRemoteOsMoDroidListener;
|
||||||
|
|
||||||
interface IRemoteOsMoDroidService {
|
interface IRemoteOsMoDroidService {
|
||||||
|
|
||||||
int getVersion();
|
void registerListener(IRemoteOsMoDroidListener listener);
|
||||||
/*
|
|
||||||
int getNumberOfLayers();
|
void unregisterListener(IRemoteOsMoDroidListener listener);
|
||||||
|
|
||||||
int getLayerId(int pos);
|
int getVersion();
|
||||||
|
|
||||||
String getLayerName(int layerId);
|
int getBackwardCompatibleVersion();
|
||||||
|
|
||||||
String getLayerDescription(int layerId);
|
void Deactivate();
|
||||||
|
|
||||||
int getNumberOfObjects(int layerId);
|
void Activate();
|
||||||
|
|
||||||
int getObjectId(int layerId, int pos);
|
boolean isActive();
|
||||||
|
|
||||||
float getObjectLat(int layerId, int objectId);
|
int getNumberOfLayers();
|
||||||
|
|
||||||
float getObjectLon(int layerId, int objectId);
|
int getLayerId(int pos);
|
||||||
|
|
||||||
String getObjectName(int layerId, int objectId);
|
String getLayerName(int layerId);
|
||||||
|
|
||||||
String getObjectDescription(int layerId, int objectId);
|
String getLayerDescription(int layerId);
|
||||||
*/
|
|
||||||
|
int getNumberOfObjects(int layerId);
|
||||||
|
|
||||||
|
int getObjectId(int layerId, int pos);
|
||||||
|
|
||||||
|
float getObjectLat(int layerId, int objectId);
|
||||||
|
|
||||||
|
float getObjectLon(int layerId, int objectId);
|
||||||
|
|
||||||
|
String getObjectSpeed(int layerId, int objectId);
|
||||||
|
|
||||||
|
String getObjectName(int layerId, int objectId);
|
||||||
|
|
||||||
|
String getObjectDescription(int layerId, int objectId);
|
||||||
|
|
||||||
|
String getObjectColor(int layerId, int objectId);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -96,6 +96,42 @@ public class ContextMenuAdapter {
|
||||||
return itemNames.toArray(new String[itemNames.size()]);
|
return itemNames.toArray(new String[itemNames.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void registerSelectedItem(String string, int selected, int icon,OnContextMenuClick listener, int pos) {
|
||||||
|
if(pos >= items.size() || pos < 0) {
|
||||||
|
pos = items.size();
|
||||||
|
}
|
||||||
|
items.insert(pos, pos);
|
||||||
|
itemNames.add(pos, string);
|
||||||
|
selectedList.insert(pos, selected);
|
||||||
|
iconList.insert(pos, icon);
|
||||||
|
listeners.add(pos, listener);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerItem(String string) {
|
||||||
|
registerSelectedItem(string, -1, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerSelectedItem(String string, int selected, int icon) {
|
||||||
|
registerSelectedItem(string, selected, icon, null, -1);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerItem(String name, int id, OnContextMenuClick listener, int pos) {
|
||||||
|
if(pos >= items.size() || pos < 0) {
|
||||||
|
pos = items.size();
|
||||||
|
}
|
||||||
|
items.insert(pos, id);
|
||||||
|
itemNames.add(pos, name);
|
||||||
|
listeners.add(pos, listener);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public ListAdapter createListAdapter(final Activity activity, final int layoutId) {
|
public ListAdapter createListAdapter(final Activity activity, final int layoutId) {
|
||||||
final int padding = (int) (12 * activity.getResources().getDisplayMetrics().density + 0.5f);
|
final int padding = (int) (12 * activity.getResources().getDisplayMetrics().density + 0.5f);
|
||||||
ListAdapter listadapter = new ArrayAdapter<String>(activity, layoutId, R.id.title,
|
ListAdapter listadapter = new ArrayAdapter<String>(activity, layoutId, R.id.title,
|
||||||
|
|
|
@ -168,19 +168,21 @@ public class DistanceCalculatorPlugin extends OsmandPlugin {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
int id = list.get(which);
|
int id = list.get(which);
|
||||||
switch (id) {
|
if (id == R.string.distance_measurement_start_editing) {
|
||||||
case R.string.distance_measurement_start_editing :
|
distanceMeasurementMode = 1;
|
||||||
distanceMeasurementMode = 1; startEditingHelp(activity) ; break;
|
startEditingHelp(activity) ;
|
||||||
case R.string.distance_measurement_finish_editing :
|
} else if (id == R.string.distance_measurement_finish_editing) {
|
||||||
distanceMeasurementMode = 0; break;
|
distanceMeasurementMode = 0;
|
||||||
case R.string.distance_measurement_finish_subtrack :
|
} else if (id == R.string.distance_measurement_finish_subtrack) {
|
||||||
measurementPoints.add(new LinkedList<GPXUtilities.WptPt>()); break;
|
measurementPoints.add(new LinkedList<GPXUtilities.WptPt>());
|
||||||
case R.string.distance_measurement_clear_route :
|
} else if (id == R.string.distance_measurement_clear_route) {
|
||||||
distanceMeasurementMode = 0; measurementPoints.clear(); calculateDistance(); break;
|
distanceMeasurementMode = 0;
|
||||||
case R.string.distance_measurement_save_gpx :
|
measurementPoints.clear();
|
||||||
saveGpx(activity); break;
|
calculateDistance();
|
||||||
case R.string.distance_measurement_load_gpx :
|
} else if (id == R.string.distance_measurement_save_gpx) {
|
||||||
loadGpx(activity); break;
|
saveGpx(activity);
|
||||||
|
} else if (id == R.string.distance_measurement_load_gpx) {
|
||||||
|
loadGpx(activity);
|
||||||
}
|
}
|
||||||
activity.getMapView().refreshMap();
|
activity.getMapView().refreshMap();
|
||||||
updateText();
|
updateText();
|
||||||
|
|
281
OsmAnd/src/net/osmand/plus/osmodroid/OsMoDroidLayer.java
Normal file
281
OsmAnd/src/net/osmand/plus/osmodroid/OsMoDroidLayer.java
Normal file
|
@ -0,0 +1,281 @@
|
||||||
|
package net.osmand.plus.osmodroid;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import net.osmand.access.AccessibleToast;
|
||||||
|
import net.osmand.data.Amenity;
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
|
import net.osmand.plus.ContextMenuAdapter;
|
||||||
|
import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.OsmandSettings;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.views.ContextMenuLayer;
|
||||||
|
import net.osmand.plus.views.OsmandMapLayer;
|
||||||
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.PointF;
|
||||||
|
import android.graphics.RectF;
|
||||||
|
import android.graphics.Typeface;
|
||||||
|
import android.os.RemoteException;
|
||||||
|
import android.text.format.DateFormat;
|
||||||
|
import android.text.format.Time;
|
||||||
|
import android.util.DisplayMetrics;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
import android.widget.Toast;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class represents a OsMoDroidlayer which depicts the position of Esya.ru channels objects
|
||||||
|
* @author Denis Fokin
|
||||||
|
* @see OsMoDroidPlugin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class OsMoDroidLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider {
|
||||||
|
/**
|
||||||
|
* magic number so far
|
||||||
|
*/
|
||||||
|
private static final int radius = 10;
|
||||||
|
|
||||||
|
OsMoDroidPlugin myOsMoDroidPlugin;
|
||||||
|
|
||||||
|
private DisplayMetrics dm;
|
||||||
|
|
||||||
|
private final MapActivity map;
|
||||||
|
private OsmandMapTileView view;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private Paint textPaint;
|
||||||
|
|
||||||
|
ArrayList<OsMoDroidPoint> OsMoDroidPointArrayList;
|
||||||
|
|
||||||
|
int layerId;
|
||||||
|
String layerName;
|
||||||
|
String layerDescription;
|
||||||
|
private Bitmap opIcon;
|
||||||
|
|
||||||
|
public void refresh(){
|
||||||
|
map.refreshMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
public OsMoDroidLayer(MapActivity map) {
|
||||||
|
this.map = map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OsMoDroidLayer(MapActivity map, int layerId, OsMoDroidPlugin osMoDroidPlugin, String layerName, String layerDescription) {
|
||||||
|
this.map = map;
|
||||||
|
this.layerId=layerId;
|
||||||
|
this.myOsMoDroidPlugin=osMoDroidPlugin;
|
||||||
|
this.layerName=layerName;
|
||||||
|
this.layerDescription=layerDescription;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initLayer(OsmandMapTileView view) {
|
||||||
|
this.view = view;
|
||||||
|
dm = new DisplayMetrics();
|
||||||
|
WindowManager wmgr = (WindowManager) view.getContext().getSystemService(Context.WINDOW_SERVICE);
|
||||||
|
wmgr.getDefaultDisplay().getMetrics(dm);
|
||||||
|
textPaint = new Paint();
|
||||||
|
textPaint.setDither(true);
|
||||||
|
textPaint.setAntiAlias(true);
|
||||||
|
textPaint.setFilterBitmap(true);
|
||||||
|
|
||||||
|
textPaint.setTextSize(22f);
|
||||||
|
textPaint.setTypeface(Typeface.DEFAULT_BOLD);
|
||||||
|
textPaint.setTextAlign(Paint.Align.CENTER);
|
||||||
|
opIcon=BitmapFactory.decodeResource(view.getResources(), R.drawable.bicycle_location);
|
||||||
|
OsMoDroidPointArrayList = myOsMoDroidPlugin.getOsMoDroidPointArrayList(layerId);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDraw(Canvas canvas, RectF latLonBounds, RectF tilesRect, DrawSettings nightMode) {
|
||||||
|
|
||||||
|
|
||||||
|
for (OsMoDroidPoint op :OsMoDroidPointArrayList){
|
||||||
|
LatLon newLatlon;
|
||||||
|
try {
|
||||||
|
|
||||||
|
newLatlon= new LatLon(myOsMoDroidPlugin.mIRemoteService.getObjectLat(layerId, op.id) , myOsMoDroidPlugin.mIRemoteService.getObjectLon(layerId, op.id));
|
||||||
|
|
||||||
|
if(!op.latlon.equals(newLatlon)){
|
||||||
|
op.prevlatlon=op.latlon;
|
||||||
|
}
|
||||||
|
op.latlon=newLatlon;
|
||||||
|
op.speed=myOsMoDroidPlugin.mIRemoteService.getObjectSpeed(layerId, op.id);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double latitude = op.latlon.getLatitude();
|
||||||
|
double longitude = op.latlon.getLongitude();
|
||||||
|
double prevlatitude = op.latlon.getLatitude();
|
||||||
|
double prevlongitude = op.latlon.getLongitude();
|
||||||
|
if (op.prevlatlon!=null){
|
||||||
|
prevlatitude = op.prevlatlon.getLatitude();
|
||||||
|
prevlongitude = op.prevlatlon.getLongitude();
|
||||||
|
}
|
||||||
|
|
||||||
|
//int locationX = view.getMapXForPoint(longitude);
|
||||||
|
//int locationY = view.getMapYForPoint(latitude);
|
||||||
|
int locationX = view.getRotatedMapXForPoint(latitude, longitude);
|
||||||
|
int locationY = view.getRotatedMapYForPoint(latitude, longitude);
|
||||||
|
int prevlocationX = view.getRotatedMapXForPoint(prevlatitude, prevlongitude);
|
||||||
|
int prevlocationY = view.getRotatedMapYForPoint(prevlatitude, prevlongitude);
|
||||||
|
|
||||||
|
//int y = opIcon.getHeight()/2;
|
||||||
|
//int x = opIcon.getWidth()/2;
|
||||||
|
textPaint.setColor(Color.parseColor("#013220"));
|
||||||
|
canvas.drawText(op.name, locationX, locationY-radius, textPaint);
|
||||||
|
canvas.drawText(op.speed, locationX, locationY-2*radius, textPaint);
|
||||||
|
textPaint.setColor(Color.parseColor("#"+op.color));
|
||||||
|
textPaint.setShadowLayer(radius, 0, 0, Color.GRAY);
|
||||||
|
canvas.drawCircle(locationX, locationY, radius, textPaint);
|
||||||
|
//canvas.drawBitmap(opIcon, locationX-x, locationY-y , textPaint);
|
||||||
|
textPaint.setStrokeWidth(radius);
|
||||||
|
canvas.drawLine(locationX, locationY, prevlocationX, prevlocationY, textPaint);
|
||||||
|
//canvas.rotate(-view.getRotate(), locationX, locationY);
|
||||||
|
// op.prevlatlon=op.latlon;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getOsMoDroidPointFromPoint(PointF point,
|
||||||
|
List<? super OsMoDroidPoint> om) {
|
||||||
|
if (myOsMoDroidPlugin.getOsMoDroidPointArrayList(layerId) != null) {
|
||||||
|
int ex = (int) point.x;
|
||||||
|
int ey = (int) point.y;
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (int i = 0; i < myOsMoDroidPlugin
|
||||||
|
.getOsMoDroidPointArrayList(layerId).size(); i++) {
|
||||||
|
OsMoDroidPoint n = myOsMoDroidPlugin
|
||||||
|
.getOsMoDroidPointArrayList(layerId).get(i);
|
||||||
|
if (!om.contains(n)) {
|
||||||
|
int x = view
|
||||||
|
.getRotatedMapXForPoint(n.latlon.getLatitude(),
|
||||||
|
n.latlon.getLongitude());
|
||||||
|
int y = view
|
||||||
|
.getRotatedMapYForPoint(n.latlon.getLatitude(),
|
||||||
|
n.latlon.getLongitude());
|
||||||
|
if (Math.abs(x - ex) <= opIcon.getWidth()
|
||||||
|
&& Math.abs(y - ey) <= opIcon.getHeight()) {
|
||||||
|
om.add(n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IndexOutOfBoundsException e) {
|
||||||
|
// that's really rare case, but is much efficient than introduce
|
||||||
|
// synchronized block
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void populateObjectContextMenu(Object o, ContextMenuAdapter adapter) {
|
||||||
|
if(o instanceof OsMoDroidPoint&&((OsMoDroidPoint) o).layerId==layerId) {
|
||||||
|
final OsMoDroidPoint a = (OsMoDroidPoint) o;
|
||||||
|
OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() {
|
||||||
|
@Override
|
||||||
|
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
|
||||||
|
map.getMyApplication().getTargetPointsHelper().navigateToPoint( a.latlon, true, -1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
adapter.registerItem( "Следовать к",a.id, listener,-1);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onSingleTap(PointF point) {
|
||||||
|
List<OsMoDroidPoint> om = new ArrayList<OsMoDroidPoint>();
|
||||||
|
getOsMoDroidPointFromPoint(point, om);
|
||||||
|
if(!om.isEmpty()){
|
||||||
|
StringBuilder res = new StringBuilder();
|
||||||
|
for (int i = 0; i < om.size(); i++) {
|
||||||
|
OsMoDroidPoint n = om.get(i);
|
||||||
|
if (i > 0) {
|
||||||
|
res.append("\n\n");
|
||||||
|
}
|
||||||
|
res=res.append(n.description);
|
||||||
|
}
|
||||||
|
AccessibleToast.makeText(view.getContext(), res.toString(), Toast.LENGTH_SHORT).show();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroyLayer() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean drawInScreenPixels() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getObjectName(Object o) {
|
||||||
|
if(o instanceof OsMoDroidPoint){
|
||||||
|
return ((OsMoDroidPoint)o).name;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void collectObjectsFromPoint(PointF point, List<Object> o) {
|
||||||
|
getOsMoDroidPointFromPoint(point, o);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LatLon getObjectLocation(Object o) {
|
||||||
|
if(o instanceof OsMoDroidPoint){
|
||||||
|
return ((OsMoDroidPoint)o).latlon;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getObjectDescription(Object o) {
|
||||||
|
if(o instanceof OsMoDroidPoint){
|
||||||
|
return ((OsMoDroidPoint)o).description;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,13 +1,20 @@
|
||||||
package net.osmand.plus.osmodroid;
|
package net.osmand.plus.osmodroid;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
|
import net.osmand.plus.ContextMenuAdapter;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.parkingpoint.ParkingPositionLayer;
|
||||||
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
@ -15,79 +22,185 @@ import android.content.ServiceConnection;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
|
|
||||||
|
import com.OsMoDroid.IRemoteOsMoDroidListener;
|
||||||
import com.OsMoDroid.IRemoteOsMoDroidService;
|
import com.OsMoDroid.IRemoteOsMoDroidService;
|
||||||
|
|
||||||
public class OsMoDroidPlugin extends OsmandPlugin {
|
public class OsMoDroidPlugin extends OsmandPlugin {
|
||||||
|
IRemoteOsMoDroidListener.Stub inter = new IRemoteOsMoDroidListener.Stub() {
|
||||||
|
|
||||||
public static final String ID = "osmand.osmodroid";
|
@Override
|
||||||
private static final Log log = PlatformUtil.getLog(OsMoDroidPlugin.class);
|
public void channelUpdated() throws RemoteException {
|
||||||
private OsmandApplication app;
|
if(activity!=null){
|
||||||
IRemoteOsMoDroidService mIRemoteService;
|
activity.refreshMap();
|
||||||
private ServiceConnection mConnection;
|
//test
|
||||||
private int OSMODROID_SUPPORTED_VERSION_MIN = 0;
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getId() {
|
|
||||||
return ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OsMoDroidPlugin(OsmandApplication app) {
|
|
||||||
this.app = app;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getDescription() {
|
|
||||||
return app.getString(R.string.osmodroid_plugin_description);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return app.getString(R.string.osmodroid_plugin_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean init(final OsmandApplication app) {
|
|
||||||
mConnection = new ServiceConnection() {
|
|
||||||
@Override
|
|
||||||
public void onServiceConnected(ComponentName name, IBinder service) {
|
|
||||||
mIRemoteService = IRemoteOsMoDroidService.Stub.asInterface(service);
|
|
||||||
try {
|
|
||||||
System.out.println(mIRemoteService.getVersion());
|
|
||||||
if(mIRemoteService.getVersion() < OSMODROID_SUPPORTED_VERSION_MIN) {
|
|
||||||
app.showToastMessage(R.string.osmodroid_plugin_old_ver_not_supported);
|
|
||||||
shutdown(app);
|
|
||||||
}
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onServiceDisconnected(ComponentName name) {
|
|
||||||
mIRemoteService = null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Intent serviceIntent = (new Intent("OsMoDroid.remote"));
|
|
||||||
app.bindService(serviceIntent, mConnection, Context.BIND_AUTO_CREATE);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerLayers(MapActivity activity) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void disable(OsmandApplication app) {
|
|
||||||
shutdown(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void shutdown(OsmandApplication app) {
|
|
||||||
if (mIRemoteService != null) {
|
|
||||||
app.unbindService(mConnection);
|
|
||||||
mIRemoteService = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void channelsListUpdated() throws RemoteException {
|
||||||
|
if (activity!=null&&connected){
|
||||||
|
|
||||||
|
for (OsMoDroidLayer myOsMoDroidLayer : osmoDroidLayerList){
|
||||||
|
activity.getMapView().removeLayer(myOsMoDroidLayer);
|
||||||
|
}
|
||||||
|
osmoDroidLayerList.clear();
|
||||||
|
requestLayersFromOsMoDroid(activity);
|
||||||
|
for (OsMoDroidLayer myOsMoDroidLayer :osmoDroidLayerList){
|
||||||
|
activity.getMapView().addLayer(myOsMoDroidLayer, 4.5f);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateLayers(OsmandMapTileView mapView, MapActivity activity) {
|
||||||
|
registerLayers(activity);
|
||||||
|
super.updateLayers(mapView, activity);
|
||||||
|
}
|
||||||
|
MapActivity activity;
|
||||||
|
public static final String ID = "osmand.osmodroid";
|
||||||
|
private static final Log log = PlatformUtil.getLog(OsMoDroidPlugin.class);
|
||||||
|
private OsmandApplication app;
|
||||||
|
IRemoteOsMoDroidService mIRemoteService;
|
||||||
|
private ServiceConnection mConnection;
|
||||||
|
private int OSMODROID_SUPPORTED_VERSION_MIN = 5;
|
||||||
|
private OsMoDroidLayer osmoDroidLayer;
|
||||||
|
protected boolean connected=false;
|
||||||
|
ArrayList<OsMoDroidLayer> osmoDroidLayerList = new ArrayList<OsMoDroidLayer>();
|
||||||
|
|
||||||
|
public ArrayList<OsMoDroidPoint> getOsMoDroidPointArrayList(int id) {
|
||||||
|
ArrayList<OsMoDroidPoint> result =new ArrayList<OsMoDroidPoint>();
|
||||||
|
try {
|
||||||
|
for (int i = 0; i < mIRemoteService.getNumberOfObjects(id); i++) {
|
||||||
|
result.add(new OsMoDroidPoint(mIRemoteService.getObjectLat(id, mIRemoteService.getObjectId(id, i)) , mIRemoteService.getObjectLon(id, mIRemoteService.getObjectId(id, i)), mIRemoteService.getObjectName(id, mIRemoteService.getObjectId(id, i)), mIRemoteService.getObjectDescription(id, mIRemoteService.getObjectId(id, i)), mIRemoteService.getObjectId(id, i),id,mIRemoteService.getObjectSpeed(id, mIRemoteService.getObjectId(id, i)),mIRemoteService.getObjectColor(id, mIRemoteService.getObjectId(id, i))));
|
||||||
|
}
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getId() {
|
||||||
|
return ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OsMoDroidPlugin(OsmandApplication app) {
|
||||||
|
this.app = app;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return app.getString(R.string.osmodroid_plugin_description);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return app.getString(R.string.osmodroid_plugin_name);
|
||||||
|
}
|
||||||
|
//test
|
||||||
|
@Override
|
||||||
|
public boolean init(final OsmandApplication app) {
|
||||||
|
mConnection = new ServiceConnection() {
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
|
mIRemoteService = IRemoteOsMoDroidService.Stub.asInterface(service);
|
||||||
|
try {
|
||||||
|
System.out.println(mIRemoteService.getVersion());
|
||||||
|
if(mIRemoteService.getVersion() < OSMODROID_SUPPORTED_VERSION_MIN) {
|
||||||
|
app.showToastMessage(R.string.osmodroid_plugin_old_ver_not_supported);
|
||||||
|
shutdown(app);
|
||||||
|
}else {
|
||||||
|
mIRemoteService.registerListener(inter);
|
||||||
|
connected=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceDisconnected(ComponentName name) {
|
||||||
|
connected=false;
|
||||||
|
mIRemoteService = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Intent serviceIntent = (new Intent("OsMoDroid.remote"));
|
||||||
|
app.bindService(serviceIntent, mConnection, Context.BIND_AUTO_CREATE);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void requestLayersFromOsMoDroid(MapActivity activity){
|
||||||
|
try {
|
||||||
|
for (int i = 0; i < mIRemoteService.getNumberOfLayers(); i++)
|
||||||
|
{
|
||||||
|
osmoDroidLayerList.add(new OsMoDroidLayer(activity, mIRemoteService.getLayerId(i),this,mIRemoteService.getLayerName( mIRemoteService.getLayerId(i)), mIRemoteService.getLayerDescription( mIRemoteService.getLayerId(i))));
|
||||||
|
}
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerLayers(MapActivity activity) {
|
||||||
|
this.activity=activity;
|
||||||
|
if (connected){
|
||||||
|
|
||||||
|
for (OsMoDroidLayer myOsMoDroidLayer : osmoDroidLayerList){
|
||||||
|
activity.getMapView().removeLayer(myOsMoDroidLayer);
|
||||||
|
}
|
||||||
|
osmoDroidLayerList.clear();
|
||||||
|
requestLayersFromOsMoDroid(activity);
|
||||||
|
for (OsMoDroidLayer myOsMoDroidLayer :osmoDroidLayerList){
|
||||||
|
activity.getMapView().addLayer(myOsMoDroidLayer, 4.5f);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerLayerContextMenuActions(OsmandMapTileView mapView,
|
||||||
|
ContextMenuAdapter adapter, MapActivity mapActivity) {
|
||||||
|
for (OsMoDroidLayer myOsMoDroidLayer : osmoDroidLayerList){
|
||||||
|
|
||||||
|
|
||||||
|
adapter.registerItem(myOsMoDroidLayer.layerName);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.registerLayerContextMenuActions(mapView, adapter, mapActivity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void disable(OsmandApplication app) {
|
||||||
|
shutdown(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void shutdown(OsmandApplication app) {
|
||||||
|
if (mIRemoteService != null) {
|
||||||
|
if(connected){
|
||||||
|
try {
|
||||||
|
mIRemoteService.unregisterListener(inter);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
app.unbindService(mConnection);
|
||||||
|
mIRemoteService = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
42
OsmAnd/src/net/osmand/plus/osmodroid/OsMoDroidPoint.java
Normal file
42
OsmAnd/src/net/osmand/plus/osmodroid/OsMoDroidPoint.java
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
package net.osmand.plus.osmodroid;
|
||||||
|
|
||||||
|
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
|
|
||||||
|
public class OsMoDroidPoint {
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
|
||||||
|
if((o instanceof OsMoDroidPoint) && this.id == ((OsMoDroidPoint)o).id )
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LatLon latlon;
|
||||||
|
LatLon prevlatlon;
|
||||||
|
String name;
|
||||||
|
String description;
|
||||||
|
int id;
|
||||||
|
int layerId;
|
||||||
|
String speed="";
|
||||||
|
String color="AAAAAA";
|
||||||
|
|
||||||
|
public OsMoDroidPoint(float objectLat, float objectLon, String objectName, String objectDescription, int objectId, int layerId ,String speed, String color) {
|
||||||
|
this.latlon=new LatLon(objectLat, objectLon);
|
||||||
|
this.name=objectName;
|
||||||
|
this.description=objectDescription;
|
||||||
|
this.id=objectId;
|
||||||
|
this.layerId=layerId;
|
||||||
|
if(speed!=null){ this.speed=speed;}
|
||||||
|
if(color!=null){ this.color=color;}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue