From 13544adc954c7bc70588a5d0963e1621f92cbb60 Mon Sep 17 00:00:00 2001 From: Max Kojin <nnngrach@gmail.com> Date: Tue, 17 Dec 2024 20:04:34 +0500 Subject: [PATCH] fix getCompositeIcon crash (#4211) --- Sources/Controllers/Map/Layers/OAFavoritesLayer.mm | 4 ++-- Sources/Controllers/Map/Layers/OAGPXLayer.mm | 2 +- Sources/Controllers/Map/Layers/OAOsmEditsLayer.mm | 6 +++--- .../TargetMenu/PointEditing/OAGpxWptEditingHandler.mm | 2 +- Sources/GPX/OAGPXDocumentPrimitives.h | 1 + Sources/Helpers/OAFavoritesHelper.mm | 7 +++++++ Sources/Models/OAFavoriteItem.mm | 4 ++-- Sources/Models/OAGpxWptItem.mm | 4 ++-- 8 files changed, 19 insertions(+), 11 deletions(-) diff --git a/Sources/Controllers/Map/Layers/OAFavoritesLayer.mm b/Sources/Controllers/Map/Layers/OAFavoritesLayer.mm index 1ebee6d5ab..67b4c18789 100644 --- a/Sources/Controllers/Map/Layers/OAFavoritesLayer.mm +++ b/Sources/Controllers/Map/Layers/OAFavoritesLayer.mm @@ -166,11 +166,11 @@ + (UIImage *) getImageWithColor:(UIColor *)color background:(NSString *)backgrou UIImage *shadowImage = [OATargetInfoViewController getIcon:[NSString stringWithFormat:@"ic_bg_point_%@_bottom", background]]; if (!shadowImage) - shadowImage = [OAUtilities tintImageWithColor:[UIImage imageNamed:@"circle"] color:color]; + shadowImage = [OAUtilities tintImageWithColor:[UIImage imageNamed:DEFAULT_ICON_SHAPE_KEY] color:color]; UIImage *colorFilledImage = [OAUtilities tintImageWithColor:[UIImage imageNamed:[NSString stringWithFormat:@"ic_bg_point_%@_center", background]] color:color]; if (!colorFilledImage) - colorFilledImage = [OAUtilities tintImageWithColor:[UIImage imageNamed:@"circle"] color:color]; + colorFilledImage = [OAUtilities tintImageWithColor:[UIImage imageNamed:DEFAULT_ICON_SHAPE_KEY] color:color]; UIImage *innerImage = [OAUtilities tintImageWithColor:[OATargetInfoViewController getIcon:icon size:innerImageCenterRect.size] color:UIColor.whiteColor]; if (!innerImage) diff --git a/Sources/Controllers/Map/Layers/OAGPXLayer.mm b/Sources/Controllers/Map/Layers/OAGPXLayer.mm index 6790d4b513..32721866e9 100644 --- a/Sources/Controllers/Map/Layers/OAGPXLayer.mm +++ b/Sources/Controllers/Map/Layers/OAGPXLayer.mm @@ -1908,7 +1908,7 @@ - (UIImage *) getPointIcon:(id)object return [OAFavoritesLayer getImageWithColor:point.color background:point.point.getBackgroundType icon:[@"mx_" stringByAppendingString:point.point.getIconName]]; } OAFavoriteColor *def = [OADefaultFavorite nearestFavColor:OADefaultFavorite.builtinColors.firstObject]; - return [OAFavoritesLayer getImageWithColor:def.color background:@"circle" icon:[@"mx_" stringByAppendingString:DEFAULT_ICON_NAME_KEY]]; + return [OAFavoritesLayer getImageWithColor:def.color background:DEFAULT_ICON_SHAPE_KEY icon:[@"mx_" stringByAppendingString:DEFAULT_ICON_NAME_KEY]]; } - (void) setPointVisibility:(id)object hidden:(BOOL)hidden diff --git a/Sources/Controllers/Map/Layers/OAOsmEditsLayer.mm b/Sources/Controllers/Map/Layers/OAOsmEditsLayer.mm index 306ba241e3..b72d716e97 100644 --- a/Sources/Controllers/Map/Layers/OAOsmEditsLayer.mm +++ b/Sources/Controllers/Map/Layers/OAOsmEditsLayer.mm @@ -179,7 +179,7 @@ - (void) refreshOsmEditsCollection if (isNew) { bitmap = [OACompoundIconUtils createCompositeIconWithcolor:UIColorFromARGB(color_osm_edit) - shapeName:@"circle" + shapeName:DEFAULT_ICON_SHAPE_KEY iconName:type.name isFullSize:YES icon:type.icon @@ -193,7 +193,7 @@ - (void) refreshOsmEditsCollection if (!bitmap) { bitmap = [OACompoundIconUtils createCompositeIconWithcolor:UIColorFromARGB(color_osm_edit) - shapeName:@"circle" + shapeName:DEFAULT_ICON_SHAPE_KEY iconName:@"ic_custom_poi" isFullSize:YES icon:[UIImage imageNamed:@"ic_custom_poi"] @@ -370,7 +370,7 @@ - (void)applyNewObjectPosition:(id)object position:(CLLocationCoordinate2D)posit - (void)getOsmNoteBitmap:(sk_sp<SkImage> &)bitmap { UIImage *img = [UIImage mapSvgImageNamed:@"mx_special_information"]; - bitmap = [OACompoundIconUtils createCompositeIconWithcolor:UIColorFromARGB(color_osm_edit) shapeName:@"circle" iconName:@"special_information" isFullSize:YES icon:img scale:_textSize]; + bitmap = [OACompoundIconUtils createCompositeIconWithcolor:UIColorFromARGB(color_osm_edit) shapeName:DEFAULT_ICON_SHAPE_KEY iconName:@"special_information" isFullSize:YES icon:img scale:_textSize]; } - (UIImage *) getPointIcon:(id)point diff --git a/Sources/Controllers/TargetMenu/PointEditing/OAGpxWptEditingHandler.mm b/Sources/Controllers/TargetMenu/PointEditing/OAGpxWptEditingHandler.mm index 339a65ad01..67e31a496e 100644 --- a/Sources/Controllers/TargetMenu/PointEditing/OAGpxWptEditingHandler.mm +++ b/Sources/Controllers/TargetMenu/PointEditing/OAGpxWptEditingHandler.mm @@ -71,7 +71,7 @@ - (instancetype)initWithLocation:(CLLocationCoordinate2D)location title:(NSStrin _iconName = poiIconName; [p setIconNameIconName:_iconName]; - [p setBackgroundTypeBackType:@"circle"]; + [p setBackgroundTypeBackType:DEFAULT_ICON_SHAPE_KEY]; [p setAddressAddress:address]; NSDictionary<NSString *, NSString *> *extensions = [poi toTagValue:PRIVATE_PREFIX osmPrefix:OSM_PREFIX_KEY]; [[p getExtensionsToWrite] addEntriesFromDictionary:extensions]; diff --git a/Sources/GPX/OAGPXDocumentPrimitives.h b/Sources/GPX/OAGPXDocumentPrimitives.h index 87e80238df..284141c613 100644 --- a/Sources/GPX/OAGPXDocumentPrimitives.h +++ b/Sources/GPX/OAGPXDocumentPrimitives.h @@ -21,6 +21,7 @@ #define CREATION_TIME_EXTENSION @"creation_date" #define PICKUP_DATE_EXTENSION @"pickup_date" #define DEFAULT_ICON_NAME_KEY @"special_star" +#define DEFAULT_ICON_SHAPE_KEY @"circle" #define PROFILE_TYPE_EXTENSION_KEY @"profile" #define PRIVATE_PREFIX @"amenity_" diff --git a/Sources/Helpers/OAFavoritesHelper.mm b/Sources/Helpers/OAFavoritesHelper.mm index 1e22314d9e..18519a149e 100644 --- a/Sources/Helpers/OAFavoritesHelper.mm +++ b/Sources/Helpers/OAFavoritesHelper.mm @@ -1089,6 +1089,13 @@ + (void) removeParkingReminderFromCalendar + (UIImage *) getCompositeIcon:(NSString *)icon backgroundIcon:(NSString *)backgroundIcon color:(UIColor *)color { + if (!icon) + icon = DEFAULT_ICON_NAME_KEY; + if (!backgroundIcon) + backgroundIcon = DEFAULT_ICON_SHAPE_KEY; + if (!color) + color = [OADefaultFavorite getDefaultColor]; + UIImage *resultImg; NSString *backgrounfIconName = [@"bg_point_" stringByAppendingString:backgroundIcon]; UIImage *backgroundImg = [UIImage imageNamed:backgrounfIconName]; diff --git a/Sources/Models/OAFavoriteItem.mm b/Sources/Models/OAFavoriteItem.mm index ad54f795f0..1a59ff132e 100644 --- a/Sources/Models/OAFavoriteItem.mm +++ b/Sources/Models/OAFavoriteItem.mm @@ -388,7 +388,7 @@ - (NSString *) getIcon if (!self.favorite->getIcon().isNull()) _icon = self.favorite->getIcon().toNSString(); else - _icon = @"special_star"; + _icon = DEFAULT_ICON_NAME_KEY; return _icon; } @@ -411,7 +411,7 @@ - (NSString *) getBackgroundIcon return _backgroundIcon; } } - _backgroundIcon = @"circle"; + _backgroundIcon = DEFAULT_ICON_SHAPE_KEY; return _backgroundIcon; } diff --git a/Sources/Models/OAGpxWptItem.mm b/Sources/Models/OAGpxWptItem.mm index 8cff0fc4a9..7efede133d 100644 --- a/Sources/Models/OAGpxWptItem.mm +++ b/Sources/Models/OAGpxWptItem.mm @@ -107,8 +107,8 @@ - (NSUInteger) hash - (UIImage *) getCompositeIcon { - NSString *iconName = _point.getIconName ?: @"special_star"; - NSString *backgroundIconName = _point.getBackgroundType ?: @"circle"; + NSString *iconName = _point.getIconName ?: DEFAULT_ICON_NAME_KEY; + NSString *backgroundIconName = _point.getBackgroundType ?: DEFAULT_ICON_SHAPE_KEY; return [OAFavoritesHelper getCompositeIcon:iconName backgroundIcon:backgroundIconName color:UIColorFromRGBA([_point getColor])]; }