Add osmo plugin

This commit is contained in:
vshcherb 2014-05-04 02:46:02 +02:00
parent 8889571cb8
commit c5dfc25b4e
12 changed files with 271 additions and 40 deletions

View file

@ -106,6 +106,7 @@
<activity android:name="net.osmand.plus.activities.SettingsNavigationActivity" android:configChanges="keyboardHidden|orientation"></activity> <activity android:name="net.osmand.plus.activities.SettingsNavigationActivity" android:configChanges="keyboardHidden|orientation"></activity>
<activity android:name="net.osmand.plus.monitoring.SettingsMonitoringActivity" android:configChanges="keyboardHidden|orientation"></activity> <activity android:name="net.osmand.plus.monitoring.SettingsMonitoringActivity" android:configChanges="keyboardHidden|orientation"></activity>
<activity android:name="net.osmand.plus.rastermaps.SettingsRasterMapsActivity" android:configChanges="keyboardHidden|orientation"></activity> <activity android:name="net.osmand.plus.rastermaps.SettingsRasterMapsActivity" android:configChanges="keyboardHidden|orientation"></activity>
<activity android:name="net.osmand.plus.osmo.SettingsOsMoActivity" android:configChanges="keyboardHidden|orientation"></activity>
<activity android:name="net.osmand.plus.osmedit.SettingsOsmEditingActivity" android:configChanges="keyboardHidden|orientation"></activity> <activity android:name="net.osmand.plus.osmedit.SettingsOsmEditingActivity" android:configChanges="keyboardHidden|orientation"></activity>
<activity android:name="net.osmand.plus.development.SettingsDevelopmentActivity" android:configChanges="keyboardHidden|orientation"></activity> <activity android:name="net.osmand.plus.development.SettingsDevelopmentActivity" android:configChanges="keyboardHidden|orientation"></activity>
<activity android:name="net.osmand.plus.audionotes.SettingsAudioVideoActivity" android:configChanges="keyboardHidden|orientation"></activity> <activity android:name="net.osmand.plus.audionotes.SettingsAudioVideoActivity" android:configChanges="keyboardHidden|orientation"></activity>

View file

@ -9,6 +9,12 @@
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
--> -->
<string name="osmo_settings_uuid">Unique device id</string>
<string name="osmo_settings_descr">View unique device registration key and other monitoring specific settings </string>
<string name="osmo_settings">OSMo (OpenStreetMap-Monitoring)</string>
<string name="osmo_plugin_description">OpenStreetMap-Monitoring - Advanced Live Monitoring with lots of features for remote control http://osmo.mobi</string>
<string name="osmo_plugin_name">OSMo (Advanced Live Monitoring)</string>
<string name="osmo_settings">OSMo settings</string>
<string name="always_center_position_on_map">Display position always in center</string> <string name="always_center_position_on_map">Display position always in center</string>
<string name="voice_pref_title">Voice</string> <string name="voice_pref_title">Voice</string>
<string name="misc_pref_title">Miscallenious</string> <string name="misc_pref_title">Miscallenious</string>

View file

@ -705,7 +705,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
scheduleCheckIfGpsLost(location); scheduleCheckIfGpsLost(location);
} }
app.getSavingTrackHelper().updateLocation(location); app.getSavingTrackHelper().updateLocation(location);
app.getLiveMonitoringHelper().updateLocation(location); OsmandPlugin.updateLocationPlugins(location);
// 2. accessibility routing // 2. accessibility routing
navigationInfo.setLocation(location); navigationInfo.setLocation(location);
@ -736,7 +736,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
// 1. Logging services // 1. Logging services
if (location != null) { if (location != null) {
app.getSavingTrackHelper().updateLocation(location); app.getSavingTrackHelper().updateLocation(location);
app.getLiveMonitoringHelper().updateLocation(location); OsmandPlugin.updateLocationPlugins(location);
} }
// 2. accessibility routing // 2. accessibility routing
navigationInfo.setLocation(location); navigationInfo.setLocation(location);

View file

