From 9dfbf6e6bcb40be23c8a28ea75435dc3221fe150 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Tue, 27 Feb 2018 08:47:14 -0500 Subject: [PATCH] Fix crash presenting settings dialog off main thread // FREEBIE --- .../src/util/UIViewController+Permissions.m | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/Signal/src/util/UIViewController+Permissions.m b/Signal/src/util/UIViewController+Permissions.m index dbc8db66b..59c85169d 100644 --- a/Signal/src/util/UIViewController+Permissions.m +++ b/Signal/src/util/UIViewController+Permissions.m @@ -83,30 +83,32 @@ NS_ASSUME_NONNULL_BEGIN }; void (^presentSettingsDialog)(void) = ^(void) { - UIAlertController *alert = [UIAlertController - alertControllerWithTitle:NSLocalizedString(@"MISSING_MEDIA_LIBRARY_PERMISSION_TITLE", - @"Alert title when user has previously denied media library access") - message:NSLocalizedString(@"MISSING_MEDIA_LIBRARY_PERMISSION_MESSAGE", - @"Alert body when user has previously denied media library access") - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction *openSettingsAction = - [UIAlertAction actionWithTitle:CommonStrings.openSettingsButton - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *_Nonnull action) { - [[UIApplication sharedApplication] openSystemSettings]; - completionCallback(NO); - }]; - [alert addAction:openSettingsAction]; - - UIAlertAction *dismissAction = [UIAlertAction actionWithTitle:CommonStrings.dismissButton - style:UIAlertActionStyleCancel - handler:^(UIAlertAction *action) { - completionCallback(NO); - }]; - [alert addAction:dismissAction]; - - [self presentViewController:alert animated:YES completion:nil]; + DispatchMainThreadSafe(^{ + UIAlertController *alert = [UIAlertController + alertControllerWithTitle:NSLocalizedString(@"MISSING_MEDIA_LIBRARY_PERMISSION_TITLE", + @"Alert title when user has previously denied media library access") + message:NSLocalizedString(@"MISSING_MEDIA_LIBRARY_PERMISSION_MESSAGE", + @"Alert body when user has previously denied media library access") + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction *openSettingsAction = + [UIAlertAction actionWithTitle:CommonStrings.openSettingsButton + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *_Nonnull action) { + [[UIApplication sharedApplication] openSystemSettings]; + completionCallback(NO); + }]; + [alert addAction:openSettingsAction]; + + UIAlertAction *dismissAction = [UIAlertAction actionWithTitle:CommonStrings.dismissButton + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *action) { + completionCallback(NO); + }]; + [alert addAction:dismissAction]; + + [self presentViewController:alert animated:YES completion:nil]; + }); }; if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {