From b0451a077b5ee6687e96883559ab0e8f7fa33acc Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Thu, 27 May 2021 12:20:01 -0400 Subject: [PATCH 01/15] Asset images to system images --- MobileWeather.xcodeproj/project.pbxproj | 6 +++ MobileWeather/ImageProcessor.h | 3 ++ MobileWeather/ImageProcessor.m | 20 +++++++- MobileWeather/ImageResources.h | 20 ++++++++ MobileWeather/ImageResources.m | 68 +++++++++++++++++++++++++ SmartDeviceLinkService.m | 16 +++--- 6 files changed, 123 insertions(+), 10 deletions(-) create mode 100644 MobileWeather/ImageResources.h create mode 100644 MobileWeather/ImageResources.m diff --git a/MobileWeather.xcodeproj/project.pbxproj b/MobileWeather.xcodeproj/project.pbxproj index 4b1a746..462c0a3 100644 --- a/MobileWeather.xcodeproj/project.pbxproj +++ b/MobileWeather.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 6E04EAC41CF4E55900115C2F /* Forecast.m in Sources */ = {isa = PBXBuildFile; fileRef = E48C4D9219FE7CAF00A90448 /* Forecast.m */; }; 6EF1FC581CF5EF3F009BE8E9 /* SmartDeviceLinkService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EF1FC571CF5EF3F009BE8E9 /* SmartDeviceLinkService.m */; }; AA62726DBC705DF2AB93C537 /* Pods_MobileWeather.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5FAE7A71ACD04B5A73D580C /* Pods_MobileWeather.framework */; }; + C9F5485E265FDED6000ADB96 /* ImageResources.m in Sources */ = {isa = PBXBuildFile; fileRef = C9F5485D265FDED6000ADB96 /* ImageResources.m */; }; E4059D6219FF7D4800C9996D /* WeatherDataManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E4059D6119FF7D4800C9996D /* WeatherDataManager.m */; }; E4059D6519FF7DA900C9996D /* WeatherService.m in Sources */ = {isa = PBXBuildFile; fileRef = E4059D6419FF7DA900C9996D /* WeatherService.m */; }; E4059D6819FF8AF500C9996D /* DarkSkyService.m in Sources */ = {isa = PBXBuildFile; fileRef = E4059D6719FF8AF500C9996D /* DarkSkyService.m */; }; @@ -76,6 +77,8 @@ 6EF1FC561CF5EF3F009BE8E9 /* SmartDeviceLinkService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmartDeviceLinkService.h; sourceTree = ""; }; 6EF1FC571CF5EF3F009BE8E9 /* SmartDeviceLinkService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SmartDeviceLinkService.m; sourceTree = ""; }; C407ED364EBBDDB306D541A8 /* Pods-MobileWeather.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MobileWeather.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MobileWeather/Pods-MobileWeather.debug.xcconfig"; sourceTree = ""; }; + C9F5485C265FDED6000ADB96 /* ImageResources.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageResources.h; sourceTree = ""; }; + C9F5485D265FDED6000ADB96 /* ImageResources.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImageResources.m; sourceTree = ""; }; E4059D6019FF7D4800C9996D /* WeatherDataManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeatherDataManager.h; sourceTree = ""; }; E4059D6119FF7D4800C9996D /* WeatherDataManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WeatherDataManager.m; sourceTree = ""; }; E4059D6319FF7DA900C9996D /* WeatherService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeatherService.h; sourceTree = ""; }; @@ -260,6 +263,8 @@ E4059D6119FF7D4800C9996D /* WeatherDataManager.m */, E4C5B2DF1AEE24AC0056E934 /* WeatherLanguage.h */, E4C5B2E01AEE24AC0056E934 /* WeatherLanguage.m */, + C9F5485C265FDED6000ADB96 /* ImageResources.h */, + C9F5485D265FDED6000ADB96 /* ImageResources.m */, ); name = Data; sourceTree = ""; @@ -500,6 +505,7 @@ E4059D7A19FFC21500C9996D /* DarkSkyProcessor.m in Sources */, E4059D6219FF7D4800C9996D /* WeatherDataManager.m in Sources */, E477F2611A8B79020028B59C /* PercentageNumber.m in Sources */, + C9F5485E265FDED6000ADB96 /* ImageResources.m in Sources */, E44F82451A7F86D20055AD77 /* RoadConditions.m in Sources */, E48C4DA719FE840800A90448 /* ImageProcessor.m in Sources */, E48C4DA319FE7E9E00A90448 /* WeatherConditions.m in Sources */, diff --git a/MobileWeather/ImageProcessor.h b/MobileWeather/ImageProcessor.h index e7a5bad..8857c63 100644 --- a/MobileWeather/ImageProcessor.h +++ b/MobileWeather/ImageProcessor.h @@ -5,12 +5,15 @@ // Copyright (c) 2013-2015 Ford Motor Company. All rights reserved. // +#import "ImageResources.h" @import UIKit; @interface ImageProcessor : NSObject + (ImageProcessor *)sharedProcessor; ++ (UIImage *)imageByName:(NSString *) imageName; + - (UIImage *)imageFromConditionImage:(NSString *)conditionImage; - (NSData *)dataFromConditionImage:(NSString *)conditionImage; diff --git a/MobileWeather/ImageProcessor.m b/MobileWeather/ImageProcessor.m index 9882c74..bf171b0 100644 --- a/MobileWeather/ImageProcessor.m +++ b/MobileWeather/ImageProcessor.m @@ -31,9 +31,25 @@ - (instancetype)init { return self; } ++ (UIImage *)imageByName:(NSString *) imageName { + UIImage *imageReturned; + + if (@available(iOS 13.0, *)) { + return imageReturned = [[UIImage systemImageNamed:[ImageResources systemImageFromAssetsImage:imageName]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + } else { + return imageReturned = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + } +} + - (UIImage *)imageFromConditionImage:(NSString *)conditionImage { - UIImage *image = [UIImage imageNamed:conditionImage]; - + UIImage *image; + + if (@available(iOS 13.0, *)) { + image = [UIImage systemImageNamed:[ImageResources systemImageFromAssetsImage:conditionImage]]; + } else { + image = [UIImage imageNamed:conditionImage]; + } + if (image == nil) { image = [UIImage imageNamed:@"unknown"]; } diff --git a/MobileWeather/ImageResources.h b/MobileWeather/ImageResources.h new file mode 100644 index 0000000..a3667ef --- /dev/null +++ b/MobileWeather/ImageResources.h @@ -0,0 +1,20 @@ +// +// ImageResources.h +// MobileWeather +// +// Created by Frank Elias on 5/27/21. +// Copyright © 2021 Ford. All rights reserved. +// + +#import +@import UIKit; + +NS_ASSUME_NONNULL_BEGIN + +@interface ImageResources : NSObject + ++ (NSString *)systemImageFromAssetsImage:(NSString *) imageName; + +@end + +NS_ASSUME_NONNULL_END diff --git a/MobileWeather/ImageResources.m b/MobileWeather/ImageResources.m new file mode 100644 index 0000000..54b9d21 --- /dev/null +++ b/MobileWeather/ImageResources.m @@ -0,0 +1,68 @@ +// +// ImageResources.m +// MobileWeather +// +// Created by Frank Elias on 5/27/21. +// Copyright © 2021 Ford. All rights reserved. +// + +#import "ImageResources.h" + +@implementation ImageResources + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + return self; +} + ++ (NSString *)systemImageFromAssetsImage:(NSString *) imageName { + NSString *newImageName = imageName; + if ([imageName isEqual:@"chancerain"]) { + newImageName = @"cloud.drizzle"; + } else if ([imageName isEqual:@"chancesnow"]) { + newImageName = @"cloud.snow"; + } else if ([imageName isEqual:@"clear-day"]) { + newImageName = @"sun.max"; + } else if ([imageName isEqual:@"clear-night"]) { + newImageName = @"moon"; + } else if ([imageName isEqual:@"cloudy"]) { + newImageName = @"smoke"; + } else if ([imageName isEqual:@"flurries"]) { + newImageName = @"snow"; + } else if ([imageName isEqual:@"fog"]) { + newImageName = @"cloud.fog"; + } else if ([imageName isEqual:@"hazy"]) { + newImageName = @"sun.haze"; + } else if ([imageName isEqual:@"partly-cloudy-day"]) { + newImageName = @"cloud.sun"; + } else if ([imageName isEqual:@"partly-cloudy-night"]) { + newImageName = @"cloud.moon"; + } else if ([imageName isEqual:@"partlycloudy"]) { + newImageName = @"cloud"; + } else if ([imageName isEqual:@"partlysunny"]) { + newImageName = @"cloud.sun"; + } else if ([imageName isEqual:@"rain"]) { + newImageName = @"cloud.rain"; + } else if ([imageName isEqual:@"sleet"]) { + newImageName = @"cloud.sleet"; + } else if ([imageName isEqual:@"snow"]) { + newImageName = @"cloud.snow"; + } else if ([imageName isEqual:@"sunny"]) { + newImageName = @"sun.max"; + } else if ([imageName isEqual:@"tstorms"]) { + newImageName = @"cloud.bolt"; + } else if ([imageName isEqual:@"menu-alert"]) { + newImageName = @"exclamationmark.triangle"; + } else if ([imageName isEqual:@"menu-day"]) { + newImageName = @"calendar"; + } else if ([imageName isEqual:@"menu-time"]) { + newImageName = @"clock"; + } + return newImageName; +} + +@end diff --git a/SmartDeviceLinkService.m b/SmartDeviceLinkService.m index c7ea5e2..7b0936c 100644 --- a/SmartDeviceLinkService.m +++ b/SmartDeviceLinkService.m @@ -614,7 +614,7 @@ - (void)repeatWeatherInformation { - (NSArray *)buildDefaultSoftButtons { __weak typeof(self) weakSelf = self; - SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] image:[[UIImage imageNamed:@"clear-day"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] image:[ImageProcessor imageByName:@"clear-day"]]; SDLSoftButtonObject *currentWeatherObject = [[SDLSoftButtonObject alloc] initWithName:@"CurrentWeather" state:currentWeatherState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -623,7 +623,7 @@ - (void)repeatWeatherInformation { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES]; }]; - SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] image:[[UIImage imageNamed:@"menu-day"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] image:[ImageProcessor imageByName:@"menu-day"]]; SDLSoftButtonObject *dailyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"DailyForecast" state:dailyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -632,7 +632,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] image:[[UIImage imageNamed:@"menu-time"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] image:[ImageProcessor imageByName:@"menu-time"]]; SDLSoftButtonObject *hourlyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"HourlyForecast" state:hourlyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -641,7 +641,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] image:[[UIImage imageNamed:@"menu-alert"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] image:[ImageProcessor imageByName:@"menu-alert"]]; SDLSoftButtonObject *alertsObject = [[SDLSoftButtonObject alloc] initWithName:@"Alerts" state:alertsState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -721,19 +721,19 @@ - (void)repeatWeatherInformation { - (NSArray *)weatherMenuCells { __weak typeof(self) weakSelf = self; - SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage imageNamed:@"clear-day"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[ImageProcessor imageByName:@"clear-day"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES]; }]; - SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage imageNamed:@"menu-day"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[ImageProcessor imageByName:@"menu-day"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage imageNamed:@"menu-time"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[ImageProcessor imageByName:@"menu-time"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage imageNamed:@"menu-alert"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[ImageProcessor imageByName:@"menu-alert"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendAlertList:[WeatherDataManager sharedManager].alerts withSpeak:YES]; }]; From 1ada557ff036955bba5d6865d3fb15481375e3ad Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Thu, 27 May 2021 12:42:25 -0400 Subject: [PATCH 02/15] Code update --- MobileWeather.xcodeproj/project.pbxproj | 6 --- MobileWeather/ImageProcessor.h | 1 - MobileWeather/ImageProcessor.m | 50 +++++++++++++++++- MobileWeather/ImageResources.h | 20 -------- MobileWeather/ImageResources.m | 68 ------------------------- 5 files changed, 48 insertions(+), 97 deletions(-) delete mode 100644 MobileWeather/ImageResources.h delete mode 100644 MobileWeather/ImageResources.m diff --git a/MobileWeather.xcodeproj/project.pbxproj b/MobileWeather.xcodeproj/project.pbxproj index 462c0a3..4b1a746 100644 --- a/MobileWeather.xcodeproj/project.pbxproj +++ b/MobileWeather.xcodeproj/project.pbxproj @@ -18,7 +18,6 @@ 6E04EAC41CF4E55900115C2F /* Forecast.m in Sources */ = {isa = PBXBuildFile; fileRef = E48C4D9219FE7CAF00A90448 /* Forecast.m */; }; 6EF1FC581CF5EF3F009BE8E9 /* SmartDeviceLinkService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EF1FC571CF5EF3F009BE8E9 /* SmartDeviceLinkService.m */; }; AA62726DBC705DF2AB93C537 /* Pods_MobileWeather.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5FAE7A71ACD04B5A73D580C /* Pods_MobileWeather.framework */; }; - C9F5485E265FDED6000ADB96 /* ImageResources.m in Sources */ = {isa = PBXBuildFile; fileRef = C9F5485D265FDED6000ADB96 /* ImageResources.m */; }; E4059D6219FF7D4800C9996D /* WeatherDataManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E4059D6119FF7D4800C9996D /* WeatherDataManager.m */; }; E4059D6519FF7DA900C9996D /* WeatherService.m in Sources */ = {isa = PBXBuildFile; fileRef = E4059D6419FF7DA900C9996D /* WeatherService.m */; }; E4059D6819FF8AF500C9996D /* DarkSkyService.m in Sources */ = {isa = PBXBuildFile; fileRef = E4059D6719FF8AF500C9996D /* DarkSkyService.m */; }; @@ -77,8 +76,6 @@ 6EF1FC561CF5EF3F009BE8E9 /* SmartDeviceLinkService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmartDeviceLinkService.h; sourceTree = ""; }; 6EF1FC571CF5EF3F009BE8E9 /* SmartDeviceLinkService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SmartDeviceLinkService.m; sourceTree = ""; }; C407ED364EBBDDB306D541A8 /* Pods-MobileWeather.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MobileWeather.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MobileWeather/Pods-MobileWeather.debug.xcconfig"; sourceTree = ""; }; - C9F5485C265FDED6000ADB96 /* ImageResources.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageResources.h; sourceTree = ""; }; - C9F5485D265FDED6000ADB96 /* ImageResources.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImageResources.m; sourceTree = ""; }; E4059D6019FF7D4800C9996D /* WeatherDataManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeatherDataManager.h; sourceTree = ""; }; E4059D6119FF7D4800C9996D /* WeatherDataManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WeatherDataManager.m; sourceTree = ""; }; E4059D6319FF7DA900C9996D /* WeatherService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeatherService.h; sourceTree = ""; }; @@ -263,8 +260,6 @@ E4059D6119FF7D4800C9996D /* WeatherDataManager.m */, E4C5B2DF1AEE24AC0056E934 /* WeatherLanguage.h */, E4C5B2E01AEE24AC0056E934 /* WeatherLanguage.m */, - C9F5485C265FDED6000ADB96 /* ImageResources.h */, - C9F5485D265FDED6000ADB96 /* ImageResources.m */, ); name = Data; sourceTree = ""; @@ -505,7 +500,6 @@ E4059D7A19FFC21500C9996D /* DarkSkyProcessor.m in Sources */, E4059D6219FF7D4800C9996D /* WeatherDataManager.m in Sources */, E477F2611A8B79020028B59C /* PercentageNumber.m in Sources */, - C9F5485E265FDED6000ADB96 /* ImageResources.m in Sources */, E44F82451A7F86D20055AD77 /* RoadConditions.m in Sources */, E48C4DA719FE840800A90448 /* ImageProcessor.m in Sources */, E48C4DA319FE7E9E00A90448 /* WeatherConditions.m in Sources */, diff --git a/MobileWeather/ImageProcessor.h b/MobileWeather/ImageProcessor.h index 8857c63..82d7b14 100644 --- a/MobileWeather/ImageProcessor.h +++ b/MobileWeather/ImageProcessor.h @@ -5,7 +5,6 @@ // Copyright (c) 2013-2015 Ford Motor Company. All rights reserved. // -#import "ImageResources.h" @import UIKit; @interface ImageProcessor : NSObject diff --git a/MobileWeather/ImageProcessor.m b/MobileWeather/ImageProcessor.m index bf171b0..6ab7ae5 100644 --- a/MobileWeather/ImageProcessor.m +++ b/MobileWeather/ImageProcessor.m @@ -35,7 +35,7 @@ + (UIImage *)imageByName:(NSString *) imageName { UIImage *imageReturned; if (@available(iOS 13.0, *)) { - return imageReturned = [[UIImage systemImageNamed:[ImageResources systemImageFromAssetsImage:imageName]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + return imageReturned = [[UIImage systemImageNamed:[ImageProcessor systemImageFromAssetsImage:imageName]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; } else { return imageReturned = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; } @@ -45,7 +45,7 @@ - (UIImage *)imageFromConditionImage:(NSString *)conditionImage { UIImage *image; if (@available(iOS 13.0, *)) { - image = [UIImage systemImageNamed:[ImageResources systemImageFromAssetsImage:conditionImage]]; + image = [UIImage systemImageNamed:[ImageProcessor systemImageFromAssetsImage:conditionImage]]; } else { image = [UIImage imageNamed:conditionImage]; } @@ -64,4 +64,50 @@ - (NSData *)dataFromConditionImage:(NSString *)conditionImage { return data; } ++ (NSString *)systemImageFromAssetsImage:(NSString *) imageName { + NSString *newImageName = imageName; + if ([imageName isEqual:@"chancerain"]) { + newImageName = @"cloud.drizzle"; + } else if ([imageName isEqual:@"chancesnow"]) { + newImageName = @"cloud.snow"; + } else if ([imageName isEqual:@"clear-day"]) { + newImageName = @"sun.max"; + } else if ([imageName isEqual:@"clear-night"]) { + newImageName = @"moon"; + } else if ([imageName isEqual:@"cloudy"]) { + newImageName = @"smoke"; + } else if ([imageName isEqual:@"flurries"]) { + newImageName = @"snow"; + } else if ([imageName isEqual:@"fog"]) { + newImageName = @"cloud.fog"; + } else if ([imageName isEqual:@"hazy"]) { + newImageName = @"sun.haze"; + } else if ([imageName isEqual:@"partly-cloudy-day"]) { + newImageName = @"cloud.sun"; + } else if ([imageName isEqual:@"partly-cloudy-night"]) { + newImageName = @"cloud.moon"; + } else if ([imageName isEqual:@"partlycloudy"]) { + newImageName = @"cloud"; + } else if ([imageName isEqual:@"partlysunny"]) { + newImageName = @"cloud.sun"; + } else if ([imageName isEqual:@"rain"]) { + newImageName = @"cloud.rain"; + } else if ([imageName isEqual:@"sleet"]) { + newImageName = @"cloud.sleet"; + } else if ([imageName isEqual:@"snow"]) { + newImageName = @"cloud.snow"; + } else if ([imageName isEqual:@"sunny"]) { + newImageName = @"sun.max"; + } else if ([imageName isEqual:@"tstorms"]) { + newImageName = @"cloud.bolt"; + } else if ([imageName isEqual:@"menu-alert"]) { + newImageName = @"exclamationmark.triangle"; + } else if ([imageName isEqual:@"menu-day"]) { + newImageName = @"calendar"; + } else if ([imageName isEqual:@"menu-time"]) { + newImageName = @"clock"; + } + return newImageName; +} + @end diff --git a/MobileWeather/ImageResources.h b/MobileWeather/ImageResources.h deleted file mode 100644 index a3667ef..0000000 --- a/MobileWeather/ImageResources.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// ImageResources.h -// MobileWeather -// -// Created by Frank Elias on 5/27/21. -// Copyright © 2021 Ford. All rights reserved. -// - -#import -@import UIKit; - -NS_ASSUME_NONNULL_BEGIN - -@interface ImageResources : NSObject - -+ (NSString *)systemImageFromAssetsImage:(NSString *) imageName; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MobileWeather/ImageResources.m b/MobileWeather/ImageResources.m deleted file mode 100644 index 54b9d21..0000000 --- a/MobileWeather/ImageResources.m +++ /dev/null @@ -1,68 +0,0 @@ -// -// ImageResources.m -// MobileWeather -// -// Created by Frank Elias on 5/27/21. -// Copyright © 2021 Ford. All rights reserved. -// - -#import "ImageResources.h" - -@implementation ImageResources - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - return self; -} - -+ (NSString *)systemImageFromAssetsImage:(NSString *) imageName { - NSString *newImageName = imageName; - if ([imageName isEqual:@"chancerain"]) { - newImageName = @"cloud.drizzle"; - } else if ([imageName isEqual:@"chancesnow"]) { - newImageName = @"cloud.snow"; - } else if ([imageName isEqual:@"clear-day"]) { - newImageName = @"sun.max"; - } else if ([imageName isEqual:@"clear-night"]) { - newImageName = @"moon"; - } else if ([imageName isEqual:@"cloudy"]) { - newImageName = @"smoke"; - } else if ([imageName isEqual:@"flurries"]) { - newImageName = @"snow"; - } else if ([imageName isEqual:@"fog"]) { - newImageName = @"cloud.fog"; - } else if ([imageName isEqual:@"hazy"]) { - newImageName = @"sun.haze"; - } else if ([imageName isEqual:@"partly-cloudy-day"]) { - newImageName = @"cloud.sun"; - } else if ([imageName isEqual:@"partly-cloudy-night"]) { - newImageName = @"cloud.moon"; - } else if ([imageName isEqual:@"partlycloudy"]) { - newImageName = @"cloud"; - } else if ([imageName isEqual:@"partlysunny"]) { - newImageName = @"cloud.sun"; - } else if ([imageName isEqual:@"rain"]) { - newImageName = @"cloud.rain"; - } else if ([imageName isEqual:@"sleet"]) { - newImageName = @"cloud.sleet"; - } else if ([imageName isEqual:@"snow"]) { - newImageName = @"cloud.snow"; - } else if ([imageName isEqual:@"sunny"]) { - newImageName = @"sun.max"; - } else if ([imageName isEqual:@"tstorms"]) { - newImageName = @"cloud.bolt"; - } else if ([imageName isEqual:@"menu-alert"]) { - newImageName = @"exclamationmark.triangle"; - } else if ([imageName isEqual:@"menu-day"]) { - newImageName = @"calendar"; - } else if ([imageName isEqual:@"menu-time"]) { - newImageName = @"clock"; - } - return newImageName; -} - -@end From 70e0dc03de5fec5f7b697b1dda2f26bde8657d9e Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Thu, 27 May 2021 13:03:53 -0400 Subject: [PATCH 03/15] Code update --- MobileWeather/ImageProcessor.h | 2 +- MobileWeather/ImageProcessor.m | 6 +++--- SmartDeviceLinkService.m | 16 ++++++++-------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/MobileWeather/ImageProcessor.h b/MobileWeather/ImageProcessor.h index 82d7b14..00d2d76 100644 --- a/MobileWeather/ImageProcessor.h +++ b/MobileWeather/ImageProcessor.h @@ -11,7 +11,7 @@ + (ImageProcessor *)sharedProcessor; -+ (UIImage *)imageByName:(NSString *) imageName; +- (UIImage *)imageByName:(NSString *) imageName; - (UIImage *)imageFromConditionImage:(NSString *)conditionImage; diff --git a/MobileWeather/ImageProcessor.m b/MobileWeather/ImageProcessor.m index 6ab7ae5..393938f 100644 --- a/MobileWeather/ImageProcessor.m +++ b/MobileWeather/ImageProcessor.m @@ -31,7 +31,7 @@ - (instancetype)init { return self; } -+ (UIImage *)imageByName:(NSString *) imageName { +- (UIImage *)imageByName:(NSString *) imageName { UIImage *imageReturned; if (@available(iOS 13.0, *)) { @@ -45,7 +45,7 @@ - (UIImage *)imageFromConditionImage:(NSString *)conditionImage { UIImage *image; if (@available(iOS 13.0, *)) { - image = [UIImage systemImageNamed:[ImageProcessor systemImageFromAssetsImage:conditionImage]]; + image = [UIImage systemImageNamed:[self systemImageFromAssetsImage:conditionImage]]; } else { image = [UIImage imageNamed:conditionImage]; } @@ -64,7 +64,7 @@ - (NSData *)dataFromConditionImage:(NSString *)conditionImage { return data; } -+ (NSString *)systemImageFromAssetsImage:(NSString *) imageName { +- (NSString *)systemImageFromAssetsImage:(NSString *) imageName { NSString *newImageName = imageName; if ([imageName isEqual:@"chancerain"]) { newImageName = @"cloud.drizzle"; diff --git a/SmartDeviceLinkService.m b/SmartDeviceLinkService.m index 7b0936c..bd02ff5 100644 --- a/SmartDeviceLinkService.m +++ b/SmartDeviceLinkService.m @@ -614,7 +614,7 @@ - (void)repeatWeatherInformation { - (NSArray *)buildDefaultSoftButtons { __weak typeof(self) weakSelf = self; - SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] image:[ImageProcessor imageByName:@"clear-day"]]; + SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] image:[[ImageProcessor sharedProcessor] imageByName:@"clear-day"]]; SDLSoftButtonObject *currentWeatherObject = [[SDLSoftButtonObject alloc] initWithName:@"CurrentWeather" state:currentWeatherState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -623,7 +623,7 @@ - (void)repeatWeatherInformation { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES]; }]; - SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] image:[ImageProcessor imageByName:@"menu-day"]]; + SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] image:[[ImageProcessor sharedProcessor] imageByName:@"menu-day"]]; SDLSoftButtonObject *dailyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"DailyForecast" state:dailyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -632,7 +632,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] image:[ImageProcessor imageByName:@"menu-time"]]; + SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] image:[[ImageProcessor sharedProcessor] imageByName:@"menu-time"]]; SDLSoftButtonObject *hourlyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"HourlyForecast" state:hourlyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -641,7 +641,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] image:[ImageProcessor imageByName:@"menu-alert"]]; + SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] image:[[ImageProcessor sharedProcessor] imageByName:@"menu-alert"]]; SDLSoftButtonObject *alertsObject = [[SDLSoftButtonObject alloc] initWithName:@"Alerts" state:alertsState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -721,19 +721,19 @@ - (void)repeatWeatherInformation { - (NSArray *)weatherMenuCells { __weak typeof(self) weakSelf = self; - SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[ImageProcessor imageByName:@"clear-day"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[ImageProcessor sharedProcessor] imageByName:@"clear-day"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES]; }]; - SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[ImageProcessor imageByName:@"menu-day"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[ImageProcessor sharedProcessor] imageByName:@"menu-day"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[ImageProcessor imageByName:@"menu-time"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[ImageProcessor sharedProcessor] imageByName:@"menu-time"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[ImageProcessor imageByName:@"menu-alert"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[ImageProcessor sharedProcessor] imageByName:@"menu-alert"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendAlertList:[WeatherDataManager sharedManager].alerts withSpeak:YES]; }]; From 99d92613a6b67e72406dd14c3c7789064f92e535 Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Tue, 8 Jun 2021 08:59:45 -0400 Subject: [PATCH 04/15] Comments update --- MobileWeather.xcodeproj/project.pbxproj | 8 +-- MobileWeather/ImageProcessor.h | 2 - MobileWeather/ImageProcessor.m | 60 +++++++----------- .../Images.xcassets/Images/Contents.json | 6 +- .../Images/chancerain.imageset/Contents.json | 21 ------ .../Images/chancerain.imageset/chancerain.png | Bin 13851 -> 0 bytes .../Images/chancesnow.imageset/Contents.json | 21 ------ .../Images/chancesnow.imageset/chancesnow.png | Bin 14762 -> 0 bytes .../Images/clear-day.imageset/Contents.json | 21 ------ .../Images/clear-day.imageset/clear-day.png | Bin 11566 -> 0 bytes .../Images/clear-night.imageset/Contents.json | 21 ------ .../clear-night.imageset/clear-night.png | Bin 7941 -> 0 bytes .../Images/cloudy.imageset/Contents.json | 21 ------ .../Images/cloudy.imageset/cloudy.png | Bin 16921 -> 0 bytes .../Images/flurries.imageset/Contents.json | 21 ------ .../Images/flurries.imageset/flurries.png | Bin 16189 -> 0 bytes .../Images/fog.imageset/Contents.json | 21 ------ .../Images/fog.imageset/fog.png | Bin 9257 -> 0 bytes .../Images/hazy.imageset/Contents.json | 21 ------ .../Images/hazy.imageset/hazy.png | Bin 8899 -> 0 bytes .../partly-cloudy-day.imageset/Contents.json | 21 ------ .../partly-cloudy-day.png | Bin 18235 -> 0 bytes .../Contents.json | 21 ------ .../partly-cloudy-night.png | Bin 17021 -> 0 bytes .../partlycloudy.imageset/Contents.json | 21 ------ .../partlycloudy.imageset/partlycloudy.png | Bin 12474 -> 0 bytes .../Images/partlysunny.imageset/Contents.json | 21 ------ .../partlysunny.imageset/partlysunny.png | Bin 18235 -> 0 bytes .../Images/rain.imageset/Contents.json | 21 ------ .../Images/rain.imageset/rain.png | Bin 16390 -> 0 bytes .../Images/sleet.imageset/Contents.json | 21 ------ .../Images/sleet.imageset/sleet.png | Bin 15477 -> 0 bytes .../Images/snow.imageset/Contents.json | 21 ------ .../Images/snow.imageset/snow.png | Bin 20359 -> 0 bytes .../Images/sunny.imageset/Contents.json | 21 ------ .../Images/sunny.imageset/sunny.png | Bin 11566 -> 0 bytes .../Images/tstorms.imageset/Contents.json | 21 ------ .../Images/tstorms.imageset/tstorms.png | Bin 13131 -> 0 bytes .../Images/wind.imageset/Contents.json | 21 ------ .../Images/wind.imageset/wind.png | Bin 6095 -> 0 bytes .../SDL/menu-alert.imageset/Contents.json | 21 ------ .../SDL/menu-alert.imageset/menu-alert.png | Bin 1671 -> 0 bytes .../SDL/menu-day.imageset/Contents.json | 21 ------ .../SDL/menu-day.imageset/menu-day.png | Bin 1828 -> 0 bytes .../SDL/menu-time.imageset/Contents.json | 21 ------ .../SDL/menu-time.imageset/menu-time.png | Bin 5768 -> 0 bytes SmartDeviceLinkService.m | 20 +++--- 47 files changed, 39 insertions(+), 498 deletions(-) delete mode 100644 MobileWeather/Images.xcassets/Images/chancerain.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/chancerain.imageset/chancerain.png delete mode 100644 MobileWeather/Images.xcassets/Images/chancesnow.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/chancesnow.imageset/chancesnow.png delete mode 100644 MobileWeather/Images.xcassets/Images/clear-day.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/clear-day.imageset/clear-day.png delete mode 100644 MobileWeather/Images.xcassets/Images/clear-night.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/clear-night.imageset/clear-night.png delete mode 100644 MobileWeather/Images.xcassets/Images/cloudy.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/cloudy.imageset/cloudy.png delete mode 100644 MobileWeather/Images.xcassets/Images/flurries.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/flurries.imageset/flurries.png delete mode 100644 MobileWeather/Images.xcassets/Images/fog.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/fog.imageset/fog.png delete mode 100644 MobileWeather/Images.xcassets/Images/hazy.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/hazy.imageset/hazy.png delete mode 100644 MobileWeather/Images.xcassets/Images/partly-cloudy-day.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/partly-cloudy-day.imageset/partly-cloudy-day.png delete mode 100644 MobileWeather/Images.xcassets/Images/partly-cloudy-night.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/partly-cloudy-night.imageset/partly-cloudy-night.png delete mode 100644 MobileWeather/Images.xcassets/Images/partlycloudy.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/partlycloudy.imageset/partlycloudy.png delete mode 100644 MobileWeather/Images.xcassets/Images/partlysunny.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/partlysunny.imageset/partlysunny.png delete mode 100644 MobileWeather/Images.xcassets/Images/rain.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/rain.imageset/rain.png delete mode 100644 MobileWeather/Images.xcassets/Images/sleet.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/sleet.imageset/sleet.png delete mode 100644 MobileWeather/Images.xcassets/Images/snow.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/snow.imageset/snow.png delete mode 100644 MobileWeather/Images.xcassets/Images/sunny.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/sunny.imageset/sunny.png delete mode 100644 MobileWeather/Images.xcassets/Images/tstorms.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/tstorms.imageset/tstorms.png delete mode 100644 MobileWeather/Images.xcassets/Images/wind.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/Images/wind.imageset/wind.png delete mode 100644 MobileWeather/Images.xcassets/SDL/menu-alert.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/SDL/menu-alert.imageset/menu-alert.png delete mode 100644 MobileWeather/Images.xcassets/SDL/menu-day.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/SDL/menu-day.imageset/menu-day.png delete mode 100644 MobileWeather/Images.xcassets/SDL/menu-time.imageset/Contents.json delete mode 100644 MobileWeather/Images.xcassets/SDL/menu-time.imageset/menu-time.png diff --git a/MobileWeather.xcodeproj/project.pbxproj b/MobileWeather.xcodeproj/project.pbxproj index 4b1a746..cfe5635 100644 --- a/MobileWeather.xcodeproj/project.pbxproj +++ b/MobileWeather.xcodeproj/project.pbxproj @@ -609,7 +609,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; @@ -652,7 +652,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -672,7 +672,7 @@ DEVELOPMENT_TEAM = NCVC2MHU7M; GCC_PRECOMPILE_PREFIX_HEADER = YES; INFOPLIST_FILE = MobileWeather/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 5.5.2; PRODUCT_BUNDLE_IDENTIFIER = com.sdl.sdlweather; @@ -695,7 +695,7 @@ DEVELOPMENT_TEAM = NCVC2MHU7M; GCC_PRECOMPILE_PREFIX_HEADER = YES; INFOPLIST_FILE = MobileWeather/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 5.5.2; PRODUCT_BUNDLE_IDENTIFIER = com.sdl.sdlweather; diff --git a/MobileWeather/ImageProcessor.h b/MobileWeather/ImageProcessor.h index 00d2d76..e7a5bad 100644 --- a/MobileWeather/ImageProcessor.h +++ b/MobileWeather/ImageProcessor.h @@ -11,8 +11,6 @@ + (ImageProcessor *)sharedProcessor; -- (UIImage *)imageByName:(NSString *) imageName; - - (UIImage *)imageFromConditionImage:(NSString *)conditionImage; - (NSData *)dataFromConditionImage:(NSString *)conditionImage; diff --git a/MobileWeather/ImageProcessor.m b/MobileWeather/ImageProcessor.m index 393938f..4905dd8 100644 --- a/MobileWeather/ImageProcessor.m +++ b/MobileWeather/ImageProcessor.m @@ -31,24 +31,8 @@ - (instancetype)init { return self; } -- (UIImage *)imageByName:(NSString *) imageName { - UIImage *imageReturned; - - if (@available(iOS 13.0, *)) { - return imageReturned = [[UIImage systemImageNamed:[ImageProcessor systemImageFromAssetsImage:imageName]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - } else { - return imageReturned = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - } -} - - (UIImage *)imageFromConditionImage:(NSString *)conditionImage { - UIImage *image; - - if (@available(iOS 13.0, *)) { - image = [UIImage systemImageNamed:[self systemImageFromAssetsImage:conditionImage]]; - } else { - image = [UIImage imageNamed:conditionImage]; - } + UIImage *image = [UIImage systemImageNamed:[self mw_systemImageFromAssetsImage:conditionImage]]; if (image == nil) { image = [UIImage imageNamed:@"unknown"]; @@ -64,47 +48,47 @@ - (NSData *)dataFromConditionImage:(NSString *)conditionImage { return data; } -- (NSString *)systemImageFromAssetsImage:(NSString *) imageName { +- (NSString *)mw_systemImageFromAssetsImage:(NSString *)imageName { NSString *newImageName = imageName; - if ([imageName isEqual:@"chancerain"]) { + if ([imageName isEqualToString:@"chancerain"]) { newImageName = @"cloud.drizzle"; - } else if ([imageName isEqual:@"chancesnow"]) { + } else if ([imageName isEqualToString:@"chancesnow"]) { newImageName = @"cloud.snow"; - } else if ([imageName isEqual:@"clear-day"]) { + } else if ([imageName isEqualToString:@"clear-day"]) { newImageName = @"sun.max"; - } else if ([imageName isEqual:@"clear-night"]) { + } else if ([imageName isEqualToString:@"clear-night"]) { newImageName = @"moon"; - } else if ([imageName isEqual:@"cloudy"]) { + } else if ([imageName isEqualToString:@"cloudy"]) { newImageName = @"smoke"; - } else if ([imageName isEqual:@"flurries"]) { + } else if ([imageName isEqualToString:@"flurries"]) { newImageName = @"snow"; - } else if ([imageName isEqual:@"fog"]) { + } else if ([imageName isEqualToString:@"fog"]) { newImageName = @"cloud.fog"; - } else if ([imageName isEqual:@"hazy"]) { + } else if ([imageName isEqualToString:@"hazy"]) { newImageName = @"sun.haze"; - } else if ([imageName isEqual:@"partly-cloudy-day"]) { + } else if ([imageName isEqualToString:@"partly-cloudy-day"]) { newImageName = @"cloud.sun"; - } else if ([imageName isEqual:@"partly-cloudy-night"]) { + } else if ([imageName isEqualToString:@"partly-cloudy-night"]) { newImageName = @"cloud.moon"; - } else if ([imageName isEqual:@"partlycloudy"]) { + } else if ([imageName isEqualToString:@"partlycloudy"]) { newImageName = @"cloud"; - } else if ([imageName isEqual:@"partlysunny"]) { + } else if ([imageName isEqualToString:@"partlysunny"]) { newImageName = @"cloud.sun"; - } else if ([imageName isEqual:@"rain"]) { + } else if ([imageName isEqualToString:@"rain"]) { newImageName = @"cloud.rain"; - } else if ([imageName isEqual:@"sleet"]) { + } else if ([imageName isEqualToString:@"sleet"]) { newImageName = @"cloud.sleet"; - } else if ([imageName isEqual:@"snow"]) { + } else if ([imageName isEqualToString:@"snow"]) { newImageName = @"cloud.snow"; - } else if ([imageName isEqual:@"sunny"]) { + } else if ([imageName isEqualToString:@"sunny"]) { newImageName = @"sun.max"; - } else if ([imageName isEqual:@"tstorms"]) { + } else if ([imageName isEqualToString:@"tstorms"]) { newImageName = @"cloud.bolt"; - } else if ([imageName isEqual:@"menu-alert"]) { + } else if ([imageName isEqualToString:@"menu-alert"]) { newImageName = @"exclamationmark.triangle"; - } else if ([imageName isEqual:@"menu-day"]) { + } else if ([imageName isEqualToString:@"menu-day"]) { newImageName = @"calendar"; - } else if ([imageName isEqual:@"menu-time"]) { + } else if ([imageName isEqualToString:@"menu-time"]) { newImageName = @"clock"; } return newImageName; diff --git a/MobileWeather/Images.xcassets/Images/Contents.json b/MobileWeather/Images.xcassets/Images/Contents.json index da4a164..73c0059 100644 --- a/MobileWeather/Images.xcassets/Images/Contents.json +++ b/MobileWeather/Images.xcassets/Images/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/MobileWeather/Images.xcassets/Images/chancerain.imageset/Contents.json b/MobileWeather/Images.xcassets/Images/chancerain.imageset/Contents.json deleted file mode 100644 index f871dea..0000000 --- a/MobileWeather/Images.xcassets/Images/chancerain.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "chancerain.png" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MobileWeather/Images.xcassets/Images/chancerain.imageset/chancerain.png b/MobileWeather/Images.xcassets/Images/chancerain.imageset/chancerain.png deleted file mode 100644 index edd8e4c1e69a3fb3d89daa8c2135ebba186e7a30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13851 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 F{{s|PbKd{} diff --git a/MobileWeather/Images.xcassets/Images/chancesnow.imageset/Contents.json b/MobileWeather/Images.xcassets/Images/chancesnow.imageset/Contents.json deleted file mode 100644 index 92502af..0000000 --- a/MobileWeather/Images.xcassets/Images/chancesnow.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "chancesnow.png" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MobileWeather/Images.xcassets/Images/chancesnow.imageset/chancesnow.png b/MobileWeather/Images.xcassets/Images/chancesnow.imageset/chancesnow.png deleted file mode 100644 index a69056b702d7b594eb74acfd9bec356157ed4552..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14762 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 diff --git a/MobileWeather/Images.xcassets/Images/clear-night.imageset/Contents.json b/MobileWeather/Images.xcassets/Images/clear-night.imageset/Contents.json deleted file mode 100644 index fd04a86..0000000 --- a/MobileWeather/Images.xcassets/Images/clear-night.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "clear-night.png" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MobileWeather/Images.xcassets/Images/clear-night.imageset/clear-night.png b/MobileWeather/Images.xcassets/Images/clear-night.imageset/clear-night.png deleted file mode 100644 index d1252abbb96fd8bb3b1f10acdfe4217c49c6e102..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7941 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 V1V_G!K%fo)s!E!QWzSx{{~r&qDdGSC diff --git a/MobileWeather/Images.xcassets/Images/flurries.imageset/Contents.json b/MobileWeather/Images.xcassets/Images/flurries.imageset/Contents.json deleted file mode 100644 index 8f226c6..0000000 --- a/MobileWeather/Images.xcassets/Images/flurries.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "flurries.png" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MobileWeather/Images.xcassets/Images/flurries.imageset/flurries.png b/MobileWeather/Images.xcassets/Images/flurries.imageset/flurries.png deleted file mode 100644 index 854f6c4d2b35483188989ca69570c9216b19af0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16189 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 JU(_B({V&n;KJown diff --git a/MobileWeather/Images.xcassets/Images/fog.imageset/Contents.json b/MobileWeather/Images.xcassets/Images/fog.imageset/Contents.json deleted file mode 100644 index 5623282..0000000 --- a/MobileWeather/Images.xcassets/Images/fog.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "fog.png" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MobileWeather/Images.xcassets/Images/fog.imageset/fog.png b/MobileWeather/Images.xcassets/Images/fog.imageset/fog.png deleted file mode 100644 index 58edfab0a2a5e4d39f347ce9f1c4c19e5f23ac04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9257 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 Gz5E}(AG0w4 diff --git a/MobileWeather/Images.xcassets/Images/partly-cloudy-day.imageset/Contents.json b/MobileWeather/Images.xcassets/Images/partly-cloudy-day.imageset/Contents.json deleted file mode 100644 index 49910ae..0000000 --- a/MobileWeather/Images.xcassets/Images/partly-cloudy-day.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "partly-cloudy-day.png" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MobileWeather/Images.xcassets/Images/partly-cloudy-day.imageset/partly-cloudy-day.png b/MobileWeather/Images.xcassets/Images/partly-cloudy-day.imageset/partly-cloudy-day.png deleted file mode 100644 index 4dc9bde06f6fe0c3e3a3401af1ce0478e4bb525f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18235 zcmb6BcT^MY7e9&)pcIj=AWez|Pyt2h(tED~6al684iN$*ydXuSND*m*bVBbnfC@_Q zJp@odq$Tu7&6)T;Yn^-7`kl4z{R3n&nfA={?7cr_8?CRaMstPj3IG5!8tTf106+@< zNeWPsgZ~`7o;U#jHBt>_1>@Iq+Zc*u$mHSQT{Vr|=#Fb&B?e?**?9ZcWM2U?S`{zK zd)#kxx-^Z;M$NuNuywzD@W}ZI+rxWNkEWEFCd_!9tGeEPXVY=5c6s7&U`$VNd8|h$ zPG+_Ljq$;qhfGPi*r~iZ9hxng_tEQJ1!q;6~SSEZc zEggF=pdEe`Z4#~%e<+}zp4bhQHA6i#<4AynmkXy-4A4-ddGUs#;zYU6Y#4`c_ zH+k?0-D}AT5`+b}G8F*Ohhe+1xF4cGafzT%4)Ksse2WCQdwA1Y695o5x+ag|ANWZC z;0Ac_0Pz(gzzyIf`161Ii0t229{z9t|DPM+8LtvgO9uXQ690He{Pq9+5&6IEm;c-U z|GI&&-LaI7F5SlmSZMzrA5wuh8*WSkIU!4(EX1d?ei$_V2oH|KjA!j2F7MyiRZ!f# zSZg8&TDbyOR+GV7dGt{Rw;+VXqH2VJ1FVHN7dSp8eOr5UKyDiG4Ly3BTU>-RH~vo2 zsfL`(%A`QZU%T=K_qN9biDf}zpE5w}k*x+0A%^IoodwQfWN=T(lOfWk@jm>KFyH&- z^;^8>#u$Yulj0Vw@@@Wlp0$z|CgZ%_ZtGN!BqMqGws_S5+(rI|tgGcMq4>ATM#}lr z&8g|%VLA};j;myd)+=wmvaP(9QZ|^Fgh_sd;c@mK2#OHA+SwV=>!;vkQ_jUgG zq3ybjQb+~%hdT6qXY?aKG2k|<8qiSBbB^bmrcuy z{m(!1SMWF+WsT(V#>Pf_#YSPn-aEt_-qE^Ur;RfV+D?LdL*AR+(ZD)pyW!F*2!M#zmZ5HHN%!i|NVwLCw8%iIQ8gaq%P zeJhQYcZR_8UKjyYSUYV~+H;i@Ve5AhW`jKw4AwU=sAeu8sjCq2;Pg?scz_yQ1GxVl zeJwm^2_Lav*?0HRyySQp0)4?vh8VUdCD*?vALaIj*3i%6@`R;!fic1avQYqQlB3~A zxh=8?up-0>klPJpq~$+RtzuQ0gWLdR=|0!ZmurL)=O>Y4B+tcxk1R_-=h&vd1jC(6 zU28=}!C|H~To*i#PXoAHJuV7-9~O|;g(`mD!FV>FJb=@`%ogI8%sJe;85iz%L0G;CSfP2o_B1lN)4>7+K5cu}EF|u^gkxD&qG$W8l zpAQiJ_KQL>fX*VINOkblCPI3y2#w?vl(c5U(gwOl{&8Ut|>hndeNMJK75#3&^a6Uo{&Cpk0nTV9N#euw21 z4ogKQl38k&9{FIY)Vfi~lj(){FoK~|>8-X7sPrmW; zJ|XYDM)PixI2@rMZ=PS0%v|NWyXfV60n8~Y%2H(NX^?190I4F|blgf|K$?~SakFvc zn9OlG;?AF85;{Xg#P%;Q!WF-{MOu!$a74J&$-w^bmEEq+kj;uy-U6}}@8FG1D=J)g z#~fbwWAOS_O$zm#bj-?r2lUf2Q2h}ip8V#RCYQR6Y?WNEe^eh zeRWGbz|qrYnTZ(o4v?GYfx`=^g*s!Svg4dW*x^^ZBpOD!)3wcs$@5C9Z=GutZV$J1 zzZ>LnaWr?+;n?tb(ffC|>ItH!=UZJdTex&${9g$~-;nVAlcbQfV_J6n@?PW_u>KiI zMuv9LCL34e9qX2Ce2*7-2C<)}SQvc`=lcsBKBW)0#@@eoZz@;WR0@!Y8sd_- zCno`GkNhX?fBh@jbarIZOEzwr_+{VTN-Rn#=w4{0Ft&?uuCtr2upq=U5(t{o{)&Ij zHU((7SKBI`qXOtVX%R0f!ccCr+fhiY|K@F@iJz7Cg3C7Ck1XSsJky5B5!KjBf4Q>c zI=OSSp(H)=wduIypt=gYcMTFIq{MlF918y%uYRD_pRq*?m%{?-*B`ovD7< zo0WyW7XI-XccJ6Z(Pw-AmtM~tA1}kR#}NuV|IQc`1~AM%xKGo9cXxo`p;CvFnp#`o zPZ?%E>+_erfAi5G_WSrTnffO8Qd!-a-S~e(=35`$nX@K&Q)eMh>wPNJPAEvQP;h$n z-OH}rC}68!i?*E>eextouwZt&dELzln^)_O_ie?yqhAP33&e&Ro0{VNTKV!g_i=ap zmjJUb=u%h-CtDW#Skqy@?l*MEaBwBWPjBQ=sY*aSsBJq2mnUT>xC;HAP?eS42 zxP(8@c6zHASrwrr$0^0?7VTFRVeQwC zYvd<6Q+^G50CQoeN5y>tf-l&2a{Lkn&>PcVbl2~@8RXT{oQ)%*-f1kpGpegZ!t(Dd zo@~3m+1RMR@6-#_se)-f&|e6JJVgoqF^a|3voCL%bc`9VE-aj;*PVMZux_DRlj20Z z*2x*xQ@_4`F!!?a)NyL*`%gjzm&6D*>LU(SThG6SMz?pn&eD}p**Z+CYjvABn_{X z7ApV=JwtMHHNNa@oNP{hWBmm_ha`Z8LCerb+~A)Sh?n)5XvyfO(X9UB)j5wV^$ z7C-_Z=x2Y*BC#S;4-8M|@6eyWdrl675|M(|Bt~0J#d*!wL@0GrJ(dgsfc3)K#W@9S zVBAo&aomK2^~$#iDS)yQ@g*#~z{WeRJY9(^4HLU@^!K|>!$-N0A`6f7*PUNX zvC@Z4T40bbd&XxK)V=Ot1^rQXy{2d=!+>Elhs5%sa4RJnl z?}u#-Z%r0q{cx*Hdvn1jVPGW7`3+`IILCT*V=F1NUpSi8bxRaTGR z<44t#&-v2WL|p29F;%aTy+juLZP2c$|NS%1W!v&XR}cQZez!r@(_H; z6{#rrYpz&ox65#DsX$xNv9?|6l$BucJzu^<<`4Q6Y^I2O2LZ1luP2FMyt|?WdHvF;KRPXc=3~z zPvPX}VbQ0YzIO_kD`UUEYZX@rLl7XQl@=N$B%LB#>`wo=$HCr?FDSmva-=hNO-*3G zDO}VAEXBnB6=oVkEE@A)YuAdtERNtvOh%Kd*t%$51-zSI$a0mJZZO};*}Xt<>MBRS z>7BYfBQ|iGgFdC3ItN(lmx^gR{btoID7U8Eu>&zN3DN4ZNDBXQyWleScw6eXZ&s*n z+T8p^(PHD2+0Q>xqOKMd1Ga{;R?o^en91kWg&E&-@|P%Ya5H8x{N-MXwyyq5^Y)7T zZxB#@lO2|ui#60d;s&Fh{ZberOyDk%_A7Y8EZvgM@AFhhvY`|?339ai=l8TWVu0Yk z3p^V&m^{C=bQvCLq`dx0THF{D`-1%{@W?3EpRQ?NE{#!>OS(dG33E3Fh4)KlL>S-C z`iu9@q1naFY@}KaHRE8o3(h|zM$`I=fZ-r4jpI+_O!JG?jF5sXK4FSLMQ$`HNxso% zeY0Bw%g5J zo6q9YNmJ^z9nbk3s~653PZmiVoR~fqWId)1jMYN~a0s8aa+NIuHtE3msX^U_U=AAmC)1CrIY>hA;#!f%%;#sxR}q)!fO(u^%fhszsb0y;%he~PRSlO^Vfyy~#uBrwJvRu;$dp`~ zLdnbPyC;V7VTe}#>p=7h>QqBMc6~GRDAK-btAS^bbY*`O(7Y`FE8K6@qmJv&f4{rk z4yF;ZWSI)lfciC<50%qTD=_qGm*fPH0ozO?|8)`=TY+pVw^gSy?Sv z^z!BF*RQ)6@B)b=o}ZZ2ze#3~b#C;n-7nqVijtQla|O>xnWaPMpjXdp=IjnNp|yu| zeb@fbiWmdv>&D(AdD_m=s0~g5hB~27t%nWw1IeP+#Aj&$?j7>+^C#~b;c41VIkDD( zmN&xYkgt--5id(xIw&3<5`=8ry3sG6FPpbrp&#g6|0|D90(ce_}gGBW!2Lf{P}*wmn|KALBBEs0&vvaQLPbtV-vixA( zw`oZ8WG?`ojQ_tgh&S-+3!lDxDp+hGv*ZwSJ_wW6OBZpNnr{`?FY_S2=M`|zgzo8s>loHL|Ds(S6|uDWwv;6iA~vT;OQ z@FDQ91cq|JS$aH23QPr6)h!$pTiBMY!&w$jx3cjimGJHh_EMv;2r=1RVoIO!Ep_u) z3~ZFCY&@waJnCrM`SW;KZgU#m5>j6|T`wm$^wG-WuWJ0*#n^>)%D7*IVqm1SjTQ<~NnZ6C8wdFHIqB^$btI177XHA)s{+9e5^!gnwxW~JP{*YC&gp$^W zR2chJj?YG<(aP=~ERJ5-x1OtLRL`uUk=W=u(?A9&p^up_1s&yOzQE)VGP9_6&=}X9 z6uj8b{k-ibAK!M!4g);*e9-?ih7kgN9&r!;aC$*3?#8iaWotXoFx*1H zvbNrw?U@O5jQBW%PtjNMHWr3o0zwk_h~w_2eR$Ra$~sF{cH_Xu!H~MWPjb5BiQuV7 zmYr0R+qZn;!(;@AUCx|Uk&nC?5HNpig|1aAqiD|z+Pz+6M6H=^^I-wPrL(hu(V$4X zu-)`=%fv^f0@8kh60P^{;_2R?|Ug$xXkUmcVUI2(%6fi;jCF-HX-A`QHWn ztCda2M%;hKp!Q3m@rv;etma>3%dx4s?j;~k6KEg7O7wy|2%r46-T1(_(s(}DM&z^| zM1k#XY3x~J-s|Ooum|7Uka6x(9@)ANH%nStcB-?Qaj44A=Yy8u6D(~0DkFa>TN(3f z82;=lkn=#QSk)Zaa_k$Fzk1t+LfB|h0i0Y;a8}^;@$FKQKl?2oN#r+X#oDQm*jG}L zhL0q2m5#q%U@v)!}CT>-)NVkj7FZEK@hOF8#-pWjT_}34VMj;rRo_ zXj7f)-(>zIb%G4D+LJPhe5%f2b;_dYHY`s^FKQ?s`prZzR?gk5ul^*2FV(7)6cnt^ z1gk*hc^%*9`TpuLZSnRx$XIgNUoNu7l%J@@ozi)=JCZ({^SDS&+n(tW9KVouZ6U<^z-epO5Nxy21fC{|3w* z@XMDo9iO$m`&ziK*mK$>Og6U}m3_{W_K4l>^Twy5TfE(wSmyU%>N{ci^jR(Y-+_luB{2AYq8Lx6maTw;T*H4~5kUx!SS}dCy=n-&&62XXKFJ7l{ z4vX{p9Z4gv7_VcF8Kw%!zr=a_$?(F46a1S8eD_U+m{q}srMlOSj423L-z2Z0vAanf z-_!WW$mv4FCSJR?e46G=tzI`Ulp0ff|L0*wbM84!<9WAfVQyXgb>k~xI96P+h2t^m zlt&KrbZWfmtteOcjY$8Ux6Z!8oKynqF_(z(v##S+Lx))$2rlc5{LSYCF)eR*>5gA^0?S^Kpd&`;(f=j_U$e+bolZo2MHH9;Hv!5;bvlTSw9ht`twt z|5oJ@99^{I(q%U}v^xHtuXaeT|0n5icA__(9eCsi)y_C?gx%6Q>VWUBv4_|Z2F4r+ z7s*Ku0}U!jb6msP;jPBMKP@(C7XOa^%aYZ)!_bTyNWuKRO&?r&|W zHox58Xo)3-|KUjRT@b#b?k0oJ%He-Uh8Mk?Ozh(I_+RXS5fR&nxtq}y85GDPC z85Z4SDp2{mXd`{&4ey@Pa|P}^W!uOmc3xP7w;u-*>j-K5Nc-~5Iu$N2rY*I1sQEC- z-}5d00wyM39lV1aa&Lvb7qOT$_=+`V?k8b2o;ziS-tskJC6}^jgHDev!FSn_$a#k! zd2{HxRRc|mW?kimJxg5^zeb;?@x8|Wa%?aukl4TQb}{ZWaD2+rtwqHD##`iBq-w}| z_al6?a!01`ya3CNyhwG!iM@1+!AB6UNsn#3IpX_rQY%RK~UfqU{#1P1F_c$Jr$F z!laHtan6yUgJP^Qlf#8g9>#vBGnVeWZFaR}%;F7y9)06e6lxIVRwhe`CXs(48}8GO z{wvPu?9ssrgVll*(D4VfSd0Jm37oek4|%FJF0(hwMj55-P`9GU15g>aP(3&**$|tf zoza*)7gM4+G)Ibjs}Q`Kh}Lt0eu=Mziq^e&Mif7J0rkTN2-rQ4S5m9{Ek5(1ehmGb znQg5DhPykLEIMj#$tz+unU!62%iBEZw4`@Iw_kAM+aKPlWomPo6z|hguh0j7Sb0f`=lt9j?QxK!pDtsoDsN zHVG1V-9tO6vCF+=C;jwYBDrCqujcc4 zngMjfNsHvLIYQm+1?AZZwgR~jedKw63(24V7&7W)Pi@?$!dA5&XCWmDO z-^@R0Jo|Q1i1(H#tuPY3rC+%rq_yZ2wim})qe4Xna$J8p^@Z}Qamf3DLyDhA1~0On z2x5&=jB@!mG_MsJ$>PLJVzD}C#N^ynO&0Y?5W=iKWF~8=zW?!gy~hPz(OT7YP-OJy zJE$@2$lZoulGddn6)6nrsN>*^-|ocZi<3$r;GTyzsk#gHoFe~4{> zovl=YiUL=m-Caa^iTsu1_GjdK{tq%jj$RO<&#c!Mr@#JvlA8}5EMRC2{|Y6|DT=d7 z{ivzW#-ZWV4sQ+JYu8FjOHW&ntwNV$S7MKY>_izNgoj#s3wbiTX35tD%(IoENqcVs zXS~U(-KUPm>-G&@V(J#qU#02sDTf$+suBHrfdv+P)Q_->iRFjsnhvGfXgSlIa)&%i_ZY&q&Z9bbVg4aRXLBU=WqL1ZOIl7=Ka z@JjJ*^A#F5QIlfOtL)9aN;I2v!E@wd!4wDZ5@d(xNE9C;@)tN@aI{o-9_>-doAr?k|`71im_D?n`XoD;v zLx+}kqkAHF$KKE@IQ+Yl5$Ta0XWR>%tOUA-)C^tid?eHb#)<=|%sU%+(QBb-1B*SQti>LV`$&>$el)^cwP@n#%;ejqt zQ@&fXRp#O$9bMk7P{7v)MOWVxxN{Fw&J6w3d^D}h_yWARBuBcA%6wd3d#?LKIF)_x znnsR2$|T(RsH8ReIh=2Y5ZzOl$$aC*bKYMrWJm%LuD(`i?dfMq4^ z=U_?^LHg*zDp_vNhV&PcS%n*Bvt0Ip#Wgj1=F0b~auwu#A8ji)@li{yZA6bfyg$UO zji<=6tmV7`?zL{<9E9P4ZI!BZrq&NLQy&=0UuokjOEyB>7F{TZJnzRMzMb(Q>p&j>_Zo)=~FM*|PTp9e^l)+wh{wf+OCFlUnQ| zE_~ZHbc!ijH(y7?xTVkDBWhmk<>_}66wX`BD0)cXa{o&FPS5`zr5lso z;dX4Cla;Q6MKD@}&*I_QJF7G7-Xe!+@RVd^)(P4NpXohex6FqPS&qnX3$glkqLgh} z1jUKBrRvQsH~)`Nvd#%A8>&BtIv?koTHvPHBgzN|JEIvG4`DlL?Bio3D*oy3v2Sou zn}&Mfei!%$ohj94=5}r$>Mf=so|)UbrPsSnioS_=+{6?SA9ml!;gBjK?#nGOT!42HJegiz+sRjQl*xer*%7 zGhsAch2!^hDT6=_e&&uS$VmMcV)|nYf-^!v>1>x)ChkA3mzGx!$y}Jc*ekwVq2p7K zQ~be18HdqBLHFC+WQ>%>@@UAd-L!rL9Vca~`$jlVR@KcLaj6*Sz5nANAV>C-&PkvW za(T-HvN@UJjDxf-jgUY6BOLs+s z5z_qQSB1_JC)`R3&UA@ZXriM_?`juNAlpqn>~M*wZdsTtZFbJx?AvhV@TUmp{;^# zJLBk$D3BnMwLK69@vx%}RGXbw#$DydY^8P$5R@T>=pyP32H_(<}>T z>c~(BlIOFzD3;-Uh%qOiJ}94KIXS5J5?+1^v)Va`) z^riIwEQcTJcu1_>e#9#HOGwX*T&@HeR?G_|xa+XwHWx8A90pnPPLb8^{P%Wdyb2^f zx8~|M2?l}yH@oYH7O$?J$fWwm+)@t?-luRL)pGN&o-9;QaPIPf8nEs7Klk3H!)Gy> zKAVy0shleFi;Riy^(5C$m@a?>Hy!G!RXHk2t|hBCimzgU#|C%#Zj*W3yLM&q&K3#K zTsXT48vTBUw{?D^H~u~A7faQ=vZjr#qyQeM@j;*_j9BU_m$|TBQ3%xHZz=!k8pkR% zU=~e#6p@86C&SVFvTN{_3mTyiC~gUhaslM`EuHg}w1U-o!VpR}gST7Doh|@;8D{tK2+)&dHk=fcm%fnFG0G-Z5m$q*1fsPyO*Cti9;0)$l z;j_o+P~~u8AV*X)5-mstb;!6HZ)58l+{t%$TW^LGn6sznP9ptu`E^biH7N>ui_~%( zF7opV;D}DOgg);KL(~kuhSo8t<*<4Qn4bf{_9(ujrJr>B^iwsOwtx4i!{;L_w@-5) z3ov3?7H{AuZhJW1n3a5BhR7noxA@h*G65r>Tu)o0U}BvLo%`L^yX>s6(^Tk{H;$ZN z83BFT0t-)S(iha8FI&(5So#J3Cw<^RbkNbq0SIqU-{vt5pW>PVE7V4dkS*dXD;f#e zB1S;2SCl~1H)3?-dfw5rESps6yt(Maa{DRc3|%mP59~b&koGb-0SS|+YTu(ww;96g=0120PYasHqK!;hZ(^b4LHyxbi=OsWLB$D;`8&~I?+6O_4;tK+z zLF64T=v1Z3xIFV9XBY^}IA0>sAq?}q13$Bc{yDpqpmM<1XuI*NTK?#fyV_L}fKiIN zN{L%|eE7-!c856*(QaO~#|0!9XQ|BBhH}u%7fE^$A}@*9JxZG)0dA)urTO3a0i((G z+RvIg?p#nRfre&%qFn~m&cR|c!}KI)Y8}}UPx|p9TW1CU3`M9tLjW>FyxYT?uaN_5 znBP3w5Q()ZK3f1-zX2H2P}@o`(V6~D;Kd#QH}`g#IiCZ7{EVyCk`YN6nS{+7y+0@z zH-aKlwG05pM5&kJVmsh|cwzj{Eu;mcQ36W=YW{qmNda{xhIRJNtEazKE68?a*;qTj z$!LEB50RwijwknQUbx$z@k!zyf~3oCCVn2>XH-im!cPtS4(C!xUYx=hs!0HK`~$?P&HTBW zo!#nO|5N=s4S<@-pYI6(IQ>R#UGJpE_t>f3uC@Y<`IR^6*#Ly^FyNRCFwb+fZ2?Pd zAGvqUlbJ}&wTX-+_CHjDbYxFwnjIOnvt0* zz48x@gGXAV2R5w!p9P9>vl<{fIEmQ`5U0Fh{P@Eu+NU}eP9wzZR;bR=)i zf|$}vw#%R>TRQ3AtuPdQ61_jv4$W#=@K|w%9laJGij+A11(NdD0N|PTugg9|QMI^j zkXdZB>7aP|9kQ=`m$*mdypLTk`cM`zH+Q*tBmHY6c-DX20>s-`AtGsJheh*oRN$+j zxL>jRJd|YMi|U@mGb8u8)qP316pzquH^p&xNVb7RNQeF-cW-|qAHgDnlTpTX-UM)SO&m?t`oz`LGm-FlSz zZ!G>sw__6#Cwu?9k|Gl-Y z^W)$cuI;D7;zYn5z0VVPxP8j@?`oF88DZ4HKz7i@!|t2)xbEYJ|1?@25}@b5|0w`R&Gj;{w$tNp6Ci2OsS6JEoYlNE zumOVni~UFgzqKDvId|=eRxC3x3RNT_+n7AE@7Jbs0vsIp|1L4CtGxiD!-MSjso2&I zkP{Go3`Bt%bLhMtB@G~-9<6*zF|ru<_bilXpN)f)cUtH=f(K|rD&Dnr#O4-nrrzv3 z7ys?Sh@1II8BPIk$G+|U1v*6j18-Yc*ufa2r3vymj{H1eXu8F~dJ`&Fde0|S9FP#Z zpz!&@zzYTg&_2mTW(K?-FugedCNVHd{-6TG%@sd=KfNDv<5;naz9fjTaaq9zbN9LD zP;=m~OF+V1komo|lX&h0#+*izhcZ90bW0@he8ynR;blA*L0tGfm1KSY3engu6t^u2X z5|5AI`jo*)nIHGKra;6;7BIsi!FB`8CjXN?gd;|Zq}BqT_;m3SsBFJ{^$({9xTC>W zEpJ(z?f6BBqT0%96~+v9(xkebpQ>>OJM9loSC9WC4RADXdiY6#6u2FYchAs2F#r{s zn46Z9GR!@|QZ`8V+#+Vfs3HGi3;AG2Ej8i2eSKA7-kMvx;Kw~^!qCrw+}1qPWs1Ko zh>%XEhV;ZLVy-oN5OOQr1}>-dMzL^#lKPm^tqr0Td=V}UA#CSP!HE8>T6TG;W92lyN2jX%;L4=>%RL3V?EX+e-IJNxbXiuMXjUFp0i8m%xKVap@HW5Y@OJulhXu z+LTs}>(qyi>aeW4*Fev@3TT<6k^|&9K;{^^VR@y@BdBT+{^wuRuHrg&BGPwE{{aYz zs~FGa5zBXS7$V(Q-ybh{#NW;`7hfMr1=eExMcep!{M^XNH&BekHK6HCVvne|DN0-7 zQSoe4YJj|Cu?dZlUkvFM9p1f>%MFd&Lc<*8o_ERg2ZA9Fc0U*o7wQ}$1hhuxSisxx zHKqu;`LQ#T?7&Mv=M^)qJT?rwH5WhQ_9&M1U$}taeLu1;xys1%eZ2;Zd4=c6Z=ivNuXundIwTG8uGZIdYf%RPz7RXVK-Y2j!7IK?siC|zg;}b}30H#* zlq2YmfP}*#IX3XkYAP1a)$>hbJae>YczWm{n zPM8&oZv?XC7E@xH*8c~Zx(=eLEg1YCom*0=+4s{w%Q(+GDY+Vn)c|R-dVXqY)xhi} zwHo&oqX|wu8;JO%yLA5BI`i&Q z3wzJM^BxyL-zs~q+s;-Je9ue#<6%xN)8!^=Jt;>9M0+-fsS6rpHG;?4ha@$O?O|N8 znj?)VcH>41tqjJgVwJBu&b+%fiChH8Ux&qHBxn%ruun?KtU?&7Tde&eIGo2X9BqrI zXDWFGbzR}Mk+|CrziHtqdwg-{_+qK@^4Aa=r2EC&y+C3sfd9v9l5gIvKlS`G!e=^0 zKG@izBvu~>3e-q!qmEnP-U)9;wYv8Ol-?_q&zJt?x(sghBhg5RG}NMi&slU?U3Ud4Q zvR0G#Aq6(ntc*=3-YT4vWT0VInq0P(F>sxou<7ROvn*R@r=C|x;+--75Ff!w;o>K} z8Q>gq2lbC$7#nGv$&%u&dG%baqcsBFZ5=cAe|v0E;;iV_2esSQZyVa%pWU7d!;-FV zoY@WgJD!$dvmE>$xg0yioNm43ke-rJIqzk}VY=${LOD}%Nl$}HBLt_a%kMf}Jk=*^ zW_a({tnHP80-Wzi^FI%wi_WcrRt!orOw^1rQ?ft?7umwj)Y2Vv{c*pyGV_K~M9p?b+y_be*i= zIvmkHvsl!AkrKW&^!GC63S&+f-rJB7D_h;-;fAQcJayL$tsghEfR(QDIG#F6(Nzk% z9~0b3ROvsr*uv;{-WXdLof}wmv{%y3y_{KQkDs-^_?zXAa{5I=VbzSASQe7}HBoDy zMYQptkAL<{%Pn3Ij0iiaR$RnVEgqEhGsEKKw$F$b;nm;hZBLiwD4m-~E{UCEVxqVk zz!I@aRezZWO)M?7_U;|beUe$&mh&9(nX-R}0c~<+G}R4VbJtwV%VMh=e)o5v=Wd@8 z%42I9`sNcUo7kH+gQ{bxLXNvUhO*V%1MhqGkGti9g@I z%yUY?n6;~fqi_J}Uk(q|t#UsOlC@ZoZexE5f1=S7sg-#6kK6Z)zI^Fz)y>kvQ z^r53~S&*C#LnhIHm0cXNHMEIO6mQ<4{^U*L#U-zyXgpSt7RN10u;xj#v_Sdaspl)_ zgn!OJN+(IHst?K;4_Lf(P|$}l5}Sa_4Sgs`d9fU5XU%O53igR-Y2H3uCC$As zX!#-M#HZvSoKfsu&my4Y4h5{ZMTyvlYneyY$rM0{wA! z54hM%%DGIE?Wq&<#v5d`)`h}(uJ=JY>|>w2GxiOa|5Z_ZP~8+vw*^h{u}G#cEYXJ!}nRT`OFWn8Ee5$;%w=xJ3o=@0^?cq|HaSKYEyrOcrTyqqZsa&v#`BgpGG%^m8jL?cq$GZ)} zBy+*V!B3O#-}7hNnF~!71`4U0oy97GHq)hZ@Kk05R8v;)3EBCcQ!-{7mV54(}qyk1#K4iy%e82oaA^|H-orI9-jD9<-19Gx9;m zuyveVaq#R3FVdZB@=qmehMl?Da|En7>Y(7hB4svJy8v&->=q)b^_Ja_xVhPNINmZu zi1(W*bh5R4zM;0B_0j|MQa>NkJ7X{>swaZj{9RNZNA!LFkZd$qr#ZsubY$HyyPMU~ z;@5v69m55ImLXeZ?C_j3yYtW)^LAw1?+n@hrhRAhCm%wfwodVT)Ko}M;SyD!EfbZ^ zo%{FicT9c=u%YnqB%EkEP~J36(b}p)7Lu6mkzYO!}*ndI=;yJxYkyfyier>rezOB$~Ux5%B z_Gw=>{n>`Am>V`Z#3g`Bl*sm`e(wl~q$_DD(#*C9aT^Dn!3+l1oCX{|K%;Vd(6uv< zqnpOHhW}p63f?z#8@`GAy+1l4GH8e#G<mrb|Z*3-eK&&YC`p&f>E?yb!MJ>(Cz zJ}KPgl-|#Mybb%)(2DcH%xpv30#=#?aW{!f61ljTtij^Qjv~=tfCnuvI?^pQ#LiD) z@v7rCp&G)XVZ0@3VWSa?VA<|)j_J37G)~;dD-E)^**vn#Xbc|PsKg)RK7Fo|T^}#G- z@7d|E{gc(p=~`Qa#)jTGewWg+!5YHU+(VcCG99#kJgTx*4BIrzGMv**QI$-i+s3kR zL*v;qe07)gr*t|%Yx=VCvLq%p`Hj&nEwxcnK-MO*BboWZs6m3^$6QI~rnNpFWW>4cqMvZ4{PwX-F;Xr^l~g{!uWB2_Ns>~$hR3)ZtCspo zvPpWt+S>F{sy}s*{F<`!+CgY{dN+qC9YFdsbMy1Yg(9DdbCGXK)P&(Uz^%_KGV^~0 zW&)Z0?h~iOBDGPvOho!ovj89=?4EV+-8?!l(rSL^|C@7eeQFW_B$W5jNL4qVPL0&e zG~Z%|ngamo(6O{*fPnyMMd=>z-8L30R2Kk9p?p3XAmT3YdHsY=FWbptz+%B-f|>yU z8FBK(SDZd_+?IE%x&?HGnM(_->@5bU2>_5$g+ig5s+-DzLYYWb##61#iF^RS=e&;^ zZQB=D5T`0xSzcykON0XeR;s$XDzEB}S9LGbfhIOt*_}`*bSn_i0D#q)6{u=xx`8ly zg-$i}6un|)Wo1U>0sz`dC!0nVap$PYJ9M_8Bzecmq%_6fi7*8Kw41J7yZ)c|ZaeRz zi&Whkbi!p%Z(8148CY2mkpO@=bhIhwrW*<6K04=id(*$q^0+j;&tW|PfUtPqt+)3w zNmZ_3cA!=14a-BzOYeOhkp%!q)a-zBuD|#0K)X&>)xAZ>zQSaA^B2o2%QN2c0RX9@ zs*(56xUmy8}_>i2_;2AM5I9}MG&OBQ((v+A=0h1#2_dPA}t`@HGoJrgG!@x*C5?P z4>dE-#{YRf=goP2e1kJ<*X+I49oO~U5jtAR}jl3L+L^P~H>DwB;W z(f1?nKF{sCeOI8;Qgh6ny>9B(#G^`um#;-m&5MJaj`)LMUnU3BJ+O#c+j8DK_dQYn zz7)agA|3FI|9}6}MRgp|4BX188t_Nf=jK{D?2!Nf{b+%D@&L=3r2IaV`T$jOfm(Yk z2*KQeKpjYewzV?EFrS-=02whp+7O0s+#>J`hojA7Is>VfCq=%f}e$ZwRoN{H2EnWGCwD>+@D@b;BYb_q>?=a&2Tcyvu z4*;4g>D&4XBO-!|8HhyV{F_8TwyGN@hzo*y*(Zi=lp<(&?)wPULw-4h?%oaL<2oj(aT086}` z{5Gnqb^7fq1Wg>DZxaAqZImO9^&rq!6Jl7=0wYhJqc3>C*GSkg=?@%NX$B%g!N}C~ zk|t9K0Bl%#@Zi`qG9Rn~=V3k`P+b2No}PRV4b|daB=DUBg6FCeE)}li{Wh-nZe_!K zGsOVrNjZ{Q_@Seg7?daGU&?*$P2pY93QO6Ad$3aoS#IHguJFL~`wofh$A zp4zz9lW8cAMgQY5jQL=_MI5i6xisZq5zNP ziG^cL#BicTxbrAdQb1;+R__Fwzl>}9O~!H+{~Z9VQ{mEaS~y~xXD{)9o_Fier;ON` zI-HrTH2^$QR|qQDvK!jO6+h7Q1V8usBkJH;N_Nr+dO#$d1P`!2_=8A;<6;MbWC?t7WZjW-=z|c` z`T*{~zu7A~{Sgm_!Nc%DaO*WY&FFH~1hP=N|yE^xzPXU@c-^wNkD zZ|V}&cYOHNgn$YowK31BGnA#_&8>?8e%986Rw*?9OK>2usi~jLraW%o{!nrr8WiUST-QXuwzr{hOZ(2BNIPzzUL2*S4XPcQlr|ecHHGj1-B-Bb*WX~Z zNA>cs`$wh&O?ymsoPMpHxmsMg0N^lWKCT_@S&A$*Yx3Nj`^uy@@G91mv%Qmq2ap-l zpYKsYViAW66=PFKJ?_MyxZ~Qvj1(#$cw@}%^5}{3)cK&U7h9@8o&ekQwxO~o9*}!C z1o?QR9#@?zQu9cBG(wP@uC%7QoZP16JPn&67g zWm`Ip+TVpbt7D|p>C^X5JJn&&02${QE=*K_)T$q~an%iCz>Y%#Xvla<04Q(}ibzxq zK%3y-Mye3QOka~+ETTvy zA>d4phtgZ>Pv18%Nv0kc?8JO3KElZ<1n^J-oLpCa%UKGH0JFoc!j)4c8Q}bMWJcO( z+#+Egbrt)a0AN>xOn%BxE(Q= z93Ybh28T#%VBgc!CyeDRJi%grs(|Yy31F|sIwFwSirbqcB@5z*E&9Z;-o^u5xCs$< z?6X+x^}1ny3e50_AaRDQ)WA@eTl-!ec;1No&T=@MS80D%+O0P)8V@ik9>@@X^15h5 z@hNa-5zn<;axuwvkI-3F0UwxAAaV75aEYD&YHcUG0w>w~Rja@bWS1`l48|;XAapWz z0^Rdi8z?OxU}DnL2Y0XnXU%y%ZiTYrV4>oUDp7|8bs`Wvv3J}wx*1rJ0f&l*{1`e> z-~_TE5j{cFp1vrK#xu9f>DYeOdsKnOW@Z?VTpD1=k%;X6vF-@t!jPtt#QlEE)JbgK zx0qK-)}`~OSH#1lfc3I|m0Ba5ngd4#bmG%kQ*SiH4&4BRQarTSjDRUFa&+I}9R(ra>r39I z#0X13CPCpl!D8vu2#(*XZl%+g2=7qg(;hg#IpMDQRT*FXCCtz~@Xp|uZdrtYf<{M1 zf;-n~kS?hZ5<1;-Uq&`czJn6 za$Rv=I=my+N(^PYB(q$_&%F-}1#4-T{Y2ujG|zW>TPw-&<@QZ)PXoap!C?1gzvg7u zp$*Df_3A@4!1P6}fL}obuzb&|g70bE=a$1kl==Y4EaUnKdqhDeqi2)m-*H zJ3KhNv`ut#WP5;P1P?g!{O_&FPl8|;`uiI550;s;m0c<*9UaB^)oTcVwY{1yP6^;% zY=(bH>ke$;9x>jk;`{XbB*52Ehh9HYO5noUS;osDogjF6n{R++2@j}_IE%df5b*4u zz zj2N#PoXoHwpr`V^Q~8l|e8w<`kA{hKB>H4u@JRzZVanZIUYVD6dtPH3r6qVktX?TO z{b4{n<8Wuaq-THuYB!c#IN;fqHlAWeWp`X&MGlzsDN6bvs@`&)R+Z06(G&iN|1|4e zExIH~bWTR)_r-N-0A@Qm_vLuASXy{>02GazcSxQULHB^yqA>S&j0otVriOZh_h_aJ zxm+tUb=KQM40zO$MCT|0GFrtKdhxryHP8vvLBlMUOZJw9_Ah3c@hsIY8K9>djPoCe z0jIUUQsIjeFcHoDm=PkRD``|QBM`fbC-bu#ub;@TagwD$I^UXhQJfkV;^BJ3kp!@= z(~Fmk-*ukj2S=~xRODIs$TRSYEj}#P=OzI%L=ipSq(0BOSDd;Oo8cGQxKUcSAmZD=){8){+7v&w&QkzYmU^S26Tck}3y)rIz0?k>J=P zK;;j3pVb?d@Ad0_#XMe%p}$8sW%s_nDyWYQur64h=J~6&Op*E1IkKb)YHdknX_E^7 zEFJhW%I?Srk9meZc$#>ey)pMnGE+|SGWy#Vm#sC`z8T3gr|a^jyAdCtS_PP|o^3|w zsweYj_}xCap8lm^AE%)f(TMd{0rXdQ36<>(ZXgzPH*Z!*<8r=O%nB)wb|AT5J z_&VYIN+1gEAO_z0|784y^1CT*eYp+692q|#{L&u|e;WoH+pj@PF4(FntcbAmY_eim zc}{SqLCau?q4UUdQ5es@mp-_XbP$jj(EEz?c$w^;TUa+E`c!qCX(xTOMRNJNwfh}y zM)AX}WDDumj=5ka6d8zDc_|MFnG#+O+36b^;?lVeUV~FycU&^7@^gXeBEN0io z&d-uA1X~mTgXX2IQVertgQZ!7!w5(Z_#;FlUE4X3pxFlpr!0Y8sU5UmaQN=9Q!_< z9Di+Eb&-igHi#~Sf%YikLtUw&f-qCv=3310Uj4|di(b8T%W8Z!xOdHpVMafV#783X zvAv!HX3K>`0}`wOwGSLVTd4n*XJTxOcQ`5Zndw(9*5=ZS>b}9XT|!iMZCz|^Dt>k) zL2#ui6nCBX57}u4#9mNCB{Ohx{kWZ@AHlNnSV7MO>Xj9FgaG1FHxJB`n8$V?dGTJkZW10?6$QxKxVn+ry z%KP0WAK@ny&ArM%A+Z+V^=58%KShyVDk+>ly*(cHLc$()8*nekXa6Z-_A)lN;Os^YcDlDga z_C8<#HdVc@>>2Py)aGNRq*S3TxE-Ssqo>{oxgipZLB9CA#52g`bNTD?P~raG&j?CJ zY0Lds+|c>UwJ!<$t*5GvM8W4(cUO~ig$NO~uuGQ@%ELj%P~Xo8(+&&%r7okS7p5uY zaI@*dW42vq7Ml@K#z$|yMAczW0`*A&#_Jx_l}_BZ`&4UIE{Cj)6=%{RU9iPje37SU z9eFr?)Tjl!9l~Jkzp_bqWOhOM;Kj#6%AVxYiRsyeRayB-|3YQd0&0Cf%Do9LVTXWT zmp0*EFqaf&&gkik=>Bg~*5&J)BuA!A=#2x?KP<854i>vMddu*)uSH33k}t;e7qMdb zA<$2|33U|DD1TI*Ycx8p4;t<0RvamS134@d0V3DJ*>B9$KPuQg>;KhlR>(BG-ot~7d?SbGl+MwT?;sdOwgz6FFbx?MRQ;wpfY#3u zTu1w&03}OP2%3LT$aJ-)-|apX6jdj^bFd$fM5vUG%#q;~{I63TY3)Nkvf>!PpGG(e}&~fLS8FO+BD=f_~Nle>7>zJVIw!42JHXzUZ8TM9BV5qVwZTQR8nY=eX<&NgbBj-S2%op!pX6;m9GBYlG2Z!2 z%bajvn~AkZPGYdFwzZg=fvzr*H z9)anM7&@0`%yQX9LH$iPABG@x$FuH*;3DDBvVaF3=9Jj!_@oE+`G=WU+;E(ZuK7ci zZCQCfiO70uFu>+r(Z8aEK!3kutMm2!<28v(w)wA2TYn`Ja)K(ph}rHBIJ*0r7l%7V zwdQVRML$P}!=Rtsa58yf*nM>fl#!8`L!ExH&y;AB%;c}$2e9uRal< zXRbv!7a{M@Mv-~Z5+6jO(O>Oe$U^X|Um|G=yKYT^$}x?sgb{Dm_rXQ$7k#~@+mnW! z&AabTzp8}~>GDL|*w)`|f-X1}1fj~Fxeuv3eXIYA5T1Fvf_Uy5o<*&2mOJTJc#Bt0e&2sYj5i%F2Eple3?BUX z^yyQ9pKg1AFUnB&_fJ{6gM83~?2DSKA_S*&Gjp6}%xE#3{7e_V z7bZ~{2stq{9q=&a&}J9Pf_dtDHO~k+4OlrSnbQ$}>VdSM+7L&i^P0UsD+`mjTr?HBh}>J*wD*tl%6LBS^xgE$`L|RMs2z&%PHcB*C zQ;t}q;E47~+G;!;YYD*x5iK84ryZzlS68}J$_r2J_a4vth=!)#7!&!1gMak1F^&GyU>x!-Jm%T6iyatETYHq31Mxm<&NMbK{ z$;IpZ{{vN&7C0Ds2Q>~b^Jz2qV$kt#^v1?6#$8%#5xG*|FtWx*J={yUhy5asvk|Z8 z86d0GWY(_;5C7{_LS9@aOt85UW`vX*MaVnmdLo{<}t2nXIY53@T@rn!ZfD zPl3BuC$%sc6gj{8uWtk`>|24zP?s4C9YA0;_KY8wbtGA@tfRb_$a6V%$6#p^;-#6%Y!d3Yy7v|iWshyDI!jG=qe zZD%>D{cA$?&bU;)_Pe;z4-$!20Gj?ryA+tdqa?kdskKv zuW=E-t>blbhBx~qcDRT~L|cYesH`f!po({>%fppecIwT9dXaT9YxRJ7BTo#>JiCpW zA^zLlfwwfqO;oo~n75nSNr`FCN{o07Zr94>=rnB9g+JM?lS7X^n5sNg`o*+f!lG14 zX}s+xHs$-T6m`9tkMUvGrOu$?Z#%qt*_|Qrs?-df+0ZLIJ1^*bW}84nX^Kk03ngkD ztN*t5=V7g+bj`9;x&EX+)NHL5{mGP{Ti^8%TF?I~ z>wUFQpr814yRpB zH)SEDXAHqnCYFu&>(lNsJIU?)S8-;a3=&Ys@quYoJK}|q&z5U1)m1bci^px4mbe*k zr0h+M=g?o5vM>nL^}_?6J+k|d{g=133^WA0XbyDEZNnCQnDOHd2Jw{jCTD9}9xYLn z78e_3Zu|M&`MbSR^y+&%Q^U# zMQ#ZD`R)Ltk`Sx*lLw%Cw-scyYA)Uz_w@JU%eIOw%1x8e6CQ5)Dx0Z&>I9g|N)(^| zwuoiBQw?5k;*3-)a`sxTuE(RNP9aFTm)mk5&BrZsSb%GPuLo0G8ULrd#VoWUi}+Mp zB;3yL-~1>?ockQ1Rl=;)^uB>X84?7Qf zCOmOKKdGj>GGyTiEe{-~)m}&3^VK2t*18_ zEVKf?b5P$BvZY#lQm_jPnqAz5Z^0&n*IMZgPm2nV5FxM|_q(N>;_KP(t};?j$HH9L zI&+ay@#vIlkv?-6$I%vvZ^nylnlWMpIi})Cv<{h>qe|9C>>|%jJgm=jx98 zO&3)Yiswg^(>p>hXMbMTZYo;|btO=G%@zDVde??C1SjO8=GaGUP3=5P{rz;w)ac@^ z<0L4q$R6YW;bLutVCrjlN*o-OVC6))t?m zcGWTWp1qlH#(#*BbYZT7$HSAXpVrZ*h>LbZl6cP~UC5gm(7j*Hm(C{N`HuV{GQ5}X znN-8Afn1-WsQ@<}acd8rB%#2Wf#G)SdiI*yME!X3t$MgHCTc2Zy}7K)wEcnK8dG=1 zwGj-~)_VjF$8ISy>a zPY5suX1fpwPH_|(?w{<5keR)iqds`yoTljtZTsHj<`P_cV}jFYc8Dl>VL^+C{D+&3 zOIGds3EH(c&BxJ~Oy2UY1XFG2>kcy(9SA$(<>Dr@@GCcvkTi z!nMQRn=p|Nf{3kJP-6rvkruzQt>U+`; z7Tw7>WA`lsXZ@smBN{yPd5DWP3tqo+rfh{>mcyY^&BR5kD_6mvInU33a+~=%O83u% zFA{-ES>ftL2q8lj3P2;rRZG*1K@w&Tsy{L9=CaUK@Tecu+@C*NI3L7zr5A*s7Q)0e z6vRfz@MLDc2avGtxkGRUNfQx?bfI=J@Y%8eHC@`2|x zF6JdIO{XNz*;87%GmaAyV5B6#cjU%nNhLp%$_=8z!>;f}9~FmnTruo8XA6+ACBhGc zU|v7oiNSKQN49A%=3K_&f%Rg&PNF3;ix%LVv?u$9U{d57RUp*c; zsJd|r9`w#+1icqPW%rCg#(Xzmks1m)u_(+Re8)4xF6%w>1r8P9n@(y$^H5`fSU2ys zV0cSveA{-a3NhfSp+>7e2LZ)X*(m~`@5y&YJ^~A|i>K!heUS=@ldQ17q;-!VNx)KS zr}#p;kVV!EGJbfsa;~OR;Y#m-X^{=VmiPp)WSJ?sNYHaNLIBj@ z&$9X&=LaHNT~1D=xknsgFCD?Qm{|!ADF0zFUwT3Owvq4q)iUxED!jimsV{Dy5UAl4 zk5%qK(Eeq%)OA8&nC`z?#~GKb7_jq#zPYTzyKdi4mY}>{irGlrdv4Kj8v0LfAW;Tn zOlMvp!S&Yw0--gv1Qv03Mq?bS zzl4K~)}D=@k^*M+@t+IX=g%3FYe&OaP3GJmz9Ir(9$;SmY!B?$G0shXW}?xXu|R(# zS0NDqWIoH0AoNd|Iuh>nxQ(X||4yJL2b8GIf#3#WJOM_=9qe#E6X+fX3GiJxP3VJ+ zgiH3fZ?113xB&LR_0LwIiuI))hwOd^Jfg*PeYguSlk3kHQvbn!Ff+AX?-7H9tq@Dd zy}$#lDw6#er7DU=i>M}dYUAfg!;vs&g-75(ht^u89c^os@@pmj*KCdZ-6U*)%+1OGL7iGw*a^oj*{GrVwlX-wA(vr)^@vDXHPCtY|b94Z<;2;7B` zgI0dtlJ8|Q0gMrlNiDeu)lE=W9+#&2F@{^u5ce?;8v@}ZV=u3hK?ufhnCr&vxacat_&76q5nr3x005>_Z|oN-q#0ieL2_UVdx4+f!9&Fj1oKkI zEl`sIg`(?8smM;3dp|lgIW@rT({IGCv#L}eCawy(v|yHiJ1Yx5(6h!HEdD&?W3cic zH^7~%6o&`cm(vG7@+O#*K;X3#_iCx1p;a)qfS#x72Vy-lmtuOb#6Zt`uwx$mUo5urERyv)lPU_INZ-W@z)OD`rnqHsqM4fi-+@gn~ml@eqG`@4NfIAaF>NQ6& zd)HPq!hPwCbUhBo1O(Sn%N1)jAsI2ifEIV_Mr=-K<*5K!yBAz4>|6DJ6BzIgxXaoGrK%ZCLXfuXdO>?P@3W0 zoB;x@E4?sAZ`EVMh4)UBfpt2`?s6d+loCr7A3(@Y+j|C7HWPOI%TZ5`O-hjB5fuuA z0JC!Z!uv_P)kGwB*;I9Rx2k!EfStu#fgAwnNnjhiT5eGASv-Mbz7M&4+{@zdqb|~J zIB=E&J$kMp^Ppd%5k&-A7Y~Auu-@p+e`gtJ-5d}EufNm@j^NjaB)4fEvUbf&ZR-Eq zhfXWNUL!ux4XoqpZ>V>stteidXF@X+u7CN8wvV*m+gyjUNU>I`kl$*Dtlv_Pf1*fk zfB>TrGI{55%d<$3Mg?4)e})cb#%=)F#e(OA03gGlenBHs0)G*u7z_Y4mHBjd20rB% zVJ`psRF5~|xqZqJ0e-T7t;&VJ)wXmqEB@v^AXqrblY8;5lYh{cvsW_z#K(WXK#4JV z|CJ2pqSb68YyVBV_#SkM{C_u4%ea&nO%R&aQ#Fil!_%6jD#&F)7{Kt%p7;`*tnj$|SK_q>(%DpAOU7TCj9e}wkG z>7ZOOLkT{#`gtdu=}mv8v>i1Cb;bX#kwXyFlqkMd2Jd(&#RsC=^1AwpB zC*8LVPMO)k36l+PjoGFt~^w z2K^iQSE;I=HqIMtV9(KXqo9hQ=?#L~Ll^N2ctiD2oJbqu9>_s{C}NZ12iXMDTYyZL zmrmkf{H}-1)f_=^Xo7hxGix9W{66V!r0Z(_Cb9w+OnFFr6XOPCno7f4_Nr%kHL!A0qT8CZIgZKL&bNccc|AS-uLG}Xm z+fIK8r6I)<%b)@S52m6J#y&p?@7q0M0McWxKAzK%QiB1J7}y&lp#`F`!yi8`PDEJ( z`~RX=wl^G`xMDYh5tDAJx_0{Wwu-m{-z;3Vb&vwg>T<SxHa>njYqo08q25%P0)Ua< zReL2DCB5jFcmZ;vqHgH}A>o5#c`t};=-8KM%zm9`VDYg6zQnUcH|AjZhi!X?m zQ*OA2)0hCkJxFZKCwubwKus(QJZRmQR^V(yQVYn#xi1fM~P`FY&I8HuH$v};kG39UJ?hON$Nf~g3uXupf?GV$+i(-w|r=?rm z)R=6P!qu(oF7yKfz#J_CHGY=q0`(}w@obx{beHsD-jL(Zm3(*rj@3g&`3j|~j3aSt z5Z;TZ<%>5#wj@E1UJ(N-bw@tG%CtXia~KOd_adhTsz?=uNqqZ39QZFd8shOS0VD>i z+732paXGVlwK%>wOb?2PoKZN1iV$FbwP>>4acXrn@9odDUvF?;`F!4~4Yu1o)BfQp zSnn0Mcq7**rY?S6yEhAtAh;RzX_vV4!T|*OKd=GWe8mP71}CFzJCtb0S|*oS)XuEG zv$RPEqU#+P_?&p4XsG1R0US99cS4{6Bvr~Er04ox{~35k2(;rHG39MNjH#r&^QO7> zg8VvE{5Oucy-vPg_b{8_)lIP0nfU#{Rgc0Xug3c|JIc@tQJwN(K^9Zzex@s}nDY%^RfIrkB52)SN zQFgS~%U(&*ush(jK3H-;0kRze=XM6?t64KI5UiDHAPL+wmGX<45`X6hqryFq*ENeSN4BHLNRDD6bsQ^5UYpE-LvCG(x{Q$)Y z1l!+<>{Nr`?A0#5C*(E1XRXS&VN>fR4^USy;Ml=qMr9xvinowj@<`D4{x0a3+Y~Xfv6)52olJKM2PMRzd?& zOhTShD?%p_2UXWe+41@0LWa_m)sm zEFUa%y;4mNxVQB&uWvO?UZ=F)c-1#Wv4W8&OfTH~T>2O4Lo2Isf zg|#59LmLhRmQNlt5*nSe64IOL=~WX#N-9I8ce$6`94rk=Nds^S(KSvRvW_QSD$Q^E z?|0Yr8PAq)AvE6LJY2SB75yW>Sy(5}gj=p6;jV&WC5qLIci~v}*{YEq{{SH$NR!a8YOwV16}l(;Cu_^t>mA+Cb#SdfV>GEwr`iKjD*{7pj( z{^GogWSH|{^m|cdxxt`i-1m=Ku5)R1WYYmh$ruwyNJBwrZBsJZ-!YN{gcIQxc2z_5 zQz>GsRR&7Rh@kbe7$awWKfMk{PFBVvH0NvoWSbU7jp31Qk;sPm4gT12I_BxTyE9Uy z{>dh0zh^Nuoq8my$)G=s9p90 zT?|A8ZpOYB9^4(hcp`O}KCW4sN8gsn2-2!07vg$NodMK>{co)wZpk+vrY-wS^H%dL zp<2*^f`=_Lrdr`tbBUTpQ!Ocmy9zF)fY2c@bT#}>uA&CS*#iyO9=K` z2A5GFQtoGBIw3o5kvtFbYLCNK$*Ae$3tRWVFigjC#s^uA|DfHQN*{tua3y>kc*K;r zk3Fg{r!Y0E6U)dot^XQGTwf>X^4LGk=v$?ffMMbY}7;DX0C-zvBTfe(c;%gqs5DZ905Ay z>CjgvrmSc0v>FfJ_j1ihOJBc+A$AS*O8&zPJg+f>r(4-+!VB+aFNw&_P$_MgOT=)w zfBoQS%dKB~q_sB$Or3s3WvLu-AG`8+;sOe=r7f;5U7V(F{uQ+>6G=vCRxXjX0uvKP zX@Wis)-LfF52w7c@+#r}8Gff$ku7K238VvZ2A(_+Nuvf-{Q9_;}m6Av|>)_iNJRyUp?Q&Y`xgf`X7 z`#KN#5}UphKeyMcJ5?B$Rtn7Hg~QI!Wt4dnLfangJ9!_9sC2$4(xF`|Hzso?vb|Ei;bMvoJyy~XsB|>_8EhpY1!adr>$EBc&qBR_h@M4Y|Kco(uCk`wXq_} zNlgv)YXh;4zTGiOHG=-5&fIO~KM}#@XZ$g92#%+Z$whCD8+gSuWBvw~NS@mY=$QZ2 zR+3he@2g);>F6w$JcwFqF1he0)m4*MyKWJ7YLF}Li3n2Zj|f*j<9;@qp2lOh<}9Q2!GTS7*x zQYI)5VQ>0!)j_ayTfA73{(PZmOX+PPP#_Q?sgGf~uJ!b@#=eo7=#De0Ej?9Z>r-br zD>tV5B74$&<0=!5<-^YyX+KmVsgiDN9sQLFA;HQ(aGVF~4wim;3f}ADP}c>rD;6`S zrYfD-k;R&yaO|A{I#@DXj9Mh@xb;g|(px5XD#1We8`Jmt7;A2Vf*j%?qx+5n=h5Nl zpp&#Qt#@e~rQGWRQ7R5AAwR11Yw4aBk4qy@9^37`e#KOfvr03&iAwRWa^FJsK= zsXO)MZeFywUkIGZskCZy$kqpop50L(Ct=rs2Ig$SitbxG;ME<*1ldAMg#a-2u7e7K(e4z+RVH6mqP&IZ0C zD~(>LFbfI|%*NK!5O{cDmz|uPpd({VHV1iI+BzqcwmU5Z>Vufr*45Iji-1w(;iS|0@1U^3;A4Bduj%q~((pcH1Rm62!SewFfmRCm3p-Nfx?9ql%5P?{` z(q-T!8v1J>UmKna0j>U4T^z)m@`u@fd(Oh&9Xjh8=nN_ou67;NrSi8d_@UmS{e^+@ z`|=qcsqO=Z-UE%6lU9@LON0Ct%l)3G z+qV#Aq458#2$&hZfA=S9^!(XrnCXU;ub=TkMWi`b&rALaa}##B)(}*>hDi*oJZQBf-#v@7!$o77Pmxnl zCuo;&Gs>eBlX7Y|i+lx5#$=rO9Fe7(gXqI?LZqwz*+~BO-?L^Wl)XzxE%}7f=YRI& z|LYZ|jJAEq9cY&ENCFdUT3J+8UEd7vrCT|9b=~ionsV=1r`*~%T+vzX5Ba2mr=8tz zhwOK$^!7K!7}Fk&1pvi^bWcNeT)#+INAVWr-T;2Tn$6P3SZuOCqSxH>Py~I98_yX5 zT4qAT-D1G0Qk;bi0KrJ5m7F;2VEt)KI#N z2R3-C10X%(coVSx0za+tENAJ_5NmB=8s-t?qvho+rUzna?94rmjIXC-FNJH4;BT{Y z&rrU)cl)19U8N#Z0YKD-xE`e8A*&FvuHVUqJH{SHl)xe}C;`!curyC>d7j^H%1kxK zPdwlj+L(t5x1sl8Uo(0}jy z!$9RgNKnVv5SJp8neE|P&Z<48jT$un-JK={F!QfIC%7!_i~3C=R2pE79@?`Z$w}$~ z?FUEic7KE}n9{_x491~y-EHkw=r!ABL+?S~eqzA-6TAuZF*TK3p(t)AvLJz?(2ytB zt^V(%wAnN;-Po8KiRCB{FaGaz1h`j~U?M^SKSYXEKFjQEA|D)Oxz#?2#dCtvdN zkAxopto;(L|DyS^w8=#u^9KH`Eg<#p9k2t>)mr#wqlT&N^=&pV&2XD^MZD(%Um?FG zw*90&!>X0J-qa@4s8(wiwPUuZw)ReKMG1n`Xte~bQPdu-+1h&sZP9_)n^1eF zRzj>3-*e7&&M)UbIQb>H^3LadpZjxv#uNR>P=}U^lL`O;T0LFxV*nr~{3HghkrTcS z14r=yaQBrSSp8|>^v)bbvdP$3=bnzn`Yrr9$HVqdeq+xx-RI>fJCJ$yEv6Lid2*ye`GfnzQk z$8CGx-i7w6tmMFV71C)4m;V2s|MwH%da>&trhqG!u4p;b>MJ5;*%VUt%DW8zMAkDfi zl-ji0yZ1~-6l8N|j6tkF4zrpMfN&Y*G4Dm>7aW?WSaa(nW3!ObeLa&kcsH2#&~jaN z$U`#{0GI?)dp)<2Q)oD>0fE%%3QZU%??43FbbahJydmr&8Z2;lg_%|g+F>gh*IeQ&{{`7c9D9FbpBg=yEml0mUn)zv{LAdHk zN$zYXo)}0VHh8cnhguGc)=n6FfoeBD&Ppgm5b?Wx{ra{2FH)(wN|KhAueu?wGc!Xl zLp=F9fVgB1OZ{Hch8h0F*zM(6rjXyPNl6@@CfW1+Cd7!L`hn{pf-Q0tMVav+SroWt zt&%%m@=t6Y!g=@edr0+a@+#X68sPiLH+XBK;ri!qplR=#ytz!Rw*WuG_%sHQ7Ufoe zVCsI^ub|HhfWhDvxc4PL#B4~E@kX2pYKlvSLM$411ZuYSS}ICE58$9>Wc0Z;Vm+Ew z;7F{dbo18CDK{-Wqxt)VqystlAXnvXa0BBS;0A|GThMQDO82-Y!$f&`4Gq{{R5~?yTc48(^tW1Lg0`fz z^pxoapW4^{rVVd;EZ5zH;!u#uP}pD|d-42z43Rqkd^t=ykg!Rs{9{=({<17CaSvfDJ%1V4fu^2r>(&8bJSZDCe<>+XMr zkKR(z?-+#COA$ z2$kbILTY#b`{*Vik?|*7A>$^I+G0vdN{Ck1Mb4kF?7dGoY$&6=P1m+d`A#OGVt($Z zY$ck<|I<(lwg$%kDzLXfr9o3-zl&L&*LL++=F4;ViIbXgds$Kj{EtRYKJ{#j$@ zd_)X8wm;OZy|pDlvIQGl7jWgK3^eQ7)_+gLFYvxYS))tB2v%58sockV@-nqDiP6K% z#N>#UQChvrHgzBM`D2RUuWNwM_z?V{ltmuj;g8zMT6Q?ce&}71!=mGc=Z=P_IR@(` z>u3^b0Z8FSi1+5l!*j6wonZ?+s@dSz>xNGgk9CZ|+x>6vfQFNwObopuW#C#_S(yWG zYl;O=hk+Y!IR|!}Z+H+R$5B&1ACFQ74qhKgX{G0P1wp{uuVwDiPijUAb`nKyRIOssPIJ7nmco%!|}#g%LPs zzmb@j-`2OKGV5o2GKs)9Gi5cCj?+IHO7%MLNX-5Xgpq>#(u7cYLsG^0Ub7G&@de6L z9HOd=eixc^oFuRB#0lQcr`)>sav_TgHAnX7F-S_St34_2&*3~i$U-=2qifEf%n-E7 zz<3()dLPS!5#Ma82lS7YRhz1YZO)<|*Vbq>R*%_GHP>$B;Vd!DxEhc^cKGGJHF6&p zqB_`;s;+pJ(9^7l&8^&%6K}6$R+wzIVe2A(gCvqJL{2OlVC48^LpCVUb_a60!V=W4h0-}7M)x|CUQ1NbaxNK@uyr>hztW@l+{mo%+o&9~XxSDvU&-@&Xy z>6x{FoZ)`yRjI?6y9cd@vZ7C1JMWv8lMZt7fVb-BZNu0q+T&q) zX4rcd#-vsoJ^AFBCjmPut28lxz;STttyjthwy)OCCiYM#LUia{2)D`!({#dY=T_CNz<)tK~FU&%`bI;cj z#I8+EBC$wii7l5=`FGYe_@;Wp!4~zcYvtl~sKFM^Er#+3b%sMNP6uQDgKL|7R! zMwVu7*@gb87c}L)b%tDxm+H0kaZ3KHveLg;3gVy@v7yf}$V||pGnVJ>g40g4jtS9I z)0M^j@=K9h&aaz9UkWh9nzHzGd1y`irm9w06 z4jth=+(Ucc|9sRpe}s7UwNhjc+%nqzW+>9#IJ)_Cn#V5s6(ob#yK$AjY|TM|{y4F$oh@yYW6A z+@~wWKp9pwsSs!7`SU)S(PzY8g`5LXzaa|g3G~L~Re_m$k&XGfngy>A99C&lhEsRW zMVENcnM0OqNzsHUXt%3UTJ>^mizQB%dPT)i@bNfh+QX@M8QY1L%f%_2fgsn2JWXRX zLisDaT`9>I6u0wp8w+qm%Wz7%Z)=Vc4QYR(y$2!?%7@y*S!hQ>`)TQ<`OO#d9BK0- z$??YU^HR@-kc<}ocUnK|Jo5w-9`g95s4$-1istRBx?D<~ms2%z2lY#2LN6UaSiQ|R z_KO^toj_0NUnoZ!+!n4e{==kt_k(8ZimYwY!-LM}Z!5x#kPJ`n-vrGhWJ}%v%~5md zC-gaVhY?UuE0WkFfcRk;2>4QL&&Z^Ijgd1=}z_zrT^i_3$IPHZIm{`sQ#2NG~E} zzrzmpNXY7yfA87>mx2plKI)pBsk_xkxm9E3hjMkAOq0=SJ)>LW$1YI1yb{IoHulQ9 z5%FQ`ZL~GAAiT_%Q}x;cXYR<0IovPvJcVpPDW^q{?m=2>l63k*5vhhZS%1Ay3cYZb(?HDPD1SmyV0JN`lGIQ0&pw2ZGS21)2_WFRjBY3b)Ak#XO0mM zbF2BM2O~*Htzpb5Qa&~D-kvqLrkRvr?5hTscT-QhRCJV?e|8V{6_&lR1TWozREju2 zI7-{(X&og8L#cArpUihjhZ>34^H4F{T!24x$z4RJYrgI$ZPZ?1siinv!`5uVwiKHGY)ftC1V%RaPp>BaCOfB~4NmNGb=UQ1 zTt8UtERVW9?X@O(@N>5wvy&9+w`>sgQ27YcJTJ_#{qn!_v(R7yP+^i z;S%!FR6G@I_tnX63n-_qGZY<~=HbbPj-h9Ku5h))pFk~=hhP`}nvp8GIRi`Endq5P zaNqKGVn%`6>{AMvvR1(uI`-;Xt?j6O^TV}AU!Ub2g0~aaQWZm8U%Li zCx+m5TUk?fUDkpG(($16k-XzN^h+l5qqLpNVip;E{KkhSwApCN;zoPc^vdMn!6SMuATl%fCABpSQV4Ww~ zwW)Q^=*Pce$!@gmdB6ObRgj5|fv#R(vrc6hSIYhpO!NoBQdU17fZ`U1*cnV}yZ_F5 zVlp}Dq9qmVj`dlawQaj34_{wTr6ve?t?k##+dTF$y1mu0yzd#XQ zx5W?X5q2D2IK`Wof_C)@Vpg8<)VI(3SCZmu^&j+r1B}$q*VjQRAghBPK6HIVmhy)* z?&onxAD3bqn6SNixcZ;_f}P~bxr9(`C)H;T>iNC>m;B*Fw6@)3Jl+QJo!|Nj=rjx!herS^U~)Swg27xVF3UnXLy-}8FOQ)2Um_X zn_aWBYvbQ`yox{N5XTb%$(vCP}0EY*B(?|Td@$S3-d12R!iuYt}E_tU!s`K2}apk^WxnbSe&nB+j+3n6>o zUxGx0N&+?CMQ844dYvH~PZQdK@bP;8fZPNnB2@F=!gk?ot-g5@Tgi>P!)(ByTs8m; z?92z^Q~fmT9n6JBr!HKQDuD0?PuzAh5sX-0deO#w4|Ak;r_1|zlpYwQJ7oTLNm;i8 zS0ISPr!k)r#2jn^`Ka=jM8HmA)y$6PmzPK79t^RQW+czg>;?DxKxjyKdL>g z#W?)?;Ou^fTL7;oM*rXR5OMw;5AvIf}^8lxr2@SaVaqNvb z01yznf2;D^I`c_-x#Fjn?Y$FP&((4-nmGzM0RBG1aOAx_St9h-c=?Q(m5X z?Gq2vV;X<~ggI{nZ+DPz%Bq&gBGbu;cJ^WX8)U#WI7=rt(<6$7A+~I=oCiKiX75hY zZ$IIB!o|d&Uq6h0AxG(JRkyrxnffV9P0j-*P!0f+9Awv-2PIy)$l;Ft=a*7R6kbv2 ziU4YDibU8?j{xfFYb511#`>Zgp6xUkb zRHv(p%S!?Pf0l9hJozAzc~N$vKW_mpz?vU(GcrL62zT@YZbp*rD=fe!pb1{u07Y|& zMJyWtFf`B!JS6u+Sy#0?#JnZqUXbx60}{%N0l5C*PHD*Va*EX6m3A?RnRZBcPa1Cl z6~M1Y5Rt^!9qg*dgMe4JteO&JhyWodOQ$kxh?0jkxx#$`h|vu#0Qk*KcGrcpst5Jk zV+-hW!m0wmjw~_5_X)rYHLVC-#s&I*&%AX`4d~vr;SBTvJa;a83DS?~`6*nsnF!Fu ziiRU4Hn9z5WzTD6>2w3G*+afNJ|+PY9MP>LB!LTF$J^n4N#P~*qN&oENt}c+#sj(- zKzNp~c{Kq%y2aAbzZnLEv#g6kE}8p6m98XK^u9g$*o3O4Api{9cP4yFl%Sr4b%v*^ zDy4nhJUcb!?JL=1#t7X20Jo}xUFO}mn*RQYr*}N>C#1vf&)&dOQU<^t6C6i!kaIj@ zX3pe2h3}t2GrQ}Z#A>nyqyRr{%~VW|abs)oKwE(J>cW>|JLVO2NAYuC8}3)h08pTA zV>6ff($o|@h2;&{Pd9TC<_?_9&A*Sx3Bk8%DH86gzy&j{Yet$CIQX~GQG2I)txc33 zvM~OGEs=`g3;)L=j2n>o9jY5~eTbn}6_yqCb&Lor;f8DGP|sF%rm%AFcu(z%Lcu@2 zi_$N`Pq$U0o)WJ7ds6RItAzwp6`4pa<yc>GQ(Q@q{GW(> zrx{!W|J{jiPfD!>qGqRjs_kbOXr98pryrJOaFZ}PN4xtjyM)wKNJxRay4S}v32(yzK(w5njTje& zh{EuEG|l=|P$2u?=rxUE0;Kb9<8fiPrTG_k!f`5RX%+><0Kb9o+bW(H=ZMI+#=KoP z>{J-tfBRP_VKcd$W|YbtmR~>ov2MfnZl7QK9jA2ee@~`CX=h)TFoqv#7?lJLS%=CX z!ohiXyo)Xwpq2qX$A|RcaP5N9e>;C%aIdHzZjY?p{%`Qg@Ck{ynw{+bUOZh6=gvd0 zP0T$4T!DB9FZYp|8SX}I3M=6)MPL?!kfr&6T7!uJ}Gtb87 z{P6p?Ns}SocT*8pbM6(?3)00Co|4P+u)QeQEt#VBYGw=nH^;A-XLL<}`L6K++J$1I zv0|6Cos^JloNJwvsm&9S*j{YggSWi}dE?AKTqOo#PxcKQG#YmCuX9NUv`=1~u?Lt1-jqZV=tg^=r_V7bbb!-05+^Ito8|zNs7*lWSBO^?356Ix1Eb% z4C{m?thzrYCu{;?rvXKPk6=;R5b)Z?oBpp_Hq=I!i_khYzQRG+r1cq-g9%#RGU#gB z-N>8clVt!99;kB8$EcC{^=I|Bh@%bFG9s`y;ODS#<2Fg(#AJZ8m3_8Q>Q- zx`anb$9NgJf1^B}4mVuj$TrZkBmy)(4y?&jIZVxuCHAKGTls+q2HFd4qQ2?^Hh}+M z@ntTlOw?`#TP^}IC!eK9gGE|Pm>C8Wj!W)$7AMG_@acY})k~?l7XQ<)a&1INs-^@M z65!1*1-Rb5okF-74(B#T89fDJ2xnj2zboDML21LKLqY zj20r`d*D7S^UcB3{N~@wm=-w&1x6UmJR5+LUonuSjrnZW$6Qlie~0C!_D|b1wN#BEY1C;7l6aogv-Vkq*wz-#|%WY5qh}V)urHGK*RSkR5a;iho z6g;61>_tx8t`MStAK<6bY@Cy*qgXP+-4FcJzvEkTl5sXXXlSY=Tp$4CC1dX`By_wP z=QW*p+A-lJatlI7yYohCTMA>Kym1W>B}06SxA{Rr-{a~6Hu>1jsSvS4!uu1RF zxShYrYQwevmQnIFk-(Eb*89A#Y&9dhe;8)s$S#uFo3fSjgFu20dwA42Nq~%#aQM?- z?>i9ZMpuapP5dAw0MyMTT@JmHzi3&S9}=(@KbKjo?o=Y;EdKcNGoi5>Dy|0{{B3ku z{cEoh1VbG$R_Au*G2d0n#q9h0asySuo?PI*a!J>pDyWsdRdt*D1V>!5=>;b}_ySD| zFuZ#%XC(mPi_zl>2!6pnsL&W)q0N#+ef$;bb=Qp^aPvOvf5dod$vrKxwms4!VwAxC z7#tis84nqzG*<~2UT!W>1qzZHh(G~a52wrMk+^zwyGM+0jfWD>&uIRSVj?Cerglsv z-%!Fy3Nr^PGT%lEIBN&iB^{S)z~I!E4y+ z8nx|!N(j2;uo748!~A&T${!q&`gcOXcw5}kxk&a_zyR|75zTA|pFAhY_GNL;RNB3-vv!T8h2 z0;SZlpu;B$<*i!Vr;=V_6|o`65~Cr5q-_YCStf@?vUOP3GcDAZz%oaSOf!Ps8!c=K z@MJ%OKZdGa4oh`U=y$95wP0eJiXrILTLi9**9Pq(P{(n93p(q&uavtVX?sao*|s<; z{Rg;@t2}K3|ExlY34P2r7K2~2v+SuW^SLo0_Z89;?9FGSrc^7GS-zfL(wfiA0l9bT zYePG>gla|}L+p<}4!$=!i=A;@>xuZ%n*cW8S(ck}*!8rbGwrpVuKZ&7@esXx8^SL1 z$#Y2AKMOh|T#sw@KDN3gCvNM5;$F(y`p_=IaUL+$Kl)y5I{4I?P`xtjx~5AQI@hQc zqh2(tCEG}VvcGSx#Jl|77LgKVixp&c@}WQ#Gqc|hmD8u1B3tXl!g`^~j|hD=9k<)W z)MjU8Vt$=WS0fwt;#BpxskrXBJBPu)!tG@wj|gO~=aBh;_T8=4rIAOxiYz(Yss_$7 zY+bn)9;d>~q5h+?JZUkAZrxLHrVosErsZU^B2sU47zDi{>z<7VX(!Kc(>Sc2s^Wf;W>F5lb!nh^y{5LZdGDo- z>Pye9wXNLTgHzRP*fi^ek*W{gDV5u2y166UZ=F$oM=EsD=15RmVqM9;vv*8(4AXrg zPJU4>>o3J+w!NY&B4jRxT4;r z^_FOPX&q{~<-yk7+l`jRZgZv1#q%#$7Zn9J-0>$y7-$cE$IZv_dy^mO2E`tztfN?TMm0HR&K{RehSzd3J{~EBsE0 zlY?u0UQ{=VEZ&y-Of5JG(HnPteN{YMs~v4;mXlNE)E^xXtgCmn-@emr*_wg~i4_9H zAfkMm_qhwnZv@V(=I(1h7tN~mcIVRm;x@Jw-c$Z2_r@m#ZB&pTA^J6TA5`&AbQ`=K zB<2EUtS+fq;Ib^WYV@)*_&xj$JX6LUNMt3OU%vjeFyjf$3A0v@|FpBQ@3g7TTAz$C z1(OzC$6OA9n25@`(ynD4q0#E;pqTV+5lC^7+mqaD=xgUXfJwT%gW;KW$(S(`}@BGJ_^9W7O2Y)(<4!WU0%ZPD*P zJh5!q=piiPAYn=n1rhvMp44RJ;USeu4p|-Wc2qL^XGCBwV-F(8&Ug)ZZucQkRLU8S zDHT;X#{3Q4kXT%Oq=En~@lBO&82zRUM;%KX&Z-JaMnf7j#w_Mi`KnDV(Xlum z-zm0c(CYg6Hn9tpoO5@6Zcgt5Q#Y8P1~ybw6*sk=cZv>JKcnIOM1P2l9s8b17#}OL zYm=mLsj;+%589R2%d%wq{UY>L5LRwKM-*$*LGV&@@Xxv|x7r%bsskyE&w4bxg0Fgc za!!HVS+g%ATmb%#q5IBF=gQG~eoiP(Gkbm1 z`gui_WZU#w+oeK^#*S^iE$}QAz}p{4apxQ=l-T^r@v9G1_}^(`${z62fa;XMo9Y)hjO0B z=A2pYzat>e)c-Qu^N$#Jy>pnj^I1XqO{U5XY4|chrif}Jw#{F*@8W-@s(_`1adUr> z9Q_{_%qK>`c8u~74&cw}%;W>iiRk3KfUuB8Er%7A0MZ*V?_r0`cKtm13^6$(d0fg> z;^w6}3G7AxHnxefA1-HYX^6Sk8lE&#C&BnW(=c}1DM3?l0UyR!l0kK8l0{LtT}L^d zo4a!vxZPvxiu-2kx&{w7cHMjZ-m0(7($^8?v&hDKRet69@||4S&ARwfGo*XyuqB^B z1I{U-DRSJXsjIZoe2RGo^j}7RVynJmykLr}n-jELZ^PAlv^s;N?ylt8x|7J6HC8&m z`gGJjF_D6&yV*8jm$+&)?3X&?pInH>-vvSVoE#TwwJ)_Wa~6bvJsFg&PZ3i5)ZEpv z0&y;?^>#Pn`(_Nq#)sZ+|E#NEUHxWRkNznoBOLYZiBZSu{>*A|0F+S~cNLCvGQun3 zxQFs&4Ij7KDQRf6bNYa=_KZ-EKiX3&Hy?H?Pb*AB6+3g2%Pju3rhs<62*d~FnMuf;gCFksfYWfK^2J~5%BQKj2;ZpdEhzWJiN@=4xLYuALhn_0b}oPQH@ z-^Ry;XZG=1?ug)Xf0Z~yYxS3hKV6Ot%B3?`m7mf)OXL+Qd@@-0k5ophtAG0n@{M+H#0VIC1+fX6Izt* zRl5GHjW?Dz35q@YE~%pP%+C7Co4G?+1M@&eUrbT|i_;t&nm(>-GFJ+M`{()R@C6}49f?wm5Rff0Mc7Hs#8w;~ig)G0m3Ya@5^^(?hrB~7{R8@9n=W|pJ zra1(%4!RrB@XJBZjvv9)A5cI6?zlAWbtGHQE8-pJ#p@jEmzF2SwQ(2gF zo8SrRIq6Wi>XELY+5RhK)I|gMnL83WA@g;2W@E4T>t%76&Sk{~*Lfpe`ahwyJ}{bF z-k}+mdSQ4zHyiQs=OE@?;M#`{bePuY%8OMVdf1Sn`WAV)V9!-tXzAiQ_sJhIe#5f3 ztitZ4sfwyPH07ds+~9u&dly#aKk6h#6g_7zDEh}0cSqAF`to`x26dH0&`LSiqwD%k z%?lNbep7_^1Q9vkDs5$SGncKYVz~|2%i5e3-gStMe64GrW|6U!><5@r*u0*C_mZlE zB(3z|-an0Ni1MzroP9wclX@Z$L4BoVWxpPOCd%Wu(s57CWg@3m!8GiZlB)fVQrTj^ zfk6$>u#NoqCjtfDuedZNEP%Pe4oo9ZIdM}lG2l(PJ%>nDpf2_*TUqNP6Pv#scTL>X z)o|06BKZ;E>e8Ye>Oi5u$q)JyNLcsx2~4c!=07-43f_Jo0|sy4^1RRLDoMH-0MKVE zN%nTOr+hhIR<9|l2QWNAXOc52 zm5K8bmeE!;Yxod_lm2lw2wU4uQ4tq+I~?Z8AjzQ4U`{3^5z$xd=`51qdWu5kizOf0 zv{mA4q2V70_FoENt&`UFQ#KZTt###`uehu}3gBfA{7GeQNHv+yXAR8CQLy*#7eHsQ ziK(fh*0vi6>(4nj8HsKkff6_c2QA?Gtwc@BW`yp|DlO;O;E%RXIDHI9IyK-bp6z#i ziqNtU@YEi;T@Qfqc}3x?N`8c$0|s{OkATK2Jq?XbEBUoU+UAeE{%q zAmsK@-?jR9L0BP1`4I(pDA_`+N_O!!1Fw`Q0W~f~41JjL zT9X|rtr^4k^U~p}8h8)Rk(lcW0gb1P9L*z3R-V#l8&|xz7B=7ReYidbjn>A!#L<5x zpha?NU#LU+vvcY5Fg(okGUTdQ4_!9??@A4(nI(7u|NryRmR N($g{oS7_M3{vVf5fWiO( diff --git a/MobileWeather/Images.xcassets/Images/partlysunny.imageset/Contents.json b/MobileWeather/Images.xcassets/Images/partlysunny.imageset/Contents.json deleted file mode 100644 index b2a6884..0000000 --- a/MobileWeather/Images.xcassets/Images/partlysunny.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "partlysunny.png" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MobileWeather/Images.xcassets/Images/partlysunny.imageset/partlysunny.png b/MobileWeather/Images.xcassets/Images/partlysunny.imageset/partlysunny.png deleted file mode 100644 index 4dc9bde06f6fe0c3e3a3401af1ce0478e4bb525f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18235 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 diff --git a/MobileWeather/Images.xcassets/Images/sleet.imageset/Contents.json b/MobileWeather/Images.xcassets/Images/sleet.imageset/Contents.json deleted file mode 100644 index bb65e18..0000000 --- a/MobileWeather/Images.xcassets/Images/sleet.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "sleet.png" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MobileWeather/Images.xcassets/Images/sleet.imageset/sleet.png b/MobileWeather/Images.xcassets/Images/sleet.imageset/sleet.png deleted file mode 100644 index 51f8dd7c406aa5fff4b7a5707a9d4c8ab2d26a81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15477 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

