Fix custom favorite icons

This commit is contained in:
Dima-1 2020-01-24 18:36:42 +02:00
parent db080a9447
commit ac87261ade
4 changed files with 28 additions and 14 deletions

View file

@ -42,7 +42,8 @@ import java.util.TimeZone;
public class GPXUtilities {
public final static Log log = PlatformUtil.getLog(GPXUtilities.class);
private static final String ICON_NAME_EXTENSION = "icon_name";
private static final String ICON_NAME_EXTENSION = "icon";
private static final String DEFAULT_ICON_NAME = "special_star";
private final static String GPX_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; //$NON-NLS-1$
private final static String GPX_TIME_FORMAT_MILLIS = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; //$NON-NLS-1$
@ -259,7 +260,11 @@ public class GPXUtilities {
}
public String getIconName() {
return getExtensionsToRead().get(ICON_NAME_EXTENSION);
String iconName = getExtensionsToRead().get(ICON_NAME_EXTENSION);
if (iconName == null) {
iconName = DEFAULT_ICON_NAME;
}
return iconName;
}
public void setIconName(String iconName) {

View file

@ -53,7 +53,9 @@
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="vertical"
android:paddingRight="@dimen/list_content_padding">
android:paddingTop="6dp"
android:paddingRight="@dimen/list_content_padding"
android:paddingBottom="6dp">
<TextView
android:id="@+id/favourite_label"

View file

@ -3,6 +3,7 @@ package net.osmand.data;
import java.io.Serializable;
import android.content.Context;
import android.content.res.Resources;
import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
@ -18,6 +19,7 @@ public class FavouritePoint implements Serializable, LocationPoint {
private static final String HIDDEN = "hidden";
private static final String ADDRESS_EXTENSION = "address";
private static final String DEFAULT_ICON_NAME = "special_star";
protected String name = "";
protected String description;
@ -93,6 +95,10 @@ public class FavouritePoint implements Serializable, LocationPoint {
return iconId;
}
public String getIconEntryName(Context ctx) {
return ctx.getResources().getResourceEntryName(getOverlayIconId());
}
public void setIconId(int iconId) {
this.iconId = iconId;
}
@ -314,7 +320,7 @@ public class FavouritePoint implements Serializable, LocationPoint {
pt.getExtensionsToWrite().put(ADDRESS_EXTENSION, getAddress());
}
if (iconId != 0) {
pt.setIconName(ctx.getResources().getResourceEntryName(iconId).substring(3));
pt.setIconName(getIconEntryName(ctx).substring(3));
}
if (getColor() != 0) {
pt.setColor(getColor());

View file

@ -14,7 +14,6 @@ import android.graphics.PorterDuffColorFilter;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.v4.content.res.ResourcesCompat;
import net.osmand.GPXUtilities;
import net.osmand.data.FavouritePoint;
@ -47,15 +46,17 @@ public class FavoriteImageDrawable extends Drawable {
this.synced = synced;
Resources res = ctx.getResources();
int overlayIconId = point != null ? point.getOverlayIconId() : 0;
int uiIconId;
if (overlayIconId != 0) {
favIcon = ((OsmandApplication) ctx.getApplicationContext()).getUIUtilities()
.getIcon(getMapIconId(ctx, overlayIconId), R.color.color_white);
listDrawable = ((OsmandApplication) ctx.getApplicationContext()).getUIUtilities()
.getIcon(overlayIconId, R.color.color_white);
uiIconId = overlayIconId;
} else {
favIcon = res.getDrawable(R.drawable.map_favorite);
listDrawable = ResourcesCompat.getDrawable(res, R.drawable.ic_action_fav_dark, null).mutate();
favIcon = res.getDrawable(R.drawable.mm_special_star);
uiIconId = R.drawable.mx_special_star;
}
listDrawable = ((OsmandApplication) ctx.getApplicationContext()).getUIUtilities()
.getIcon(uiIconId, R.color.color_white);
int col = color == 0 || color == Color.BLACK ? res.getColor(R.color.color_favorite) : color;
favBackground = BitmapFactory.decodeResource(res, R.drawable.map_white_favorite_shield);
syncedStroke = BitmapFactory.decodeResource(res, R.drawable.map_shield_marker_point_stroke);
@ -151,17 +152,17 @@ public class FavoriteImageDrawable extends Drawable {
private static TreeMap<String, FavoriteImageDrawable> cache = new TreeMap<>();
private static FavoriteImageDrawable getOrCreate(Context a, int color, boolean withShadow, boolean synced, FavouritePoint point) {
String pointName = "";
private static FavoriteImageDrawable getOrCreate(Context ctx, int color, boolean withShadow, boolean synced, FavouritePoint point) {
String iconName = "";
if (point != null) {
pointName = point.getName();
iconName = point.getIconEntryName(ctx);
}
color = color | 0xff000000;
int hash = (color << 4) + ((withShadow ? 1 : 0) << 2) + ((synced ? 3 : 0) << 2);
String uniqueId = hash + pointName;
String uniqueId = hash + iconName;
FavoriteImageDrawable drawable = cache.get(uniqueId);
if (drawable == null) {
drawable = new FavoriteImageDrawable(a, color, withShadow, synced, point);
drawable = new FavoriteImageDrawable(ctx, color, withShadow, synced, point);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
cache.put(uniqueId, drawable);
}