From 58adb9b1379d12430d415d28031b194b4ebffd9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Sta=C5=9B?= Date: Wed, 8 Apr 2020 13:55:34 +0200 Subject: [PATCH] Revert "Fix styling options on iOS 13.4 (#6087)" This reverts commit 22da985ba590eac3b7d9f2e3171d462c0eaf8fdf. --- lib/ios/RNNBasePresenter.h | 8 +++--- lib/ios/RNNBasePresenter.m | 21 +++++---------- lib/ios/RNNBottomTabsController.m | 27 ++++++------------- lib/ios/RNNComponentViewController.m | 27 +++++++------------ lib/ios/RNNExternalViewController.m | 18 ------------- lib/ios/RNNSideMenuChildVC.m | 16 +---------- lib/ios/RNNSideMenuController.m | 26 ++++++------------ lib/ios/RNNSplitViewController.m | 22 +++------------ lib/ios/RNNStackController.m | 26 ++++++------------ lib/ios/UIViewController+LayoutProtocol.m | 17 +++++++++++- .../BottomTabsControllerTest.m | 2 +- .../NavigationTests/RNNBasePresenterTest.m | 24 ++++++++++------- .../RNNSideMenuControllerTest.m | 9 +++---- 13 files changed, 82 insertions(+), 161 deletions(-) diff --git a/lib/ios/RNNBasePresenter.h b/lib/ios/RNNBasePresenter.h index 2bea42e731b..c7f6d3efc09 100644 --- a/lib/ios/RNNBasePresenter.h +++ b/lib/ios/RNNBasePresenter.h @@ -39,12 +39,10 @@ typedef void (^RNNReactViewReadyCompletionBlock)(void); - (UINavigationItem *)currentNavigationItem; -- (void)willMoveToParentViewController:(UIViewController *)parent; +- (UIStatusBarStyle)getStatusBarStyle:(RNNNavigationOptions *)resolvedOptions; -- (UIStatusBarStyle)getStatusBarStyle; +- (UIInterfaceOrientationMask)getOrientation:(RNNNavigationOptions *)options; -- (UIInterfaceOrientationMask)getOrientation; - -- (BOOL)getStatusBarVisibility; +- (BOOL)statusBarVisibile:(UINavigationController *)stack resolvedOptions:(RNNNavigationOptions *)resolvedOptions; @end diff --git a/lib/ios/RNNBasePresenter.m b/lib/ios/RNNBasePresenter.m index c08eb44da8a..e5ccb30992c 100644 --- a/lib/ios/RNNBasePresenter.m +++ b/lib/ios/RNNBasePresenter.m @@ -36,13 +36,6 @@ - (void)componentDidDisappear { } -- (void)willMoveToParentViewController:(UIViewController *)parent { - if (parent) { - [self applyOptionsOnWillMoveToParentViewController:self.boundViewController.resolveOptions]; - [self.boundViewController onChildAddToParent:self.boundViewController options:self.boundViewController.resolveOptions]; - } -} - - (void)applyOptionsOnInit:(RNNNavigationOptions *)initialOptions { UIViewController* viewController = self.boundViewController; RNNNavigationOptions *withDefault = [initialOptions withDefault:[self defaultOptions]]; @@ -85,8 +78,8 @@ - (void)viewDidLayoutSubviews { } -- (UIStatusBarStyle)getStatusBarStyle { - RNNNavigationOptions *withDefault = [self.boundViewController.resolveOptions withDefault:[self defaultOptions]]; +- (UIStatusBarStyle)getStatusBarStyle:(RNNNavigationOptions *)resolvedOptions { + RNNNavigationOptions *withDefault = [resolvedOptions withDefault:[self defaultOptions]]; NSString* statusBarStyle = [withDefault.statusBar.style getWithDefaultValue:@"default"]; if ([statusBarStyle isEqualToString:@"light"]) { return UIStatusBarStyleLightContent; @@ -105,16 +98,16 @@ - (UINavigationItem *)currentNavigationItem { return self.boundViewController.getCurrentChild.navigationItem; } -- (UIInterfaceOrientationMask)getOrientation { - return [self.boundViewController.resolveOptions withDefault:self.defaultOptions].layout.supportedOrientations; +- (UIInterfaceOrientationMask)getOrientation:(RNNNavigationOptions *)options { + return [options withDefault:[self defaultOptions]].layout.supportedOrientations; } -- (BOOL)getStatusBarVisibility { - RNNNavigationOptions *withDefault = [self.boundViewController.resolveOptions withDefault:self.defaultOptions]; +- (BOOL)statusBarVisibile:(UINavigationController *)stack resolvedOptions:(RNNNavigationOptions *)resolvedOptions { + RNNNavigationOptions *withDefault = [resolvedOptions withDefault:self.defaultOptions]; if (withDefault.statusBar.visible.hasValue) { return ![withDefault.statusBar.visible get]; } else if ([withDefault.statusBar.hideWithTopBar getWithDefaultValue:NO]) { - return self.boundViewController.stack.isNavigationBarHidden; + return stack.isNavigationBarHidden; } return NO; } diff --git a/lib/ios/RNNBottomTabsController.m b/lib/ios/RNNBottomTabsController.m index 0e6ede6c770..91f17647e82 100644 --- a/lib/ios/RNNBottomTabsController.m +++ b/lib/ios/RNNBottomTabsController.m @@ -87,6 +87,14 @@ - (void)setSelectedIndex:(NSUInteger)selectedIndex { [super setSelectedIndex:selectedIndex]; } +- (UIStatusBarStyle)preferredStatusBarStyle { + return [[self presenter] getStatusBarStyle:self.resolveOptions]; +} + +- (BOOL)prefersStatusBarHidden { + return [self.presenter statusBarVisibile:self.navigationController resolvedOptions:self.resolveOptions]; +} + #pragma mark UITabBarControllerDelegate - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { @@ -113,23 +121,4 @@ - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectView return NO; } -# pragma mark - UIViewController overrides - -- (void)willMoveToParentViewController:(UIViewController *)parent { - [self.presenter willMoveToParentViewController:parent]; -} - -- (UIStatusBarStyle)preferredStatusBarStyle { - return [self.presenter getStatusBarStyle]; -} - -- (BOOL)prefersStatusBarHidden { - return [self.presenter getStatusBarVisibility]; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - return [self.presenter getOrientation]; -} - - @end diff --git a/lib/ios/RNNComponentViewController.m b/lib/ios/RNNComponentViewController.m index 9299f12524b..8cc26934014 100644 --- a/lib/ios/RNNComponentViewController.m +++ b/lib/ios/RNNComponentViewController.m @@ -6,6 +6,7 @@ @implementation RNNComponentViewController - (instancetype)initWithLayoutInfo:(RNNLayoutInfo *)layoutInfo rootViewCreator:(id)creator eventEmitter:(RNNEventEmitter *)eventEmitter presenter:(RNNComponentPresenter *)presenter options:(RNNNavigationOptions *)options defaultOptions:(RNNNavigationOptions *)defaultOptions { self = [super initWithLayoutInfo:layoutInfo creator:creator options:options defaultOptions:defaultOptions presenter:presenter eventEmitter:eventEmitter childViewControllers:nil]; + self.extendedLayoutIncludesOpaqueBars = YES; if (@available(iOS 13.0, *)) { self.navigationItem.standardAppearance = [UINavigationBarAppearance new]; self.navigationItem.scrollEdgeAppearance = [UINavigationBarAppearance new]; @@ -78,6 +79,14 @@ - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { [self.eventEmitter sendOnSearchBarCancelPressed:self.layoutInfo.componentId]; } +- (UIStatusBarStyle)preferredStatusBarStyle { + return [_presenter getStatusBarStyle:[self resolveOptions]]; +} + +- (BOOL)prefersStatusBarHidden { + return [self.presenter statusBarVisibile:self.navigationController resolvedOptions:self.resolveOptions]; +} + - (UIViewController *)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)location{ return self.previewController; } @@ -130,23 +139,5 @@ -(void)onButtonPress:(RNNUIBarButtonItem *)barButtonItem { [self.eventEmitter sendOnNavigationButtonPressed:self.layoutInfo.componentId buttonId:barButtonItem.buttonId]; } -# pragma mark - UIViewController overrides - -- (void)willMoveToParentViewController:(UIViewController *)parent { - [self.presenter willMoveToParentViewController:parent]; -} - -- (UIStatusBarStyle)preferredStatusBarStyle { - return [self.presenter getStatusBarStyle]; -} - -- (BOOL)prefersStatusBarHidden { - return [self.presenter getStatusBarVisibility]; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - return [self.presenter getOrientation]; -} - @end diff --git a/lib/ios/RNNExternalViewController.m b/lib/ios/RNNExternalViewController.m index 3a82e1e5f18..3c886411dd1 100644 --- a/lib/ios/RNNExternalViewController.m +++ b/lib/ios/RNNExternalViewController.m @@ -30,22 +30,4 @@ - (void)render { [self readyForPresentation]; } -# pragma mark - UIViewController overrides - -- (void)willMoveToParentViewController:(UIViewController *)parent { - [self.presenter willMoveToParentViewController:parent]; -} - -- (UIStatusBarStyle)preferredStatusBarStyle { - return [self.presenter getStatusBarStyle]; -} - -- (BOOL)prefersStatusBarHidden { - return [self.presenter getStatusBarVisibility]; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - return [self.presenter getOrientation]; -} - @end diff --git a/lib/ios/RNNSideMenuChildVC.m b/lib/ios/RNNSideMenuChildVC.m index 406ac99908f..d07a0ace365 100644 --- a/lib/ios/RNNSideMenuChildVC.m +++ b/lib/ios/RNNSideMenuChildVC.m @@ -39,22 +39,8 @@ - (UIViewController *)getCurrentChild { return self.child; } -# pragma mark - UIViewController overrides - -- (void)willMoveToParentViewController:(UIViewController *)parent { - [self.presenter willMoveToParentViewController:parent]; -} - - (UIStatusBarStyle)preferredStatusBarStyle { - return [self.presenter getStatusBarStyle]; -} - -- (BOOL)prefersStatusBarHidden { - return [self.presenter getStatusBarVisibility]; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - return [self.presenter getOrientation]; + return [[self presenter] getStatusBarStyle:[self resolveOptions]]; } @end diff --git a/lib/ios/RNNSideMenuController.m b/lib/ios/RNNSideMenuController.m index e40ca2eacf3..5d4fe7d94f9 100644 --- a/lib/ios/RNNSideMenuController.m +++ b/lib/ios/RNNSideMenuController.m @@ -130,6 +130,14 @@ -(void)setControllers:(NSArray*)controllers { } } +- (UIStatusBarStyle)preferredStatusBarStyle { + return self.openedViewController.preferredStatusBarStyle; +} + +- (BOOL)prefersStatusBarHidden { + return [self.presenter statusBarVisibile:self.navigationController resolvedOptions:self.resolveOptions]; +} + - (UIViewController *)getCurrentChild { return self.openedViewController; } @@ -155,22 +163,4 @@ - (RNNNavigationOptions *)resolveOptions { return options; } -# pragma mark - UIViewController overrides - -- (void)willMoveToParentViewController:(UIViewController *)parent { - [self.presenter willMoveToParentViewController:parent]; -} - -- (UIStatusBarStyle)preferredStatusBarStyle { - return [self.presenter getStatusBarStyle]; -} - -- (BOOL)prefersStatusBarHidden { - return [self.presenter getStatusBarVisibility]; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - return [self.presenter getOrientation]; -} - @end diff --git a/lib/ios/RNNSplitViewController.m b/lib/ios/RNNSplitViewController.m index 09e37e38a97..3caa80995ca 100644 --- a/lib/ios/RNNSplitViewController.m +++ b/lib/ios/RNNSplitViewController.m @@ -9,26 +9,12 @@ - (void)setViewControllers:(NSArray<__kindof UIViewController *> *)viewControlle self.delegate = masterViewController; } -- (UIViewController *)getCurrentChild { - return self.viewControllers[0]; -} - -# pragma mark - UIViewController overrides - -- (void)willMoveToParentViewController:(UIViewController *)parent { - [self.presenter willMoveToParentViewController:parent]; +-(void)viewWillAppear:(BOOL)animated{ + [super viewWillAppear:animated]; } -- (UIStatusBarStyle)preferredStatusBarStyle { - return [self.presenter getStatusBarStyle]; -} - -- (BOOL)prefersStatusBarHidden { - return [self.presenter getStatusBarVisibility]; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - return [self.presenter getOrientation]; +- (UIViewController *)getCurrentChild { + return self.viewControllers[0]; } @end diff --git a/lib/ios/RNNStackController.m b/lib/ios/RNNStackController.m index 4d0220c40ed..155c18de81f 100644 --- a/lib/ios/RNNStackController.m +++ b/lib/ios/RNNStackController.m @@ -35,6 +35,14 @@ - (void)mergeChildOptions:(RNNNavigationOptions *)options child:(UIViewControlle [self.parentViewController mergeChildOptions:options child:child]; } +- (UIStatusBarStyle)preferredStatusBarStyle { + return [_presenter getStatusBarStyle:self.resolveOptions]; +} + +- (BOOL)prefersStatusBarHidden { + return [self.presenter statusBarVisibile:self.navigationController resolvedOptions:self.resolveOptions]; +} + - (UIViewController *)popViewControllerAnimated:(BOOL)animated { [self prepareForPop]; return [super popViewControllerAnimated:animated]; @@ -54,22 +62,4 @@ - (UIViewController *)childViewControllerForStatusBarStyle { return self.topViewController; } -# pragma mark - UIViewController overrides - -- (void)willMoveToParentViewController:(UIViewController *)parent { - [self.presenter willMoveToParentViewController:parent]; -} - -- (UIStatusBarStyle)preferredStatusBarStyle { - return [self.presenter getStatusBarStyle]; -} - -- (BOOL)prefersStatusBarHidden { - return [self.presenter getStatusBarVisibility]; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - return [self.presenter getOrientation]; -} - @end diff --git a/lib/ios/UIViewController+LayoutProtocol.m b/lib/ios/UIViewController+LayoutProtocol.m index 2044d00a479..7e5f6871a0a 100644 --- a/lib/ios/UIViewController+LayoutProtocol.m +++ b/lib/ios/UIViewController+LayoutProtocol.m @@ -20,7 +20,6 @@ - (instancetype)initWithLayoutInfo:(RNNLayoutInfo *)layoutInfo self.eventEmitter = eventEmitter; self.presenter = presenter; [self.presenter bindViewController:self]; - self.extendedLayoutIncludesOpaqueBars = YES; if ([self respondsToSelector:@selector(setViewControllers:)]) { [self performSelector:@selector(setViewControllers:) withObject:childViewControllers]; } @@ -52,6 +51,15 @@ - (void)overrideOptions:(RNNNavigationOptions *)options { [self.options overrideOptions:options]; } +- (BOOL)extendedLayoutIncludesOpaqueBars { + return YES; +} + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + UIInterfaceOrientationMask interfaceOrientationMask = self.presenter ? [self.presenter getOrientation:[self resolveOptions]] : [[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:[[UIApplication sharedApplication] keyWindow]]; + return interfaceOrientationMask; +} + - (UINavigationController *)stack { if ([self isKindOfClass:UINavigationController.class]) { return (UINavigationController *)self; @@ -153,6 +161,13 @@ - (void)componentDidDisappear { [self.parentViewController componentDidDisappear]; } +- (void)willMoveToParentViewController:(UIViewController *)parent { + if (parent) { + [self.presenter applyOptionsOnWillMoveToParentViewController:self.resolveOptions]; + [self onChildAddToParent:self options:self.resolveOptions]; + } +} + #pragma mark getters and setters to associated object - (RNNNavigationOptions *)options { diff --git a/playground/ios/NavigationTests/BottomTabsControllerTest.m b/playground/ios/NavigationTests/BottomTabsControllerTest.m index 9948450f0ee..322c6c2a83f 100644 --- a/playground/ios/NavigationTests/BottomTabsControllerTest.m +++ b/playground/ios/NavigationTests/BottomTabsControllerTest.m @@ -139,7 +139,7 @@ - (void)testGetCurrentChild_shouldReturnSelectedViewController { } - (void)testPreferredStatusBarStyle_shouldInvokeSelectedViewControllerPreferredStatusBarStyle { - [[self.mockTabBarPresenter expect] getStatusBarStyle]; + [[self.mockTabBarPresenter expect] getStatusBarStyle:[OCMArg any]]; [self.uut preferredStatusBarStyle]; [self.mockTabBarPresenter verify]; } diff --git a/playground/ios/NavigationTests/RNNBasePresenterTest.m b/playground/ios/NavigationTests/RNNBasePresenterTest.m index 92685cf6faa..a1ccb7f2440 100644 --- a/playground/ios/NavigationTests/RNNBasePresenterTest.m +++ b/playground/ios/NavigationTests/RNNBasePresenterTest.m @@ -2,7 +2,7 @@ #import "RNNBasePresenter.h" #import #import "UIViewController+RNNOptions.h" -#import "RNNComponentViewController+Utils.h" +#import "RNNComponentViewController.h" @interface RNNBasePresenterTest : XCTestCase @@ -18,7 +18,7 @@ @implementation RNNBasePresenterTest - (void)setUp { [super setUp]; self.uut = [[RNNBasePresenter alloc] initWithDefaultOptions:[[RNNNavigationOptions alloc] initEmptyOptions]]; - self.boundViewController = [RNNComponentViewController createWithComponentId:@"componentId" initialOptions:[RNNNavigationOptions emptyOptions]]; + self.boundViewController = [RNNComponentViewController new]; self.mockBoundViewController = [OCMockObject partialMockForObject:self.boundViewController]; [self.uut bindViewController:self.mockBoundViewController]; self.options = [[RNNNavigationOptions alloc] initEmptyOptions]; @@ -53,28 +53,32 @@ - (void)testApplyOptions_setTabBarItemBadgeShouldWhenNoValue { } - (void)testGetPreferredStatusBarStyle_returnLightIfLight { - self.boundViewController.options.statusBar.style = [[Text alloc] initWithValue:@"light"]; - - XCTAssertEqual([_uut getStatusBarStyle], UIStatusBarStyleLightContent); + RNNNavigationOptions * lightOptions = [[RNNNavigationOptions alloc] initEmptyOptions]; + lightOptions.statusBar.style = [[Text alloc] initWithValue:@"light"]; + + XCTAssertEqual([_uut getStatusBarStyle:lightOptions], UIStatusBarStyleLightContent); } - (void)testGetPreferredStatusBarStyle_returnDark { - self.boundViewController.options.statusBar.style = [[Text alloc] initWithValue:@"dark"]; + RNNNavigationOptions * darkOptions = [[RNNNavigationOptions alloc] initEmptyOptions]; + darkOptions.statusBar.style = [[Text alloc] initWithValue:@"dark"]; - XCTAssertEqual([_uut getStatusBarStyle], UIStatusBarStyleDarkContent); + XCTAssertEqual([_uut getStatusBarStyle:darkOptions], UIStatusBarStyleDarkContent); } - (void)testGetPreferredStatusBarStyle_returnDefaultIfNil { - self.boundViewController.options.statusBar.style = nil; - XCTAssertEqual([_uut getStatusBarStyle], UIStatusBarStyleDefault); + RNNNavigationOptions * options = [[RNNNavigationOptions alloc] initEmptyOptions]; + + XCTAssertEqual([_uut getStatusBarStyle:options], UIStatusBarStyleDefault); } - (void)testGetPreferredStatusBarStyle_considersDefaultOptions { + RNNNavigationOptions * options = [[RNNNavigationOptions alloc] initEmptyOptions]; RNNNavigationOptions * lightOptions = [[RNNNavigationOptions alloc] initEmptyOptions]; lightOptions.statusBar.style = [[Text alloc] initWithValue:@"light"]; [_uut setDefaultOptions:lightOptions]; - XCTAssertEqual([_uut getStatusBarStyle], UIStatusBarStyleLightContent); + XCTAssertEqual([_uut getStatusBarStyle:options], UIStatusBarStyleLightContent); } - (void)testApplyOptionsOnInit_setSwipeToDismiss { diff --git a/playground/ios/NavigationTests/RNNSideMenuControllerTest.m b/playground/ios/NavigationTests/RNNSideMenuControllerTest.m index 82a1d28026f..1e4c8f15ffe 100644 --- a/playground/ios/NavigationTests/RNNSideMenuControllerTest.m +++ b/playground/ios/NavigationTests/RNNSideMenuControllerTest.m @@ -16,12 +16,9 @@ @implementation RNNSideMenuControllerTest - (void)setUp { [super setUp]; _creator = [[RNNTestRootViewCreator alloc] init]; - _leftVC = [[RNNSideMenuChildVC alloc] initWithLayoutInfo:nil creator:nil options:[RNNNavigationOptions emptyOptions] defaultOptions:nil presenter:[RNNBasePresenter new] eventEmitter:nil childViewController:self.generateComponent type:RNNSideMenuChildTypeLeft]; - [_leftVC.presenter bindViewController:_leftVC]; - _rightVC = [[RNNSideMenuChildVC alloc] initWithLayoutInfo:nil creator:nil options:[RNNNavigationOptions emptyOptions] defaultOptions:nil presenter:[RNNBasePresenter new] eventEmitter:nil childViewController:self.generateComponent type:RNNSideMenuChildTypeRight]; - [_rightVC.presenter bindViewController:_rightVC]; - _centerVC =[[RNNSideMenuChildVC alloc] initWithLayoutInfo:nil creator:nil options:[RNNNavigationOptions emptyOptions] defaultOptions:nil presenter:[RNNBasePresenter new] eventEmitter:nil childViewController:self.generateComponent type:RNNSideMenuChildTypeCenter]; - [_centerVC.presenter bindViewController:_centerVC]; + _leftVC = [[RNNSideMenuChildVC alloc] initWithLayoutInfo:nil creator:nil options:[RNNNavigationOptions emptyOptions] defaultOptions:nil presenter:nil eventEmitter:nil childViewController:self.generateComponent type:RNNSideMenuChildTypeLeft]; + _rightVC = [[RNNSideMenuChildVC alloc] initWithLayoutInfo:nil creator:nil options:[RNNNavigationOptions emptyOptions] defaultOptions:nil presenter:nil eventEmitter:nil childViewController:self.generateComponent type:RNNSideMenuChildTypeRight]; + _centerVC =[[RNNSideMenuChildVC alloc] initWithLayoutInfo:nil creator:nil options:[RNNNavigationOptions emptyOptions] defaultOptions:nil presenter:nil eventEmitter:nil childViewController:self.generateComponent type:RNNSideMenuChildTypeCenter]; self.uut = [[RNNSideMenuController alloc] initWithLayoutInfo:nil creator:nil childViewControllers:@[_leftVC, _centerVC, _rightVC] options:[RNNNavigationOptions emptyOptions] defaultOptions:nil presenter:[[RNNSideMenuPresenter alloc] initWithDefaultOptions:nil] eventEmitter:nil]; }