?c%NXAYwEf2d2rh~f!D*@7kPeYc_)lhaZ7c}B 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 diff --git a/MobileWeather/Images.xcassets/Images/snow.imageset/Contents.json b/MobileWeather/Images.xcassets/Images/snow.imageset/Contents.json deleted file mode 100644 index a7dd119..0000000 --- a/MobileWeather/Images.xcassets/Images/snow.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "snow.png" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MobileWeather/Images.xcassets/Images/snow.imageset/snow.png b/MobileWeather/Images.xcassets/Images/snow.imageset/snow.png deleted file mode 100644 index 18cf4cc81b409528b3497f8e9ed5522476a7c762..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20359 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 diff --git a/MobileWeather/Images.xcassets/Images/tstorms.imageset/Contents.json b/MobileWeather/Images.xcassets/Images/tstorms.imageset/Contents.json deleted file mode 100644 index 8a5014c..0000000 --- a/MobileWeather/Images.xcassets/Images/tstorms.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "tstorms.png" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MobileWeather/Images.xcassets/Images/tstorms.imageset/tstorms.png b/MobileWeather/Images.xcassets/Images/tstorms.imageset/tstorms.png deleted file mode 100644 index 1696d0ae3a2bc409ad218e0db0fa57d8bb292726..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13131 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 AmH+?% diff --git a/MobileWeather/Images.xcassets/SDL/menu-alert.imageset/Contents.json b/MobileWeather/Images.xcassets/SDL/menu-alert.imageset/Contents.json deleted file mode 100644 index bf1ec52..0000000 --- a/MobileWeather/Images.xcassets/SDL/menu-alert.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "menu-alert.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/MobileWeather/Images.xcassets/SDL/menu-alert.imageset/menu-alert.png b/MobileWeather/Images.xcassets/SDL/menu-alert.imageset/menu-alert.png deleted file mode 100644 index 5a038872726ac8e7eb7fbb99d2f5a216caede1a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1671 zcma)+2~ZPP7{@mu5E39kZjc115MdEqGJqT*AaW&5IYO8MI=WiKg0$KcE1)Hzg|SYjGo8NK{l549@An=1W_Jst zBg2j8HgpJrj06!OV&G?pTVDrQ+A-^D;2NSul2G8y%*lPfss3H5HUFH#Y~-*4EY_aKnZTrlzI<1BJZ3y)7&(z?Pkz9k74|dB6Z^{r&xc zvXTwt0aZLaJeqFhzX4tPr;8(Fp=iqE?VRRBBU}#@KxJp-o(^P{f50VnXRFPfu{(9bcKSDjgkz~WPhBTywQ;IK+~IN zG(A1IbfksS-8+OGI+qd55tKQCtDF19*yZR~rcq?$+od~b&gNak+(`J>Ft0m;t>)`f zTj~o<7xdh1_RZE5R-SBmFg>h%WX{aW`2Bi>(+SNcxW-36IVXSE0kg?Q?q$S|L@C1T zG&cOcSFx&6>ea&aiGQg2>T?G=KMwdsV#8&s(v3Ax>`aO94SJHaIWG{K@3=6s&FihC z48V2(u45!K0~a!4Q|`Ws6|C0eILiXDx{eF>V!)p0xZsdj6o?(}NXsscEAYafGTO8+ zr%j11}6b7mo_xzc4O)v z6W#k=uc0=o!MpcQuEWFN{m-wA(v_v^R^Fsao}v(&eTycl%<^3DuV61%T%zjJpkjsi zs$75x?;CRB{wa0?k-j2sQPt6tMR0}O`nXVuhAGNia1T`yJz4TjVyiB0B11LMQJExY zjdrM%j4!74^k`VsQae0fosIgzEPS*+9d$ozBFlVM+bg?XEToR}VbZdC2?)L`0t;UR z*z|j1C2pDcM(u%;;ia>DgoGisdYo#L{G06*$q#$2@EoDlG}$zo*0~c9+gq5TASc6@ zGFtuN5e5Md>Jsqidzhg^z}pGf$B=*vmSN<5=Fa~IpC)svpSLm!{tMrqL#sc?-!Tyn zJ_QIZxwT;Lm;b;r=NXy>vv?F!v3A%2FA-7?AO#Y?pK^WcdOJ2F4wzn>oTdtyF%v~N z$*q$%1=cF zAg(pi8%JE-lx%!owC|a&=J8J$q9XO!!&}~kt52OEal*%t&(q>5I2$|P(h#=_l}Z?A zZWjf-jwb`D>I3aZG&DW@CzcDd^CD`J-9;WT` zg`Z4L^TT&mKJAGai1$V8LLUXFV+JI?NLA=)z`dA(XkTPo=v*t%KD|T0^L2dqvt4X# zL6%^LH7>rJguk1Btua|eZDTh2BCB=l<;N2XNkb5S&u$A@*>oQ9MhZeBLoNlQ^1lEC CUXrK) diff --git a/MobileWeather/Images.xcassets/SDL/menu-day.imageset/Contents.json b/MobileWeather/Images.xcassets/SDL/menu-day.imageset/Contents.json deleted file mode 100644 index 9e23267..0000000 --- a/MobileWeather/Images.xcassets/SDL/menu-day.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "menu-day.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/MobileWeather/Images.xcassets/SDL/menu-day.imageset/menu-day.png b/MobileWeather/Images.xcassets/SDL/menu-day.imageset/menu-day.png deleted file mode 100644 index 3bb6ab41c18e52db37165108579a677e073bce91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1828 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 *)buildDefaultSoftButtons { __weak typeof(self) weakSelf = self; - SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] image:[[ImageProcessor sharedProcessor] imageByName:@"clear-day"]]; + SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] image:[[UIImage systemImageNamed:@"sun.max"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; SDLSoftButtonObject *currentWeatherObject = [[SDLSoftButtonObject alloc] initWithName:@"CurrentWeather" state:currentWeatherState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -623,7 +623,7 @@ - (void)repeatWeatherInformation { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES]; }]; - SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] image:[[ImageProcessor sharedProcessor] imageByName:@"menu-day"]]; + SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] image:[[UIImage systemImageNamed:@"calendar"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; SDLSoftButtonObject *dailyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"DailyForecast" state:dailyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -632,7 +632,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] image:[[ImageProcessor sharedProcessor] imageByName:@"menu-time"]]; + SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] image:[[UIImage systemImageNamed:@"clock"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; SDLSoftButtonObject *hourlyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"HourlyForecast" state:hourlyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -641,7 +641,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] image:[[ImageProcessor sharedProcessor] imageByName:@"menu-alert"]]; + SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] image:[[UIImage systemImageNamed:@"exclamationmark.triangle"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; SDLSoftButtonObject *alertsObject = [[SDLSoftButtonObject alloc] initWithName:@"Alerts" state:alertsState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -721,19 +721,19 @@ - (void)repeatWeatherInformation { - (NSArray *)weatherMenuCells { __weak typeof(self) weakSelf = self; - SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[ImageProcessor sharedProcessor] imageByName:@"clear-day"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"sun.max"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES]; }]; - SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[ImageProcessor sharedProcessor] imageByName:@"menu-day"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"calendar"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[ImageProcessor sharedProcessor] imageByName:@"menu-time"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"clock"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[ImageProcessor sharedProcessor] imageByName:@"menu-alert"] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"exclamationmark.triangle"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendAlertList:[WeatherDataManager sharedManager].alerts withSpeak:YES]; }]; From cc7c57db51a39cc14e71c1ac5208dce75e45bfc5 Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Mon, 28 Jun 2021 16:10:44 -0400 Subject: [PATCH 05/15] Comments review --- MobileWeather.xcodeproj/project.pbxproj | 6 ++++++ MobileWeather/ImageProcessor.h | 3 ++- MobileWeather/ImageProcessor.m | 6 +++--- MobileWeather/ImageSize.h | 18 ++++++++++++++++++ MobileWeather/ImageSize.m | 12 ++++++++++++ MobileWeather/MainViewController.m | 2 +- SmartDeviceLinkService.m | 22 +++++++++++----------- 7 files changed, 53 insertions(+), 16 deletions(-) create mode 100644 MobileWeather/ImageSize.h create mode 100644 MobileWeather/ImageSize.m diff --git a/MobileWeather.xcodeproj/project.pbxproj b/MobileWeather.xcodeproj/project.pbxproj index cfe5635..f47f0e5 100644 --- a/MobileWeather.xcodeproj/project.pbxproj +++ b/MobileWeather.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 6E04EAC41CF4E55900115C2F /* Forecast.m in Sources */ = {isa = PBXBuildFile; fileRef = E48C4D9219FE7CAF00A90448 /* Forecast.m */; }; 6EF1FC581CF5EF3F009BE8E9 /* SmartDeviceLinkService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EF1FC571CF5EF3F009BE8E9 /* SmartDeviceLinkService.m */; }; AA62726DBC705DF2AB93C537 /* Pods_MobileWeather.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5FAE7A71ACD04B5A73D580C /* Pods_MobileWeather.framework */; }; + C9BE3596268A5B6D001D9EED /* ImageSize.m in Sources */ = {isa = PBXBuildFile; fileRef = C9BE3595268A5B6D001D9EED /* ImageSize.m */; }; E4059D6219FF7D4800C9996D /* WeatherDataManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E4059D6119FF7D4800C9996D /* WeatherDataManager.m */; }; E4059D6519FF7DA900C9996D /* WeatherService.m in Sources */ = {isa = PBXBuildFile; fileRef = E4059D6419FF7DA900C9996D /* WeatherService.m */; }; E4059D6819FF8AF500C9996D /* DarkSkyService.m in Sources */ = {isa = PBXBuildFile; fileRef = E4059D6719FF8AF500C9996D /* DarkSkyService.m */; }; @@ -76,6 +77,8 @@ 6EF1FC561CF5EF3F009BE8E9 /* SmartDeviceLinkService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmartDeviceLinkService.h; sourceTree = ""; }; 6EF1FC571CF5EF3F009BE8E9 /* SmartDeviceLinkService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SmartDeviceLinkService.m; sourceTree = ""; }; C407ED364EBBDDB306D541A8 /* Pods-MobileWeather.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MobileWeather.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MobileWeather/Pods-MobileWeather.debug.xcconfig"; sourceTree = ""; }; + C9BE3594268A5B6D001D9EED /* ImageSize.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageSize.h; sourceTree = ""; }; + C9BE3595268A5B6D001D9EED /* ImageSize.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImageSize.m; sourceTree = ""; }; E4059D6019FF7D4800C9996D /* WeatherDataManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeatherDataManager.h; sourceTree = ""; }; E4059D6119FF7D4800C9996D /* WeatherDataManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WeatherDataManager.m; sourceTree = ""; }; E4059D6319FF7DA900C9996D /* WeatherService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeatherService.h; sourceTree = ""; }; @@ -260,6 +263,8 @@ E4059D6119FF7D4800C9996D /* WeatherDataManager.m */, E4C5B2DF1AEE24AC0056E934 /* WeatherLanguage.h */, E4C5B2E01AEE24AC0056E934 /* WeatherLanguage.m */, + C9BE3594268A5B6D001D9EED /* ImageSize.h */, + C9BE3595268A5B6D001D9EED /* ImageSize.m */, ); name = Data; sourceTree = ""; @@ -499,6 +504,7 @@ 6E04EAC31CF4E52A00115C2F /* Localization.m in Sources */, E4059D7A19FFC21500C9996D /* DarkSkyProcessor.m in Sources */, E4059D6219FF7D4800C9996D /* WeatherDataManager.m in Sources */, + C9BE3596268A5B6D001D9EED /* ImageSize.m in Sources */, E477F2611A8B79020028B59C /* PercentageNumber.m in Sources */, E44F82451A7F86D20055AD77 /* RoadConditions.m in Sources */, E48C4DA719FE840800A90448 /* ImageProcessor.m in Sources */, diff --git a/MobileWeather/ImageProcessor.h b/MobileWeather/ImageProcessor.h index e7a5bad..1a8f96c 100644 --- a/MobileWeather/ImageProcessor.h +++ b/MobileWeather/ImageProcessor.h @@ -6,12 +6,13 @@ // @import UIKit; +#include "ImageSize.h" @interface ImageProcessor : NSObject + (ImageProcessor *)sharedProcessor; -- (UIImage *)imageFromConditionImage:(NSString *)conditionImage; +- (UIImage *)imageFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize; - (NSData *)dataFromConditionImage:(NSString *)conditionImage; diff --git a/MobileWeather/ImageProcessor.m b/MobileWeather/ImageProcessor.m index 4905dd8..3ea05d8 100644 --- a/MobileWeather/ImageProcessor.m +++ b/MobileWeather/ImageProcessor.m @@ -31,8 +31,8 @@ - (instancetype)init { return self; } -- (UIImage *)imageFromConditionImage:(NSString *)conditionImage { - UIImage *image = [UIImage systemImageNamed:[self mw_systemImageFromAssetsImage:conditionImage]]; +- (UIImage *)imageFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize { + UIImage *image = [UIImage systemImageNamed:[self mw_systemImageFromAssetsImage:conditionImage] withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:imageSize weight:UIImageSymbolWeightBold]]; if (image == nil) { image = [UIImage imageNamed:@"unknown"]; @@ -42,7 +42,7 @@ - (UIImage *)imageFromConditionImage:(NSString *)conditionImage { } - (NSData *)dataFromConditionImage:(NSString *)conditionImage { - UIImage *image = [self imageFromConditionImage:conditionImage]; + UIImage *image = [self imageFromConditionImage:conditionImage imageSize:ImageSizeSmallGraphic_64]; NSData *data = UIImagePNGRepresentation(image); return data; diff --git a/MobileWeather/ImageSize.h b/MobileWeather/ImageSize.h new file mode 100644 index 0000000..cdd4b8c --- /dev/null +++ b/MobileWeather/ImageSize.h @@ -0,0 +1,18 @@ +// +// ImageSize.h +// MobileWeather +// +// Created by Frank Elias on 6/28/21. +// Copyright © 2021 Ford. All rights reserved. +// + +@import UIKit; + +NS_ASSUME_NONNULL_BEGIN + +typedef CGFloat ImageSize; + +extern ImageSize const ImageSizeLargeGraphic_256; +extern ImageSize const ImageSizeSmallGraphic_64; + +NS_ASSUME_NONNULL_END diff --git a/MobileWeather/ImageSize.m b/MobileWeather/ImageSize.m new file mode 100644 index 0000000..7469a17 --- /dev/null +++ b/MobileWeather/ImageSize.m @@ -0,0 +1,12 @@ +// +// ImageSize.m +// MobileWeather +// +// Created by Frank Elias on 6/28/21. +// Copyright © 2021 Ford. All rights reserved. +// + +#import "ImageSize.h" + +ImageSize const ImageSizeLargeGraphic_256 = 256; +ImageSize const ImageSizeSmallGraphic_64 = 64; diff --git a/MobileWeather/MainViewController.m b/MobileWeather/MainViewController.m index 00377c3..f3f94be 100755 --- a/MobileWeather/MainViewController.m +++ b/MobileWeather/MainViewController.m @@ -105,7 +105,7 @@ - (void)setWeatherConditions:(WeatherConditions *)conditions withLanguage:(Weath self.statusLabel.text = status; self.currentConditionsLabel.text = conditions.conditionTitle; - self.conditionIcon.image = [[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon]; + self.conditionIcon.image = [[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:ImageSizeLargeGraphic_256]; self.precipitationChanceLabel.text = [conditions.precipitation stringValueForUnit:UnitPercentageDefault shortened:YES]; if ([WeatherDataManager sharedManager].unit == UnitTypeImperial) { diff --git a/SmartDeviceLinkService.m b/SmartDeviceLinkService.m index 08c952b..16740a1 100644 --- a/SmartDeviceLinkService.m +++ b/SmartDeviceLinkService.m @@ -282,7 +282,7 @@ - (void)presentForecastInteractionWithList:(NSArray *)forecasts ofType:(MWInfoTy } NSString *precipitationChanceString = [NSString stringWithFormat:@"Precipitation chance: %@", [forecast.precipitationChance stringValueForUnit:UnitPercentageDefault shortened:YES localization:self.localization]]; - SDLChoiceCell *cell = [[SDLChoiceCell alloc] initWithText:[dateFormatShow stringFromDate:forecast.date] secondaryText:precipitationChanceString tertiaryText:nil voiceCommands:[vrCommands copy] artwork:[SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:forecast.conditionIcon] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil]; + SDLChoiceCell *cell = [[SDLChoiceCell alloc] initWithText:[dateFormatShow stringFromDate:forecast.date] secondaryText:precipitationChanceString tertiaryText:nil voiceCommands:[vrCommands copy] artwork:[SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:forecast.conditionIcon imageSize:ImageSizeSmallGraphic_64] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil]; [choices addObject:cell]; } @@ -348,7 +348,7 @@ - (void)sendWeatherConditions:(WeatherConditions *)conditions withSpeak:(BOOL)wi self.manager.screenManager.textField3 = [conditions.precipitation stringValueForUnit:percentageType shortened:YES localization:self.localization]; self.manager.screenManager.textField4 = [conditions.windSpeed stringValueForUnit:speedType shortened:YES localization:self.localization]; - self.manager.screenManager.primaryGraphic = [SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] name:conditions.conditionIcon asImageFormat:SDLArtworkImageFormatPNG]; + self.manager.screenManager.primaryGraphic = [SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:ImageSizeLargeGraphic_256] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] name:conditions.conditionIcon asImageFormat:SDLArtworkImageFormatPNG]; [self.manager.screenManager endUpdatesWithCompletionHandler:nil]; @@ -439,7 +439,7 @@ - (void)showForecastAtIndex:(NSUInteger)index fromList:(NSArray *)fo [self.manager.screenManager beginUpdates]; self.manager.screenManager.softButtonObjects = [self buildListSoftButtons:infoType withIndex:index maxCount:forecasts.count]; - self.manager.screenManager.primaryGraphic = [SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:forecast.conditionIcon] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG]; + self.manager.screenManager.primaryGraphic = [SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:forecast.conditionIcon imageSize:ImageSizeLargeGraphic_256] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG]; if (isHourlyForecast) { self.manager.screenManager.textField1 = [self.localization stringForKey:@"forecast.hourly.show.field1", dateTimeStringShow, conditionTitleShow]; @@ -614,7 +614,7 @@ - (void)repeatWeatherInformation { - (NSArray *)buildDefaultSoftButtons { __weak typeof(self) weakSelf = self; - SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] image:[[UIImage systemImageNamed:@"sun.max"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] image:[[UIImage systemImageNamed:@"sun.max" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; SDLSoftButtonObject *currentWeatherObject = [[SDLSoftButtonObject alloc] initWithName:@"CurrentWeather" state:currentWeatherState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -623,7 +623,7 @@ - (void)repeatWeatherInformation { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES]; }]; - SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] image:[[UIImage systemImageNamed:@"calendar"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] image:[[UIImage systemImageNamed:@"calendar" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; SDLSoftButtonObject *dailyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"DailyForecast" state:dailyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -632,7 +632,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] image:[[UIImage systemImageNamed:@"clock"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] image:[[UIImage systemImageNamed:@"clock" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; SDLSoftButtonObject *hourlyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"HourlyForecast" state:hourlyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -641,7 +641,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] image:[[UIImage systemImageNamed:@"exclamationmark.triangle"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] image:[[UIImage systemImageNamed:@"exclamationmark.triangle" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; SDLSoftButtonObject *alertsObject = [[SDLSoftButtonObject alloc] initWithName:@"Alerts" state:alertsState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -721,19 +721,19 @@ - (void)repeatWeatherInformation { - (NSArray *)weatherMenuCells { __weak typeof(self) weakSelf = self; - SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"sun.max"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"sun.max" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES]; }]; - SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"calendar"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"calendar" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"clock"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"clock" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"exclamationmark.triangle"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"exclamationmark.triangle" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendAlertList:[WeatherDataManager sharedManager].alerts withSpeak:YES]; }]; From ff9b1f961ffa4f5c6bded001e40be4ee162e9636 Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Thu, 1 Jul 2021 15:41:19 -0400 Subject: [PATCH 06/15] ImageSize update --- MobileWeather/ImageProcessor.m | 4 ++-- MobileWeather/ImageSize.h | 12 +++++++----- MobileWeather/ImageSize.m | 13 +++++++++++-- MobileWeather/MainViewController.m | 2 +- SmartDeviceLinkService.m | 22 +++++++++++----------- 5 files changed, 32 insertions(+), 21 deletions(-) diff --git a/MobileWeather/ImageProcessor.m b/MobileWeather/ImageProcessor.m index 3ea05d8..fe0e1b4 100644 --- a/MobileWeather/ImageProcessor.m +++ b/MobileWeather/ImageProcessor.m @@ -32,7 +32,7 @@ - (instancetype)init { } - (UIImage *)imageFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize { - UIImage *image = [UIImage systemImageNamed:[self mw_systemImageFromAssetsImage:conditionImage] withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:imageSize weight:UIImageSymbolWeightBold]]; + UIImage *image = [UIImage systemImageNamed:[self mw_systemImageFromAssetsImage:conditionImage] withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:imageSize] weight:UIImageSymbolWeightBold]]; if (image == nil) { image = [UIImage imageNamed:@"unknown"]; @@ -42,7 +42,7 @@ - (UIImage *)imageFromConditionImage:(NSString *)conditionImage imageSize:(Image } - (NSData *)dataFromConditionImage:(NSString *)conditionImage { - UIImage *image = [self imageFromConditionImage:conditionImage imageSize:ImageSizeSmallGraphic_64]; + UIImage *image = [self imageFromConditionImage:conditionImage imageSize:ImageSizeSmall]; NSData *data = UIImagePNGRepresentation(image); return data; diff --git a/MobileWeather/ImageSize.h b/MobileWeather/ImageSize.h index cdd4b8c..00a5eab 100644 --- a/MobileWeather/ImageSize.h +++ b/MobileWeather/ImageSize.h @@ -8,11 +8,13 @@ @import UIKit; -NS_ASSUME_NONNULL_BEGIN +typedef NS_ENUM(NSUInteger, ImageSize) { + ImageSizeLarge, + ImageSizeSmall +}; -typedef CGFloat ImageSize; +@interface ImageSizeHelper : NSObject -extern ImageSize const ImageSizeLargeGraphic_256; -extern ImageSize const ImageSizeSmallGraphic_64; ++ (CGFloat)floatForImageSize:(ImageSize)imageSize; -NS_ASSUME_NONNULL_END +@end diff --git a/MobileWeather/ImageSize.m b/MobileWeather/ImageSize.m index 7469a17..92923d5 100644 --- a/MobileWeather/ImageSize.m +++ b/MobileWeather/ImageSize.m @@ -8,5 +8,14 @@ #import "ImageSize.h" -ImageSize const ImageSizeLargeGraphic_256 = 256; -ImageSize const ImageSizeSmallGraphic_64 = 64; +@implementation ImageSizeHelper + ++ (CGFloat)floatForImageSize:(ImageSize)imageSize { + if (imageSize == ImageSizeLarge) { + return 256; + } else { + return 64; + } +} + +@end diff --git a/MobileWeather/MainViewController.m b/MobileWeather/MainViewController.m index f3f94be..492fb90 100755 --- a/MobileWeather/MainViewController.m +++ b/MobileWeather/MainViewController.m @@ -105,7 +105,7 @@ - (void)setWeatherConditions:(WeatherConditions *)conditions withLanguage:(Weath self.statusLabel.text = status; self.currentConditionsLabel.text = conditions.conditionTitle; - self.conditionIcon.image = [[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:ImageSizeLargeGraphic_256]; + self.conditionIcon.image = [[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:[ImageSizeHelper floatForImageSize:ImageSizeLarge]]; self.precipitationChanceLabel.text = [conditions.precipitation stringValueForUnit:UnitPercentageDefault shortened:YES]; if ([WeatherDataManager sharedManager].unit == UnitTypeImperial) { diff --git a/SmartDeviceLinkService.m b/SmartDeviceLinkService.m index 16740a1..f5a83d4 100644 --- a/SmartDeviceLinkService.m +++ b/SmartDeviceLinkService.m @@ -282,7 +282,7 @@ - (void)presentForecastInteractionWithList:(NSArray *)forecasts ofType:(MWInfoTy } NSString *precipitationChanceString = [NSString stringWithFormat:@"Precipitation chance: %@", [forecast.precipitationChance stringValueForUnit:UnitPercentageDefault shortened:YES localization:self.localization]]; - SDLChoiceCell *cell = [[SDLChoiceCell alloc] initWithText:[dateFormatShow stringFromDate:forecast.date] secondaryText:precipitationChanceString tertiaryText:nil voiceCommands:[vrCommands copy] artwork:[SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:forecast.conditionIcon imageSize:ImageSizeSmallGraphic_64] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil]; + SDLChoiceCell *cell = [[SDLChoiceCell alloc] initWithText:[dateFormatShow stringFromDate:forecast.date] secondaryText:precipitationChanceString tertiaryText:nil voiceCommands:[vrCommands copy] artwork:[SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:forecast.conditionIcon imageSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil]; [choices addObject:cell]; } @@ -348,7 +348,7 @@ - (void)sendWeatherConditions:(WeatherConditions *)conditions withSpeak:(BOOL)wi self.manager.screenManager.textField3 = [conditions.precipitation stringValueForUnit:percentageType shortened:YES localization:self.localization]; self.manager.screenManager.textField4 = [conditions.windSpeed stringValueForUnit:speedType shortened:YES localization:self.localization]; - self.manager.screenManager.primaryGraphic = [SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:ImageSizeLargeGraphic_256] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] name:conditions.conditionIcon asImageFormat:SDLArtworkImageFormatPNG]; + self.manager.screenManager.primaryGraphic = [SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:[ImageSizeHelper floatForImageSize:ImageSizeLarge]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] name:conditions.conditionIcon asImageFormat:SDLArtworkImageFormatPNG]; [self.manager.screenManager endUpdatesWithCompletionHandler:nil]; @@ -439,7 +439,7 @@ - (void)showForecastAtIndex:(NSUInteger)index fromList:(NSArray *)fo [self.manager.screenManager beginUpdates]; self.manager.screenManager.softButtonObjects = [self buildListSoftButtons:infoType withIndex:index maxCount:forecasts.count]; - self.manager.screenManager.primaryGraphic = [SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:forecast.conditionIcon imageSize:ImageSizeLargeGraphic_256] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG]; + self.manager.screenManager.primaryGraphic = [SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:forecast.conditionIcon imageSize:[ImageSizeHelper floatForImageSize:ImageSizeLarge]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG]; if (isHourlyForecast) { self.manager.screenManager.textField1 = [self.localization stringForKey:@"forecast.hourly.show.field1", dateTimeStringShow, conditionTitleShow]; @@ -614,7 +614,7 @@ - (void)repeatWeatherInformation { - (NSArray *)buildDefaultSoftButtons { __weak typeof(self) weakSelf = self; - SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] image:[[UIImage systemImageNamed:@"sun.max" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] image:[[UIImage systemImageNamed:@"sun.max" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; SDLSoftButtonObject *currentWeatherObject = [[SDLSoftButtonObject alloc] initWithName:@"CurrentWeather" state:currentWeatherState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -623,7 +623,7 @@ - (void)repeatWeatherInformation { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES]; }]; - SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] image:[[UIImage systemImageNamed:@"calendar" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] image:[[UIImage systemImageNamed:@"calendar" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; SDLSoftButtonObject *dailyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"DailyForecast" state:dailyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -632,7 +632,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] image:[[UIImage systemImageNamed:@"clock" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] image:[[UIImage systemImageNamed:@"clock" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; SDLSoftButtonObject *hourlyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"HourlyForecast" state:hourlyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -641,7 +641,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] image:[[UIImage systemImageNamed:@"exclamationmark.triangle" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] image:[[UIImage systemImageNamed:@"exclamationmark.triangle" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; SDLSoftButtonObject *alertsObject = [[SDLSoftButtonObject alloc] initWithName:@"Alerts" state:alertsState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -721,19 +721,19 @@ - (void)repeatWeatherInformation { - (NSArray *)weatherMenuCells { __weak typeof(self) weakSelf = self; - SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"sun.max" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"sun.max" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES]; }]; - SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"calendar" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"calendar" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"clock" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"clock" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"exclamationmark.triangle" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:ImageSizeSmallGraphic_64 weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"exclamationmark.triangle" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendAlertList:[WeatherDataManager sharedManager].alerts withSpeak:YES]; }]; From 9a5bee2e0ead31763f0c3b312d6bcd92a601d2ba Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Thu, 1 Jul 2021 17:32:13 -0400 Subject: [PATCH 07/15] ImageProcessor update artworkFromConditionImage --- MobileWeather/ImageProcessor.h | 3 +++ MobileWeather/ImageProcessor.m | 4 ++++ SmartDeviceLinkService.m | 6 +++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/MobileWeather/ImageProcessor.h b/MobileWeather/ImageProcessor.h index 1a8f96c..47a2210 100644 --- a/MobileWeather/ImageProcessor.h +++ b/MobileWeather/ImageProcessor.h @@ -6,6 +6,7 @@ // @import UIKit; +@import SmartDeviceLink; #include "ImageSize.h" @interface ImageProcessor : NSObject @@ -14,6 +15,8 @@ - (UIImage *)imageFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize; +- (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize; + - (NSData *)dataFromConditionImage:(NSString *)conditionImage; @end diff --git a/MobileWeather/ImageProcessor.m b/MobileWeather/ImageProcessor.m index fe0e1b4..1ea2613 100644 --- a/MobileWeather/ImageProcessor.m +++ b/MobileWeather/ImageProcessor.m @@ -31,6 +31,10 @@ - (instancetype)init { return self; } +- (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize { + return [SDLArtwork artworkWithImage:[[self imageFromConditionImage:conditionImage imageSize:imageSize] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG]; +} + - (UIImage *)imageFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize { UIImage *image = [UIImage systemImageNamed:[self mw_systemImageFromAssetsImage:conditionImage] withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:imageSize] weight:UIImageSymbolWeightBold]]; diff --git a/SmartDeviceLinkService.m b/SmartDeviceLinkService.m index f5a83d4..9c87a9a 100644 --- a/SmartDeviceLinkService.m +++ b/SmartDeviceLinkService.m @@ -282,7 +282,7 @@ - (void)presentForecastInteractionWithList:(NSArray *)forecasts ofType:(MWInfoTy } NSString *precipitationChanceString = [NSString stringWithFormat:@"Precipitation chance: %@", [forecast.precipitationChance stringValueForUnit:UnitPercentageDefault shortened:YES localization:self.localization]]; - SDLChoiceCell *cell = [[SDLChoiceCell alloc] initWithText:[dateFormatShow stringFromDate:forecast.date] secondaryText:precipitationChanceString tertiaryText:nil voiceCommands:[vrCommands copy] artwork:[SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:forecast.conditionIcon imageSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil]; + SDLChoiceCell *cell = [[SDLChoiceCell alloc] initWithText:[dateFormatShow stringFromDate:forecast.date] secondaryText:precipitationChanceString tertiaryText:nil voiceCommands:[vrCommands copy] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:forecast.conditionIcon imageSize:ImageSizeSmall] secondaryArtwork:nil]; [choices addObject:cell]; } @@ -348,7 +348,7 @@ - (void)sendWeatherConditions:(WeatherConditions *)conditions withSpeak:(BOOL)wi self.manager.screenManager.textField3 = [conditions.precipitation stringValueForUnit:percentageType shortened:YES localization:self.localization]; self.manager.screenManager.textField4 = [conditions.windSpeed stringValueForUnit:speedType shortened:YES localization:self.localization]; - self.manager.screenManager.primaryGraphic = [SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:[ImageSizeHelper floatForImageSize:ImageSizeLarge]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] name:conditions.conditionIcon asImageFormat:SDLArtworkImageFormatPNG]; + self.manager.screenManager.primaryGraphic = [[ImageProcessor sharedProcessor] artworkFromConditionImage:conditions.conditionIcon imageSize:ImageSizeLarge]; [self.manager.screenManager endUpdatesWithCompletionHandler:nil]; @@ -439,7 +439,7 @@ - (void)showForecastAtIndex:(NSUInteger)index fromList:(NSArray *)fo [self.manager.screenManager beginUpdates]; self.manager.screenManager.softButtonObjects = [self buildListSoftButtons:infoType withIndex:index maxCount:forecasts.count]; - self.manager.screenManager.primaryGraphic = [SDLArtwork artworkWithImage:[[[ImageProcessor sharedProcessor] imageFromConditionImage:forecast.conditionIcon imageSize:[ImageSizeHelper floatForImageSize:ImageSizeLarge]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG]; + self.manager.screenManager.primaryGraphic = [[ImageProcessor sharedProcessor] artworkFromConditionImage:forecast.conditionIcon imageSize:ImageSizeLarge]; if (isHourlyForecast) { self.manager.screenManager.textField1 = [self.localization stringForKey:@"forecast.hourly.show.field1", dateTimeStringShow, conditionTitleShow]; From a91132db75ae31a537d976764cd992f87c357de7 Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Thu, 8 Jul 2021 16:12:39 -0400 Subject: [PATCH 08/15] ImageProcessor update artworkFromConditionImage update --- MobileWeather/ImageProcessor.h | 2 +- MobileWeather/ImageProcessor.m | 18 ++++++++++++------ SmartDeviceLinkService.m | 24 ++++++++++++------------ 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/MobileWeather/ImageProcessor.h b/MobileWeather/ImageProcessor.h index 47a2210..aea7dc8 100644 --- a/MobileWeather/ImageProcessor.h +++ b/MobileWeather/ImageProcessor.h @@ -15,7 +15,7 @@ - (UIImage *)imageFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize; -- (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize; +- (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize isPersistent:(BOOL)isPersistent isTemplate:(BOOL)isTemplate; - (NSData *)dataFromConditionImage:(NSString *)conditionImage; diff --git a/MobileWeather/ImageProcessor.m b/MobileWeather/ImageProcessor.m index 1ea2613..85db353 100644 --- a/MobileWeather/ImageProcessor.m +++ b/MobileWeather/ImageProcessor.m @@ -31,20 +31,26 @@ - (instancetype)init { return self; } -- (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize { - return [SDLArtwork artworkWithImage:[[self imageFromConditionImage:conditionImage imageSize:imageSize] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG]; -} - - (UIImage *)imageFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize { - UIImage *image = [UIImage systemImageNamed:[self mw_systemImageFromAssetsImage:conditionImage] withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:imageSize] weight:UIImageSymbolWeightBold]]; + UIImage *image = [UIImage systemImageNamed:[self mw_systemImageFromAssetsImage:conditionImage] withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:imageSize] weight:UIImageSymbolWeightMedium]]; if (image == nil) { image = [UIImage imageNamed:@"unknown"]; } - + return image; } +- (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize isPersistent:(BOOL)isPersistent isTemplate:(BOOL)isTemplate { + SDLArtwork *artwork; + if (isTemplate) { + artwork = [[SDLArtwork alloc] initWithImage:[[self imageFromConditionImage:conditionImage imageSize:imageSize] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:isPersistent asImageFormat:SDLArtworkImageFormatPNG]; + } else { + artwork = [[SDLArtwork alloc] initWithImage:[self imageFromConditionImage:conditionImage imageSize:imageSize] persistent:isPersistent asImageFormat:SDLArtworkImageFormatPNG]; + } + return artwork; +} + - (NSData *)dataFromConditionImage:(NSString *)conditionImage { UIImage *image = [self imageFromConditionImage:conditionImage imageSize:ImageSizeSmall]; NSData *data = UIImagePNGRepresentation(image); diff --git a/SmartDeviceLinkService.m b/SmartDeviceLinkService.m index 058c436..8bc93ec 100644 --- a/SmartDeviceLinkService.m +++ b/SmartDeviceLinkService.m @@ -79,7 +79,7 @@ - (void)start { // Change which config you need based on if you want to connect to a TDK (default) or a wifi based emulator (debug) // SDLLifecycleConfiguration *lifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:@"MobileWeather" fullAppId:@"330533107"]; - SDLLifecycleConfiguration *lifecycleConfig = [SDLLifecycleConfiguration debugConfigurationWithAppName:@"MobileWeather" fullAppId:@"330533107" ipAddress:@"m.sdl.tools" port:12957]; + SDLLifecycleConfiguration *lifecycleConfig = [SDLLifecycleConfiguration debugConfigurationWithAppName:@"MobileWeather" fullAppId:@"330533107" ipAddress:@"192.168.45.2" port:12345]; lifecycleConfig.ttsName = [SDLTTSChunk textChunksFromString:NSLocalizedString(@"app.tts-name", nil)]; lifecycleConfig.voiceRecognitionCommandNames = @[NSLocalizedString(@"app.vr-synonym", nil)]; lifecycleConfig.appIcon = [SDLArtwork persistentArtworkWithImage:[UIImage imageNamed:@"sdl-appicon"] name:@"AppIcon" asImageFormat:SDLArtworkImageFormatPNG]; @@ -282,7 +282,7 @@ - (void)presentForecastInteractionWithList:(NSArray *)forecasts ofType:(MWInfoTy } NSString *precipitationChanceString = [NSString stringWithFormat:@"Precipitation chance: %@", [forecast.precipitationChance stringValueForUnit:UnitPercentageDefault shortened:YES localization:self.localization]]; - SDLChoiceCell *cell = [[SDLChoiceCell alloc] initWithText:[dateFormatShow stringFromDate:forecast.date] secondaryText:precipitationChanceString tertiaryText:nil voiceCommands:[vrCommands copy] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:forecast.conditionIcon imageSize:ImageSizeSmall] secondaryArtwork:nil]; + SDLChoiceCell *cell = [[SDLChoiceCell alloc] initWithText:[dateFormatShow stringFromDate:forecast.date] secondaryText:precipitationChanceString tertiaryText:nil voiceCommands:[vrCommands copy] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:forecast.conditionIcon imageSize:ImageSizeSmall isPersistent:NO isTemplate:YES] secondaryArtwork:nil]; [choices addObject:cell]; } @@ -331,7 +331,7 @@ - (void)sendWeatherConditions:(WeatherConditions *)conditions withSpeak:(BOOL)wi self.manager.screenManager.textField3 = [conditions.precipitation stringValueForUnit:percentageType shortened:YES localization:self.localization]; self.manager.screenManager.textField4 = [conditions.windSpeed stringValueForUnit:speedType shortened:YES localization:self.localization]; - self.manager.screenManager.primaryGraphic = [[ImageProcessor sharedProcessor] artworkFromConditionImage:conditions.conditionIcon imageSize:ImageSizeLarge]; + self.manager.screenManager.primaryGraphic = [[ImageProcessor sharedProcessor] artworkFromConditionImage:conditions.conditionIcon imageSize:ImageSizeLarge isPersistent:NO isTemplate:YES]; [self.manager.screenManager endUpdatesWithCompletionHandler:nil]; @@ -430,7 +430,7 @@ - (void)showForecastAtIndex:(NSUInteger)index fromList:(NSArray *)fo [self.manager.screenManager beginUpdates]; self.manager.screenManager.softButtonObjects = [self buildListSoftButtons:infoType withIndex:index maxCount:forecasts.count]; - self.manager.screenManager.primaryGraphic = [[ImageProcessor sharedProcessor] artworkFromConditionImage:forecast.conditionIcon imageSize:ImageSizeLarge]; + self.manager.screenManager.primaryGraphic = [[ImageProcessor sharedProcessor] artworkFromConditionImage:forecast.conditionIcon imageSize:ImageSizeLarge isPersistent:NO isTemplate:YES]; if (isHourlyForecast) { self.manager.screenManager.textField1 = [self.localization stringForKey:@"forecast.hourly.show.field1", dateTimeStringShow, conditionTitleShow]; @@ -605,7 +605,7 @@ - (void)repeatWeatherInformation { - (NSArray *)buildDefaultSoftButtons { __weak typeof(self) weakSelf = self; - SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] image:[[UIImage systemImageNamed:@"sun.max" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"clear-day" imageSize:ImageSizeSmall isPersistent:NO isTemplate:YES]]; SDLSoftButtonObject *currentWeatherObject = [[SDLSoftButtonObject alloc] initWithName:@"CurrentWeather" state:currentWeatherState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -614,7 +614,7 @@ - (void)repeatWeatherInformation { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES firstWindow:NO]; }]; - SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] image:[[UIImage systemImageNamed:@"calendar" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-day" imageSize:ImageSizeSmall isPersistent:NO isTemplate:YES]]; SDLSoftButtonObject *dailyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"DailyForecast" state:dailyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -623,7 +623,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] image:[[UIImage systemImageNamed:@"clock" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-time" imageSize:ImageSizeSmall isPersistent:NO isTemplate:YES]]; SDLSoftButtonObject *hourlyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"HourlyForecast" state:hourlyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -632,7 +632,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] image:[[UIImage systemImageNamed:@"exclamationmark.triangle" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; + SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-alert" imageSize:ImageSizeSmall isPersistent:NO isTemplate:YES]]; SDLSoftButtonObject *alertsObject = [[SDLSoftButtonObject alloc] initWithName:@"Alerts" state:alertsState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -712,19 +712,19 @@ - (void)repeatWeatherInformation { - (NSArray *)weatherMenuCells { __weak typeof(self) weakSelf = self; - SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"sun.max" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"clear-day" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES firstWindow:NO]; }]; - SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"calendar" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-day" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"clock" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-time" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[SDLArtwork alloc] initWithImage:[[UIImage systemImageNamed:@"exclamationmark.triangle" withConfiguration:[UIImageSymbolConfiguration configurationWithPointSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall] weight:UIImageSymbolWeightBold]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:YES asImageFormat:SDLArtworkImageFormatPNG] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-alert" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendAlertList:[WeatherDataManager sharedManager].alerts withSpeak:YES]; }]; From ce9d4589f1e7c5a0a3200383ef7e18d548d9becd Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Fri, 16 Jul 2021 11:09:45 -0400 Subject: [PATCH 09/15] Comments review --- MobileWeather/ImageProcessor.m | 7 ++----- MobileWeather/MainViewController.m | 2 +- SmartDeviceLinkService.m | 12 ++++++------ 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/MobileWeather/ImageProcessor.m b/MobileWeather/ImageProcessor.m index 85db353..5f2fb43 100644 --- a/MobileWeather/ImageProcessor.m +++ b/MobileWeather/ImageProcessor.m @@ -43,11 +43,8 @@ - (UIImage *)imageFromConditionImage:(NSString *)conditionImage imageSize:(Image - (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize isPersistent:(BOOL)isPersistent isTemplate:(BOOL)isTemplate { SDLArtwork *artwork; - if (isTemplate) { - artwork = [[SDLArtwork alloc] initWithImage:[[self imageFromConditionImage:conditionImage imageSize:imageSize] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:isPersistent asImageFormat:SDLArtworkImageFormatPNG]; - } else { - artwork = [[SDLArtwork alloc] initWithImage:[self imageFromConditionImage:conditionImage imageSize:imageSize] persistent:isPersistent asImageFormat:SDLArtworkImageFormatPNG]; - } + artwork = [[SDLArtwork alloc] initWithImage:[[self imageFromConditionImage:conditionImage imageSize:imageSize] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:isPersistent asImageFormat:SDLArtworkImageFormatPNG]; + return artwork; } diff --git a/MobileWeather/MainViewController.m b/MobileWeather/MainViewController.m index 492fb90..a50aedf 100755 --- a/MobileWeather/MainViewController.m +++ b/MobileWeather/MainViewController.m @@ -105,7 +105,7 @@ - (void)setWeatherConditions:(WeatherConditions *)conditions withLanguage:(Weath self.statusLabel.text = status; self.currentConditionsLabel.text = conditions.conditionTitle; - self.conditionIcon.image = [[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:[ImageSizeHelper floatForImageSize:ImageSizeLarge]]; + self.conditionIcon.image = [[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall]]; self.precipitationChanceLabel.text = [conditions.precipitation stringValueForUnit:UnitPercentageDefault shortened:YES]; if ([WeatherDataManager sharedManager].unit == UnitTypeImperial) { diff --git a/SmartDeviceLinkService.m b/SmartDeviceLinkService.m index 8bc93ec..ffe4265 100644 --- a/SmartDeviceLinkService.m +++ b/SmartDeviceLinkService.m @@ -78,8 +78,8 @@ - (void)start { self.localization = [Localization defaultLocalization]; // Change which config you need based on if you want to connect to a TDK (default) or a wifi based emulator (debug) -// SDLLifecycleConfiguration *lifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:@"MobileWeather" fullAppId:@"330533107"]; - SDLLifecycleConfiguration *lifecycleConfig = [SDLLifecycleConfiguration debugConfigurationWithAppName:@"MobileWeather" fullAppId:@"330533107" ipAddress:@"192.168.45.2" port:12345]; + SDLLifecycleConfiguration *lifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:@"MobileWeather" fullAppId:@"330533107"]; +// SDLLifecycleConfiguration *lifecycleConfig = [SDLLifecycleConfiguration debugConfigurationWithAppName:@"MobileWeather" fullAppId:@"330533107" ipAddress:@"192.168.45.2" port:12345]; lifecycleConfig.ttsName = [SDLTTSChunk textChunksFromString:NSLocalizedString(@"app.tts-name", nil)]; lifecycleConfig.voiceRecognitionCommandNames = @[NSLocalizedString(@"app.vr-synonym", nil)]; lifecycleConfig.appIcon = [SDLArtwork persistentArtworkWithImage:[UIImage imageNamed:@"sdl-appicon"] name:@"AppIcon" asImageFormat:SDLArtworkImageFormatPNG]; @@ -605,7 +605,7 @@ - (void)repeatWeatherInformation { - (NSArray *)buildDefaultSoftButtons { __weak typeof(self) weakSelf = self; - SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"clear-day" imageSize:ImageSizeSmall isPersistent:NO isTemplate:YES]]; + SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"clear-day" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES]]; SDLSoftButtonObject *currentWeatherObject = [[SDLSoftButtonObject alloc] initWithName:@"CurrentWeather" state:currentWeatherState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -614,7 +614,7 @@ - (void)repeatWeatherInformation { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES firstWindow:NO]; }]; - SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-day" imageSize:ImageSizeSmall isPersistent:NO isTemplate:YES]]; + SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-day" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES]]; SDLSoftButtonObject *dailyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"DailyForecast" state:dailyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -623,7 +623,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-time" imageSize:ImageSizeSmall isPersistent:NO isTemplate:YES]]; + SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-time" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES]]; SDLSoftButtonObject *hourlyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"HourlyForecast" state:hourlyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -632,7 +632,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-alert" imageSize:ImageSizeSmall isPersistent:NO isTemplate:YES]]; + SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-alert" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES]]; SDLSoftButtonObject *alertsObject = [[SDLSoftButtonObject alloc] initWithName:@"Alerts" state:alertsState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; From 44e8c6a346aa267954b51174caaa8951864d3a81 Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Tue, 27 Jul 2021 11:33:16 -0400 Subject: [PATCH 10/15] Image processor update --- MobileWeather/ImageProcessor.h | 2 +- MobileWeather/ImageProcessor.m | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/MobileWeather/ImageProcessor.h b/MobileWeather/ImageProcessor.h index aea7dc8..351d10e 100644 --- a/MobileWeather/ImageProcessor.h +++ b/MobileWeather/ImageProcessor.h @@ -15,7 +15,7 @@ - (UIImage *)imageFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize; -- (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize isPersistent:(BOOL)isPersistent isTemplate:(BOOL)isTemplate; +- (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize isPersistent:(BOOL)isPersistent; - (NSData *)dataFromConditionImage:(NSString *)conditionImage; diff --git a/MobileWeather/ImageProcessor.m b/MobileWeather/ImageProcessor.m index 5f2fb43..b3bb98c 100644 --- a/MobileWeather/ImageProcessor.m +++ b/MobileWeather/ImageProcessor.m @@ -41,11 +41,9 @@ - (UIImage *)imageFromConditionImage:(NSString *)conditionImage imageSize:(Image return image; } -- (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize isPersistent:(BOOL)isPersistent isTemplate:(BOOL)isTemplate { - SDLArtwork *artwork; - artwork = [[SDLArtwork alloc] initWithImage:[[self imageFromConditionImage:conditionImage imageSize:imageSize] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:isPersistent asImageFormat:SDLArtworkImageFormatPNG]; - - return artwork; +- (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize isPersistent:(BOOL)isPersistent { + + return [[SDLArtwork alloc] initWithImage:[[self imageFromConditionImage:conditionImage imageSize:imageSize] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:isPersistent asImageFormat:SDLArtworkImageFormatPNG]; } - (NSData *)dataFromConditionImage:(NSString *)conditionImage { From a22f1d86011cdf54ba1fb3418c3eb77e1d96180a Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Tue, 27 Jul 2021 11:34:00 -0400 Subject: [PATCH 11/15] artworkFromConditionImage update --- MobileWeather/MainViewController.m | 4 +++- SmartDeviceLinkService.m | 22 +++++++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/MobileWeather/MainViewController.m b/MobileWeather/MainViewController.m index a50aedf..d0540ea 100755 --- a/MobileWeather/MainViewController.m +++ b/MobileWeather/MainViewController.m @@ -48,6 +48,8 @@ - (void)viewDidLoad { self.versionLabel.text = [NSString stringWithFormat:@"%@ (%@)", bundleAppVersion, bundleBuildVersion]; + self.conditionIcon.contentMode = UIViewContentModeScaleAspectFill; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleLocationUpdate:) name:MobileWeatherLocationUpdateNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleWeatherUpdate:) name:MobileWeatherDataUpdatedNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUnitUpdate:) name:MobileWeatherUnitChangedNotification object:nil]; @@ -105,7 +107,7 @@ - (void)setWeatherConditions:(WeatherConditions *)conditions withLanguage:(Weath self.statusLabel.text = status; self.currentConditionsLabel.text = conditions.conditionTitle; - self.conditionIcon.image = [[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:[ImageSizeHelper floatForImageSize:ImageSizeSmall]]; + self.conditionIcon.image = [[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:ImageSizeSmall]; self.precipitationChanceLabel.text = [conditions.precipitation stringValueForUnit:UnitPercentageDefault shortened:YES]; if ([WeatherDataManager sharedManager].unit == UnitTypeImperial) { diff --git a/SmartDeviceLinkService.m b/SmartDeviceLinkService.m index ffe4265..7c77560 100644 --- a/SmartDeviceLinkService.m +++ b/SmartDeviceLinkService.m @@ -282,7 +282,7 @@ - (void)presentForecastInteractionWithList:(NSArray *)forecasts ofType:(MWInfoTy } NSString *precipitationChanceString = [NSString stringWithFormat:@"Precipitation chance: %@", [forecast.precipitationChance stringValueForUnit:UnitPercentageDefault shortened:YES localization:self.localization]]; - SDLChoiceCell *cell = [[SDLChoiceCell alloc] initWithText:[dateFormatShow stringFromDate:forecast.date] secondaryText:precipitationChanceString tertiaryText:nil voiceCommands:[vrCommands copy] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:forecast.conditionIcon imageSize:ImageSizeSmall isPersistent:NO isTemplate:YES] secondaryArtwork:nil]; + SDLChoiceCell *cell = [[SDLChoiceCell alloc] initWithText:[dateFormatShow stringFromDate:forecast.date] secondaryText:precipitationChanceString tertiaryText:nil voiceCommands:[vrCommands copy] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:forecast.conditionIcon imageSize:ImageSizeSmall isPersistent:NO] secondaryArtwork:nil]; [choices addObject:cell]; } @@ -331,7 +331,7 @@ - (void)sendWeatherConditions:(WeatherConditions *)conditions withSpeak:(BOOL)wi self.manager.screenManager.textField3 = [conditions.precipitation stringValueForUnit:percentageType shortened:YES localization:self.localization]; self.manager.screenManager.textField4 = [conditions.windSpeed stringValueForUnit:speedType shortened:YES localization:self.localization]; - self.manager.screenManager.primaryGraphic = [[ImageProcessor sharedProcessor] artworkFromConditionImage:conditions.conditionIcon imageSize:ImageSizeLarge isPersistent:NO isTemplate:YES]; + self.manager.screenManager.primaryGraphic = [[ImageProcessor sharedProcessor] artworkFromConditionImage:conditions.conditionIcon imageSize:ImageSizeLarge isPersistent:NO]; [self.manager.screenManager endUpdatesWithCompletionHandler:nil]; @@ -430,7 +430,7 @@ - (void)showForecastAtIndex:(NSUInteger)index fromList:(NSArray *)fo [self.manager.screenManager beginUpdates]; self.manager.screenManager.softButtonObjects = [self buildListSoftButtons:infoType withIndex:index maxCount:forecasts.count]; - self.manager.screenManager.primaryGraphic = [[ImageProcessor sharedProcessor] artworkFromConditionImage:forecast.conditionIcon imageSize:ImageSizeLarge isPersistent:NO isTemplate:YES]; + self.manager.screenManager.primaryGraphic = [[ImageProcessor sharedProcessor] artworkFromConditionImage:forecast.conditionIcon imageSize:ImageSizeLarge isPersistent:NO]; if (isHourlyForecast) { self.manager.screenManager.textField1 = [self.localization stringForKey:@"forecast.hourly.show.field1", dateTimeStringShow, conditionTitleShow]; @@ -605,7 +605,7 @@ - (void)repeatWeatherInformation { - (NSArray *)buildDefaultSoftButtons { __weak typeof(self) weakSelf = self; - SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"clear-day" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES]]; + SDLSoftButtonState *currentWeatherState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.current"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"clear-day" imageSize:ImageSizeSmall isPersistent:YES]]; SDLSoftButtonObject *currentWeatherObject = [[SDLSoftButtonObject alloc] initWithName:@"CurrentWeather" state:currentWeatherState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -614,7 +614,7 @@ - (void)repeatWeatherInformation { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES firstWindow:NO]; }]; - SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-day" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES]]; + SDLSoftButtonState *dailyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.daily"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-day" imageSize:ImageSizeSmall isPersistent:YES]]; SDLSoftButtonObject *dailyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"DailyForecast" state:dailyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -623,7 +623,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-time" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES]]; + SDLSoftButtonState *hourlyForecastState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.hourly"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-time" imageSize:ImageSizeSmall isPersistent:YES]]; SDLSoftButtonObject *hourlyForecastObject = [[SDLSoftButtonObject alloc] initWithName:@"HourlyForecast" state:hourlyForecastState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -632,7 +632,7 @@ - (void)repeatWeatherInformation { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-alert" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES]]; + SDLSoftButtonState *alertsState = [[SDLSoftButtonState alloc] initWithStateName:@"state" text:self.localization[@"sb.alerts"] artwork:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-alert" imageSize:ImageSizeSmall isPersistent:YES]]; SDLSoftButtonObject *alertsObject = [[SDLSoftButtonObject alloc] initWithName:@"Alerts" state:alertsState handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (!buttonPress) { return; @@ -712,19 +712,19 @@ - (void)repeatWeatherInformation { - (NSArray *)weatherMenuCells { __weak typeof(self) weakSelf = self; - SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"clear-day" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showWeatherConditions = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.current-conditions"] secondaryText:nil tertiaryText:nil icon:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"clear-day" imageSize:ImageSizeSmall isPersistent:YES] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.current"],self.localization[@"vr.conditions"], self.localization[@"vr.current-conditions"], self.localization[@"vr.show-conditions"], self.localization[@"vr.show-current-conditions"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendWeatherConditions:[WeatherDataManager sharedManager].weatherConditions withSpeak:YES firstWindow:NO]; }]; - SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-day" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showDailyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.daily-forecast"] secondaryText:nil tertiaryText:nil icon:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-day" imageSize:ImageSizeSmall isPersistent:YES] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.daily"], self.localization[@"vr.daily-forecast"], self.localization[@"vr.show-daily-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].dailyForecast infoType:MWInfoTypeDailyForecast withSpeak:YES]; }]; - SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-time" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showHourlyForecast = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.hourly-forecast"] secondaryText:nil tertiaryText:nil icon:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-time" imageSize:ImageSizeSmall isPersistent:YES] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.hourly"], self.localization[@"vr.hourly-forecast"], self.localization[@"vr.show-hourly-forecast"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendForecastList:[WeatherDataManager sharedManager].hourlyForecast infoType:MWInfoTypeHourlyForecast withSpeak:YES]; }]; - SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-alert" imageSize:ImageSizeSmall isPersistent:YES isTemplate:YES] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { + SDLMenuCell *showAlerts = [[SDLMenuCell alloc] initWithTitle:self.localization[@"cmd.alerts"] secondaryText:nil tertiaryText:nil icon:[[ImageProcessor sharedProcessor] artworkFromConditionImage:@"menu-alert" imageSize:ImageSizeSmall isPersistent:YES] secondaryArtwork:nil voiceCommands:@[self.localization[@"vr.alerts"], self.localization[@"vr.show-alerts"]] handler:^(SDLTriggerSource _Nonnull triggerSource) { [weakSelf sendAlertList:[WeatherDataManager sharedManager].alerts withSpeak:YES]; }]; From 465d5f217523f8a8e505984251d472b8dec67380 Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Tue, 27 Jul 2021 11:35:37 -0400 Subject: [PATCH 12/15] main.storyboard update Updated the build deployment target for storyboard to match the project based on warning in xcode. --- MobileWeather/Main.storyboard | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/MobileWeather/Main.storyboard b/MobileWeather/Main.storyboard index 7e8666f..9c812ef 100755 --- a/MobileWeather/Main.storyboard +++ b/MobileWeather/Main.storyboard @@ -1,13 +1,9 @@ - - - - + + - - - - + + @@ -21,7 +17,7 @@ @@ -36,24 +32,24 @@ - + - + - + @@ -70,15 +66,15 @@ - + - + @@ -87,6 +83,7 @@ + @@ -112,7 +109,6 @@ - From acbfe13188849d1d365da5adb13eee31985ff6ec Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Tue, 17 Aug 2021 15:40:20 -0400 Subject: [PATCH 13/15] conditionImage content mode update --- MobileWeather/Main.storyboard | 2 +- MobileWeather/MainViewController.m | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/MobileWeather/Main.storyboard b/MobileWeather/Main.storyboard index 9c812ef..9afd8f0 100755 --- a/MobileWeather/Main.storyboard +++ b/MobileWeather/Main.storyboard @@ -36,7 +36,7 @@ - + diff --git a/MobileWeather/MainViewController.m b/MobileWeather/MainViewController.m index d0540ea..79ba1b9 100755 --- a/MobileWeather/MainViewController.m +++ b/MobileWeather/MainViewController.m @@ -48,8 +48,6 @@ - (void)viewDidLoad { self.versionLabel.text = [NSString stringWithFormat:@"%@ (%@)", bundleAppVersion, bundleBuildVersion]; - self.conditionIcon.contentMode = UIViewContentModeScaleAspectFill; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleLocationUpdate:) name:MobileWeatherLocationUpdateNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleWeatherUpdate:) name:MobileWeatherDataUpdatedNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUnitUpdate:) name:MobileWeatherUnitChangedNotification object:nil]; From fdedb5a03c3538b709f301e21c60ef1c2aecde14 Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Tue, 17 Aug 2021 15:40:51 -0400 Subject: [PATCH 14/15] unused method update --- MobileWeather/ImageProcessor.h | 2 -- MobileWeather/ImageProcessor.m | 8 -------- 2 files changed, 10 deletions(-) diff --git a/MobileWeather/ImageProcessor.h b/MobileWeather/ImageProcessor.h index 351d10e..1990a64 100644 --- a/MobileWeather/ImageProcessor.h +++ b/MobileWeather/ImageProcessor.h @@ -17,6 +17,4 @@ - (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize isPersistent:(BOOL)isPersistent; -- (NSData *)dataFromConditionImage:(NSString *)conditionImage; - @end diff --git a/MobileWeather/ImageProcessor.m b/MobileWeather/ImageProcessor.m index b3bb98c..ff9866f 100644 --- a/MobileWeather/ImageProcessor.m +++ b/MobileWeather/ImageProcessor.m @@ -42,17 +42,9 @@ - (UIImage *)imageFromConditionImage:(NSString *)conditionImage imageSize:(Image } - (SDLArtwork *)artworkFromConditionImage:(NSString *)conditionImage imageSize:(ImageSize)imageSize isPersistent:(BOOL)isPersistent { - return [[SDLArtwork alloc] initWithImage:[[self imageFromConditionImage:conditionImage imageSize:imageSize] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] persistent:isPersistent asImageFormat:SDLArtworkImageFormatPNG]; } -- (NSData *)dataFromConditionImage:(NSString *)conditionImage { - UIImage *image = [self imageFromConditionImage:conditionImage imageSize:ImageSizeSmall]; - NSData *data = UIImagePNGRepresentation(image); - - return data; -} - - (NSString *)mw_systemImageFromAssetsImage:(NSString *)imageName { NSString *newImageName = imageName; if ([imageName isEqualToString:@"chancerain"]) { From 4d185a434b1e7d809cbeb277f5db2f4c49f78193 Mon Sep 17 00:00:00 2001 From: Frank Elias Date: Tue, 17 Aug 2021 15:52:30 -0400 Subject: [PATCH 15/15] conditionIcon size edit --- MobileWeather/MainViewController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MobileWeather/MainViewController.m b/MobileWeather/MainViewController.m index 79ba1b9..6cf5c8d 100755 --- a/MobileWeather/MainViewController.m +++ b/MobileWeather/MainViewController.m @@ -105,7 +105,7 @@ - (void)setWeatherConditions:(WeatherConditions *)conditions withLanguage:(Weath self.statusLabel.text = status; self.currentConditionsLabel.text = conditions.conditionTitle; - self.conditionIcon.image = [[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:ImageSizeSmall]; + self.conditionIcon.image = [[ImageProcessor sharedProcessor] imageFromConditionImage:conditions.conditionIcon imageSize:ImageSizeLarge]; self.precipitationChanceLabel.text = [conditions.precipitation stringValueForUnit:UnitPercentageDefault shortened:YES]; if ([WeatherDataManager sharedManager].unit == UnitTypeImperial) {