add OSM notes shape and fix tap shape

This commit is contained in:
Dima-1 2020-06-24 16:53:09 +03:00
parent 07605dd21b
commit cfa98dcba7
14 changed files with 59 additions and 19 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M5,2L31,2A3,3 0,0 1,34 5L34,31A3,3 0,0 5,31 34L5,34A3,3 0,0 1,2 31L2,5A3,3 0,0 1,5 2z"
android:fillColor="#727272" />
</vector>

View file

@ -310,8 +310,8 @@ public class FavouritePoint implements Serializable, LocationPoint {
public enum BackgroundType { public enum BackgroundType {
CIRCLE("circle", R.string.shared_string_circle, R.drawable.bg_point_circle), CIRCLE("circle", R.string.shared_string_circle, R.drawable.bg_point_circle),
OCTAGON("octagon", R.string.shared_string_octagon, R.drawable.bg_point_octagon), OCTAGON("octagon", R.string.shared_string_octagon, R.drawable.bg_point_octagon),
SQUARE("square", R.string.shared_string_square, R.drawable.bg_point_square); SQUARE("square", R.string.shared_string_square, R.drawable.bg_point_square),
COMMENT("comment", -1, R.drawable.bg_point_comment);
private String typeName; private String typeName;
@StringRes @StringRes
private int nameId; private int nameId;

View file

@ -380,7 +380,10 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
private void createShapeSelector() { private void createShapeSelector() {
FlowLayout selectShape = view.findViewById(R.id.select_shape); FlowLayout selectShape = view.findViewById(R.id.select_shape);
for (BackgroundType backgroundType : BackgroundType.values()) { for (BackgroundType backgroundType : BackgroundType.values()) {
selectShape.addView(createShapeItemView(backgroundType, selectShape), new FlowLayout.LayoutParams(0, 0)); if (backgroundType.getNameId() != -1) {
selectShape.addView(createShapeItemView(backgroundType, selectShape),
new FlowLayout.LayoutParams(0, 0));
}
} }
} }

View file

@ -16,6 +16,7 @@ import androidx.core.content.ContextCompat;
import net.osmand.AndroidUtils; import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.data.PointDescription; import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect; import net.osmand.data.QuadRect;
@ -155,7 +156,8 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
backgroundColorRes = R.color.osm_bug_resolved_icon_color; backgroundColorRes = R.color.osm_bug_resolved_icon_color;
} }
PointImageDrawable pointImageDrawable = PointImageDrawable.getOrCreate(activity, PointImageDrawable pointImageDrawable = PointImageDrawable.getOrCreate(activity,
ContextCompat.getColor(activity, backgroundColorRes), true, iconId); ContextCompat.getColor(activity, backgroundColorRes), true, false, iconId,
FavouritePoint.BackgroundType.COMMENT);
pointImageDrawable.drawPoint(canvas, x, y, textScale, false); pointImageDrawable.drawPoint(canvas, x, y, textScale, false);
} }
this.fullObjectsLatLon = fullObjectsLatLon; this.fullObjectsLatLon = fullObjectsLatLon;

View file

@ -78,9 +78,10 @@ public class OsmEditsLayer extends OsmandMapLayer implements ContextMenuLayer.IC
private void drawPoint(Canvas canvas, OsmPoint o, float x, float y) { private void drawPoint(Canvas canvas, OsmPoint o, float x, float y) {
float textScale = activity.getMyApplication().getSettings().TEXT_SCALE.get(); float textScale = activity.getMyApplication().getSettings().TEXT_SCALE.get();
int iconId = R.drawable.mx_special_information;
PointImageDrawable pointImageDrawable = PointImageDrawable.getOrCreate(activity, PointImageDrawable pointImageDrawable = PointImageDrawable.getOrCreate(activity,
ContextCompat.getColor(activity, R.color.created_poi_icon_color), true, ContextCompat.getColor(activity, R.color.created_poi_icon_color), true,
R.drawable.mx_special_information); iconId);
pointImageDrawable.setAlpha(0.8f); pointImageDrawable.setAlpha(0.8f);
pointImageDrawable.drawPoint(canvas, x, y, textScale, false); pointImageDrawable.drawPoint(canvas, x, y, textScale, false);
} }

View file