@ -22,11 +22,11 @@ import net.osmand.plus.GPXUtilities.GPXFile;
import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.GPXUtilities.WptPt;
import net.osmand.plus.access.AccessibilityMode; import net.osmand.plus.access.AccessibilityMode;
import net.osmand.plus.activities.DayNightHelper; import net.osmand.plus.activities.DayNightHelper;
import net.osmand.plus.activities.LiveMonitoringHelper;
import net.osmand.plus.activities.SavingTrackHelper; import net.osmand.plus.activities.SavingTrackHelper;
import net.osmand.plus.activities.SettingsActivity; import net.osmand.plus.activities.SettingsActivity;
import net.osmand.plus.api.SQLiteAPI; import net.osmand.plus.api.SQLiteAPI;
import net.osmand.plus.api.SQLiteAPIImpl; import net.osmand.plus.api.SQLiteAPIImpl;
import net.osmand.plus.monitoring.LiveMonitoringHelper;
import net.osmand.plus.render.NativeOsmandLibrary; import net.osmand.plus.render.NativeOsmandLibrary;
import net.osmand.plus.render.RendererRegistry; import net.osmand.plus.render.RendererRegistry;
import net.osmand.plus.resources.ResourceManager; import net.osmand.plus.resources.ResourceManager;

View file

@ -5,6 +5,7 @@ import android.content.Intent;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
import net.osmand.IProgress; import net.osmand.IProgress;
import net.osmand.Location;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.access.AccessibilityPlugin; import net.osmand.access.AccessibilityPlugin;
import net.osmand.plus.activities.LocalIndexInfo; import net.osmand.plus.activities.LocalIndexInfo;
@ -17,6 +18,7 @@ import net.osmand.plus.development.OsmandDevelopmentPlugin;
import net.osmand.plus.distancecalculator.DistanceCalculatorPlugin; import net.osmand.plus.distancecalculator.DistanceCalculatorPlugin;
import net.osmand.plus.monitoring.OsmandMonitoringPlugin; import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
import net.osmand.plus.osmedit.OsmEditingPlugin; import net.osmand.plus.osmedit.OsmEditingPlugin;
import net.osmand.plus.osmo.OsMoPlugin;
import net.osmand.plus.osmodroid.OsMoDroidPlugin; import net.osmand.plus.osmodroid.OsMoDroidPlugin;
import net.osmand.plus.parkingpoint.ParkingPositionPlugin; import net.osmand.plus.parkingpoint.ParkingPositionPlugin;
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin; import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
@ -75,6 +77,7 @@ public abstract class OsmandPlugin {
installedPlugins.add(new DistanceCalculatorPlugin(app)); installedPlugins.add(new DistanceCalculatorPlugin(app));
installedPlugins.add(new AudioVideoNotesPlugin(app)); installedPlugins.add(new AudioVideoNotesPlugin(app));
installedPlugins.add(new OsmEditingPlugin(app)); installedPlugins.add(new OsmEditingPlugin(app));
installedPlugins.add(new OsMoPlugin(app));
installedPlugins.add(new OsmandDevelopmentPlugin(app)); installedPlugins.add(new OsmandDevelopmentPlugin(app));
@ -130,7 +133,9 @@ public abstract class OsmandPlugin {
public void registerOptionsMenuItems(MapActivity mapActivity, ContextMenuAdapter helper) {} public void registerOptionsMenuItems(MapActivity mapActivity, ContextMenuAdapter helper) {}
public void loadLocalIndexes(List<LocalIndexInfo> result, LoadLocalIndexTask loadTask) {}; public void loadLocalIndexes(List<LocalIndexInfo> result, LoadLocalIndexTask loadTask) {}
public void updateLocation(Location location) {}
public void contextMenuLocalIndexes(LocalIndexesActivity la, LocalIndexInfo info, ContextMenuAdapter adapter) {}; public void contextMenuLocalIndexes(LocalIndexesActivity la, LocalIndexInfo info, ContextMenuAdapter adapter) {};
@ -300,5 +305,11 @@ public abstract class OsmandPlugin {
return false; return false;
} }
public static void updateLocationPlugins(net.osmand.Location location) {
for(OsmandPlugin p : installedPlugins){
p.updateLocation(location);
}
}
} }

