diff --git a/OsmAnd/res/values/sizes.xml b/OsmAnd/res/values/sizes.xml
index 087d69932b..42b38e8c4b 100644
--- a/OsmAnd/res/values/sizes.xml
+++ b/OsmAnd/res/values/sizes.xml
@@ -84,6 +84,7 @@
142dp
13dp
9dp
+ 14dp
10dp
16dp
diff --git a/OsmAnd/src/net/osmand/data/FavouritePoint.java b/OsmAnd/src/net/osmand/data/FavouritePoint.java
index 6ac048315d..052949a28f 100644
--- a/OsmAnd/src/net/osmand/data/FavouritePoint.java
+++ b/OsmAnd/src/net/osmand/data/FavouritePoint.java
@@ -1,6 +1,9 @@
package net.osmand.data;
import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
@@ -311,7 +314,7 @@ public class FavouritePoint implements Serializable, LocationPoint {
CIRCLE("circle", R.string.shared_string_circle, R.drawable.bg_point_circle),
OCTAGON("octagon", R.string.shared_string_octagon, R.drawable.bg_point_octagon),
SQUARE("square", R.string.shared_string_square, R.drawable.bg_point_square),
- COMMENT("comment", -1, R.drawable.bg_point_comment);
+ COMMENT("comment", R.string.poi_dialog_comment, R.drawable.bg_point_comment);
private String typeName;
@StringRes
private int nameId;
@@ -344,6 +347,27 @@ public class FavouritePoint implements Serializable, LocationPoint {
}
return defaultValue;
}
+
+ public boolean isSelected() {
+ return this != COMMENT;
+ }
+
+ public int getOffsetY(Context ctx, float textScale) {
+ return this == COMMENT ? Math.round(ctx.getResources()
+ .getDimensionPixelSize(R.dimen.point_background_comment_offset_y) * textScale) : 0;
+ }
+
+ public Bitmap getTouchBackground(Context ctx, boolean isSmall) {
+ return getMapBackgroundIconId(ctx, "center", isSmall);
+ }
+
+ public Bitmap getMapBackgroundIconId(Context ctx, String layer, boolean isSmall) {
+ Resources res = ctx.getResources();
+ String iconName = res.getResourceEntryName(getIconId());
+ String suffix = isSmall ? "_small" : "";
+ return BitmapFactory.decodeResource(res, res.getIdentifier("ic_" + iconName + "_" + layer + suffix,
+ "drawable", ctx.getPackageName()));
+ }
}
public static FavouritePoint fromWpt(@NonNull WptPt pt, @NonNull Context ctx) {
diff --git a/OsmAnd/src/net/osmand/plus/base/PointImageDrawable.java b/OsmAnd/src/net/osmand/plus/base/PointImageDrawable.java
index ac05e6d746..d5e3450415 100644
--- a/OsmAnd/src/net/osmand/plus/base/PointImageDrawable.java
+++ b/OsmAnd/src/net/osmand/plus/base/PointImageDrawable.java
@@ -65,28 +65,24 @@ public class PointImageDrawable extends Drawable {
private PointImageDrawable(PointInfo pointInfo) {
this.withShadow = pointInfo.withShadow;
this.synced = pointInfo.synced;
- Resources res = pointInfo.ctx.getResources();
- UiUtilities uiUtilities = ((OsmandApplication) pointInfo.ctx.getApplicationContext()).getUIUtilities();
+ Context ctx = pointInfo.ctx;
+ Resources res = ctx.getResources();
+ UiUtilities uiUtilities = ((OsmandApplication) ctx.getApplicationContext()).getUIUtilities();
int overlayIconId = pointInfo.overlayIconId;
int uiIconId;
- mapIcon = uiUtilities.getIcon(getMapIconId(pointInfo.ctx, overlayIconId), R.color.color_white);
+ mapIcon = uiUtilities.getIcon(getMapIconId(ctx, overlayIconId), R.color.color_white);
uiIconId = overlayIconId;
int col = pointInfo.color == 0 ? res.getColor(R.color.color_favorite) : pointInfo.color;
uiListIcon = uiUtilities.getIcon(uiIconId, R.color.color_white);
- int uiBackgroundIconId = pointInfo.backgroundType.getIconId();
+ BackgroundType backgroundType = pointInfo.backgroundType;
+ int uiBackgroundIconId = backgroundType.getIconId();
uiBackgroundIcon = uiUtilities.getPaintedIcon(uiBackgroundIconId, col);
- int mapBackgroundIconIdTop = getMapBackgroundIconId(pointInfo, "top", false);
- int mapBackgroundIconIdCenter = getMapBackgroundIconId(pointInfo, "center", false);
- int mapBackgroundIconIdBottom = getMapBackgroundIconId(pointInfo, "bottom", false);
- mapIconBackgroundTop = BitmapFactory.decodeResource(res, mapBackgroundIconIdTop);
- mapIconBackgroundCenter = BitmapFactory.decodeResource(res, mapBackgroundIconIdCenter);
- mapIconBackgroundBottom = BitmapFactory.decodeResource(res, mapBackgroundIconIdBottom);
- int mapBackgroundIconIdTopSmall = getMapBackgroundIconId(pointInfo, "top", true);
- int mapBackgroundIconIdCenterSmall = getMapBackgroundIconId(pointInfo, "center", true);
- int mapBackgroundIconIdBottomSmall = getMapBackgroundIconId(pointInfo, "bottom", true);
- mapIconBackgroundTopSmall = BitmapFactory.decodeResource(res, mapBackgroundIconIdTopSmall);
- mapIconBackgroundCenterSmall = BitmapFactory.decodeResource(res, mapBackgroundIconIdCenterSmall);
- mapIconBackgroundBottomSmall = BitmapFactory.decodeResource(res, mapBackgroundIconIdBottomSmall);
+ mapIconBackgroundTop = backgroundType.getMapBackgroundIconId(ctx, "top", false);
+ mapIconBackgroundCenter = backgroundType.getMapBackgroundIconId(ctx, "center", false);
+ mapIconBackgroundBottom = backgroundType.getMapBackgroundIconId(ctx, "bottom", false);
+ mapIconBackgroundTopSmall = backgroundType.getMapBackgroundIconId(ctx, "top", true);
+ mapIconBackgroundCenterSmall = backgroundType.getMapBackgroundIconId(ctx, "center", true);
+ mapIconBackgroundBottomSmall = backgroundType.getMapBackgroundIconId(ctx, "bottom", true);
syncedStroke = BitmapFactory.decodeResource(res, R.drawable.ic_shield_marker_point_stroke);
syncedColor = BitmapFactory.decodeResource(res, R.drawable.ic_shield_marker_point_color);
syncedShadow = BitmapFactory.decodeResource(res, R.drawable.ic_shield_marker_point_shadow);
@@ -102,15 +98,6 @@ public class PointImageDrawable extends Drawable {
.replaceFirst("mx_", "mm_"), "drawable", ctx.getPackageName());
}
- private int getMapBackgroundIconId(PointInfo pointInfo, String layer, boolean isSmall) {
- Context ctx = pointInfo.ctx;
- int iconId = pointInfo.backgroundType.getIconId();
- String iconName = ctx.getResources().getResourceEntryName(iconId);
- String suffix = isSmall ? "_small" : "";
- return ctx.getResources().getIdentifier("ic_" + iconName + "_" + layer + suffix,
- "drawable", ctx.getPackageName());
- }
-
@Override
protected void onBoundsChange(Rect bounds) {
super.onBoundsChange(bounds);
diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java
index 700d87908f..565331bd05 100644
--- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java
+++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java
@@ -380,7 +380,7 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
private void createShapeSelector() {
FlowLayout selectShape = view.findViewById(R.id.select_shape);
for (BackgroundType backgroundType : BackgroundType.values()) {
- if (backgroundType.getNameId() != -1) {
+ if (backgroundType.isSelected()) {
selectShape.addView(createShapeItemView(backgroundType, selectShape),
new FlowLayout.LayoutParams(0, 0));
}
diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java
index 9421acb84d..5c76f40431 100644
--- a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java
+++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java
@@ -155,10 +155,11 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
iconId = R.drawable.mx_special_symbol_check_mark;
backgroundColorRes = R.color.osm_bug_resolved_icon_color;
}
+ BackgroundType backgroundType = BackgroundType.COMMENT;
PointImageDrawable pointImageDrawable = PointImageDrawable.getOrCreate(activity,
ContextCompat.getColor(activity, backgroundColorRes), true, false, iconId,
- BackgroundType.COMMENT);
- int offsetY = pointImageDrawable.getIntrinsicHeight() / 2;
+ backgroundType);
+ int offsetY = backgroundType.getOffsetY(activity, textScale);
pointImageDrawable.drawPoint(canvas, x, y - offsetY, textScale, false);
}
this.fullObjectsLatLon = fullObjectsLatLon;
diff --git a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java
index 64e6073dc3..ea5cf50027 100644
--- a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java
+++ b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java
@@ -2,9 +2,7 @@ package net.osmand.plus.views;
import android.Manifest;
import android.content.Context;
-import android.content.res.Resources;
import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PointF;
@@ -225,16 +223,17 @@ public class ContextMenuLayer extends OsmandMapLayer {
}
}
}
- float scale = 1f;
+ float textScale = 1f;
if (!pressedLatLonSmall.isEmpty() || !pressedLatLonFull.isEmpty()) {
- scale = activity.getMyApplication().getSettings().TEXT_SCALE.get();
+ textScale = activity.getMyApplication().getSettings().TEXT_SCALE.get();
}
for (LatLon latLon : pressedLatLonSmall.keySet()) {
int x = (int) box.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude());
int y = (int) box.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude());
- Bitmap pressedBitmapSmall = getBackground(pressedLatLonSmall.get(latLon), true);
+ BackgroundType background = pressedLatLonSmall.get(latLon);
+ Bitmap pressedBitmapSmall = background.getTouchBackground(activity, true);
Rect destRect = getIconDestinationRect(
- x, y, pressedBitmapSmall.getWidth(), pressedBitmapSmall.getHeight(), scale);
+ x, y, pressedBitmapSmall.getWidth(), pressedBitmapSmall.getHeight(), textScale);
canvas.drawBitmap(pressedBitmapSmall, null, destRect, paint);
}
for (LatLon latLon : pressedLatLonFull.keySet()) {
@@ -242,10 +241,10 @@ public class ContextMenuLayer extends OsmandMapLayer {
int y = (int) box.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude());
BackgroundType background = pressedLatLonFull.get(latLon);
- Bitmap pressedBitmap = getBackground(background, false);
- int offsetY = BackgroundType.COMMENT.equals(background) ? pressedBitmap.getHeight() / 2 : 0;
+ Bitmap pressedBitmap = background.getTouchBackground(activity, false);
+ int offsetY = background.getOffsetY(activity, textScale);
Rect destRect = getIconDestinationRect(
- x, y - offsetY, pressedBitmap.getWidth(), pressedBitmap.getHeight(), scale);
+ x, y - offsetY, pressedBitmap.getWidth(), pressedBitmap.getHeight(), textScale);
canvas.drawBitmap(pressedBitmap, null, destRect, paint);
}
@@ -271,15 +270,6 @@ public class ContextMenuLayer extends OsmandMapLayer {
}
}
- private Bitmap getBackground(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 selectOnMap) {
this.selectOnMap = selectOnMap;
}
@@ -927,9 +917,9 @@ public class ContextMenuLayer extends OsmandMapLayer {
backgroundType = BackgroundType.getByTypeName(
((GPXUtilities.WptPt) o).getBackgroundType(), DEFAULT_BACKGROUND_TYPE);
}
- if (lt.isPresentInFullObjects(latLon) && !pressedLatLonFull.keySet().contains(latLon)) {
+ if (lt.isPresentInFullObjects(latLon) && !pressedLatLonFull.containsKey(latLon)) {
pressedLatLonFull.put(latLon, backgroundType);
- } else if (lt.isPresentInSmallObjects(latLon) && !pressedLatLonSmall.keySet().contains(latLon)) {
+ } else if (lt.isPresentInSmallObjects(latLon) && !pressedLatLonSmall.containsKey(latLon)) {
pressedLatLonSmall.put(latLon, backgroundType);
}
}