Add color syncing

This commit is contained in:
Alex 2017-09-18 18:24:56 +03:00
parent 7988962bfd
commit ee763cfadd
5 changed files with 79 additions and 27 deletions

View file

@ -177,7 +177,7 @@ public class FavouritesDbHelper {
sortAll(); sortAll();
saveCurrentPointsIntoFile(); saveCurrentPointsIntoFile();
} }
context.getMapMarkersHelper().syncGroup(new MarkersSyncGroup(group.name, group.name, MarkersSyncGroup.FAVORITES_TYPE)); context.getMapMarkersHelper().syncGroup(new MarkersSyncGroup(group.name, group.name, MarkersSyncGroup.FAVORITES_TYPE, group.color));
return true; return true;
} }
@ -272,7 +272,7 @@ public class FavouritesDbHelper {
} }
sortAll(); sortAll();
saveCurrentPointsIntoFile(); saveCurrentPointsIntoFile();
context.getMapMarkersHelper().syncGroup(new MarkersSyncGroup(category, category, MarkersSyncGroup.FAVORITES_TYPE)); context.getMapMarkersHelper().syncGroup(new MarkersSyncGroup(category, category, MarkersSyncGroup.FAVORITES_TYPE, p.getColor()));
return true; return true;
} }
@ -280,7 +280,7 @@ public class FavouritesDbHelper {
p.setLatitude(lat); p.setLatitude(lat);
p.setLongitude(lon); p.setLongitude(lon);
saveCurrentPointsIntoFile(); saveCurrentPointsIntoFile();
context.getMapMarkersHelper().syncGroup(new MarkersSyncGroup(p.getCategory(), p.getCategory(), MarkersSyncGroup.FAVORITES_TYPE)); context.getMapMarkersHelper().syncGroup(new MarkersSyncGroup(p.getCategory(), p.getCategory(), MarkersSyncGroup.FAVORITES_TYPE, p.getColor()));
return true; return true;
} }
@ -597,6 +597,7 @@ public class FavouritesDbHelper {
for (FavouritePoint p : gr.points) { for (FavouritePoint p : gr.points) {
p.setColor(color); p.setColor(color);
} }
markersHelper.syncGroup(new MarkersSyncGroup(gr.name, gr.name, MarkersSyncGroup.FAVORITES_TYPE, color));
} }
if (group.visible != visible) { if (group.visible != visible) {
FavoriteGroup gr = flatGroups.get(group.name); FavoriteGroup gr = flatGroups.get(group.name);
@ -604,7 +605,7 @@ public class FavouritesDbHelper {
for (FavouritePoint p : gr.points) { for (FavouritePoint p : gr.points) {
p.setVisible(visible); p.setVisible(visible);
} }
markersHelper.syncGroup(new MarkersSyncGroup(gr.name, gr.name, MarkersSyncGroup.FAVORITES_TYPE)); markersHelper.syncGroup(new MarkersSyncGroup(gr.name, gr.name, MarkersSyncGroup.FAVORITES_TYPE, group.color));
} }
if (!group.name.equals(newName)) { if (!group.name.equals(newName)) {
FavoriteGroup gr = flatGroups.remove(group.name); FavoriteGroup gr = flatGroups.remove(group.name);
@ -624,7 +625,7 @@ public class FavouritesDbHelper {
renamedGroup.points.add(p); renamedGroup.points.add(p);
} }
} }
MarkersSyncGroup syncGroup = new MarkersSyncGroup(renamedGroup.name, renamedGroup.name, MarkersSyncGroup.FAVORITES_TYPE); MarkersSyncGroup syncGroup = new MarkersSyncGroup(renamedGroup.name, renamedGroup.name, MarkersSyncGroup.FAVORITES_TYPE, group.color);
markersHelper.addMarkersSyncGroup(syncGroup); markersHelper.addMarkersSyncGroup(syncGroup);
markersHelper.syncGroup(syncGroup); markersHelper.syncGroup(syncGroup);
} }

View file

