Skip to content

Commit 554f936

Browse files
[camera] Remove iOS thread-safe result class (flutter#6498)
`FlutterResult` is thread-safe in all versions of Flutter that this plugin now supports, so the wrapper class to move result calls to the main thread is no longer necessary.
1 parent 18c4ca4 commit 554f936

28 files changed

+283
-583
lines changed

packages/camera/camera_avfoundation/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.9.15+1
2+
3+
* Simplifies internal handling of method channel responses.
4+
15
## 0.9.15
26

37
* Adds support to control video FPS and bitrate. See `CameraController.withSettings`.

packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
/* Begin PBXBuildFile section */
1010
033B94BE269C40A200B4DF97 /* CameraMethodChannelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 033B94BD269C40A200B4DF97 /* CameraMethodChannelTests.m */; };
1111
03BB766B2665316900CE5A93 /* CameraFocusTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 03BB766A2665316900CE5A93 /* CameraFocusTests.m */; };
12-
03F6F8B226CBB4670024B8D3 /* ThreadSafeFlutterResultTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 03F6F8B126CBB4670024B8D3 /* ThreadSafeFlutterResultTests.m */; };
1312
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
1413
236906D1621AE863A5B2E770 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 89D82918721FABF772705DB0 /* libPods-Runner.a */; };
1514
25C3919135C3D981E6F800D0 /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1944D8072499F3B5E7653D44 /* libPods-RunnerTests.a */; };
@@ -36,7 +35,6 @@
3635
E0CDBAC227CD9729002561D9 /* CameraTestUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E0CDBAC127CD9729002561D9 /* CameraTestUtils.m */; };
3736
E0F95E3D27A32AB900699390 /* CameraPropertiesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E0F95E3C27A32AB900699390 /* CameraPropertiesTests.m */; };
3837
E487C86026D686A10034AC92 /* CameraPreviewPauseTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E487C85F26D686A10034AC92 /* CameraPreviewPauseTests.m */; };
39-
F6EE622F2710A6FC00905E4A /* MockFLTThreadSafeFlutterResult.m in Sources */ = {isa = PBXBuildFile; fileRef = F6EE622E2710A6FC00905E4A /* MockFLTThreadSafeFlutterResult.m */; };
4038
/* End PBXBuildFile section */
4139

4240
/* Begin PBXContainerItemProxy section */
@@ -68,7 +66,6 @@
6866
03BB766A2665316900CE5A93 /* CameraFocusTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CameraFocusTests.m; sourceTree = "<group>"; };
6967
03BB766C2665316900CE5A93 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
7068
03BB767226653ABE00CE5A93 /* CameraOrientationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraOrientationTests.m; sourceTree = "<group>"; };
71-
03F6F8B126CBB4670024B8D3 /* ThreadSafeFlutterResultTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ThreadSafeFlutterResultTests.m; sourceTree = "<group>"; };
7269
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
7370
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
7471
14AE82C910C2A12F2ECB2094 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
@@ -106,8 +103,6 @@
106103
E0CDBAC127CD9729002561D9 /* CameraTestUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CameraTestUtils.m; sourceTree = "<group>"; };
107104
E0F95E3C27A32AB900699390 /* CameraPropertiesTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CameraPropertiesTests.m; sourceTree = "<group>"; };
108105
E487C85F26D686A10034AC92 /* CameraPreviewPauseTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CameraPreviewPauseTests.m; sourceTree = "<group>"; };
109-
F63F9EED27143B19002479BF /* MockFLTThreadSafeFlutterResult.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockFLTThreadSafeFlutterResult.h; sourceTree = "<group>"; };
110-
F6EE622E2710A6FC00905E4A /* MockFLTThreadSafeFlutterResult.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockFLTThreadSafeFlutterResult.m; sourceTree = "<group>"; };
111106
/* End PBXFileReference section */
112107

