mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			86 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Matlab
		
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Matlab
		
	
| 
											7 years ago
										 | // | ||
|  | //  Copyright (c) 2019 Open Whisper Systems. All rights reserved. | ||
|  | // | ||
|  | 
 | ||
|  | #import <objc/runtime.h> | ||
|  | 
 | ||
|  | @implementation UIAlertController (iOS9) | ||
|  | 
 | ||
|  | + (void)load { | ||
|  |     static dispatch_once_t onceToken; | ||
|  |     dispatch_once(&onceToken, ^{ | ||
|  |         // On iOS9, avoids an exception when presenting an alert controller. | ||
|  |         // | ||
|  |         // *** Assertion failure in -[UIAlertController supportedInterfaceOrientations], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.30.14/UIAlertController.m:542 | ||
|  |         // Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UIAlertController:supportedInterfaceOrientations was invoked recursively!' | ||
|  |         // | ||
|  |         // I'm not sure when this was introduced, or the exact root casue, but this quick workaround | ||
|  |         // seems reasonable given the small size of our iOS9 userbase. | ||
|  |         if (@available(iOS 10, *)) { | ||
|  |             return; | ||
|  |         } | ||
|  | 
 | ||
|  |         Class class = [self class]; | ||
|  | 
 | ||
|  |         // supportedInterfaceOrientation | ||
|  | 
 | ||
|  |         SEL originalOrientationSelector = @selector(supportedInterfaceOrientations); | ||
|  |         SEL swizzledOrientationSelector = @selector(ows_iOS9Alerts_swizzle_supportedInterfaceOrientation); | ||
|  | 
 | ||
|  |         Method originalOrientationMethod = class_getInstanceMethod(class, originalOrientationSelector); | ||
|  |         Method swizzledOrientationMethod = class_getInstanceMethod(class, swizzledOrientationSelector); | ||
|  | 
 | ||
|  |         BOOL didAddOrientationMethod = class_addMethod(class, | ||
|  |                                             originalOrientationSelector, | ||
|  |                                             method_getImplementation(swizzledOrientationMethod), | ||
|  |                                             method_getTypeEncoding(swizzledOrientationMethod)); | ||
|  | 
 | ||
|  |         if (didAddOrientationMethod) { | ||
|  |             class_replaceMethod(class, | ||
|  |                                 swizzledOrientationSelector, | ||
|  |                                 method_getImplementation(originalOrientationMethod), | ||
|  |                                 method_getTypeEncoding(originalOrientationMethod)); | ||
|  |         } else { | ||
|  |             method_exchangeImplementations(originalOrientationMethod, swizzledOrientationMethod); | ||
|  |         } | ||
|  | 
 | ||
|  |         // shouldAutorotate | ||
|  | 
 | ||
|  |         SEL originalAutorotateSelector = @selector(shouldAutorotate); | ||
|  |         SEL swizzledAutorotateSelector = @selector(ows_iOS9Alerts_swizzle_shouldAutorotate); | ||
|  | 
 | ||
|  |         Method originalAutorotateMethod = class_getInstanceMethod(class, originalAutorotateSelector); | ||
|  |         Method swizzledAutorotateMethod = class_getInstanceMethod(class, swizzledAutorotateSelector); | ||
|  | 
 | ||
|  |         BOOL didAddAutorotateMethod = class_addMethod(class, | ||
|  |                                                        originalAutorotateSelector, | ||
|  |                                                        method_getImplementation(swizzledAutorotateMethod), | ||
|  |                                                        method_getTypeEncoding(swizzledAutorotateMethod)); | ||
|  | 
 | ||
|  |         if (didAddAutorotateMethod) { | ||
|  |             class_replaceMethod(class, | ||
|  |                                 swizzledAutorotateSelector, | ||
|  |                                 method_getImplementation(originalAutorotateMethod), | ||
|  |                                 method_getTypeEncoding(originalAutorotateMethod)); | ||
|  |         } else { | ||
|  |             method_exchangeImplementations(originalAutorotateMethod, swizzledAutorotateMethod); | ||
|  |         } | ||
|  |     }); | ||
|  | } | ||
|  | 
 | ||
|  | #pragma mark - Method Swizzling | ||
|  | 
 | ||
|  | - (UIInterfaceOrientationMask)ows_iOS9Alerts_swizzle_supportedInterfaceOrientation | ||
|  | { | ||
|  |     OWSLogInfo(@"swizzled"); | ||
|  |     return UIInterfaceOrientationMaskAllButUpsideDown; | ||
|  | } | ||
|  | 
 | ||
|  | - (BOOL)ows_iOS9Alerts_swizzle_shouldAutorotate | ||
|  | { | ||
|  |     OWSLogInfo(@"swizzled"); | ||
|  |     return NO; | ||
|  | } | ||
|  | 
 | ||
|  | @end |