From 65fbaa2b7b4798d30b6b73e80bbc6c19add2f1ce Mon Sep 17 00:00:00 2001 From: Ilya Grechuhin Date: Fri, 2 Dec 2016 10:02:37 +0300 Subject: [PATCH] [toast] [ios] Added toast. --- iphone/Maps/Classes/Common.h | 11 ++ .../Components/MWMMailViewController.mm | 4 + .../Components/MWMNavigationController.mm | 8 +- .../AlertController/MWMAlertViewController.mm | 11 +- .../Maps/Classes/CustomAlert/Toast/MWMToast.h | 8 + .../Classes/CustomAlert/Toast/MWMToast.mm | 178 ++++++++++++++++++ .../Classes/CustomAlert/Toast/MWMToast.xib | 51 +++++ .../BottomMenu/MWMBottomMenuViewController.mm | 3 + .../MWMMapViewControlsManager.mm | 4 + .../Cuisine/MWMCuisineEditorViewController.mm | 9 +- .../MWMObjectsCategorySelectorController.mm | 10 +- .../MWMBaseMapDownloaderViewController.mm | 5 +- iphone/Maps/Maps.xcodeproj/project.pbxproj | 26 +++ iphone/Maps/UIColor+MapsMeColor.h | 1 + iphone/Maps/UIColor+MapsMeColor.mm | 12 +- 15 files changed, 325 insertions(+), 16 deletions(-) create mode 100644 iphone/Maps/Classes/CustomAlert/Toast/MWMToast.h create mode 100644 iphone/Maps/Classes/CustomAlert/Toast/MWMToast.mm create mode 100644 iphone/Maps/Classes/CustomAlert/Toast/MWMToast.xib diff --git a/iphone/Maps/Classes/Common.h b/iphone/Maps/Classes/Common.h index fa47fd513d..26278628da 100644 --- a/iphone/Maps/Classes/Common.h +++ b/iphone/Maps/Classes/Common.h @@ -96,3 +96,14 @@ static inline void runAsyncOnMainQueue(dispatch_block_t block) { dispatch_async(dispatch_get_main_queue(), block); } + +static inline UIViewController * topViewController() +{ + UIWindow * window = UIApplication.sharedApplication.delegate.window; + UIViewController * rootViewController = window.rootViewController; + NSCAssert([rootViewController isKindOfClass:[UINavigationController class]], + @"Invalid rootViewController class"); + UINavigationController * navigationController = + static_cast(rootViewController); + return navigationController.topViewController; +} diff --git a/iphone/Maps/Classes/Components/MWMMailViewController.mm b/iphone/Maps/Classes/Components/MWMMailViewController.mm index 8dd5365a83..2154a12a26 100644 --- a/iphone/Maps/Classes/Components/MWMMailViewController.mm +++ b/iphone/Maps/Classes/Components/MWMMailViewController.mm @@ -1,4 +1,5 @@ #import "MWMMailViewController.h" +#import "MWMToast.h" #import "UIColor+MapsMeColor.h" @implementation MWMMailViewController @@ -11,6 +12,9 @@ - (UIStatusBarStyle)preferredStatusBarStyle { + if ([MWMToast affectsStatusBar]) + return [MWMToast preferredStatusBarStyle]; + return [UIColor isNightMode] ? UIStatusBarStyleLightContent : UIStatusBarStyleDefault; } diff --git a/iphone/Maps/Classes/Components/MWMNavigationController.mm b/iphone/Maps/Classes/Components/MWMNavigationController.mm index 5b4aa85e30..5281b47eba 100644 --- a/iphone/Maps/Classes/Components/MWMNavigationController.mm +++ b/iphone/Maps/Classes/Components/MWMNavigationController.mm @@ -1,6 +1,7 @@ -#import "MapsAppDelegate.h" -#import "MWMController.h" #import "MWMNavigationController.h" +#import "MWMController.h" +#import "MWMToast.h" +#import "MapsAppDelegate.h" #import "UIColor+MapsMeColor.h" #import "UIViewController+Navigation.h" @@ -14,6 +15,9 @@ - (UIStatusBarStyle)preferredStatusBarStyle { + if ([MWMToast affectsStatusBar]) + return [MWMToast preferredStatusBarStyle]; + return UIStatusBarStyleLightContent; } diff --git a/iphone/Maps/Classes/CustomAlert/AlertController/MWMAlertViewController.mm b/iphone/Maps/Classes/CustomAlert/AlertController/MWMAlertViewController.mm index f1b35fcd4c..e6cf59e4c3 100644 --- a/iphone/Maps/Classes/CustomAlert/AlertController/MWMAlertViewController.mm +++ b/iphone/Maps/Classes/CustomAlert/AlertController/MWMAlertViewController.mm @@ -21,15 +21,10 @@ static NSString * const kAlertControllerNibIdentifier = @"MWMAlertViewController + (nonnull MWMAlertViewController *)activeAlertController { - UIWindow * window = UIApplication.sharedApplication.delegate.window; - UIViewController * rootViewController = window.rootViewController; - ASSERT([rootViewController isKindOfClass:[UINavigationController class]], ()); - UINavigationController * navigationController = - static_cast(rootViewController); - UIViewController * topViewController = navigationController.topViewController; - ASSERT([topViewController conformsToProtocol:@protocol(MWMController)], ()); + UIViewController * tvc = topViewController(); + ASSERT([tvc conformsToProtocol:@protocol(MWMController)], ()); UIViewController * mwmController = - static_cast *>(topViewController); + static_cast *>(tvc); return mwmController.alertController; } diff --git a/iphone/Maps/Classes/CustomAlert/Toast/MWMToast.h b/iphone/Maps/Classes/CustomAlert/Toast/MWMToast.h new file mode 100644 index 0000000000..51243a43cd --- /dev/null +++ b/iphone/Maps/Classes/CustomAlert/Toast/MWMToast.h @@ -0,0 +1,8 @@ +@interface MWMToast : NSObject + ++ (void)showWithText:(NSString *)text; + ++ (BOOL)affectsStatusBar; ++ (UIStatusBarStyle)preferredStatusBarStyle; + +@end diff --git a/iphone/Maps/Classes/CustomAlert/Toast/MWMToast.mm b/iphone/Maps/Classes/CustomAlert/Toast/MWMToast.mm new file mode 100644 index 0000000000..79668738de --- /dev/null +++ b/iphone/Maps/Classes/CustomAlert/Toast/MWMToast.mm @@ -0,0 +1,178 @@ +#import "MWMToast.h" +#import "Common.h" +#import "UIColor+MapsMeColor.h" + +namespace +{ +void * kContext = &kContext; +NSString * const kKeyPath = @"sublayers"; +NSUInteger const kWordsPerSecond = 3; +} // namespace + +@interface MWMToast () + +@property(nonatomic) IBOutlet UIVisualEffectView * rootView; +@property(nonatomic) IBOutlet UILabel * label; + +@property(nonatomic) NSLayoutConstraint * bottomOffset; + +@end + +@implementation MWMToast + ++ (void)showWithText:(NSString *)text +{ + MWMToast * toast = [MWMToast toast]; + toast.label.text = text; + toast.label.textColor = [UIColor blackPrimaryText]; + [toast show]; +} + ++ (BOOL)affectsStatusBar { return [MWMToast toast].rootView.superview != nil; } ++ (UIStatusBarStyle)preferredStatusBarStyle +{ + return [UIColor isNightMode] ? UIStatusBarStyleLightContent : UIStatusBarStyleDefault; +} + ++ (MWMToast *)toast +{ + static MWMToast * toast; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + toast = [[super alloc] initToast]; + }); + return toast; +} + +- (instancetype)initToast +{ + self = [super init]; + if (self) + { + [[NSBundle mainBundle] loadNibNamed:[MWMToast className] owner:self options:nil]; + self.rootView.translatesAutoresizingMaskIntoConstraints = NO; + } + return self; +} + +- (void)configLayout +{ + UIView * sv = self.rootView; + [sv removeFromSuperview]; + + UIView * ov = topViewController().view; + [ov addSubview:sv]; + + NSLayoutConstraint * topOffset = [NSLayoutConstraint constraintWithItem:sv + attribute:NSLayoutAttributeTop + relatedBy:NSLayoutRelationEqual + toItem:ov + attribute:NSLayoutAttributeTop + multiplier:1 + constant:0]; + topOffset.priority = UILayoutPriorityDefaultLow; + self.bottomOffset = [NSLayoutConstraint constraintWithItem:sv + attribute:NSLayoutAttributeBottom + relatedBy:NSLayoutRelationEqual + toItem:ov + attribute:NSLayoutAttributeTop + multiplier:1 + constant:0]; + self.bottomOffset.priority = UILayoutPriorityDefaultHigh; + NSLayoutConstraint * leadingOffset = + [NSLayoutConstraint constraintWithItem:sv + attribute:NSLayoutAttributeLeading + relatedBy:NSLayoutRelationEqual + toItem:ov + attribute:NSLayoutAttributeLeading + multiplier:1 + constant:0]; + NSLayoutConstraint * trailingOffset = + [NSLayoutConstraint constraintWithItem:sv + attribute:NSLayoutAttributeTrailing + relatedBy:NSLayoutRelationEqual + toItem:ov + attribute:NSLayoutAttributeTrailing + multiplier:1 + constant:0]; + [ov addConstraints:@[ topOffset, self.bottomOffset, leadingOffset, trailingOffset ]]; + [ov setNeedsLayout]; +} + +- (void)scheduleHide +{ + [NSObject cancelPreviousPerformRequestsWithTarget:self]; + NSString * text = self.label.text; + NSArray * words = [text componentsSeparatedByString:@" "]; + NSTimeInterval const delay = MAX(2, 1 + words.count / kWordsPerSecond); + [self performSelector:@selector(hide) withObject:nil afterDelay:delay]; +} + +- (void)show +{ + [self configLayout]; + + UIView * ov = topViewController().view; + runAsyncOnMainQueue(^{ + [ov layoutIfNeeded]; + self.bottomOffset.priority = UILayoutPriorityFittingSizeLevel; + [UIView animateWithDuration:kDefaultAnimationDuration + animations:^{ + [ov layoutIfNeeded]; + } + completion:^(BOOL finished) { + [self subscribe]; + [topViewController() setNeedsStatusBarAppearanceUpdate]; + [self scheduleHide]; + }]; + }); +} + +- (void)hide +{ + [self unsubscribe]; + + UIView * ov = topViewController().view; + [ov layoutIfNeeded]; + self.bottomOffset.priority = UILayoutPriorityDefaultHigh; + [UIView animateWithDuration:kDefaultAnimationDuration + animations:^{ + [ov layoutIfNeeded]; + } + completion:^(BOOL finished) { + [self.rootView removeFromSuperview]; + [topViewController() setNeedsStatusBarAppearanceUpdate]; + }]; +} + +- (void)subscribe +{ + UIView * sv = self.rootView; + UIView * ov = sv.superview; + CALayer * ol = ov.layer; + [ol addObserver:self forKeyPath:kKeyPath options:NSKeyValueObservingOptionNew context:kContext]; +} + +- (void)unsubscribe +{ + UIView * sv = self.rootView; + UIView * ov = sv.superview; + CALayer * ol = ov.layer; + [ol removeObserver:self forKeyPath:kKeyPath context:kContext]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(id)object + change:(NSDictionary *)change + context:(void *)context +{ + if (context == kContext) + { + UIView * sv = self.rootView; + UIView * ov = sv.superview; + [ov bringSubviewToFront:sv]; + return; + } + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; +} +@end diff --git a/iphone/Maps/Classes/CustomAlert/Toast/MWMToast.xib b/iphone/Maps/Classes/CustomAlert/Toast/MWMToast.xib new file mode 100644 index 0000000000..fef4632081 --- /dev/null +++ b/iphone/Maps/Classes/CustomAlert/Toast/MWMToast.xib @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.mm index cc8c12111f..dae70992a6 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.mm @@ -535,6 +535,9 @@ typedef NS_ENUM(NSUInteger, MWMBottomMenuViewCell) { - (void)setState:(MWMBottomMenuState)state { + runAsyncOnMainQueue(^{ + [self.controller setNeedsStatusBarAppearanceUpdate]; + }); [self refreshRoutingDiminishTimer]; MWMBottomMenuView * view = (MWMBottomMenuView *)self.view; BOOL const menuActive = diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm index 6cb3eb6666..a45fb35b6e 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm @@ -16,6 +16,7 @@ #import "MWMSearchManager.h" #import "MWMSideButtons.h" #import "MWMTaxiPreviewDataSource.h" +#import "MWMToast.h" #import "MWMTrafficButtonViewController.h" #import "MapViewController.h" #import "MapsAppDelegate.h" @@ -78,6 +79,9 @@ extern NSString * const kAlohalyticsTapEventKey; - (UIStatusBarStyle)preferredStatusBarStyle { + if ([MWMToast affectsStatusBar]) + return [MWMToast preferredStatusBarStyle]; + MWMSearchManagerState const searchManagerState = _searchManager ? _searchManager.state : MWMSearchManagerStateHidden; BOOL const isNightMode = [UIColor isNightMode]; diff --git a/iphone/Maps/Classes/Editor/Cuisine/MWMCuisineEditorViewController.mm b/iphone/Maps/Classes/Editor/Cuisine/MWMCuisineEditorViewController.mm index e6e6ef3fa1..cfada9b3fb 100644 --- a/iphone/Maps/Classes/Editor/Cuisine/MWMCuisineEditorViewController.mm +++ b/iphone/Maps/Classes/Editor/Cuisine/MWMCuisineEditorViewController.mm @@ -1,6 +1,7 @@ #import "MWMCuisineEditorViewController.h" #import "MWMKeyboard.h" #import "MWMTableViewCell.h" +#import "MWMToast.h" #import "UIColor+MapsMeColor.h" #include "indexer/cuisines.hpp" @@ -47,7 +48,13 @@ vector SliceKeys(vector> const & v) [MWMKeyboard addObserver:self]; } -- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } +- (UIStatusBarStyle)preferredStatusBarStyle +{ + if ([MWMToast affectsStatusBar]) + return [MWMToast preferredStatusBarStyle]; + return UIStatusBarStyleLightContent; +} + #pragma mark - MWMKeyboard - (void)onKeyboardAnimation diff --git a/iphone/Maps/Classes/Editor/MWMObjectsCategorySelectorController.mm b/iphone/Maps/Classes/Editor/MWMObjectsCategorySelectorController.mm index 2f8b761d27..ce8029bb07 100644 --- a/iphone/Maps/Classes/Editor/MWMObjectsCategorySelectorController.mm +++ b/iphone/Maps/Classes/Editor/MWMObjectsCategorySelectorController.mm @@ -3,6 +3,7 @@ #import "MWMEditorViewController.h" #import "MWMKeyboard.h" #import "MWMTableViewCell.h" +#import "MWMToast.h" #import "Statistics.h" #import "UIColor+MapsMeColor.h" #import "UIViewController+Navigation.h" @@ -94,7 +95,14 @@ string locale() [super backTap]; } -- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } +- (UIStatusBarStyle)preferredStatusBarStyle +{ + if ([MWMToast affectsStatusBar]) + return [MWMToast preferredStatusBarStyle]; + + return UIStatusBarStyleLightContent; +} + - (void)configNavBar { self.title = L(@"editor_add_select_category"); } - (void)configSearchBar { diff --git a/iphone/Maps/Classes/MapDownloader/MWMBaseMapDownloaderViewController.mm b/iphone/Maps/Classes/MapDownloader/MWMBaseMapDownloaderViewController.mm index 43330f5211..8d5eebd780 100644 --- a/iphone/Maps/Classes/MapDownloader/MWMBaseMapDownloaderViewController.mm +++ b/iphone/Maps/Classes/MapDownloader/MWMBaseMapDownloaderViewController.mm @@ -11,10 +11,11 @@ #import "MWMMapDownloaderSubplaceTableViewCell.h" #import "MWMMapDownloaderTableViewCell.h" #import "MWMMapDownloaderViewController.h" -#import "MWMMyTarget.h" #import "MWMMigrationViewController.h" +#import "MWMMyTarget.h" #import "MWMSegue.h" #import "MWMStorage.h" +#import "MWMToast.h" #import "MapsAppDelegate.h" #import "Statistics.h" #import "UIColor+MapsMeColor.h" @@ -737,6 +738,8 @@ using namespace mwm; - (UIStatusBarStyle)preferredStatusBarStyle { + if ([MWMToast affectsStatusBar]) + return [MWMToast preferredStatusBarStyle]; return UIStatusBarStyleLightContent; } diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index 83640885df..d55cf21efc 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -241,6 +241,12 @@ 349A357C1B53D4C9009677EE /* MWMCircularProgressView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349A35791B53D4C9009677EE /* MWMCircularProgressView.mm */; }; 349B49BE1D3F58C3005A3C4E /* MyTrackerSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 349B49BD1D3F58C3005A3C4E /* MyTrackerSDK.framework */; }; 349B49BF1D3F58C3005A3C4E /* MyTrackerSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 349B49BD1D3F58C3005A3C4E /* MyTrackerSDK.framework */; }; + 349B926C1DF0518E007779DD /* MWMToast.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349B926B1DF0518E007779DD /* MWMToast.mm */; }; + 349B926D1DF0518E007779DD /* MWMToast.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349B926B1DF0518E007779DD /* MWMToast.mm */; }; + 349B926E1DF0518E007779DD /* MWMToast.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349B926B1DF0518E007779DD /* MWMToast.mm */; }; + 349B92701DF0526D007779DD /* MWMToast.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349B926F1DF0526D007779DD /* MWMToast.xib */; }; + 349B92711DF0526D007779DD /* MWMToast.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349B926F1DF0526D007779DD /* MWMToast.xib */; }; + 349B92721DF0526D007779DD /* MWMToast.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349B926F1DF0526D007779DD /* MWMToast.xib */; }; 349C26B51BB02C6F0005DF2F /* MWMBottomMenuViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349C26B31BB02C6F0005DF2F /* MWMBottomMenuViewController.mm */; }; 349C26B61BB02C6F0005DF2F /* MWMBottomMenuViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349C26B41BB02C6F0005DF2F /* MWMBottomMenuViewController.xib */; }; 349C26B91BB04ED30005DF2F /* MWMBottomMenuView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349C26B81BB04ED30005DF2F /* MWMBottomMenuView.mm */; }; @@ -1650,6 +1656,9 @@ 349A35781B53D4C9009677EE /* MWMCircularProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMCircularProgressView.h; sourceTree = ""; }; 349A35791B53D4C9009677EE /* MWMCircularProgressView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMCircularProgressView.mm; sourceTree = ""; }; 349B49BD1D3F58C3005A3C4E /* MyTrackerSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MyTrackerSDK.framework; path = Frameworks/MyTrackerSDK.framework; sourceTree = ""; }; + 349B926A1DF0518E007779DD /* MWMToast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMToast.h; sourceTree = ""; }; + 349B926B1DF0518E007779DD /* MWMToast.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMToast.mm; sourceTree = ""; }; + 349B926F1DF0526D007779DD /* MWMToast.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMToast.xib; sourceTree = ""; }; 349C26B21BB02C6F0005DF2F /* MWMBottomMenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMBottomMenuViewController.h; sourceTree = ""; }; 349C26B31BB02C6F0005DF2F /* MWMBottomMenuViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMBottomMenuViewController.mm; sourceTree = ""; }; 349C26B41BB02C6F0005DF2F /* MWMBottomMenuViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMBottomMenuViewController.xib; sourceTree = ""; }; @@ -2923,6 +2932,16 @@ path = CustomViews/CircularProgress; sourceTree = ""; }; + 349B92691DF0516C007779DD /* Toast */ = { + isa = PBXGroup; + children = ( + 349B926A1DF0518E007779DD /* MWMToast.h */, + 349B926B1DF0518E007779DD /* MWMToast.mm */, + 349B926F1DF0526D007779DD /* MWMToast.xib */, + ); + path = Toast; + sourceTree = ""; + }; 349C26AE1BB0116D0005DF2F /* BottomMenu */ = { isa = PBXGroup; children = ( @@ -3480,6 +3499,7 @@ F64F195F1AB8125C006EAF7E /* CustomAlert */ = { isa = PBXGroup; children = ( + 349B92691DF0516C007779DD /* Toast */, 349A137E1DEC138C00C7DB60 /* MobileInternetAlert */, 3462258B1DDC5D76001E8752 /* SearchAlert */, F6FE3C351CC50FDF00A73196 /* PlaceDoesntExist */, @@ -4123,6 +4143,7 @@ EEA61604134C496A003A9827 /* 04_padauk.ttf in Resources */, F6D4A73C1CC1267E00BD4E5B /* MWMNoteCell.xib in Resources */, 3406FA181C6E0D8F00E9FAD2 /* MWMMapDownloadDialog.xib in Resources */, + 349B92701DF0526D007779DD /* MWMToast.xib in Resources */, 341F99E31C6B1165001C67B8 /* MWMMapDownloaderTableViewCell.xib in Resources */, 341F99D71C6B1165001C67B8 /* MWMMapDownloaderLargeCountryTableViewCell.xib in Resources */, EEA61605134C496A003A9827 /* 05_khmeros.ttf in Resources */, @@ -4288,6 +4309,7 @@ 347FD86E1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */, 9DA46A0D1C47E92100EF52BA /* resources-xhdpi_legacy in Resources */, 9DA46A0F1C47E92100EF52BA /* resources-xxhdpi_legacy in Resources */, + 349B92711DF0526D007779DD /* MWMToast.xib in Resources */, 6741A9571BF340DE002C974C /* 03_jomolhari-id-a3d.ttf in Resources */, 6741A9581BF340DE002C974C /* 04_padauk.ttf in Resources */, F634C8F41D79996D00BE04E2 /* _MWMPPPExternalTitle.xib in Resources */, @@ -4474,6 +4496,7 @@ 849CF6221DE842290024A8A5 /* MWMEditorAddAdditionalNameTableViewCell.xib in Resources */, 849CF6231DE842290024A8A5 /* MWMStreetEditorEditTableViewCell.xib in Resources */, 849CF6241DE842290024A8A5 /* _MWMPPPTitle.xib in Resources */, + 349B92721DF0526D007779DD /* MWMToast.xib in Resources */, 849CF6251DE842290024A8A5 /* cuisine-strings in Resources */, 849CF6261DE842290024A8A5 /* MWMAboutControllerHeader.xib in Resources */, 849CF6271DE842290024A8A5 /* LaunchScreen.storyboard in Resources */, @@ -4758,6 +4781,7 @@ F6DBF9B61AA8779300F2EC2C /* CALayer+RuntimeAttributes.mm in Sources */, 347FD8731C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.mm in Sources */, FA36B80D15403A4F004560CC /* BookmarksVC.mm in Sources */, + 349B926C1DF0518E007779DD /* MWMToast.mm in Sources */, 3490D2E01CE9DD2500D0B838 /* MWMSideButtonsView.mm in Sources */, F668F6561BCD4507002D6FFC /* MWMTTSSettingsViewController.mm in Sources */, 34ABA61B1C2D4DCC00FE1BEC /* UITextField+RuntimeAttributes.mm in Sources */, @@ -5009,6 +5033,7 @@ 6741A9F41BF340DE002C974C /* CALayer+RuntimeAttributes.mm in Sources */, 56C74C391C74A3BC00B71B9F /* MWMInputEmailValidator.mm in Sources */, 6741A9F51BF340DE002C974C /* BookmarksVC.mm in Sources */, + 349B926D1DF0518E007779DD /* MWMToast.mm in Sources */, 347FD8741C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.mm in Sources */, 3490D2E11CE9DD2500D0B838 /* MWMSideButtonsView.mm in Sources */, 6741A9F91BF340DE002C974C /* MWMSearchSuggestionCell.mm in Sources */, @@ -5331,6 +5356,7 @@ 849CF7411DE842290024A8A5 /* MWMMapDownloaderSubplaceTableViewCell.mm in Sources */, 849CF7421DE842290024A8A5 /* MWMNoMapsView.mm in Sources */, 849CF7431DE842290024A8A5 /* MWMCustomFacebookEvents.mm in Sources */, + 349B926E1DF0518E007779DD /* MWMToast.mm in Sources */, 849CF7441DE842290024A8A5 /* SwitchCell.mm in Sources */, 849CF7451DE842290024A8A5 /* UIView+RuntimeAttributes.mm in Sources */, 849CF7461DE842290024A8A5 /* MWMTableViewCell.mm in Sources */, diff --git a/iphone/Maps/UIColor+MapsMeColor.h b/iphone/Maps/UIColor+MapsMeColor.h index f832ee74a5..2780592abb 100644 --- a/iphone/Maps/UIColor+MapsMeColor.h +++ b/iphone/Maps/UIColor+MapsMeColor.h @@ -35,6 +35,7 @@ + (UIColor *)bookingBackground; + (UIColor *)opentableBackground; + (UIColor *)bannerBackground; ++ (UIColor *)toastBackground; + (UIColor *)colorWithName:(NSString *)colorName; diff --git a/iphone/Maps/UIColor+MapsMeColor.mm b/iphone/Maps/UIColor+MapsMeColor.mm index e67674f588..55657f442d 100644 --- a/iphone/Maps/UIColor+MapsMeColor.mm +++ b/iphone/Maps/UIColor+MapsMeColor.mm @@ -64,7 +64,10 @@ NSDictionary * night = @{ @"alertBackground" : [UIColor colorWithRed:scaled(60.) green:scaled(64.) blue:scaled(68.) alpha:alpha90], @"blackOpaque" : [UIColor colorWithWhite:1. alpha:alpha04], - @"bannerBackground" : [UIColor colorWithRed:scaled(85.) green:scaled(90.) blue:scaled(90.) alpha:alpha100] + @"bannerBackground" : + [UIColor colorWithRed:scaled(85.) green:scaled(90.) blue:scaled(90.) alpha:alpha100], + @"toastBackground" : + [UIColor colorWithRed:scaled(60.) green:scaled(64.) blue:scaled(68.) alpha:alpha26] }; NSDictionary * day = @{ @@ -109,7 +112,10 @@ NSDictionary * day = @{ [UIColor colorWithRed:scaled(3.) green:scaled(122.) blue:scaled(255.) alpha:alpha26], @"alertBackground" : [UIColor colorWithWhite:1. alpha:alpha90], @"blackOpaque" : [UIColor colorWithWhite:0. alpha:alpha04], - @"bannerBackground" : [UIColor colorWithRed:scaled(255.) green:scaled(248.) blue:scaled(225.) alpha:alpha100] + @"bannerBackground" : + [UIColor colorWithRed:scaled(255.) green:scaled(248.) blue:scaled(225.) alpha:alpha100], + @"toastBackground" : + [UIColor colorWithRed:scaled(255.) green:scaled(255.) blue:scaled(255.) alpha:alpha40] }; UIColor * color(SEL cmd) @@ -308,7 +314,7 @@ UIColor * color(SEL cmd) { return color(_cmd); } - ++ (UIColor *)toastBackground { return color(_cmd); } + (UIColor *)colorWithName:(NSString *)colorName { #pragma clang diagnostic push