113108
/* Begin PBXFrameworksBuildPhase section */
@@ -138,7 +133,6 @@
138133
03BB767226653ABE00CE5A93 /* CameraOrientationTests.m */,
139134
03BB766C2665316900CE5A93 /* Info.plist */,
140135
033B94BD269C40A200B4DF97 /* CameraMethodChannelTests.m */,
141-
03F6F8B126CBB4670024B8D3 /* ThreadSafeFlutterResultTests.m */,
142136
E0C6E1FF2770F01A00EA6AA3 /* ThreadSafeEventChannelTests.m */,
143137
E0C6E1FD2770F01A00EA6AA3 /* ThreadSafeMethodChannelTests.m */,
144138
E0C6E1FE2770F01A00EA6AA3 /* ThreadSafeTextureRegistryTests.m */,
@@ -150,8 +144,6 @@
150144
E0CDBAC027CD9729002561D9 /* CameraTestUtils.h */,
151145
E0CDBAC127CD9729002561D9 /* CameraTestUtils.m */,
152146
E487C85F26D686A10034AC92 /* CameraPreviewPauseTests.m */,
153-
F6EE622E2710A6FC00905E4A /* MockFLTThreadSafeFlutterResult.m */,
154-
F63F9EED27143B19002479BF /* MockFLTThreadSafeFlutterResult.h */,
155147
E032F24F279F5E94009E9028 /* CameraCaptureSessionQueueRaceConditionTests.m */,
156148
E0F95E3C27A32AB900699390 /* CameraPropertiesTests.m */,
157149
788A065927B0E02900533D74 /* StreamingTest.m */,
@@ -287,7 +279,7 @@
287279
97C146E61CF9000F007C117D /* Project object */ = {
288280
isa = PBXProject;
289281
attributes = {
290-
LastUpgradeCheck = 1430;
282+
LastUpgradeCheck = 1510;
291283
ORGANIZATIONNAME = "The Flutter Authors";
292284
TargetAttributes = {
293285
03BB76672665316900CE5A93 = {
@@ -445,7 +437,6 @@
445437
isa = PBXSourcesBuildPhase;
446438
buildActionMask = 2147483647;
447439
files = (
448-
03F6F8B226CBB4670024B8D3 /* ThreadSafeFlutterResultTests.m in Sources */,
449440
033B94BE269C40A200B4DF97 /* CameraMethodChannelTests.m in Sources */,
450441
E071CF7227B3061B006EF3BA /* FLTCamPhotoCaptureTests.m in Sources */,
451442
E0F95E3D27A32AB900699390 /* CameraPropertiesTests.m in Sources */,
@@ -455,7 +446,6 @@
455446
E071CF7427B31DE4006EF3BA /* FLTCamSampleBufferTests.m in Sources */,
456447
E04F108627A87CA600573D0C /* FLTSavePhotoDelegateTests.m in Sources */,
457448
43ED1537282570DE00EB00DE /* AvailableCamerasTest.m in Sources */,
458-
F6EE622F2710A6FC00905E4A /* MockFLTThreadSafeFlutterResult.m in Sources */,
459449
E0CDBAC227CD9729002561D9 /* CameraTestUtils.m in Sources */,
460450
334733EA2668111C00DCC49E /* CameraOrientationTests.m in Sources */,
461451
CEF6611A2B5E36A500D33FD4 /* CameraSessionPresetsTests.m in Sources */,

packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1430"
3+
LastUpgradeVersion = "1510"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

packages/camera/camera_avfoundation/example/ios/RunnerTests/AvailableCamerasTest.m

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
@import XCTest;
88
@import AVFoundation;
99
#import <OCMock/OCMock.h>
10-
#import "MockFLTThreadSafeFlutterResult.h"
1110

1211
@interface AvailableCamerasTest : XCTestCase
1312
@end
@@ -56,17 +55,19 @@ - (void)testAvailableCamerasShouldReturnAllCamerasOnMultiCameraIPhone {
5655
}
5756
OCMStub([discoverySessionMock devices]).andReturn([NSArray arrayWithArray:cameras]);
5857

59-
MockFLTThreadSafeFlutterResult *resultObject =
60-
[[MockFLTThreadSafeFlutterResult alloc] initWithExpectation:expectation];
61-
6258
// Set up method call
6359
FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"availableCameras"
6460
arguments:nil];
6561

66-
[camera handleMethodCallAsync:call result:resultObject];
62+
__block id resultValue;
63+
[camera handleMethodCallAsync:call
64+
result:^(id _Nullable result) {
65+
resultValue = result;
66+
[expectation fulfill];
67+
}];
6768

6869
// Verify the result
69-
NSDictionary *dictionaryResult = (NSDictionary *)resultObject.receivedResult;
70+
NSDictionary *dictionaryResult = (NSDictionary *)resultValue;
7071
if (@available(iOS 13.0, *)) {
7172
XCTAssertTrue([dictionaryResult count] == 4);
7273
} else {
@@ -104,17 +105,19 @@ - (void)testAvailableCamerasShouldReturnOneCameraOnSingleCameraIPhone {
104105
[cameras addObjectsFromArray:@[ wideAngleCamera, frontFacingCamera ]];
105106
OCMStub([discoverySessionMock devices]).andReturn([NSArray arrayWithArray:cameras]);
106107

107-
MockFLTThreadSafeFlutterResult *resultObject =
108-
[[MockFLTThreadSafeFlutterResult alloc] initWithExpectation:expectation];
109-
110108
// Set up method call
111109
FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"availableCameras"
112110
arguments:nil];
113111

114-
[camera handleMethodCallAsync:call result:resultObject];
112+
__block id resultValue;
113+
[camera handleMethodCallAsync:call
114+
result:^(id _Nullable result) {
115+
resultValue = result;
116+
[expectation fulfill];
117+
}];
115118

116119
// Verify the result
117-
NSDictionary *dictionaryResult = (NSDictionary *)resultObject.receivedResult;
120+
NSDictionary *dictionaryResult = (NSDictionary *)resultValue;
118121
XCTAssertTrue([dictionaryResult count] == 2);
119122
}
120123

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraCaptureSessionQueueRaceConditionTests.m

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,9 @@ - (void)testFixForCaptureSessionQueueNullPointerCrashDueToRaceCondition {
3030
[disposeExpectation fulfill];
3131
}];
3232
[camera createCameraOnSessionQueueWithCreateMethodCall:createCall
33-
result:[[FLTThreadSafeFlutterResult alloc]
34-
initWithResult:^(id _Nullable result) {
35-
[createExpectation fulfill];
36-
}]];
33+
result:^(id _Nullable result) {
34+
[createExpectation fulfill];
35+
}];
3736
[self waitForExpectationsWithTimeout:1 handler:nil];
3837
// `captureSessionQueue` must not be nil after `create` call. Otherwise a nil
3938
// `captureSessionQueue` passed into `AVCaptureVideoDataOutput::setSampleBufferDelegate:queue:`

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraFocusTests.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,11 @@ - (void)testSetFocusPointWithResult_SetsFocusPointOfInterest {
114114
[_camera setValue:_mockDevice forKey:@"captureDevice"];
115115

116116
// Run test
117-
[_camera setFocusPointWithResult:[[FLTThreadSafeFlutterResult alloc]
118-
initWithResult:^(id _Nullable result){
119-
}]
120-
x:1
121-
y:1];
117+
[_camera
118+
setFocusPointWithResult:^(id _Nullable result) {
119+
}
120+
x:1
121+
y:1];
122122

123123
// Verify the focus point of interest has been set
124124
OCMVerify([_mockDevice setFocusPointOfInterest:CGPointMake(1, 1)]);

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraMethodChannelTests.m

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
@import XCTest;
88
@import AVFoundation;
99
#import <OCMock/OCMock.h>
10-
#import "MockFLTThreadSafeFlutterResult.h"
1110

1211
@interface CameraMethodChannelTests : XCTestCase
1312
@end
@@ -28,19 +27,21 @@ - (void)testCreate_ShouldCallResultOnMainThread {
2827
OCMStub([avCaptureSessionMock alloc]).andReturn(avCaptureSessionMock);
2928
OCMStub([avCaptureSessionMock canSetSessionPreset:[OCMArg any]]).andReturn(YES);
3029

31-
MockFLTThreadSafeFlutterResult *resultObject =
32-
[[MockFLTThreadSafeFlutterResult alloc] initWithExpectation:expectation];
33-
3430
// Set up method call
3531
FlutterMethodCall *call = [FlutterMethodCall
3632
methodCallWithMethodName:@"create"
3733
arguments:@{@"resolutionPreset" : @"medium", @"enableAudio" : @(1)}];
3834

39-
[camera createCameraOnSessionQueueWithCreateMethodCall:call result:resultObject];
35+
__block id resultValue;
36+
[camera createCameraOnSessionQueueWithCreateMethodCall:call
37+
result:^(id _Nullable result) {
38+
resultValue = result;
39+
[expectation fulfill];
40+
}];
4041
[self waitForExpectationsWithTimeout:1 handler:nil];
4142

4243
// Verify the result
43-
NSDictionary *dictionaryResult = (NSDictionary *)resultObject.receivedResult;
44+
NSDictionary *dictionaryResult = (NSDictionary *)resultValue;
4445
XCTAssertNotNil(dictionaryResult);
4546
XCTAssert([[dictionaryResult allKeys] containsObject:@"cameraId"]);
4647
}

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPreviewPauseTests.m

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
@import XCTest;
88
@import AVFoundation;
99
#import <OCMock/OCMock.h>
10-
#import "MockFLTThreadSafeFlutterResult.h"
1110

1211
@interface CameraPreviewPauseTests : XCTestCase
1312
@end
@@ -16,17 +15,17 @@ @implementation CameraPreviewPauseTests
1615

1716
- (void)testPausePreviewWithResult_shouldPausePreview {
1817
FLTCam *camera = [[FLTCam alloc] init];
19-
MockFLTThreadSafeFlutterResult *resultObject = [[MockFLTThreadSafeFlutterResult alloc] init];
2018

21-
[camera pausePreviewWithResult:resultObject];
19+
[camera pausePreviewWithResult:^(id _Nullable result){
20+
}];
2221
XCTAssertTrue(camera.isPreviewPaused);
2322
}
2423

2524
- (void)testResumePreviewWithResult_shouldResumePreview {
2625
FLTCam *camera = [[FLTCam alloc] init];
27-
MockFLTThreadSafeFlutterResult *resultObject = [[MockFLTThreadSafeFlutterResult alloc] init];
2826

29-
[camera resumePreviewWithResult:resultObject];
27+
[camera resumePreviewWithResult:^(id _Nullable result){
28+
}];
3029
XCTAssertFalse(camera.isPreviewPaused);
3130
}
3231

0 commit comments

Comments
 (0)