Browse Source

Pass mainWindow to commandsHandler (#4407)

Initialize and pass mainWindow to commandsHandler
Yogev Ben David 5 years ago
parent
commit
b40f8eda6e
No account linked to committer's email address

+ 1
- 1
lib/ios/RNNBridgeManager.h View File

7
 
7
 
8
 @interface RNNBridgeManager : NSObject <RCTBridgeDelegate>
8
 @interface RNNBridgeManager : NSObject <RCTBridgeDelegate>
9
 
9
 
10
-- (instancetype)initWithJsCodeLocation:(NSURL *)jsCodeLocation launchOptions:(NSDictionary *)launchOptions bridgeManagerDelegate:(id<RNNBridgeManagerDelegate>)delegate;
10
+- (instancetype)initWithJsCodeLocation:(NSURL *)jsCodeLocation launchOptions:(NSDictionary *)launchOptions bridgeManagerDelegate:(id<RNNBridgeManagerDelegate>)delegate mainWindow:(UIWindow *)mainWindow;
11
 
11
 
12
 - (void)registerExternalComponent:(NSString *)name callback:(RNNExternalViewCreator)callback;
12
 - (void)registerExternalComponent:(NSString *)name callback:(RNNExternalViewCreator)callback;
13
 
13
 

+ 7
- 4
lib/ios/RNNBridgeManager.m View File

21
 	NSDictionary* _launchOptions;
21
 	NSDictionary* _launchOptions;
22
 	id<RNNBridgeManagerDelegate> _delegate;
22
 	id<RNNBridgeManagerDelegate> _delegate;
23
 	RCTBridge* _bridge;
23
 	RCTBridge* _bridge;
24
-
24
+	UIWindow* _mainWindow;
25
+	
25
 	RNNStore* _store;
26
 	RNNStore* _store;
26
 
27
 
27
 	RNNCommandsHandler* _commandsHandler;
28
 	RNNCommandsHandler* _commandsHandler;
28
 }
29
 }
29
 
30
 
