diff --git a/React/Modules/RCTStatusBarManager.m b/React/Modules/RCTStatusBarManager.m index 9b6f9d6698c156..d15fd73cce93ce 100644 --- a/React/Modules/RCTStatusBarManager.m +++ b/React/Modules/RCTStatusBarManager.m @@ -14,17 +14,44 @@ #if !TARGET_OS_TV @implementation RCTConvert (UIStatusBar) -RCT_ENUM_CONVERTER(UIStatusBarStyle, (@{ - @"default": @(UIStatusBarStyleDefault), - @"light-content": @(UIStatusBarStyleLightContent), - @"dark-content": @(UIStatusBarStyleDefault), -}), UIStatusBarStyleDefault, integerValue); - -RCT_ENUM_CONVERTER(UIStatusBarAnimation, (@{ - @"none": @(UIStatusBarAnimationNone), - @"fade": @(UIStatusBarAnimationFade), - @"slide": @(UIStatusBarAnimationSlide), -}), UIStatusBarAnimationNone, integerValue); ++ (UIStatusBarStyle)UIStatusBarStyle:(id)json RCT_DYNAMIC +{ + static NSDictionary *mapping; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + if (@available(iOS 13.0, *)) { + mapping = @{ + @"default" : @(UIStatusBarStyleDefault), + @"light-content" : @(UIStatusBarStyleLightContent), +#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \ + __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0 + @"dark-content" : @(UIStatusBarStyleDarkContent) +#else + @"dark-content": @(UIStatusBarStyleDefault) +#endif + }; + + } else { + mapping = @{ + @"default" : @(UIStatusBarStyleDefault), + @"light-content" : @(UIStatusBarStyleLightContent), + @"dark-content" : @(UIStatusBarStyleDefault) + }; + } + }); + return _RCT_CAST( + type, [RCTConvertEnumValue("UIStatusBarStyle", mapping, @(UIStatusBarStyleDefault), json) integerValue]); +} + +RCT_ENUM_CONVERTER( + UIStatusBarAnimation, + (@{ + @"none" : @(UIStatusBarAnimationNone), + @"fade" : @(UIStatusBarAnimationFade), + @"slide" : @(UIStatusBarAnimationSlide), + }), + UIStatusBarAnimationNone, + integerValue); @end #endif @@ -36,8 +63,9 @@ static BOOL RCTViewControllerBasedStatusBarAppearance() static BOOL value; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - value = [[[NSBundle mainBundle] objectForInfoDictionaryKey: - @"UIViewControllerBasedStatusBarAppearance"] ?: @YES boolValue]; + value = + [[[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIViewControllerBasedStatusBarAppearance"] + ?: @YES boolValue]; }); return value; @@ -47,8 +75,7 @@ static BOOL RCTViewControllerBasedStatusBarAppearance() - (NSArray *)supportedEvents { - return @[@"statusBarFrameDidChange", - @"statusBarFrameWillChange"]; + return @[ @"statusBarFrameDidChange", @"statusBarFrameWillChange" ]; } #if !TARGET_OS_TV @@ -56,8 +83,14 @@ static BOOL RCTViewControllerBasedStatusBarAppearance() - (void)startObserving { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc addObserver:self selector:@selector(applicationDidChangeStatusBarFrame:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; - [nc addObserver:self selector:@selector(applicationWillChangeStatusBarFrame:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil]; + [nc addObserver:self + selector:@selector(applicationDidChangeStatusBarFrame:) + name:UIApplicationDidChangeStatusBarFrameNotification + object:nil]; + [nc addObserver:self + selector:@selector(applicationWillChangeStatusBarFrame:) + name:UIApplicationWillChangeStatusBarFrameNotification + object:nil]; } - (void)stopObserving @@ -74,11 +107,11 @@ - (void)emitEvent:(NSString *)eventName forNotification:(NSNotification *)notifi { CGRect frame = [notification.userInfo[UIApplicationStatusBarFrameUserInfoKey] CGRectValue]; NSDictionary *event = @{ - @"frame": @{ - @"x": @(frame.origin.x), - @"y": @(frame.origin.y), - @"width": @(frame.size.width), - @"height": @(frame.size.height), + @"frame" : @{ + @"x" : @(frame.origin.x), + @"y" : @(frame.origin.y), + @"width" : @(frame.size.width), + @"height" : @(frame.size.height), }, }; [self sendEventWithName:eventName body:event]; @@ -94,15 +127,14 @@ - (void)applicationWillChangeStatusBarFrame:(NSNotification *)notification [self emitEvent:@"statusBarFrameWillChange" forNotification:notification]; } -RCT_EXPORT_METHOD(getHeight:(RCTResponseSenderBlock)callback) +RCT_EXPORT_METHOD(getHeight : (RCTResponseSenderBlock)callback) { - callback(@[@{ - @"height": @(RCTSharedApplication().statusBarFrame.size.height), - }]); + callback(@[ @{ + @"height" : @(RCTSharedApplication().statusBarFrame.size.height), + } ]); } -RCT_EXPORT_METHOD(setStyle:(UIStatusBarStyle)statusBarStyle - animated:(BOOL)animated) +RCT_EXPORT_METHOD(setStyle : (UIStatusBarStyle)statusBarStyle animated : (BOOL)animated) { if (RCTViewControllerBasedStatusBarAppearance()) { RCTLogError(@"RCTStatusBarManager module requires that the \ @@ -110,14 +142,12 @@ - (void)applicationWillChangeStatusBarFrame:(NSNotification *)notification } else { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" - [RCTSharedApplication() setStatusBarStyle:statusBarStyle - animated:animated]; + [RCTSharedApplication() setStatusBarStyle:statusBarStyle animated:animated]; } #pragma clang diagnostic pop } -RCT_EXPORT_METHOD(setHidden:(BOOL)hidden - withAnimation:(UIStatusBarAnimation)animation) +RCT_EXPORT_METHOD(setHidden : (BOOL)hidden withAnimation : (UIStatusBarAnimation)animation) { if (RCTViewControllerBasedStatusBarAppearance()) { RCTLogError(@"RCTStatusBarManager module requires that the \ @@ -125,17 +155,16 @@ - (void)applicationWillChangeStatusBarFrame:(NSNotification *)notification } else { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" - [RCTSharedApplication() setStatusBarHidden:hidden - withAnimation:animation]; + [RCTSharedApplication() setStatusBarHidden:hidden withAnimation:animation]; #pragma clang diagnostic pop } } -RCT_EXPORT_METHOD(setNetworkActivityIndicatorVisible:(BOOL)visible) +RCT_EXPORT_METHOD(setNetworkActivityIndicatorVisible : (BOOL)visible) { RCTSharedApplication().networkActivityIndicatorVisible = visible; } -#endif //TARGET_OS_TV +#endif // TARGET_OS_TV @end