@ -2,6 +2,7 @@ package net.osmand.plus.views;
import android.Manifest; import android.Manifest;
import android.content.Context; import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.Canvas; import android.graphics.Canvas;
@ -24,6 +25,7 @@ import androidx.appcompat.content.res.AppCompatResources;
import net.osmand.AndroidUtils; import net.osmand.AndroidUtils;
import net.osmand.CallbackWithObject; import net.osmand.CallbackWithObject;
import net.osmand.GPXUtilities;
import net.osmand.NativeLibrary.RenderedObject; import net.osmand.NativeLibrary.RenderedObject;
import net.osmand.RenderingContext; import net.osmand.RenderingContext;
import net.osmand.aidl.AidlMapPointWrapper; import net.osmand.aidl.AidlMapPointWrapper;
@ -40,8 +42,10 @@ import net.osmand.core.jni.ObfMapObject;
import net.osmand.core.jni.PointI; import net.osmand.core.jni.PointI;
import net.osmand.core.jni.QStringList; import net.osmand.core.jni.QStringList;
import net.osmand.core.jni.QStringStringHash; import net.osmand.core.jni.QStringStringHash;
import net.osmand.core.jni.ResourcesManager;
import net.osmand.core.jni.Utilities; import net.osmand.core.jni.Utilities;
import net.osmand.data.Amenity; import net.osmand.data.Amenity;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.data.PointDescription; import net.osmand.data.PointDescription;
import net.osmand.data.RotatedTileBox; import net.osmand.data.RotatedTileBox;
@ -58,6 +62,7 @@ import net.osmand.plus.activities.MapActivityActions;
import net.osmand.plus.mapcontextmenu.MapContextMenu; import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.mapcontextmenu.controllers.TransportStopController; import net.osmand.plus.mapcontextmenu.controllers.TransportStopController;
import net.osmand.plus.mapcontextmenu.other.MapMultiSelectionMenu; import net.osmand.plus.mapcontextmenu.other.MapMultiSelectionMenu;
import net.osmand.plus.osmedit.OsmBugsLayer;
import net.osmand.plus.render.MapRenderRepositories; import net.osmand.plus.render.MapRenderRepositories;
import net.osmand.plus.render.NativeOsmandLibrary; import net.osmand.plus.render.NativeOsmandLibrary;
import net.osmand.plus.routepreparationmenu.ChooseRouteFragment; import net.osmand.plus.routepreparationmenu.ChooseRouteFragment;
@ -78,6 +83,7 @@ import java.util.Set;
import gnu.trove.list.array.TIntArrayList; import gnu.trove.list.array.TIntArrayList;
import static net.osmand.aidlapi.OsmAndCustomizationConstants.MAP_CONTEXT_MENU_CHANGE_MARKER_POSITION; import static net.osmand.aidlapi.OsmAndCustomizationConstants.MAP_CONTEXT_MENU_CHANGE_MARKER_POSITION;
import static net.osmand.data.FavouritePoint.DEFAULT_BACKGROUND_TYPE;
public class ContextMenuLayer extends OsmandMapLayer { public class ContextMenuLayer extends OsmandMapLayer {
//private static final Log LOG = PlatformUtil.getLog(ContextMenuLayer.class); //private static final Log LOG = PlatformUtil.getLog(ContextMenuLayer.class);
@ -95,10 +101,8 @@ public class ContextMenuLayer extends OsmandMapLayer {
private ImageView contextMarker; private ImageView contextMarker;
private Paint paint; private Paint paint;
private Paint outlinePaint; private Paint outlinePaint;
private Bitmap pressedBitmap; private Map<LatLon, FavouritePoint.BackgroundType> pressedLatLonFull = new HashMap<>();
private Bitmap pressedBitmapSmall; private Map<LatLon, FavouritePoint.BackgroundType> pressedLatLonSmall = new HashMap<>();
private List<LatLon> pressedLatLonFull = new ArrayList<>();
private List<LatLon> pressedLatLonSmall = new ArrayList<>();
private GestureDetector movementListener; private GestureDetector movementListener;
@ -146,8 +150,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
contextMarker.layout(0, 0, minw, minh); contextMarker.layout(0, 0, minw, minh);
paint = new Paint(); paint = new Paint();
pressedBitmap = BitmapFactory.decodeResource(view.getResources(), R.drawable.ic_shield_tap); paint.setColor(0x7f000000);
pressedBitmapSmall = BitmapFactory.decodeResource(view.getResources(), R.drawable.ic_shield_tap_small);
outlinePaint = new Paint(); outlinePaint = new Paint();
outlinePaint.setStyle(Paint.Style.STROKE); outlinePaint.setStyle(Paint.Style.STROKE);
@ -226,15 +229,17 @@ public class ContextMenuLayer extends OsmandMapLayer {
if (!pressedLatLonSmall.isEmpty() || !pressedLatLonFull.isEmpty()) { if (!pressedLatLonSmall.isEmpty() || !pressedLatLonFull.isEmpty()) {
scale = activity.getMyApplication().getSettings().TEXT_SCALE.get(); scale = activity.getMyApplication().getSettings().TEXT_SCALE.get();
} }
for (LatLon latLon : pressedLatLonSmall) { for (LatLon latLon : pressedLatLonSmall.keySet()) {
int x = (int) box.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude()); int x = (int) box.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude());
int y = (int) box.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude()); int y = (int) box.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude());
Bitmap pressedBitmapSmall = getBackground(pressedLatLonSmall.get(latLon), true);
Rect destRect = getIconDestinationRect(x, y, pressedBitmapSmall.getWidth(), pressedBitmapSmall.getHeight(), scale); Rect destRect = getIconDestinationRect(x, y, pressedBitmapSmall.getWidth(), pressedBitmapSmall.getHeight(), scale);
canvas.drawBitmap(pressedBitmapSmall, null, destRect, paint); canvas.drawBitmap(pressedBitmapSmall, null, destRect, paint);
} }
for (LatLon latLon : pressedLatLonFull) { for (LatLon latLon : pressedLatLonFull.keySet()) {
int x = (int) box.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude()); int x = (int) box.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude());
int y = (int) box.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude()); int y = (int) box.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude());
Bitmap pressedBitmap = getBackground(pressedLatLonFull.get(latLon), false);
Rect destRect = getIconDestinationRect(x, y, pressedBitmap.getWidth(), pressedBitmap.getHeight(), scale); Rect destRect = getIconDestinationRect(x, y, pressedBitmap.getWidth(), pressedBitmap.getHeight(), scale);
canvas.drawBitmap(pressedBitmap, null, destRect, paint); canvas.drawBitmap(pressedBitmap, null, destRect, paint);
} }
@ -261,6 +266,15 @@ public class ContextMenuLayer extends OsmandMapLayer {
} }
} }
private Bitmap getBackground(FavouritePoint.BackgroundType backgroundType, boolean isSmall) {
Context ctx = view.getContext();
Resources res = view.getResources();
String iconName = res.getResourceEntryName(backgroundType.getIconId());
String suffix = isSmall ? "_small" : "";
return BitmapFactory.decodeResource(res, res.getIdentifier("ic_" + iconName + "_center" + suffix,
"drawable", ctx.getPackageName()));
}
public void setSelectOnMap(CallbackWithObject<LatLon> selectOnMap) { public void setSelectOnMap(CallbackWithObject<LatLon> selectOnMap) {
this.selectOnMap = selectOnMap; this.selectOnMap = selectOnMap;
} }
@ -884,8 +898,8 @@ public class ContextMenuLayer extends OsmandMapLayer {
private Map<Object, IContextMenuProvider> selectObjectsForContextMenu(RotatedTileBox tileBox, private Map<Object, IContextMenuProvider> selectObjectsForContextMenu(RotatedTileBox tileBox,
PointF point, boolean acquireObjLatLon, PointF point, boolean acquireObjLatLon,
boolean unknownLocation) { boolean unknownLocation) {
List<LatLon> pressedLatLonFull = new ArrayList<>(); Map<LatLon, FavouritePoint.BackgroundType> pressedLatLonFull = new HashMap<>();
List<LatLon> pressedLatLonSmall = new ArrayList<>(); Map<LatLon, FavouritePoint.BackgroundType> pressedLatLonSmall = new HashMap<>();
Map<Object, IContextMenuProvider> selectedObjects = new HashMap<>(); Map<Object, IContextMenuProvider> selectedObjects = new HashMap<>();
List<Object> s = new ArrayList<>(); List<Object> s = new ArrayList<>();
for (OsmandMapLayer lt : view.getLayers()) { for (OsmandMapLayer lt : view.getLayers()) {
@ -897,10 +911,21 @@ public class ContextMenuLayer extends OsmandMapLayer {
selectedObjects.put(o, l); selectedObjects.put(o, l);
if (acquireObjLatLon && l.isObjectClickable(o)) { if (acquireObjLatLon && l.isObjectClickable(o)) {
LatLon latLon = l.getObjectLocation(o); LatLon latLon = l.getObjectLocation(o);
if (lt.isPresentInFullObjects(latLon) && !pressedLatLonFull.contains(latLon)) { FavouritePoint.BackgroundType backgroundType = DEFAULT_BACKGROUND_TYPE;
pressedLatLonFull.add(latLon); if (o instanceof OsmBugsLayer.OpenStreetNote) {
} else if (lt.isPresentInSmallObjects(latLon) && !pressedLatLonSmall.contains(latLon)) { backgroundType = FavouritePoint.BackgroundType.COMMENT;
pressedLatLonSmall.add(latLon); }
if (o instanceof FavouritePoint) {
backgroundType = ((FavouritePoint) o).getBackgroundType();
}
if (o instanceof GPXUtilities.WptPt) {
backgroundType = FavouritePoint.BackgroundType.getByTypeName(
((GPXUtilities.WptPt) o).getBackgroundType(), DEFAULT_BACKGROUND_TYPE);
}
if (lt.isPresentInFullObjects(latLon) && !pressedLatLonFull.keySet().contains(latLon)) {
pressedLatLonFull.put(latLon, backgroundType);
} else if (lt.isPresentInSmallObjects(latLon) && !pressedLatLonSmall.keySet().contains(latLon)) {
pressedLatLonSmall.put(latLon, backgroundType);
} }
} }
} }