From 4a1c7be9b44f1f041c5923c0f5715af047121375 Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Tue, 25 Jan 2022 15:28:11 -0800 Subject: [PATCH 1/4] [camera]move flashmode out to a separate file --- .../camera/camera/ios/Classes/CameraPlugin.m | 43 +------------------ .../camera/camera/ios/Classes/FlashMode.h | 24 +++++++++++ .../camera/camera/ios/Classes/FlashMode.m | 43 +++++++++++++++++++ 3 files changed, 68 insertions(+), 42 deletions(-) create mode 100644 packages/camera/camera/ios/Classes/FlashMode.h create mode 100644 packages/camera/camera/ios/Classes/FlashMode.m diff --git a/packages/camera/camera/ios/Classes/CameraPlugin.m b/packages/camera/camera/ios/Classes/CameraPlugin.m index e79a78348712..ae1fe52400f3 100644 --- a/packages/camera/camera/ios/Classes/CameraPlugin.m +++ b/packages/camera/camera/ios/Classes/CameraPlugin.m @@ -10,6 +10,7 @@ #import #import #import +#import "FlashMode.h" #import "FLTThreadSafeEventChannel.h" #import "FLTThreadSafeFlutterResult.h" #import "FLTThreadSafeMethodChannel.h" @@ -113,34 +114,6 @@ - (void)captureOutput:(AVCapturePhotoOutput *)output } @end -// Mirrors FlashMode in flash_mode.dart -typedef enum { - FlashModeOff, - FlashModeAuto, - FlashModeAlways, - FlashModeTorch, -} FlashMode; - -static FlashMode getFlashModeForString(NSString *mode) { - if ([mode isEqualToString:@"off"]) { - return FlashModeOff; - } else if ([mode isEqualToString:@"auto"]) { - return FlashModeAuto; - } else if ([mode isEqualToString:@"always"]) { - return FlashModeAlways; - } else if ([mode isEqualToString:@"torch"]) { - return FlashModeTorch; - } else { - NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain - code:NSURLErrorUnknown - userInfo:@{ - NSLocalizedDescriptionKey : [NSString - stringWithFormat:@"Unknown flash mode %@", mode] - }]; - @throw error; - } -} - static OSType getVideoFormatFromString(NSString *videoFormatString) { if ([videoFormatString isEqualToString:@"bgra8888"]) { return kCVPixelFormatType_32BGRA; @@ -152,20 +125,6 @@ static OSType getVideoFormatFromString(NSString *videoFormatString) { } } -static AVCaptureFlashMode getAVCaptureFlashModeForFlashMode(FlashMode mode) { - switch (mode) { - case FlashModeOff: - return AVCaptureFlashModeOff; - case FlashModeAuto: - return AVCaptureFlashModeAuto; - case FlashModeAlways: - return AVCaptureFlashModeOn; - case FlashModeTorch: - default: - return -1; - } -} - // Mirrors ExposureMode in camera.dart typedef enum { ExposureModeAuto, diff --git a/packages/camera/camera/ios/Classes/FlashMode.h b/packages/camera/camera/ios/Classes/FlashMode.h new file mode 100644 index 000000000000..baa566fdbe48 --- /dev/null +++ b/packages/camera/camera/ios/Classes/FlashMode.h @@ -0,0 +1,24 @@ +// +// FlashMode.h +// camera +// +// Created by Huan Lin on 1/25/22. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +// Mirrors FlashMode in flash_mode.dart +typedef enum { + FlashModeOff, + FlashModeAuto, + FlashModeAlways, + FlashModeTorch, +} FlashMode; + +FlashMode getFlashModeForString(NSString *mode); +AVCaptureFlashMode getAVCaptureFlashModeForFlashMode(FlashMode mode); + +NS_ASSUME_NONNULL_END diff --git a/packages/camera/camera/ios/Classes/FlashMode.m b/packages/camera/camera/ios/Classes/FlashMode.m new file mode 100644 index 000000000000..f4da028d2a0c --- /dev/null +++ b/packages/camera/camera/ios/Classes/FlashMode.m @@ -0,0 +1,43 @@ +// +// FlashMode.m +// camera +// +// Created by Huan Lin on 1/25/22. +// + +#import "FlashMode.h" + +FlashMode getFlashModeForString(NSString *mode) { + if ([mode isEqualToString:@"off"]) { + return FlashModeOff; + } else if ([mode isEqualToString:@"auto"]) { + return FlashModeAuto; + } else if ([mode isEqualToString:@"always"]) { + return FlashModeAlways; + } else if ([mode isEqualToString:@"torch"]) { + return FlashModeTorch; + } else { + NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain + code:NSURLErrorUnknown + userInfo:@{ + NSLocalizedDescriptionKey : [NSString + stringWithFormat:@"Unknown flash mode %@", mode] + }]; + @throw error; + } +} + +AVCaptureFlashMode getAVCaptureFlashModeForFlashMode(FlashMode mode) { + switch (mode) { + case FlashModeOff: + return AVCaptureFlashModeOff; + case FlashModeAuto: + return AVCaptureFlashModeAuto; + case FlashModeAlways: + return AVCaptureFlashModeOn; + case FlashModeTorch: + default: + return -1; + } +} + From 5bae31282f585752d8458f2d005d184c1761dba9 Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Tue, 25 Jan 2022 15:42:05 -0800 Subject: [PATCH 2/4] [camera]add unit test for flash mode related functions --- packages/camera/camera/CHANGELOG.md | 6 +++- .../ios/Runner.xcodeproj/project.pbxproj | 4 +++ .../example/ios/RunnerTests/FlashModeTests.m | 29 +++++++++++++++++++ .../camera/camera/ios/Classes/CameraPlugin.m | 2 +- .../camera/camera/ios/Classes/FlashMode.h | 22 +++++++++----- .../camera/camera/ios/Classes/FlashMode.m | 10 ++----- .../camera/ios/Classes/camera-umbrella.h | 1 + 7 files changed, 58 insertions(+), 16 deletions(-) create mode 100644 packages/camera/camera/example/ios/RunnerTests/FlashModeTests.m diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 1ec29577175a..64b7cfd03f81 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Minor iOS internal code cleanup related to flash mode. + ## 0.9.4+8 * Fixes a bug where ImageFormatGroup was ignored in `startImageStream` on iOS. @@ -5,7 +9,7 @@ ## 0.9.4+7 * Fixes a crash in iOS when passing null queue pointer into AVFoundation API due to race condition. -* Minor iOS internal code cleanup. +* Minor iOS internal code cleanup related to dispatch queue. ## 0.9.4+6 diff --git a/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj b/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj index 80f672b5b9cf..87febe68a3ec 100644 --- a/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj @@ -22,6 +22,7 @@ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; E01EE4A82799F3A5008C1950 /* QueueHelperTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E01EE4A72799F3A5008C1950 /* QueueHelperTests.m */; }; E032F250279F5E94009E9028 /* CameraCaptureSessionQueueRaceConditionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E032F24F279F5E94009E9028 /* CameraCaptureSessionQueueRaceConditionTests.m */; }; + E032F2A727A0BF2D009E9028 /* FlashModeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E032F2A627A0BF2D009E9028 /* FlashModeTests.m */; }; E0C6E2002770F01A00EA6AA3 /* ThreadSafeMethodChannelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E0C6E1FD2770F01A00EA6AA3 /* ThreadSafeMethodChannelTests.m */; }; E0C6E2012770F01A00EA6AA3 /* ThreadSafeTextureRegistryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E0C6E1FE2770F01A00EA6AA3 /* ThreadSafeTextureRegistryTests.m */; }; E0C6E2022770F01A00EA6AA3 /* ThreadSafeEventChannelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E0C6E1FF2770F01A00EA6AA3 /* ThreadSafeEventChannelTests.m */; }; @@ -81,6 +82,7 @@ A24F9E418BA48BCC7409B117 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; E01EE4A72799F3A5008C1950 /* QueueHelperTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QueueHelperTests.m; sourceTree = ""; }; E032F24F279F5E94009E9028 /* CameraCaptureSessionQueueRaceConditionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraCaptureSessionQueueRaceConditionTests.m; sourceTree = ""; }; + E032F2A627A0BF2D009E9028 /* FlashModeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FlashModeTests.m; sourceTree = ""; }; E0C6E1FD2770F01A00EA6AA3 /* ThreadSafeMethodChannelTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThreadSafeMethodChannelTests.m; sourceTree = ""; }; E0C6E1FE2770F01A00EA6AA3 /* ThreadSafeTextureRegistryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThreadSafeTextureRegistryTests.m; sourceTree = ""; }; E0C6E1FF2770F01A00EA6AA3 /* ThreadSafeEventChannelTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThreadSafeEventChannelTests.m; sourceTree = ""; }; @@ -125,6 +127,7 @@ F6EE622E2710A6FC00905E4A /* MockFLTThreadSafeFlutterResult.m */, F63F9EED27143B19002479BF /* MockFLTThreadSafeFlutterResult.h */, E032F24F279F5E94009E9028 /* CameraCaptureSessionQueueRaceConditionTests.m */, + E032F2A627A0BF2D009E9028 /* FlashModeTests.m */, ); path = RunnerTests; sourceTree = ""; @@ -388,6 +391,7 @@ buildActionMask = 2147483647; files = ( 03F6F8B226CBB4670024B8D3 /* ThreadSafeFlutterResultTests.m in Sources */, + E032F2A727A0BF2D009E9028 /* FlashModeTests.m in Sources */, 033B94BE269C40A200B4DF97 /* CameraMethodChannelTests.m in Sources */, 03BB766B2665316900CE5A93 /* CameraFocusTests.m in Sources */, E487C86026D686A10034AC92 /* CameraPreviewPauseTests.m in Sources */, diff --git a/packages/camera/camera/example/ios/RunnerTests/FlashModeTests.m b/packages/camera/camera/example/ios/RunnerTests/FlashModeTests.m new file mode 100644 index 000000000000..a1de9d180a75 --- /dev/null +++ b/packages/camera/camera/example/ios/RunnerTests/FlashModeTests.m @@ -0,0 +1,29 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import +#import "FlashMode.h" + +@interface FlashModeTests : XCTestCase + +@end + +@implementation FlashModeTests + +- (void)testGetFlashModeForString { + XCTAssertEqual(FlashModeOff, getFlashModeForString(@"off")); + XCTAssertEqual(FlashModeAuto, getFlashModeForString(@"auto")); + XCTAssertEqual(FlashModeAlways, getFlashModeForString(@"always")); + XCTAssertEqual(FlashModeTorch, getFlashModeForString(@"torch")); + XCTAssertThrows(getFlashModeForString(@"unkwown")); +} + +- (void)testGetAVCaptureFlashModeForFlashMode { + XCTAssertEqual(AVCaptureFlashModeOff, getAVCaptureFlashModeForFlashMode(FlashModeOff)); + XCTAssertEqual(AVCaptureFlashModeAuto, getAVCaptureFlashModeForFlashMode(FlashModeAuto)); + XCTAssertEqual(AVCaptureFlashModeOn, getAVCaptureFlashModeForFlashMode(FlashModeAlways)); + XCTAssertEqual(-1, getAVCaptureFlashModeForFlashMode(FlashModeTorch)); +} + +@end diff --git a/packages/camera/camera/ios/Classes/CameraPlugin.m b/packages/camera/camera/ios/Classes/CameraPlugin.m index ae1fe52400f3..0ba14b6e6ba2 100644 --- a/packages/camera/camera/ios/Classes/CameraPlugin.m +++ b/packages/camera/camera/ios/Classes/CameraPlugin.m @@ -10,11 +10,11 @@ #import #import #import -#import "FlashMode.h" #import "FLTThreadSafeEventChannel.h" #import "FLTThreadSafeFlutterResult.h" #import "FLTThreadSafeMethodChannel.h" #import "FLTThreadSafeTextureRegistry.h" +#import "FlashMode.h" @interface FLTSavePhotoDelegate : NSObject @property(readonly, nonatomic) NSString *path; diff --git a/packages/camera/camera/ios/Classes/FlashMode.h b/packages/camera/camera/ios/Classes/FlashMode.h index baa566fdbe48..e2dea3b89cce 100644 --- a/packages/camera/camera/ios/Classes/FlashMode.h +++ b/packages/camera/camera/ios/Classes/FlashMode.h @@ -1,16 +1,15 @@ -// -// FlashMode.h -// camera -// -// Created by Huan Lin on 1/25/22. -// +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. #import #import NS_ASSUME_NONNULL_BEGIN -// Mirrors FlashMode in flash_mode.dart +/** + * Represents camera's flash mode. Mirrors `FlashMode` enum in flash_mode.dart. + */ typedef enum { FlashModeOff, FlashModeAuto, @@ -18,7 +17,16 @@ typedef enum { FlashModeTorch, } FlashMode; +/** + * Gets FlashMode from its string representation. + * @param mode a string representation of the FlashMode. + */ FlashMode getFlashModeForString(NSString *mode); + +/** + * Gets AVCaptureFlashMode from FlashMode. + * @param mode flash mode. + */ AVCaptureFlashMode getAVCaptureFlashModeForFlashMode(FlashMode mode); NS_ASSUME_NONNULL_END diff --git a/packages/camera/camera/ios/Classes/FlashMode.m b/packages/camera/camera/ios/Classes/FlashMode.m index f4da028d2a0c..a1ff3b831789 100644 --- a/packages/camera/camera/ios/Classes/FlashMode.m +++ b/packages/camera/camera/ios/Classes/FlashMode.m @@ -1,9 +1,6 @@ -// -// FlashMode.m -// camera -// -// Created by Huan Lin on 1/25/22. -// +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. #import "FlashMode.h" @@ -40,4 +37,3 @@ AVCaptureFlashMode getAVCaptureFlashModeForFlashMode(FlashMode mode) { return -1; } } - diff --git a/packages/camera/camera/ios/Classes/camera-umbrella.h b/packages/camera/camera/ios/Classes/camera-umbrella.h index 428b125d3a43..fee1a9fb84d8 100644 --- a/packages/camera/camera/ios/Classes/camera-umbrella.h +++ b/packages/camera/camera/ios/Classes/camera-umbrella.h @@ -8,6 +8,7 @@ #import #import #import +#import #import FOUNDATION_EXPORT double cameraVersionNumber; From 41d899da7359ae7e42c74ea12f2ff2de8b5ebfc0 Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Wed, 26 Jan 2022 12:35:20 -0800 Subject: [PATCH 3/4] [camera]add prefix for flashmode enum, and use modulemap --- .../ios/Runner.xcodeproj/project.pbxproj | 8 ++--- .../ios/RunnerTests/FLTFlashModeTests.m | 30 +++++++++++++++++ .../example/ios/RunnerTests/FlashModeTests.m | 29 ----------------- .../camera/camera/ios/Classes/CameraPlugin.m | 18 +++++------ .../camera/ios/Classes/CameraPlugin.modulemap | 1 + .../camera/camera/ios/Classes/FLTFlashMode.h | 32 +++++++++++++++++++ .../Classes/{FlashMode.m => FLTFlashMode.m} | 22 ++++++------- .../camera/camera/ios/Classes/FlashMode.h | 32 ------------------- .../camera/ios/Classes/camera-umbrella.h | 1 - 9 files changed, 87 insertions(+), 86 deletions(-) create mode 100644 packages/camera/camera/example/ios/RunnerTests/FLTFlashModeTests.m delete mode 100644 packages/camera/camera/example/ios/RunnerTests/FlashModeTests.m create mode 100644 packages/camera/camera/ios/Classes/FLTFlashMode.h rename packages/camera/camera/ios/Classes/{FlashMode.m => FLTFlashMode.m} (70%) delete mode 100644 packages/camera/camera/ios/Classes/FlashMode.h diff --git a/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj b/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj index 87febe68a3ec..87bcf2e666cd 100644 --- a/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj @@ -22,7 +22,7 @@ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; E01EE4A82799F3A5008C1950 /* QueueHelperTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E01EE4A72799F3A5008C1950 /* QueueHelperTests.m */; }; E032F250279F5E94009E9028 /* CameraCaptureSessionQueueRaceConditionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E032F24F279F5E94009E9028 /* CameraCaptureSessionQueueRaceConditionTests.m */; }; - E032F2A727A0BF2D009E9028 /* FlashModeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E032F2A627A0BF2D009E9028 /* FlashModeTests.m */; }; + E032F2A727A0BF2D009E9028 /* FLTFlashModeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E032F2A627A0BF2D009E9028 /* FLTFlashModeTests.m */; }; E0C6E2002770F01A00EA6AA3 /* ThreadSafeMethodChannelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E0C6E1FD2770F01A00EA6AA3 /* ThreadSafeMethodChannelTests.m */; }; E0C6E2012770F01A00EA6AA3 /* ThreadSafeTextureRegistryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E0C6E1FE2770F01A00EA6AA3 /* ThreadSafeTextureRegistryTests.m */; }; E0C6E2022770F01A00EA6AA3 /* ThreadSafeEventChannelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E0C6E1FF2770F01A00EA6AA3 /* ThreadSafeEventChannelTests.m */; }; @@ -82,7 +82,7 @@ A24F9E418BA48BCC7409B117 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; E01EE4A72799F3A5008C1950 /* QueueHelperTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QueueHelperTests.m; sourceTree = ""; }; E032F24F279F5E94009E9028 /* CameraCaptureSessionQueueRaceConditionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraCaptureSessionQueueRaceConditionTests.m; sourceTree = ""; }; - E032F2A627A0BF2D009E9028 /* FlashModeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FlashModeTests.m; sourceTree = ""; }; + E032F2A627A0BF2D009E9028 /* FLTFlashModeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FLTFlashModeTests.m; sourceTree = ""; }; E0C6E1FD2770F01A00EA6AA3 /* ThreadSafeMethodChannelTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThreadSafeMethodChannelTests.m; sourceTree = ""; }; E0C6E1FE2770F01A00EA6AA3 /* ThreadSafeTextureRegistryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThreadSafeTextureRegistryTests.m; sourceTree = ""; }; E0C6E1FF2770F01A00EA6AA3 /* ThreadSafeEventChannelTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThreadSafeEventChannelTests.m; sourceTree = ""; }; @@ -127,7 +127,7 @@ F6EE622E2710A6FC00905E4A /* MockFLTThreadSafeFlutterResult.m */, F63F9EED27143B19002479BF /* MockFLTThreadSafeFlutterResult.h */, E032F24F279F5E94009E9028 /* CameraCaptureSessionQueueRaceConditionTests.m */, - E032F2A627A0BF2D009E9028 /* FlashModeTests.m */, + E032F2A627A0BF2D009E9028 /* FLTFlashModeTests.m */, ); path = RunnerTests; sourceTree = ""; @@ -391,7 +391,7 @@ buildActionMask = 2147483647; files = ( 03F6F8B226CBB4670024B8D3 /* ThreadSafeFlutterResultTests.m in Sources */, - E032F2A727A0BF2D009E9028 /* FlashModeTests.m in Sources */, + E032F2A727A0BF2D009E9028 /* FLTFlashModeTests.m in Sources */, 033B94BE269C40A200B4DF97 /* CameraMethodChannelTests.m in Sources */, 03BB766B2665316900CE5A93 /* CameraFocusTests.m in Sources */, E487C86026D686A10034AC92 /* CameraPreviewPauseTests.m in Sources */, diff --git a/packages/camera/camera/example/ios/RunnerTests/FLTFlashModeTests.m b/packages/camera/camera/example/ios/RunnerTests/FLTFlashModeTests.m new file mode 100644 index 000000000000..c5167af8ea6a --- /dev/null +++ b/packages/camera/camera/example/ios/RunnerTests/FLTFlashModeTests.m @@ -0,0 +1,30 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +@import camera.Test; +@import AVFoundation; +#import + +@interface FLTFlashModeTests : XCTestCase + +@end + +@implementation FLTFlashModeTests + +- (void)testGetFLTFlashModeForString { + XCTAssertEqual(FLTFlashModeOff, getFLTFlashModeForString(@"off")); + XCTAssertEqual(FLTFlashModeAuto, getFLTFlashModeForString(@"auto")); + XCTAssertEqual(FLTFlashModeAlways, getFLTFlashModeForString(@"always")); + XCTAssertEqual(FLTFlashModeTorch, getFLTFlashModeForString(@"torch")); + XCTAssertThrows(getFLTFlashModeForString(@"unkwown")); +} + +- (void)testGetAVCaptureFlashModeForFLTFlashMode { + XCTAssertEqual(AVCaptureFlashModeOff, getAVCaptureFlashModeForFLTFlashMode(FLTFlashModeOff)); + XCTAssertEqual(AVCaptureFlashModeAuto, getAVCaptureFlashModeForFLTFlashMode(FLTFlashModeAuto)); + XCTAssertEqual(AVCaptureFlashModeOn, getAVCaptureFlashModeForFLTFlashMode(FLTFlashModeAlways)); + XCTAssertEqual(-1, getAVCaptureFlashModeForFLTFlashMode(FLTFlashModeTorch)); +} + +@end diff --git a/packages/camera/camera/example/ios/RunnerTests/FlashModeTests.m b/packages/camera/camera/example/ios/RunnerTests/FlashModeTests.m deleted file mode 100644 index a1de9d180a75..000000000000 --- a/packages/camera/camera/example/ios/RunnerTests/FlashModeTests.m +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import -#import "FlashMode.h" - -@interface FlashModeTests : XCTestCase - -@end - -@implementation FlashModeTests - -- (void)testGetFlashModeForString { - XCTAssertEqual(FlashModeOff, getFlashModeForString(@"off")); - XCTAssertEqual(FlashModeAuto, getFlashModeForString(@"auto")); - XCTAssertEqual(FlashModeAlways, getFlashModeForString(@"always")); - XCTAssertEqual(FlashModeTorch, getFlashModeForString(@"torch")); - XCTAssertThrows(getFlashModeForString(@"unkwown")); -} - -- (void)testGetAVCaptureFlashModeForFlashMode { - XCTAssertEqual(AVCaptureFlashModeOff, getAVCaptureFlashModeForFlashMode(FlashModeOff)); - XCTAssertEqual(AVCaptureFlashModeAuto, getAVCaptureFlashModeForFlashMode(FlashModeAuto)); - XCTAssertEqual(AVCaptureFlashModeOn, getAVCaptureFlashModeForFlashMode(FlashModeAlways)); - XCTAssertEqual(-1, getAVCaptureFlashModeForFlashMode(FlashModeTorch)); -} - -@end diff --git a/packages/camera/camera/ios/Classes/CameraPlugin.m b/packages/camera/camera/ios/Classes/CameraPlugin.m index 0ba14b6e6ba2..4c9c46520e53 100644 --- a/packages/camera/camera/ios/Classes/CameraPlugin.m +++ b/packages/camera/camera/ios/Classes/CameraPlugin.m @@ -10,11 +10,11 @@ #import #import #import +#import "FLTFlashMode.h" #import "FLTThreadSafeEventChannel.h" #import "FLTThreadSafeFlutterResult.h" #import "FLTThreadSafeMethodChannel.h" #import "FLTThreadSafeTextureRegistry.h" -#import "FlashMode.h" @interface FLTSavePhotoDelegate : NSObject @property(readonly, nonatomic) NSString *path; @@ -308,7 +308,7 @@ @interface FLTCam : NSObject +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * Represents camera's flash mode. Mirrors `FlashMode` enum in flash_mode.dart. + */ +typedef NS_ENUM(NSInteger, FLTFlashMode) { + FLTFlashModeOff, + FLTFlashModeAuto, + FLTFlashModeAlways, + FLTFlashModeTorch, +}; + +/** + * Gets FLTFlashMode from its string representation. + * @param mode a string representation of the FLTFlashMode. + */ +extern FLTFlashMode getFLTFlashModeForString(NSString *mode); + +/** + * Gets AVCaptureFlashMode from FLTFlashMode. + * @param mode flash mode. + */ +extern AVCaptureFlashMode getAVCaptureFlashModeForFLTFlashMode(FLTFlashMode mode); + +NS_ASSUME_NONNULL_END diff --git a/packages/camera/camera/ios/Classes/FlashMode.m b/packages/camera/camera/ios/Classes/FLTFlashMode.m similarity index 70% rename from packages/camera/camera/ios/Classes/FlashMode.m rename to packages/camera/camera/ios/Classes/FLTFlashMode.m index a1ff3b831789..dd3c589fa2ce 100644 --- a/packages/camera/camera/ios/Classes/FlashMode.m +++ b/packages/camera/camera/ios/Classes/FLTFlashMode.m @@ -2,17 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "FlashMode.h" +#import "FLTFlashMode.h" -FlashMode getFlashModeForString(NSString *mode) { +FLTFlashMode getFLTFlashModeForString(NSString *mode) { if ([mode isEqualToString:@"off"]) { - return FlashModeOff; + return FLTFlashModeOff; } else if ([mode isEqualToString:@"auto"]) { - return FlashModeAuto; + return FLTFlashModeAuto; } else if ([mode isEqualToString:@"always"]) { - return FlashModeAlways; + return FLTFlashModeAlways; } else if ([mode isEqualToString:@"torch"]) { - return FlashModeTorch; + return FLTFlashModeTorch; } else { NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:NSURLErrorUnknown @@ -24,15 +24,15 @@ FlashMode getFlashModeForString(NSString *mode) { } } -AVCaptureFlashMode getAVCaptureFlashModeForFlashMode(FlashMode mode) { +AVCaptureFlashMode getAVCaptureFlashModeForFLTFlashMode(FLTFlashMode mode) { switch (mode) { - case FlashModeOff: + case FLTFlashModeOff: return AVCaptureFlashModeOff; - case FlashModeAuto: + case FLTFlashModeAuto: return AVCaptureFlashModeAuto; - case FlashModeAlways: + case FLTFlashModeAlways: return AVCaptureFlashModeOn; - case FlashModeTorch: + case FLTFlashModeTorch: default: return -1; } diff --git a/packages/camera/camera/ios/Classes/FlashMode.h b/packages/camera/camera/ios/Classes/FlashMode.h deleted file mode 100644 index e2dea3b89cce..000000000000 --- a/packages/camera/camera/ios/Classes/FlashMode.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * Represents camera's flash mode. Mirrors `FlashMode` enum in flash_mode.dart. - */ -typedef enum { - FlashModeOff, - FlashModeAuto, - FlashModeAlways, - FlashModeTorch, -} FlashMode; - -/** - * Gets FlashMode from its string representation. - * @param mode a string representation of the FlashMode. - */ -FlashMode getFlashModeForString(NSString *mode); - -/** - * Gets AVCaptureFlashMode from FlashMode. - * @param mode flash mode. - */ -AVCaptureFlashMode getAVCaptureFlashModeForFlashMode(FlashMode mode); - -NS_ASSUME_NONNULL_END diff --git a/packages/camera/camera/ios/Classes/camera-umbrella.h b/packages/camera/camera/ios/Classes/camera-umbrella.h index fee1a9fb84d8..428b125d3a43 100644 --- a/packages/camera/camera/ios/Classes/camera-umbrella.h +++ b/packages/camera/camera/ios/Classes/camera-umbrella.h @@ -8,7 +8,6 @@ #import #import #import -#import #import FOUNDATION_EXPORT double cameraVersionNumber; From bad2437bb868740cb5bb6dff6058142a66462fef Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Wed, 26 Jan 2022 14:26:35 -0800 Subject: [PATCH 4/4] [camera]remove prefix for header file --- .../ios/RunnerTests/FLTFlashModeTests.m | 22 +++++++++---------- .../camera/camera/ios/Classes/CameraPlugin.m | 8 +++---- .../camera/ios/Classes/CameraPlugin.modulemap | 2 +- .../Classes/{FLTFlashMode.h => FlashMode.h} | 4 ++-- .../Classes/{FLTFlashMode.m => FlashMode.m} | 6 ++--- 5 files changed, 21 insertions(+), 21 deletions(-) rename packages/camera/camera/ios/Classes/{FLTFlashMode.h => FlashMode.h} (82%) rename packages/camera/camera/ios/Classes/{FLTFlashMode.m => FlashMode.m} (87%) diff --git a/packages/camera/camera/example/ios/RunnerTests/FLTFlashModeTests.m b/packages/camera/camera/example/ios/RunnerTests/FLTFlashModeTests.m index c5167af8ea6a..b38b7eba8304 100644 --- a/packages/camera/camera/example/ios/RunnerTests/FLTFlashModeTests.m +++ b/packages/camera/camera/example/ios/RunnerTests/FLTFlashModeTests.m @@ -12,19 +12,19 @@ @interface FLTFlashModeTests : XCTestCase @implementation FLTFlashModeTests -- (void)testGetFLTFlashModeForString { - XCTAssertEqual(FLTFlashModeOff, getFLTFlashModeForString(@"off")); - XCTAssertEqual(FLTFlashModeAuto, getFLTFlashModeForString(@"auto")); - XCTAssertEqual(FLTFlashModeAlways, getFLTFlashModeForString(@"always")); - XCTAssertEqual(FLTFlashModeTorch, getFLTFlashModeForString(@"torch")); - XCTAssertThrows(getFLTFlashModeForString(@"unkwown")); +- (void)testFLTGetFLTFlashModeForString { + XCTAssertEqual(FLTFlashModeOff, FLTGetFLTFlashModeForString(@"off")); + XCTAssertEqual(FLTFlashModeAuto, FLTGetFLTFlashModeForString(@"auto")); + XCTAssertEqual(FLTFlashModeAlways, FLTGetFLTFlashModeForString(@"always")); + XCTAssertEqual(FLTFlashModeTorch, FLTGetFLTFlashModeForString(@"torch")); + XCTAssertThrows(FLTGetFLTFlashModeForString(@"unkwown")); } -- (void)testGetAVCaptureFlashModeForFLTFlashMode { - XCTAssertEqual(AVCaptureFlashModeOff, getAVCaptureFlashModeForFLTFlashMode(FLTFlashModeOff)); - XCTAssertEqual(AVCaptureFlashModeAuto, getAVCaptureFlashModeForFLTFlashMode(FLTFlashModeAuto)); - XCTAssertEqual(AVCaptureFlashModeOn, getAVCaptureFlashModeForFLTFlashMode(FLTFlashModeAlways)); - XCTAssertEqual(-1, getAVCaptureFlashModeForFLTFlashMode(FLTFlashModeTorch)); +- (void)testFLTGetAVCaptureFlashModeForFLTFlashMode { + XCTAssertEqual(AVCaptureFlashModeOff, FLTGetAVCaptureFlashModeForFLTFlashMode(FLTFlashModeOff)); + XCTAssertEqual(AVCaptureFlashModeAuto, FLTGetAVCaptureFlashModeForFLTFlashMode(FLTFlashModeAuto)); + XCTAssertEqual(AVCaptureFlashModeOn, FLTGetAVCaptureFlashModeForFLTFlashMode(FLTFlashModeAlways)); + XCTAssertEqual(-1, FLTGetAVCaptureFlashModeForFLTFlashMode(FLTFlashModeTorch)); } @end diff --git a/packages/camera/camera/ios/Classes/CameraPlugin.m b/packages/camera/camera/ios/Classes/CameraPlugin.m index 4c9c46520e53..be5ba80923c2 100644 --- a/packages/camera/camera/ios/Classes/CameraPlugin.m +++ b/packages/camera/camera/ios/Classes/CameraPlugin.m @@ -10,11 +10,11 @@ #import #import #import -#import "FLTFlashMode.h" #import "FLTThreadSafeEventChannel.h" #import "FLTThreadSafeFlutterResult.h" #import "FLTThreadSafeMethodChannel.h" #import "FLTThreadSafeTextureRegistry.h" +#import "FlashMode.h" @interface FLTSavePhotoDelegate : NSObject @property(readonly, nonatomic) NSString *path; @@ -447,7 +447,7 @@ - (void)captureToFile:(FLTThreadSafeFlutterResult *)result API_AVAILABLE(ios(10) [settings setHighResolutionPhotoEnabled:YES]; } - AVCaptureFlashMode avFlashMode = getAVCaptureFlashModeForFLTFlashMode(_flashMode); + AVCaptureFlashMode avFlashMode = FLTGetAVCaptureFlashModeForFLTFlashMode(_flashMode); if (avFlashMode != -1) { [settings setFlashMode:avFlashMode]; } @@ -894,7 +894,7 @@ - (void)unlockCaptureOrientationWithResult:(FLTThreadSafeFlutterResult *)result - (void)setFlashModeWithResult:(FLTThreadSafeFlutterResult *)result mode:(NSString *)modeStr { FLTFlashMode mode; @try { - mode = getFLTFlashModeForString(modeStr); + mode = FLTGetFLTFlashModeForString(modeStr); } @catch (NSError *e) { [result sendError:e]; return; @@ -924,7 +924,7 @@ - (void)setFlashModeWithResult:(FLTThreadSafeFlutterResult *)result mode:(NSStri details:nil]; return; } - AVCaptureFlashMode avFlashMode = getAVCaptureFlashModeForFLTFlashMode(mode); + AVCaptureFlashMode avFlashMode = FLTGetAVCaptureFlashModeForFLTFlashMode(mode); if (![_capturePhotoOutput.supportedFlashModes containsObject:[NSNumber numberWithInt:((int)avFlashMode)]]) { [result sendErrorWithCode:@"setFlashModeFailed" diff --git a/packages/camera/camera/ios/Classes/CameraPlugin.modulemap b/packages/camera/camera/ios/Classes/CameraPlugin.modulemap index 0ec067813358..8baa71bf0194 100644 --- a/packages/camera/camera/ios/Classes/CameraPlugin.modulemap +++ b/packages/camera/camera/ios/Classes/CameraPlugin.modulemap @@ -6,6 +6,6 @@ framework module camera { explicit module Test { header "CameraPlugin_Test.h" - header "FLTFlashMode.h" + header "FlashMode.h" } } diff --git a/packages/camera/camera/ios/Classes/FLTFlashMode.h b/packages/camera/camera/ios/Classes/FlashMode.h similarity index 82% rename from packages/camera/camera/ios/Classes/FLTFlashMode.h rename to packages/camera/camera/ios/Classes/FlashMode.h index 1a6804fb0079..b04496da59d5 100644 --- a/packages/camera/camera/ios/Classes/FLTFlashMode.h +++ b/packages/camera/camera/ios/Classes/FlashMode.h @@ -21,12 +21,12 @@ typedef NS_ENUM(NSInteger, FLTFlashMode) { * Gets FLTFlashMode from its string representation. * @param mode a string representation of the FLTFlashMode. */ -extern FLTFlashMode getFLTFlashModeForString(NSString *mode); +extern FLTFlashMode FLTGetFLTFlashModeForString(NSString *mode); /** * Gets AVCaptureFlashMode from FLTFlashMode. * @param mode flash mode. */ -extern AVCaptureFlashMode getAVCaptureFlashModeForFLTFlashMode(FLTFlashMode mode); +extern AVCaptureFlashMode FLTGetAVCaptureFlashModeForFLTFlashMode(FLTFlashMode mode); NS_ASSUME_NONNULL_END diff --git a/packages/camera/camera/ios/Classes/FLTFlashMode.m b/packages/camera/camera/ios/Classes/FlashMode.m similarity index 87% rename from packages/camera/camera/ios/Classes/FLTFlashMode.m rename to packages/camera/camera/ios/Classes/FlashMode.m index dd3c589fa2ce..b9d4a4afd6bd 100644 --- a/packages/camera/camera/ios/Classes/FLTFlashMode.m +++ b/packages/camera/camera/ios/Classes/FlashMode.m @@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "FLTFlashMode.h" +#import "FlashMode.h" -FLTFlashMode getFLTFlashModeForString(NSString *mode) { +FLTFlashMode FLTGetFLTFlashModeForString(NSString *mode) { if ([mode isEqualToString:@"off"]) { return FLTFlashModeOff; } else if ([mode isEqualToString:@"auto"]) { @@ -24,7 +24,7 @@ FLTFlashMode getFLTFlashModeForString(NSString *mode) { } } -AVCaptureFlashMode getAVCaptureFlashModeForFLTFlashMode(FLTFlashMode mode) { +AVCaptureFlashMode FLTGetAVCaptureFlashModeForFLTFlashMode(FLTFlashMode mode) { switch (mode) { case FLTFlashModeOff: return AVCaptureFlashModeOff;