| 
				
			 | 
			
			
				@@ -1,61 +1,46 @@ 
			 | 
		
	
		
			
			| 
				1
			 | 
			
				1
			 | 
			
			
				 #import "RNNOverlayManager.h" 
			 | 
		
	
		
			
			| 
				2
			 | 
			
				
			 | 
			
			
				-#import "RNNErrorHandler.h" 
			 | 
		
	
		
			
			| 
				3
			 | 
			
				2
			 | 
			
			
				 #import "RNNOverlayWindow.h" 
			 | 
		
	
		
			
			| 
				4
			 | 
			
				3
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				5
			 | 
			
				4
			 | 
			
			
				 @implementation RNNOverlayManager { 
			 | 
		
	
		
			
			| 
				6
			 | 
			
				
			 | 
			
			
				-	NSMutableDictionary* _overlayDict; 
			 | 
		
	
		
			
			| 
				7
			 | 
			
				
			 | 
			
			
				-	NSMutableDictionary* _overlayWindows; 
			 | 
		
	
		
			
			| 
				8
			 | 
			
				
			 | 
			
			
				-	RNNStore* _store; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				5
			 | 
			
			
				+	NSMutableArray* _overlayWindows; 
			 | 
		
	
		
			
			| 
				9
			 | 
			
				6
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				10
			 | 
			
				7
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				11
			 | 
			
				
			 | 
			
			
				-- (instancetype)initWithStore:(RNNStore *)store { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				8
			 | 
			
			
				+- (instancetype)init { 
			 | 
		
	
		
			
			| 
				12
			 | 
			
				9
			 | 
			
			
				 	self = [super init]; 
			 | 
		
	
		
			
			| 
				13
			 | 
			
				
			 | 
			
			
				-	_overlayDict = [[NSMutableDictionary alloc] init]; 
			 | 
		
	
		
			
			| 
				14
			 | 
			
				
			 | 
			
			
				-	_overlayWindows = [[NSMutableDictionary alloc] init]; 
			 | 
		
	
		
			
			| 
				15
			 | 
			
				
			 | 
			
			
				-	_store = store; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				10
			 | 
			
			
				+	_overlayWindows = [[NSMutableArray alloc] init]; 
			 | 
		
	
		
			
			| 
				16
			 | 
			
				11
			 | 
			
			
				 	return self; 
			 | 
		
	
		
			
			| 
				17
			 | 
			
				12
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				18
			 | 
			
				13
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				19
			 | 
			
				14
			 | 
			
			
				 #pragma mark - public 
			 | 
		
	
		
			
			| 
				20
			 | 
			
				15
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				21
			 | 
			
				
			 | 
			
			
				-- (void)showOverlay:(RNNRootViewController *)viewController completion:(RNNTransitionCompletionBlock)completion { 
			 | 
		
	
		
			
			| 
				22
			 | 
			
				
			 | 
			
			
				-	[self cacheOverlay:viewController]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				16
			 | 
			
			
				+- (void)showOverlay:(UIViewController *)viewController { 
			 | 
		
	
		
			
			| 
				23
			 | 
			
				17
			 | 
			
			
				 	UIWindow* overlayWindow = [[RNNOverlayWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
			 | 
		
	
		
			
			| 
				24
			 | 
			
				
			 | 
			
			
				-	[_overlayWindows setObject:overlayWindow forKey:viewController.componentId]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				18
			 | 
			
			
				+	[_overlayWindows addObject:overlayWindow]; 
			 | 
		
	
		
			
			| 
				25
			 | 
			
				19
			 | 
			
			
				 	[overlayWindow setWindowLevel:UIWindowLevelNormal]; 
			 | 
		
	
		
			
			| 
				26
			 | 
			
				20
			 | 
			
			
				 	[overlayWindow setRootViewController:viewController]; 
			 | 
		
	
		
			
			| 
				27
			 | 
			
				21
			 | 
			
			
				 	[overlayWindow setHidden:NO]; 
			 | 
		
	
		
			
			| 
				28
			 | 
			
				
			 | 
			
			
				-	 
			 | 
		
	
		
			
			| 
				29
			 | 
			
				
			 | 
			
			
				-	completion(); 
			 | 
		
	
		
			
			| 
				30
			 | 
			
				22
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				31
			 | 
			
				23
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				32
			 | 
			
				
			 | 
			
			
				-- (void)dismissOverlay:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion rejection:(RNNTransitionRejectionBlock)reject { 
			 | 
		
	
		
			
			| 
				33
			 | 
			
				
			 | 
			
			
				-	RNNRootViewController* viewController = [_overlayDict objectForKey:componentId]; 
			 | 
		
	
		
			
			| 
				34
			 | 
			
				
			 | 
			
			
				-	if (viewController) { 
			 | 
		
	
		
			
			| 
				35
			 | 
			
				
			 | 
			
			
				-		[self detachOverlayWindow:componentId]; 
			 | 
		
	
		
			
			| 
				36
			 | 
			
				
			 | 
			
			
				-		[self removeCachedOverlay:viewController]; 
			 | 
		
	
		
			
			| 
				37
			 | 
			
				
			 | 
			
			
				-		completion(); 
			 | 
		
	
		
			
			| 
				38
			 | 
			
				
			 | 
			
			
				-	} else { 
			 | 
		
	
		
			
			| 
				39
			 | 
			
				
			 | 
			
			
				-		[RNNErrorHandler reject:reject withErrorCode:1010 errorDescription:@"ComponentId not found"]; 
			 | 
		
	
		
			
			| 
				40
			 | 
			
				
			 | 
			
			
				-	} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				24
			 | 
			
			
				+- (void)dismissOverlay:(UIViewController*)viewController { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				25
			 | 
			
			
				+	UIWindow* overlayWindow = [self findWindowByRootViewController:viewController]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				26
			 | 
			
			
				+	[self detachOverlayWindow:overlayWindow]; 
			 | 
		
	
		
			
			| 
				41
			 | 
			
				27
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				42
			 | 
			
				28
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				43
			 | 
			
				29
			 | 
			
			
				 #pragma mark - private 
			 | 
		
	
		
			
			| 
				44
			 | 
			
				30
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				45
			 | 
			
				
			 | 
			
			
				-- (void)cacheOverlay:(RNNRootViewController*)viewController { 
			 | 
		
	
		
			
			| 
				46
			 | 
			
				
			 | 
			
			
				-	[_overlayDict setObject:viewController forKey:viewController.componentId]; 
			 | 
		
	
		
			
			| 
				47
			 | 
			
				
			 | 
			
			
				-} 
			 | 
		
	
		
			
			| 
				48
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				49
			 | 
			
				
			 | 
			
			
				-- (void)removeCachedOverlay:(RNNRootViewController*)viewController { 
			 | 
		
	
		
			
			| 
				50
			 | 
			
				
			 | 
			
			
				-	[_overlayDict removeObjectForKey:viewController.componentId]; 
			 | 
		
	
		
			
			| 
				51
			 | 
			
				
			 | 
			
			
				-	[_store removeComponent:viewController.componentId]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				31
			 | 
			
			
				+- (void)detachOverlayWindow:(UIWindow *)overlayWindow { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				32
			 | 
			
			
				+	[overlayWindow setHidden:YES]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				33
			 | 
			
			
				+	[_overlayWindows removeObject:overlayWindow]; 
			 | 
		
	
		
			
			| 
				52
			 | 
			
				34
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				53
			 | 
			
				35
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				54
			 | 
			
				
			 | 
			
			
				-- (void)detachOverlayWindow:(NSString *)componentId { 
			 | 
		
	
		
			
			| 
				55
			 | 
			
				
			 | 
			
			
				-	UIWindow* overlayWindow = [_overlayWindows objectForKey:componentId]; 
			 | 
		
	
		
			
			| 
				56
			 | 
			
				
			 | 
			
			
				-	[overlayWindow setHidden:YES]; 
			 | 
		
	
		
			
			| 
				57
			 | 
			
				
			 | 
			
			
				-	[overlayWindow setRootViewController:nil]; 
			 | 
		
	
		
			
			| 
				58
			 | 
			
				
			 | 
			
			
				-	overlayWindow = nil; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				36
			 | 
			
			
				+- (UIWindow *)findWindowByRootViewController:(UIViewController *)viewController { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				37
			 | 
			
			
				+	for (UIWindow* window in _overlayWindows) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				38
			 | 
			
			
				+		if ([window.rootViewController isEqual:viewController]) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				39
			 | 
			
			
				+			return window; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				40
			 | 
			
			
				+		} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				41
			 | 
			
			
				+	} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				42
			 | 
			
			
				+	 
			 | 
		
	
		
			
			| 
				
			 | 
			
				43
			 | 
			
			
				+	return nil; 
			 | 
		
	
		
			
			| 
				59
			 | 
			
				44
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				60
			 | 
			
				45
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				61
			 | 
			
				46
			 | 
			
			
				 @end 
			 |