@ -10,9 +10,11 @@ import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.data.LocationPoint; import net.osmand.data.LocationPoint;
import net.osmand.data.PointDescription; import net.osmand.data.PointDescription;
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.GPXFile;
import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.GPXUtilities.WptPt;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.helpers.ColorDialogs;
import net.osmand.plus.mapmarkers.MapMarkersDbHelper; import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils; import net.osmand.util.MapUtils;
@ -171,11 +173,20 @@ public class MapMarkersHelper {
private String id; private String id;
private String name; private String name;
private int type; private int type;
private int color;
public MarkersSyncGroup(@NonNull String id, @NonNull String name, int type, int color) {
this.id = id;
this.name = name;
this.type = type;
this.color = color;
}
public MarkersSyncGroup(@NonNull String id, @NonNull String name, int type) { public MarkersSyncGroup(@NonNull String id, @NonNull String name, int type) {
this.id = id; this.id = id;
this.name = name; this.name = name;
this.type = type; this.type = type;
this.color = -1;
} }
public String getId() { public String getId() {
@ -189,6 +200,10 @@ public class MapMarkersHelper {
public int getType() { public int getType() {
return type; return type;
} }
public int getColor() {
return color;
}
} }
public MapMarkersHelper(OsmandApplication ctx) { public MapMarkersHelper(OsmandApplication ctx) {
@ -335,7 +350,7 @@ public class MapMarkersHelper {
List<MapMarker> dbMarkers = markersDbHelper.getMarkersFromGroup(group); List<MapMarker> dbMarkers = markersDbHelper.getMarkersFromGroup(group);
if (group.getType() == MarkersSyncGroup.FAVORITES_TYPE) { if (group.getType() == MarkersSyncGroup.FAVORITES_TYPE) {
FavouritesDbHelper.FavoriteGroup favGroup = ctx.getFavorites().getGroup(group.getName()); FavoriteGroup favGroup = ctx.getFavorites().getGroup(group.getName());
if (favGroup == null) { if (favGroup == null) {
return; return;
} }
@ -378,10 +393,13 @@ public class MapMarkersHelper {
for (MapMarker marker : markers) { for (MapMarker marker : markers) {
if (marker.id.equals(group.getId() + name)) { if (marker.id.equals(group.getId() + name)) {
exists = true; exists = true;
if (!marker.history && !marker.point.equals(latLon)) { boolean updateColor = group.getColor() != -1
&& marker.colorIndex != ColorDialogs.getCorrespondingMarkerColorIndex(group.getColor());
if (!marker.history && (!marker.point.equals(latLon) || updateColor)) {
for (MapMarker m : mapMarkers) { for (MapMarker m : mapMarkers) {
if (m.id.equals(marker.id)) { if (m.id.equals(marker.id)) {
m.point = latLon; m.point = latLon;
m.colorIndex = ColorDialogs.getCorrespondingMarkerColorIndex(group.getColor());
updateMapMarker(m, true); updateMapMarker(m, true);
break; break;
} }
@ -598,7 +616,8 @@ public class MapMarkersHelper {
private void addMarkers(List<LatLon> points, List<PointDescription> historyNames, @Nullable MarkersSyncGroup group) { private void addMarkers(List<LatLon> points, List<PointDescription> historyNames, @Nullable MarkersSyncGroup group) {
if (points.size() > 0) { if (points.size() > 0) {
int colorIndex = -1; boolean randomColor = group == null || group.getColor() == -1;
int colorIndex = randomColor ? -1 : ColorDialogs.getCorrespondingMarkerColorIndex(group.getColor());
for (int i = 0; i < points.size(); i++) { for (int i = 0; i < points.size(); i++) {
LatLon point = points.get(i); LatLon point = points.get(i);
PointDescription historyName = historyNames.get(i); PointDescription historyName = historyNames.get(i);
@ -611,6 +630,7 @@ public class MapMarkersHelper {
if (pointDescription.isLocation() && Algorithms.isEmpty(pointDescription.getName())) { if (pointDescription.isLocation() && Algorithms.isEmpty(pointDescription.getName())) {
pointDescription.setName(PointDescription.getSearchAddressStr(ctx)); pointDescription.setName(PointDescription.getSearchAddressStr(ctx));
} }
if (randomColor) {
if (colorIndex == -1) { if (colorIndex == -1) {
if (mapMarkers.size() > 0) { if (mapMarkers.size() > 0) {
colorIndex = (mapMarkers.get(mapMarkers.size() - 1).colorIndex + 1) % MAP_MARKERS_COLORS_COUNT; colorIndex = (mapMarkers.get(mapMarkers.size() - 1).colorIndex + 1) % MAP_MARKERS_COLORS_COUNT;
@ -620,6 +640,7 @@ public class MapMarkersHelper {
} else { } else {
colorIndex = (colorIndex + 1) % MAP_MARKERS_COLORS_COUNT; colorIndex = (colorIndex + 1) % MAP_MARKERS_COLORS_COUNT;
} }
}
MapMarker marker = new MapMarker(point, pointDescription, colorIndex, false, 0); MapMarker marker = new MapMarker(point, pointDescription, colorIndex, false, 0);
if (group != null) { if (group != null) {

View file

@ -176,7 +176,8 @@ public class EditFavoriteGroupDialogFragment extends BottomSheetDialogFragment {
}); });
final MapMarkersHelper markersHelper = getMyApplication().getMapMarkersHelper(); final MapMarkersHelper markersHelper = getMyApplication().getMapMarkersHelper();
final MarkersSyncGroup syncGroup = new MarkersSyncGroup(group.name, group.name, MarkersSyncGroup.FAVORITES_TYPE); final MarkersSyncGroup syncGroup =
new MarkersSyncGroup(group.name, group.name, MarkersSyncGroup.FAVORITES_TYPE, group.color);
boolean groupSyncedWithMarkers = markersHelper.isGroupSynced(syncGroup.getId()); boolean groupSyncedWithMarkers = markersHelper.isGroupSynced(syncGroup.getId());
View addToMarkersView = view.findViewById(R.id.add_to_markers_view); View addToMarkersView = view.findViewById(R.id.add_to_markers_view);

View file

@ -407,7 +407,8 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment {
List<PointDescription> names = new LinkedList<>(); List<PointDescription> names = new LinkedList<>();
for (Map.Entry<String, Set<FavouritePoint>> entry : favoritesSelected.entrySet()) { for (Map.Entry<String, Set<FavouritePoint>> entry : favoritesSelected.entrySet()) {
FavoriteGroup favGr = helper.getGroup(entry.getKey()); FavoriteGroup favGr = helper.getGroup(entry.getKey());
MarkersSyncGroup syncGr = new MarkersSyncGroup(favGr.name, favGr.name, MarkersSyncGroup.FAVORITES_TYPE); MarkersSyncGroup syncGr =
new MarkersSyncGroup(favGr.name, favGr.name, MarkersSyncGroup.FAVORITES_TYPE, favGr.color);
if (entry.getValue().size() == favGr.points.size()) { if (entry.getValue().size() == favGr.points.size()) {
markersHelper.addMarkersSyncGroup(syncGr); markersHelper.addMarkersSyncGroup(syncGr);
} }

View file

@ -1,14 +1,5 @@
package net.osmand.plus.helpers; package net.osmand.plus.helpers;
import gnu.trove.list.array.TIntArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
@ -17,13 +8,21 @@ import android.graphics.drawable.Drawable;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import gnu.trove.list.array.TIntArrayList;
import static android.util.TypedValue.COMPLEX_UNIT_DIP; import static android.util.TypedValue.COMPLEX_UNIT_DIP;
public class ColorDialogs { public class ColorDialogs {
@ -66,6 +65,35 @@ public class ColorDialogs {
"brown" "brown"
}; };
public static int getCorrespondingMarkerColorIndex(int paletteColor) {
switch (paletteColor) {
case 0xb4d00d0d: // red
return 3; // R.color.marker_red
case 0xb4ff5020: // orange
return 2; // R.color.marker_orange
case 0xb4eeee10: // yellow
return 4; //R.color.marker_yellow
case 0xb488e030: // lightgreen
case 0xb400842b: // green
return 1; // R.color.marker_green
case 0xb410c0f0: // lightblue
case 0xb41010a0: // blue
return 0; //R.color.marker_blue
case 0xb4a71de1: // purple
case 0xb4e044bb: // pink
return 6; // R.color.marker_purple
case 0xb48e2512: // brown
default:
return 5; //R.color.marker_teal
}
}
public static int getColorByTag(String tag) { public static int getColorByTag(String tag) {
String t = tag.toLowerCase(); String t = tag.toLowerCase();
for (int i = 0; i < paletteColorTags.length; i++) { for (int i = 0; i < paletteColorTags.length; i++) {