View file

@ -1,4 +1,4 @@
package net.osmand.plus.activities; package net.osmand.plus.monitoring;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStream; import java.io.InputStream;
@ -13,7 +13,6 @@ import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings; import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;

View file

@ -1,5 +1,6 @@
package net.osmand.plus.monitoring; package net.osmand.plus.monitoring;
import net.osmand.Location;
import net.osmand.plus.ApplicationMode; import net.osmand.plus.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick;
@ -36,12 +37,19 @@ public class OsmandMonitoringPlugin extends OsmandPlugin implements MonitoringIn
private OsmandSettings settings; private OsmandSettings settings;
private OsmandApplication app; private OsmandApplication app;
private BaseMapWidget monitoringControl; private BaseMapWidget monitoringControl;
private LiveMonitoringHelper liveMonitoringHelper;
public OsmandMonitoringPlugin(OsmandApplication app) { public OsmandMonitoringPlugin(OsmandApplication app) {
this.app = app; this.app = app;
liveMonitoringHelper = new LiveMonitoringHelper(app);
ApplicationMode.regWidget("monitoring", (ApplicationMode[])null); ApplicationMode.regWidget("monitoring", (ApplicationMode[])null);
} }
@Override
public void updateLocation(Location location) {
liveMonitoringHelper.updateLocation(location);
}
@Override @Override
public boolean init(OsmandApplication app) { public boolean init(OsmandApplication app) {
settings = app.getSettings(); settings = app.getSettings();

View file

@ -0,0 +1,118 @@
package net.osmand.plus.osmo;
import java.io.IOException;
import net.osmand.Location;
import net.osmand.PlatformUtil;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.activities.SettingsActivity;
import net.osmand.plus.views.MonitoringInfoControl;
import net.osmand.plus.views.MonitoringInfoControl.MonitoringInfoControlServices;
import net.osmand.plus.views.OsmandMapTileView;
import org.apache.commons.logging.Log;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceScreen;
import android.provider.Settings;
public class OsMoPlugin extends OsmandPlugin implements MonitoringInfoControlServices {
private OsmandApplication app;
public static final String ID = "osmand.osmodroid.v2";
private static final Log log = PlatformUtil.getLog(OsMoPlugin.class);
private OsMoService service;
public OsMoPlugin(final OsmandApplication app){
service = new OsMoService();
this.app = app;
}
@Override
public boolean init(final OsmandApplication app) {
return true;
}
@Override
public void updateLocation(Location location) {
if(service.isActive()) {
try {
service.sendCoordinate(location.getLatitude(), location.getLongitude(), location.getAccuracy(),
(float) location.getAltitude(), location.getSpeed(), location.getBearing());
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
public static String getUUID(Context ctx) {
return Settings.Secure.getString(ctx.getContentResolver(), Settings.Secure.ANDROID_ID);
}
@Override
public String getDescription() {
return app.getString(R.string.osmo_plugin_description);
}
@Override
public String getName() {
return app.getString(R.string.osmo_plugin_name) ;
}
@Override
public void addMonitorActions(ContextMenuAdapter qa, MonitoringInfoControl li, OsmandMapTileView view) {
final boolean off = service.isActive();
qa.item(off ? R.string.osmodroid_mode_off : R.string.osmodroid_mode_on
)
.icon(off ? R.drawable.monitoring_rec_inactive : R.drawable.monitoring_rec_big)
.listen(new OnContextMenuClick() {
@Override
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
try {
String response;
if (off) {
response = service.activate(getUUID(app));
} else {
response = service.deactivate();
}
app.showToastMessage(response);
} catch (Exception e) {
app.showToastMessage(app.getString(R.string.error_io_error) + ": " + e.getMessage());
}
}
}).reg();
}
@Override
public void settingsActivityCreate(final SettingsActivity activity, PreferenceScreen screen) {
Preference grp = new Preference(activity);
grp.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
activity.startActivity(new Intent(activity, SettingsOsMoActivity.class));
return true;
}
});
grp.setSummary(R.string.osmo_settings_descr);
grp.setTitle(R.string.osmo_settings);
grp.setKey("osmo_settings");
screen.addPreference(grp);
}
@Override
public String getId() {
return ID;
}
}

View file

@ -0,0 +1,52 @@
package net.osmand.plus.osmo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
public class OsMoService {
private static String TRACKER_URL = "ws://srv.osmo.mobi";
private URLConnection conn;
private OutputStreamWriter out;
private BufferedReader in;
public boolean isActive() {
return conn != null;
}
public String activate(String hash) throws IOException {
URL tu = new URL(TRACKER_URL);
conn = tu.openConnection();
conn.connect();
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
String t = sendCommand("auth|"+hash);
t += sendCommand("session_open");
return t;
}
private String sendCommand(String s) throws IOException {
if(s.endsWith("\n")) {
s += "\n";
}
out.write(s);
return in.readLine();
}
public void sendCoordinate(double lat, double lon, float hdop, float alt, float speed, float bearing) throws IOException {
sendCommand("p|"+lat+":"+lon+":"+hdop+":"+alt+":"+speed+":"+bearing);
}
public String deactivate() throws IOException {
String t = sendCommand("session_close");
in.close();
out.close();
conn = null;
return t;
}
}

View file

@ -0,0 +1,38 @@
package net.osmand.plus.osmo;
import net.osmand.plus.R;
import net.osmand.plus.activities.SettingsBaseActivity;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.provider.Settings;
public class SettingsOsMoActivity extends SettingsBaseActivity {
public static final String MORE_VALUE = "MORE_VALUE";
public static final String DEFINE_EDIT = "DEFINE_EDIT";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().setTitle(R.string.online_map_settings);
PreferenceScreen grp = getPreferenceScreen();
Preference pref = new Preference(this);
pref.setTitle(R.string.osmo_settings_uuid);
pref.setSummary(OsMoPlugin.getUUID(this));
grp.addPreference(pref);
}
public void updateAllSettings() {
super.updateAllSettings();
}
}