30
-- (instancetype)initWithJsCodeLocation:(NSURL *)jsCodeLocation launchOptions:(NSDictionary *)launchOptions bridgeManagerDelegate:(id<RNNBridgeManagerDelegate>)delegate {
31
+- (instancetype)initWithJsCodeLocation:(NSURL *)jsCodeLocation launchOptions:(NSDictionary *)launchOptions bridgeManagerDelegate:(id<RNNBridgeManagerDelegate>)delegate mainWindow:(UIWindow *)mainWindow {
31
 	if (self = [super init]) {
32
 	if (self = [super init]) {
33
+		_mainWindow = mainWindow;
32
 		_jsCodeLocation = jsCodeLocation;
34
 		_jsCodeLocation = jsCodeLocation;
33
 		_launchOptions = launchOptions;
35
 		_launchOptions = launchOptions;
34
 		_delegate = delegate;
36
 		_delegate = delegate;
35
 		
37
 		
36
 		_store = [RNNStore new];
38
 		_store = [RNNStore new];
37
 		_bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:_launchOptions];
39
 		_bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:_launchOptions];
38
-
40
+		
41
+		
39
 		[[NSNotificationCenter defaultCenter] addObserver:self
42
 		[[NSNotificationCenter defaultCenter] addObserver:self
40
 												 selector:@selector(onJavaScriptLoaded)
43
 												 selector:@selector(onJavaScriptLoaded)
41
 													 name:RCTJavaScriptDidLoadNotification
44
 													 name:RCTJavaScriptDidLoadNotification
76
 	id<RNNRootViewCreator> rootViewCreator = [[RNNReactRootViewCreator alloc] initWithBridge:bridge];
79
 	id<RNNRootViewCreator> rootViewCreator = [[RNNReactRootViewCreator alloc] initWithBridge:bridge];
77
 	RNNControllerFactory *controllerFactory = [[RNNControllerFactory alloc] initWithRootViewCreator:rootViewCreator eventEmitter:eventEmitter andBridge:bridge];
80
 	RNNControllerFactory *controllerFactory = [[RNNControllerFactory alloc] initWithRootViewCreator:rootViewCreator eventEmitter:eventEmitter andBridge:bridge];
78
 	
81
 	
79
-	_commandsHandler = [[RNNCommandsHandler alloc] initWithStore:_store controllerFactory:controllerFactory eventEmitter:eventEmitter stackManager:[RNNNavigationStackManager new] modalManager:[RNNModalManager new] overlayManager:[RNNOverlayManager new] sharedApplication:[UIApplication sharedApplication]];
82
+	_commandsHandler = [[RNNCommandsHandler alloc] initWithStore:_store controllerFactory:controllerFactory eventEmitter:eventEmitter stackManager:[RNNNavigationStackManager new] modalManager:[RNNModalManager new] overlayManager:[RNNOverlayManager new] mainWindow:_mainWindow];
80
 	RNNBridgeModule *bridgeModule = [[RNNBridgeModule alloc] initWithCommandsHandler:_commandsHandler];
83
 	RNNBridgeModule *bridgeModule = [[RNNBridgeModule alloc] initWithCommandsHandler:_commandsHandler];
81
 
84
 
82
 	return [@[bridgeModule,eventEmitter] arrayByAddingObjectsFromArray:[self extraModulesFromDelegate]];
85
 	return [@[bridgeModule,eventEmitter] arrayByAddingObjectsFromArray:[self extraModulesFromDelegate]];

+ 1
- 1
lib/ios/RNNCommandsHandler.h View File

9
 
9
 
10
 @interface RNNCommandsHandler : NSObject
10
 @interface RNNCommandsHandler : NSObject
11
 
11
 
12
-- (instancetype)initWithStore:(RNNStore*)store controllerFactory:(RNNControllerFactory*)controllerFactory eventEmitter:(RNNEventEmitter *)eventEmitter stackManager:(RNNNavigationStackManager *)stackManager modalManager:(RNNModalManager *)modalManager overlayManager:(RNNOverlayManager *)overlayManager sharedApplication:(UIApplication *)sharedApplication;
12
+- (instancetype)initWithStore:(RNNStore*)store controllerFactory:(RNNControllerFactory*)controllerFactory eventEmitter:(RNNEventEmitter *)eventEmitter stackManager:(RNNNavigationStackManager *)stackManager modalManager:(RNNModalManager *)modalManager overlayManager:(RNNOverlayManager *)overlayManager mainWindow:(UIWindow *)mainWindow;
13
 
13
 
14
 - (void)setRoot:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion;
14
 - (void)setRoot:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion;
15
 
15
 

+ 2
- 7
lib/ios/RNNCommandsHandler.m View File

34
 	RNNOverlayManager* _overlayManager;
34
 	RNNOverlayManager* _overlayManager;
35
 	RNNNavigationStackManager* _stackManager;
35
 	RNNNavigationStackManager* _stackManager;
36
 	RNNEventEmitter* _eventEmitter;
36
 	RNNEventEmitter* _eventEmitter;
37
-	UIApplication* _sharedApplication;
38
 	UIWindow* _mainWindow;
37
 	UIWindow* _mainWindow;
39
 }
38
 }
40
 
39
 
41
-- (instancetype)initWithStore:(RNNStore*)store controllerFactory:(RNNControllerFactory*)controllerFactory eventEmitter:(RNNEventEmitter *)eventEmitter stackManager:(RNNNavigationStackManager *)stackManager modalManager:(RNNModalManager *)modalManager overlayManager:(RNNOverlayManager *)overlayManager sharedApplication:(UIApplication *)sharedApplication {
40
+- (instancetype)initWithStore:(RNNStore*)store controllerFactory:(RNNControllerFactory*)controllerFactory eventEmitter:(RNNEventEmitter *)eventEmitter stackManager:(RNNNavigationStackManager *)stackManager modalManager:(RNNModalManager *)modalManager overlayManager:(RNNOverlayManager *)overlayManager mainWindow:(UIWindow *)mainWindow {
42
 	self = [super init];
41
 	self = [super init];
43
 	_store = store;
42
 	_store = store;
44
 	_controllerFactory = controllerFactory;
43
 	_controllerFactory = controllerFactory;
47
 	_modalManager.delegate = self;
46
 	_modalManager.delegate = self;
48
 	_stackManager = stackManager;
47
 	_stackManager = stackManager;
49
 	_overlayManager = overlayManager;
48
 	_overlayManager = overlayManager;
50
-	_sharedApplication = sharedApplication;
49
+	_mainWindow = mainWindow;
51
 	return self;
50
 	return self;
52
 }
51
 }
53
 
52
 
56
 - (void)setRoot:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion {
55
 - (void)setRoot:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion {
57
 	[self assertReady];
56
 	[self assertReady];
58
 	
57
 	
59
-	if (!_mainWindow) {
60
-		_mainWindow = _sharedApplication.keyWindow;
61
-	}
62
-	
63
 	[_modalManager dismissAllModalsAnimated:NO];
58
 	[_modalManager dismissAllModalsAnimated:NO];
64
 	[_store removeAllComponentsFromWindow:_mainWindow];
59
 	[_store removeAllComponentsFromWindow:_mainWindow];
65
 	
60
 	

+ 1
- 1
lib/ios/RNNSplashScreen.h View File

3
 
3
 
4
 @interface RNNSplashScreen : UIViewController
4
 @interface RNNSplashScreen : UIViewController
5
 
5
 
6
-+(void)show;
6
++(void)showOnWindow:(UIWindow *)window;
7
 
7
 
8
 @end
8
 @end

+ 1
- 5
lib/ios/RNNSplashScreen.m View File

4
 
4
 
5
 @implementation RNNSplashScreen
5
 @implementation RNNSplashScreen
6
 
6
 
7
-+(void)show {
8
-	
9
-	UIApplication.sharedApplication.delegate.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
10
-	UIApplication.sharedApplication.delegate.window.backgroundColor = [UIColor whiteColor];
11
-	
7
++ (void)showOnWindow:(UIWindow *)window {
12
 	CGRect screenBounds = [UIScreen mainScreen].bounds;
8
 	CGRect screenBounds = [UIScreen mainScreen].bounds;
13
 	UIViewController *viewController = nil;
9
 	UIViewController *viewController = nil;
14
 	
10
 	

+ 12
- 2
lib/ios/ReactNativeNavigation.m View File

55
 }
55
 }
56
 
56
 
57
 -(void)bootstrap:(NSURL *)jsCodeLocation launchOptions:(NSDictionary *)launchOptions bridgeManagerDelegate:(id<RNNBridgeManagerDelegate>)delegate {
57
 -(void)bootstrap:(NSURL *)jsCodeLocation launchOptions:(NSDictionary *)launchOptions bridgeManagerDelegate:(id<RNNBridgeManagerDelegate>)delegate {
58
-	self.bridgeManager = [[RNNBridgeManager alloc] initWithJsCodeLocation:jsCodeLocation launchOptions:launchOptions bridgeManagerDelegate:delegate];
59
-	[RNNSplashScreen show];
58
+	UIWindow* mainWindow = [self initializeKeyWindow];
59
+	
60
+	self.bridgeManager = [[RNNBridgeManager alloc] initWithJsCodeLocation:jsCodeLocation launchOptions:launchOptions bridgeManagerDelegate:delegate mainWindow:mainWindow];
61
+	[RNNSplashScreen showOnWindow:mainWindow];
62
+}
63
+
64
+- (UIWindow *)initializeKeyWindow {
65
+	UIWindow* keyWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
66
+	keyWindow.backgroundColor = [UIColor whiteColor];
67
+	UIApplication.sharedApplication.delegate.window = keyWindow;
68
+	
69
+	return keyWindow;
60
 }
70
 }
61
 
71
 
62
 @end
72
 @end

+ 2
- 3
lib/ios/ReactNativeNavigationTests/RNNCommandsHandlerTest.m View File

58
 
58
 
59
 - (void)setUp {
59
 - (void)setUp {
60
 	[super setUp];
60
 	[super setUp];
61
-	self.sharedApplication = [OCMockObject mockForClass:[UIApplication class]];
62
 	self.mainWindow = [OCMockObject partialMockForObject:[UIWindow new]];
61
 	self.mainWindow = [OCMockObject partialMockForObject:[UIWindow new]];
63
 	self.store = [OCMockObject partialMockForObject:[[RNNStore alloc] init]];
62
 	self.store = [OCMockObject partialMockForObject:[[RNNStore alloc] init]];
64
 	self.eventEmmiter = [OCMockObject partialMockForObject:[RNNEventEmitter new]];
63
 	self.eventEmmiter = [OCMockObject partialMockForObject:[RNNEventEmitter new]];
65
 	self.overlayManager = [OCMockObject partialMockForObject:[RNNOverlayManager new]];
64
 	self.overlayManager = [OCMockObject partialMockForObject:[RNNOverlayManager new]];
66
 	self.controllerFactory = [OCMockObject partialMockForObject:[[RNNControllerFactory alloc] initWithRootViewCreator:nil eventEmitter:self.eventEmmiter andBridge:nil]];
65
 	self.controllerFactory = [OCMockObject partialMockForObject:[[RNNControllerFactory alloc] initWithRootViewCreator:nil eventEmitter:self.eventEmmiter andBridge:nil]];
67
-	self.uut = [[RNNCommandsHandler alloc] initWithStore:self.store controllerFactory:self.controllerFactory eventEmitter:self.eventEmmiter stackManager:[RNNNavigationStackManager new] modalManager:[RNNModalManager new] overlayManager:self.overlayManager sharedApplication:_sharedApplication];
66
+	self.uut = [[RNNCommandsHandler alloc] initWithStore:self.store controllerFactory:self.controllerFactory eventEmitter:self.eventEmmiter stackManager:[RNNNavigationStackManager new] modalManager:[RNNModalManager new] overlayManager:self.overlayManager mainWindow:_mainWindow];
68
 	self.vc1 = [RNNRootViewController new];
67
 	self.vc1 = [RNNRootViewController new];
69
 	self.vc2 = [RNNRootViewController new];
68
 	self.vc2 = [RNNRootViewController new];
70
 	self.vc3 = [RNNRootViewController new];
69
 	self.vc3 = [RNNRootViewController new];
92
 -(NSArray*) getPublicMethodNamesForObject:(NSObject*)obj{
91
 -(NSArray*) getPublicMethodNamesForObject:(NSObject*)obj{
93
 	NSMutableArray* skipMethods = [NSMutableArray new];
92
 	NSMutableArray* skipMethods = [NSMutableArray new];
94
 	
93
 	
95
-	[skipMethods addObject:@"initWithStore:controllerFactory:eventEmitter:stackManager:modalManager:overlayManager:sharedApplication:"];
94
+	[skipMethods addObject:@"initWithStore:controllerFactory:eventEmitter:stackManager:modalManager:overlayManager:mainWindow:"];
96
 	[skipMethods addObject:@"assertReady"];
95
 	[skipMethods addObject:@"assertReady"];
97
 	[skipMethods addObject:@"removePopedViewControllers:"];
96
 	[skipMethods addObject:@"removePopedViewControllers:"];
98
 	[skipMethods addObject:@".cxx_destruct"];
97
 	[skipMethods addObject:@".cxx_destruct"];