From 6dd171b8c2b412e79b4b92b2e2cc75486658e283 Mon Sep 17 00:00:00 2001 From: Nick Lockwood Date: Mon, 16 Nov 2015 03:15:31 -0800 Subject: [PATCH] RCTImagePicker now uses main thread Summary: public RCTImagePicker (aka ImagePickerIOS) was previously displaying UI from a random thread, which is unsafe. This diff forces it to execute on the main thread instead. Reviewed By: jspahrsummers Differential Revision: D2657465 fb-gh-sync-id: 3c0fa6935061ccaa3e6ce649b4e3e8ad8c701384 --- Libraries/CameraRoll/RCTImagePickerManager.m | 5 +++++ Libraries/RCTTest/RCTSnapshotManager.m | 3 ++- React/Modules/RCTStatusBarManager.m | 9 ++++----- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Libraries/CameraRoll/RCTImagePickerManager.m b/Libraries/CameraRoll/RCTImagePickerManager.m index 9f7daa622..87071863b 100644 --- a/Libraries/CameraRoll/RCTImagePickerManager.m +++ b/Libraries/CameraRoll/RCTImagePickerManager.m @@ -42,6 +42,11 @@ RCT_EXPORT_MODULE(ImagePickerIOS); return self; } +- (dispatch_queue_t)methodQueue +{ + return dispatch_get_main_queue(); +} + RCT_EXPORT_METHOD(canRecordVideos:(RCTResponseSenderBlock)callback) { NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera]; diff --git a/Libraries/RCTTest/RCTSnapshotManager.m b/Libraries/RCTTest/RCTSnapshotManager.m index 637e2db05..e74cf9c30 100644 --- a/Libraries/RCTTest/RCTSnapshotManager.m +++ b/Libraries/RCTTest/RCTSnapshotManager.m @@ -37,7 +37,8 @@ RCT_EXPORT_MODULE() -- (UIView *)view { +- (UIView *)view +{ return [RCTSnapshotView new]; } diff --git a/React/Modules/RCTStatusBarManager.m b/React/Modules/RCTStatusBarManager.m index 893c3e0f3..80e40c9aa 100644 --- a/React/Modules/RCTStatusBarManager.m +++ b/React/Modules/RCTStatusBarManager.m @@ -52,7 +52,6 @@ RCT_EXPORT_MODULE() NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc addObserver:self selector:@selector(applicationDidChangeStatusBarFrame:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; [nc addObserver:self selector:@selector(applicationWillChangeStatusBarFrame:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil]; - } return self; } @@ -72,10 +71,10 @@ RCT_EXPORT_MODULE() CGRect frame = [notification.userInfo[UIApplicationStatusBarFrameUserInfoKey] CGRectValue]; NSDictionary *event = @{ @"frame": @{ - @"x": @(frame.origin.x), - @"y": @(frame.origin.y), - @"width": @(frame.size.width), - @"height": @(frame.size.height), + @"x": @(frame.origin.x), + @"y": @(frame.origin.y), + @"width": @(frame.size.width), + @"height": @(frame.size.height), }, }; [_bridge.eventDispatcher sendDeviceEventWithName:eventName body:event];