View file

@ -161,12 +161,12 @@ public class OsMoDroidPlugin extends OsmandPlugin implements MonitoringInfoContr
@Override @Override
public String getDescription() { public String getDescription() {
return app.getString(R.string.osmodroid_plugin_description); return app.getString(R.string.osmodroid_plugin_description) + "\n External application.";
} }
@Override @Override
public String getName() { public String getName() {
return app.getString(R.string.osmodroid_plugin_name); return app.getString(R.string.osmodroid_plugin_name) + " (external)";
} }
// test // test

View file

@ -1,42 +1,40 @@
package net.osmand.plus.osmodroid; package net.osmand.plus.osmodroid;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
public class OsMoDroidPoint { public class OsMoDroidPoint {
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if((o instanceof OsMoDroidPoint) && this.id == ((OsMoDroidPoint)o).id ) if ((o instanceof OsMoDroidPoint) && this.id == ((OsMoDroidPoint) o).id) {
{ return true;
return true; } else {
} return false;
else }
{ }
return false;
}
}
LatLon latlon; LatLon latlon;
LatLon prevlatlon; LatLon prevlatlon;
String name; String name;
String description; String description;
int id; int id;
int layerId; int layerId;
String speed=""; String speed = "";
String color="AAAAAA"; String color = "AAAAAA";
public OsMoDroidPoint(float objectLat, float objectLon, String objectName, String objectDescription, int objectId, int layerId ,String speed, String color) { public OsMoDroidPoint(float objectLat, float objectLon, String objectName, String objectDescription, int objectId,
this.latlon=new LatLon(objectLat, objectLon); int layerId, String speed, String color) {
this.name=objectName; this.latlon = new LatLon(objectLat, objectLon);
this.description=objectDescription; this.name = objectName;
this.id=objectId; this.description = objectDescription;
this.layerId=layerId; this.id = objectId;
if(speed!=null){ this.speed=speed;} this.layerId = layerId;
if(color!=null){ this.color=color;} if (speed != null) {
} this.speed = speed;
}
if (color != null) {
this.color = color;
}
}
} }