diff --git a/OsmAnd-java/src/net/osmand/map/OsmandRegions.java b/OsmAnd-java/src/net/osmand/map/OsmandRegions.java index 2012bbb02b..67fbadb864 100644 --- a/OsmAnd-java/src/net/osmand/map/OsmandRegions.java +++ b/OsmAnd-java/src/net/osmand/map/OsmandRegions.java @@ -71,6 +71,9 @@ public class OsmandRegions { } public String getDownloadNameIndexLowercase(String downloadName) { + if(downloadName == null) { + return null; + } final String lc = downloadName.toLowerCase(); if(downloadNamesToLowercaseIndex.containsKey(lc)) { return downloadNamesToLowercaseIndex.get(lc); @@ -245,6 +248,9 @@ public class OsmandRegions { initTypes(object); String downloadName = object.getNameByType(downloadNameType).toLowerCase(); String prefix = object.getNameByType(prefixType); + if(prefix == null) { + prefix = ""; + } String locName = getLocaleName(object); if(locName != null && locName.length() > 0){ downloadNamesToLocaleNames.put(downloadName, locName); diff --git a/OsmAnd-java/src/net/osmand/map/TileSourceManager.java b/OsmAnd-java/src/net/osmand/map/TileSourceManager.java index 5a5f4a32ae..e909d50380 100644 --- a/OsmAnd-java/src/net/osmand/map/TileSourceManager.java +++ b/OsmAnd-java/src/net/osmand/map/TileSourceManager.java @@ -367,7 +367,7 @@ public class TileSourceManager { } public static TileSourceTemplate getMapnikSource(){ - return new TileSourceTemplate("Mapnik", "http://mapnik.osmand.net/{0}/{1}/{2}.png", ".png", 18, 1, 256, 8, 18000); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ + return new TileSourceTemplate("Mapnik", "http://mapnik.osmand.net/{0}/{1}/{2}.png", ".png", 19, 1, 256, 8, 18000); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ } public static TileSourceTemplate getCycleMapSource(){ diff --git a/OsmAnd/res/layout/osmo_edit_device.xml b/OsmAnd/res/layout/osmo_edit_device.xml new file mode 100644 index 0000000000..1bd33dcabb --- /dev/null +++ b/OsmAnd/res/layout/osmo_edit_device.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 971b2fc845..f8d24cc165 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,17 @@ 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 --> + red + pink + orange + brown + yellow + light blue + blue + magenta + + Change user properties + Display color Info OsMo group In order to Connect to the group %2$s, specify group id (%1$s) @@ -26,7 +37,7 @@ Description Policy Tracker id - Device name + User name Group id Group name Link with device diff --git a/OsmAnd/src/net/osmand/plus/OsmandApplication.java b/OsmAnd/src/net/osmand/plus/OsmandApplication.java index f688304ced..b62ac7b92d 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandApplication.java +++ b/OsmAnd/src/net/osmand/plus/OsmandApplication.java @@ -569,6 +569,7 @@ public class OsmandApplication extends Application { bak.renameTo(save); } } catch (RuntimeException e) { + e.printStackTrace(); warnings.add(e.getMessage()); } finally { synchronized (OsmandApplication.this) { diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoGroups.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoGroups.java index 5b20899b44..51e870c722 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoGroups.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoGroups.java @@ -346,6 +346,10 @@ public class OsMoGroups implements OsMoReactor, OsmoTrackerListener { } - + public void setDeviceProperties(OsMoDevice model, String name, int color) { + model.userName = name; + model.userColor = color; + storage.save(); + } } diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsActivity.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsActivity.java index b73a5335c7..1cbf3603be 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsActivity.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsActivity.java @@ -3,6 +3,8 @@ */ package net.osmand.plus.osmo; +import gnu.trove.list.array.TIntArrayList; + import java.text.Collator; import java.util.ArrayList; import java.util.Collections; @@ -11,6 +13,7 @@ import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Random; import net.osmand.AndroidUtils; import net.osmand.Location; @@ -90,6 +93,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements protected static final int SHOW_ON_MAP_ID = 6; public static final int SHARE_SESSION = 7; public static final int GROUP_INFO = 8; + protected static final int SETTINGS_ID = 9; private static final int LIST_REFRESH_MSG_ID = OsmAndConstants.UI_HANDLER_SEARCH + 30; private static final long RECENT_THRESHOLD = 60000; @@ -106,6 +110,28 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements private ActionMode actionMode; private Object selectedObject = null; private String operation; + + private int[] paletteColors = new int[] { + R.string.color_red, + R.string.color_pink, + R.string.color_orange, + R.string.color_brown, + R.string.color_yellow, + R.string.color_lightblue, + R.string.color_blue, + R.string.color_magenta + }; + + private int[] pallette = new int[] { + 0xffd00d0d, + 0xffe044bb, + 0xffee5020, + 0xff602010, + 0xffeeee10, + 0xff10c0f0, + 0xff1010a0, + 0xff88e030 + }; @Override public void onCreate(Bundle icicle) { @@ -291,8 +317,8 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements selectedObject = o; device = (OsMoDevice) (o instanceof OsMoDevice ?o : null); group = (OsMoGroup) (o instanceof OsMoGroup ?o : null); - createMenuItem(menu, DELETE_ACTION_ID, R.string.default_buttons_delete, R.drawable.ic_action_delete_light, R.drawable.ic_action_delete_dark, - MenuItem.SHOW_AS_ACTION_IF_ROOM); + MenuItem mi = createMenuItem(menu, ON_OFF_ACTION_ID, R.string.default_buttons_ok, 0, 0, + MenuItem.SHOW_AS_ACTION_ALWAYS); if(device != null && device.getLastLocation() != null) { createMenuItem(menu, SHOW_ON_MAP_ID, R.string.show_poi_on_map, R.drawable.ic_action_marker_light, R.drawable.ic_action_marker_dark, MenuItem.SHOW_AS_ACTION_IF_ROOM); @@ -302,12 +328,19 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements } createMenuItem(menu, SHARE_ID, R.string.share_fav, R.drawable.ic_action_gshare_light, R.drawable.ic_action_gshare_dark, MenuItem.SHOW_AS_ACTION_IF_ROOM); + /// + if(device != null) { + createMenuItem(menu, SETTINGS_ID, R.string.settings, R.drawable.ic_action_settings_light, R.drawable.ic_action_sail_boat_dark, + MenuItem.SHOW_AS_ACTION_IF_ROOM); + } if(group != null) { createMenuItem(menu, GROUP_INFO, R.string.osmo_group_info, R.drawable.ic_action_info_light, R.drawable.ic_action_info_dark, MenuItem.SHOW_AS_ACTION_IF_ROOM); } - MenuItem mi = createMenuItem(menu, ON_OFF_ACTION_ID, R.string.default_buttons_ok, 0, 0, - MenuItem.SHOW_AS_ACTION_ALWAYS); + createMenuItem(menu, DELETE_ACTION_ID, R.string.default_buttons_delete, R.drawable.ic_action_delete_light, R.drawable.ic_action_delete_dark, + MenuItem.SHOW_AS_ACTION_IF_ROOM); + + final LayoutInflater inflater = LayoutInflater.from(OsMoGroupsActivity.this); View view = inflater.inflate(R.layout.check_item_rel, null); @@ -336,7 +369,9 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - if(item.getItemId() == DELETE_ACTION_ID ) { + if(item.getItemId() == SETTINGS_ID) { + showSettingsDialog(device); + } else if(item.getItemId() == DELETE_ACTION_ID ) { Builder bld = new AlertDialog.Builder(OsMoGroupsActivity.this); String name = (selectedObject instanceof OsMoDevice)? ((OsMoDevice) selectedObject).getVisibleName() : ((OsMoGroup) selectedObject).getVisibleName(OsMoGroupsActivity.this); @@ -593,7 +628,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements final String nameUser = name.getText().toString(); final String id = tracker.getText().toString(); if(device.isChecked()) { - OsMoDevice dev = osMoPlugin.getGroups().addConnectedDevice(id, nameUser, 0); + OsMoDevice dev = osMoPlugin.getGroups().addConnectedDevice(id, nameUser, getRandomColor()); adapter.update(dev.group); adapter.notifyDataSetChanged(); } else { @@ -830,7 +865,19 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements net.osmand.Location.distanceBetween(location.getLatitude(), location.getLongitude(), mapLocation.getLatitude(), mapLocation.getLongitude(), mes); draw.setAngle(mes[1] - lastCompass + 180); - draw.setRecent(Math.abs(location.getTime() - System.currentTimeMillis()) < RECENT_THRESHOLD); + final boolean recent = Math.abs(location.getTime() - System.currentTimeMillis()) < RECENT_THRESHOLD; + + int color; + if(recent){ + color = model.getColor(); + if(color == 0) { + color = getRandomColor(); + osMoPlugin.getGroups().setDeviceProperties(model, model.getVisibleName(), color); + } + } else { + color = getResources().getColor(R.color.color_unknown); + } + draw.setColor(color); icon.setImageDrawable(draw); int dist = (int) mes[0]; long seconds = Math.max(0, (System.currentTimeMillis() - location.getTime()) / 1000); @@ -860,6 +907,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements return row; } + } @@ -871,6 +919,10 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements adapter.notifyDataSetInvalidated(); } } + + private int getRandomColor() { + return pallette[new Random().nextInt(pallette.length)]; + } @Override public void updateCompassValue(float value) { @@ -896,6 +948,54 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements public void locationChange(String trackerId, Location loc) { refreshList(); } + public static String colorToString(int color) { + if ((0xFF000000 & color) == 0xFF000000) { + return "#" + Integer.toHexString(color & 0x00FFFFFF); //$NON-NLS-1$ + } else { + return "#" + Integer.toHexString(color); //$NON-NLS-1$ + } + } + + private void showSettingsDialog(final OsMoDevice device) { + Builder bld = new AlertDialog.Builder(OsMoGroupsActivity.this); + bld.setTitle(R.string.osmo_edit_device); + final LayoutInflater inflater = LayoutInflater.from(this); + View view = inflater.inflate(R.layout.osmo_edit_device, null); + final EditText name = (EditText) view.findViewById(R.id.Name); + final Spinner colorSpinner = (Spinner) view.findViewById(R.id.ColorSpinner); + bld.setView(view); + name.setText(device.getVisibleName()); + final TIntArrayList list = new TIntArrayList(pallette); + List colorNames= new ArrayList(); + int selection = -1; + int devColor = device.getColor(); + for(int i = 0; i < pallette.length; i++) { + colorNames.add(getString(paletteColors[i])); + list.add(pallette[i]); + if(devColor == pallette[i]) { + selection = i; + } + } + if(selection == -1) { + list.insert(0, devColor); + colorNames.add(0, colorToString(devColor)); + selection = 0; + } + ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, colorNames); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + colorSpinner.setAdapter(adapter); + colorSpinner.setSelection(selection); + + bld.setPositiveButton(R.string .default_buttons_yes, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + osMoPlugin.getGroups().setDeviceProperties(device, + name.getText().toString(), list.get(colorSpinner.getSelectedItemPosition())); + } + }); + bld.setNegativeButton(R.string.default_buttons_no, null); + } class DirectionDrawable extends Drawable { Paint paintRouteDirection; @@ -909,12 +1009,8 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements paintRouteDirection.setAntiAlias(true); } - public void setRecent(boolean recent) { - if (recent) { - paintRouteDirection.setColor(getResources().getColor(R.color.color_ok)); - } else { - paintRouteDirection.setColor(getResources().getColor(R.color.color_unknown)); - } + public void setColor(int color) { + paintRouteDirection.setColor(color); } public void setAngle(float angle) { diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsStorage.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsStorage.java index 23bbf5a8cc..1ceda833a0 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsStorage.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsStorage.java @@ -350,14 +350,15 @@ public class OsMoGroupsStorage { return trackerId; } - public int getColor(int defAssignUserColor) { + + + public int getColor() { if(userColor != 0) { return userColor; } if(serverColor != 0) { return serverColor ; } - userColor = defAssignUserColor; return userColor; } diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java index ab91c57401..d68e7dbfc1 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java @@ -9,6 +9,7 @@ import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.SettingsActivity; +import net.osmand.plus.osmo.OsMoGroupsStorage.OsMoDevice; import net.osmand.plus.views.MapInfoLayer; import net.osmand.plus.views.MonitoringInfoControl; import net.osmand.plus.views.MonitoringInfoControl.MonitoringInfoControlServices; @@ -59,9 +60,7 @@ public class OsMoPlugin extends OsmandPlugin implements MonitoringInfoControlSer @Override public void updateLocation(Location location) { - if (service.isConnected()) { - tracker.sendCoordinate(location); - } + tracker.sendCoordinate(location); } @Override @@ -219,4 +218,5 @@ public class OsMoPlugin extends OsmandPlugin implements MonitoringInfoControlSer public OsMoService getService() { return service; } + }