mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 14:45:21 +00:00
Fix alert presentation with UIAlertController
This commit is contained in:
@@ -275,7 +275,7 @@ static unsigned char kBITPNGEndChunk[4] = {0x49, 0x45, 0x4e, 0x44};
|
|||||||
|
|
||||||
[alertController addAction:okAction];
|
[alertController addAction:okAction];
|
||||||
|
|
||||||
[self showView:alertController];
|
[self showAlertController:alertController];
|
||||||
} else {
|
} else {
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
|||||||
@@ -1091,7 +1091,7 @@ static void uncaught_cxx_exception_handler(const BITCrashUncaughtCXXExceptionInf
|
|||||||
[alertController addAction:alwaysSendAction];
|
[alertController addAction:alwaysSendAction];
|
||||||
}
|
}
|
||||||
|
|
||||||
[self showView:alertController];
|
[self showAlertController:alertController];
|
||||||
} else {
|
} else {
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
|||||||
@@ -201,7 +201,7 @@
|
|||||||
return navController;
|
return navController;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)showView:(UIViewController *)viewController {
|
- (UIViewController *)visibleWindowRootViewController {
|
||||||
// if we compile Crash only, then BITHockeyBaseViewController is not included
|
// if we compile Crash only, then BITHockeyBaseViewController is not included
|
||||||
// in the headers and will cause a warning with the modulemap file
|
// in the headers and will cause a warning with the modulemap file
|
||||||
#if HOCKEYSDK_FEATURE_AUTHENTICATOR || HOCKEYSDK_FEATURE_UPDATES || HOCKEYSDK_FEATURE_FEEDBACK
|
#if HOCKEYSDK_FEATURE_AUTHENTICATOR || HOCKEYSDK_FEATURE_UPDATES || HOCKEYSDK_FEATURE_FEEDBACK
|
||||||
@@ -222,14 +222,6 @@
|
|||||||
parentViewController = parentViewController.presentedViewController;
|
parentViewController = parentViewController.presentedViewController;
|
||||||
}
|
}
|
||||||
|
|
||||||
// as per documentation this only works if called from within viewWillAppear: or viewDidAppear:
|
|
||||||
// in tests this also worked fine on iOS 6 and 7 but not on iOS 5 so we are still trying this
|
|
||||||
if ([parentViewController isBeingPresented]) {
|
|
||||||
BITHockeyLog(@"WARNING: There is already a view controller being presented onto the parentViewController. Delaying presenting the new view controller by 0.5s.");
|
|
||||||
[self performSelector:@selector(showView:) withObject:viewController afterDelay:0.5];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// special addition to get rootViewController from three20 which has it's own controller handling
|
// special addition to get rootViewController from three20 which has it's own controller handling
|
||||||
if (NSClassFromString(@"TTNavigator")) {
|
if (NSClassFromString(@"TTNavigator")) {
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
@@ -241,6 +233,46 @@
|
|||||||
#pragma clang diagnostic pop
|
#pragma clang diagnostic pop
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return parentViewController;
|
||||||
|
#else
|
||||||
|
return nil;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)showAlertController:(UIViewController *)alertController {
|
||||||
|
// if we compile Crash only, then BITHockeyBaseViewController is not included
|
||||||
|
// in the headers and will cause a warning with the modulemap file
|
||||||
|
#if HOCKEYSDK_FEATURE_AUTHENTICATOR || HOCKEYSDK_FEATURE_UPDATES || HOCKEYSDK_FEATURE_FEEDBACK
|
||||||
|
UIViewController *parentViewController = [self visibleWindowRootViewController];
|
||||||
|
|
||||||
|
// as per documentation this only works if called from within viewWillAppear: or viewDidAppear:
|
||||||
|
// in tests this also worked fine on iOS 6 and 7 but not on iOS 5 so we are still trying this
|
||||||
|
if ([parentViewController isBeingPresented]) {
|
||||||
|
BITHockeyLog(@"WARNING: There is already a view controller being presented onto the parentViewController. Delaying presenting the new view controller by 0.5s.");
|
||||||
|
[self performSelector:@selector(showAlertController:) withObject:alertController afterDelay:0.5];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parentViewController) {
|
||||||
|
[parentViewController presentViewController:alertController animated:YES completion:nil];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)showView:(UIViewController *)viewController {
|
||||||
|
// if we compile Crash only, then BITHockeyBaseViewController is not included
|
||||||
|
// in the headers and will cause a warning with the modulemap file
|
||||||
|
#if HOCKEYSDK_FEATURE_AUTHENTICATOR || HOCKEYSDK_FEATURE_UPDATES || HOCKEYSDK_FEATURE_FEEDBACK
|
||||||
|
UIViewController *parentViewController = [self visibleWindowRootViewController];
|
||||||
|
|
||||||
|
// as per documentation this only works if called from within viewWillAppear: or viewDidAppear:
|
||||||
|
// in tests this also worked fine on iOS 6 and 7 but not on iOS 5 so we are still trying this
|
||||||
|
if ([parentViewController isBeingPresented]) {
|
||||||
|
BITHockeyLog(@"WARNING: There is already a view controller being presented onto the parentViewController. Delaying presenting the new view controller by 0.5s.");
|
||||||
|
[self performSelector:@selector(showView:) withObject:viewController afterDelay:0.5];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (_navController != nil) _navController = nil;
|
if (_navController != nil) _navController = nil;
|
||||||
|
|
||||||
_navController = [self customNavigationControllerWithRootViewController:viewController presentationStyle:_modalPresentationStyle];
|
_navController = [self customNavigationControllerWithRootViewController:viewController presentationStyle:_modalPresentationStyle];
|
||||||
@@ -260,6 +292,8 @@
|
|||||||
} else {
|
} else {
|
||||||
// if not, we add a subview to the window. A bit hacky but should work in most circumstances.
|
// if not, we add a subview to the window. A bit hacky but should work in most circumstances.
|
||||||
// Also, we don't get a nice animation for free, but hey, this is for beta not production users ;)
|
// Also, we don't get a nice animation for free, but hey, this is for beta not production users ;)
|
||||||
|
UIWindow *visibleWindow = [self findVisibleWindow];
|
||||||
|
|
||||||
BITHockeyLog(@"INFO: No rootViewController found, using UIWindow-approach: %@", visibleWindow);
|
BITHockeyLog(@"INFO: No rootViewController found, using UIWindow-approach: %@", visibleWindow);
|
||||||
if ([viewController isKindOfClass:[BITHockeyBaseViewController class]])
|
if ([viewController isKindOfClass:[BITHockeyBaseViewController class]])
|
||||||
[(BITHockeyBaseViewController *)viewController setModalAnimated:NO];
|
[(BITHockeyBaseViewController *)viewController setModalAnimated:NO];
|
||||||
|
|||||||
@@ -71,6 +71,7 @@
|
|||||||
// UI helpers
|
// UI helpers
|
||||||
- (UIWindow *)findVisibleWindow;
|
- (UIWindow *)findVisibleWindow;
|
||||||
- (UINavigationController *)customNavigationControllerWithRootViewController:(UIViewController *)viewController presentationStyle:(UIModalPresentationStyle)presentationStyle;
|
- (UINavigationController *)customNavigationControllerWithRootViewController:(UIViewController *)viewController presentationStyle:(UIModalPresentationStyle)presentationStyle;
|
||||||
|
- (void)showAlertController:(UIViewController *)alertController;
|
||||||
- (void)showView:(UIViewController *)viewController;
|
- (void)showView:(UIViewController *)viewController;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -454,7 +454,7 @@
|
|||||||
|
|
||||||
[alertController addAction:showAction];
|
[alertController addAction:showAction];
|
||||||
|
|
||||||
[self showView:alertController];
|
[self showAlertController:alertController];
|
||||||
} else {
|
} else {
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ typedef NS_ENUM(NSInteger, BITUpdateAlertViewTag) {
|
|||||||
|
|
||||||
[alertController addAction:okAction];
|
[alertController addAction:okAction];
|
||||||
|
|
||||||
[self showView:alertController];
|
[self showAlertController:alertController];
|
||||||
} else {
|
} else {
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
@@ -576,7 +576,7 @@ typedef NS_ENUM(NSInteger, BITUpdateAlertViewTag) {
|
|||||||
|
|
||||||
[alertController addAction:installAction];
|
[alertController addAction:installAction];
|
||||||
|
|
||||||
[self showView:alertController];
|
[self showAlertController:alertController];
|
||||||
} else {
|
} else {
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
@@ -640,7 +640,7 @@ typedef NS_ENUM(NSInteger, BITUpdateAlertViewTag) {
|
|||||||
[alertController addAction:installAction];
|
[alertController addAction:installAction];
|
||||||
}
|
}
|
||||||
|
|
||||||
[self showView:alertController];
|
[self showAlertController:alertController ];
|
||||||
} else {
|
} else {
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
@@ -759,7 +759,7 @@ typedef NS_ENUM(NSInteger, BITUpdateAlertViewTag) {
|
|||||||
[alertController addAction:checkAction];
|
[alertController addAction:checkAction];
|
||||||
}
|
}
|
||||||
|
|
||||||
[self showView:alertController];
|
[self showAlertController:alertController];
|
||||||
} else {
|
} else {
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
@@ -903,7 +903,7 @@ typedef NS_ENUM(NSInteger, BITUpdateAlertViewTag) {
|
|||||||
|
|
||||||
[alertController addAction:okAction];
|
[alertController addAction:okAction];
|
||||||
|
|
||||||
[self showView:alertController];
|
[self showAlertController:alertController];
|
||||||
} else {
|
} else {
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
@@ -1115,7 +1115,7 @@ typedef NS_ENUM(NSInteger, BITUpdateAlertViewTag) {
|
|||||||
|
|
||||||
[alertController addAction:okAction];
|
[alertController addAction:okAction];
|
||||||
|
|
||||||
[self showView:alertController];
|
[self showAlertController:alertController];
|
||||||
} else {
|
} else {
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
|||||||
Reference in New Issue
Block a user