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])];
 }