Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 67f9435

Browse files
committed
split audio and video request functions
1 parent 141025c commit 67f9435

File tree

4 files changed

+33
-18
lines changed

4 files changed

+33
-18
lines changed

packages/camera/camera/example/ios/RunnerTests/CameraPermissionTests.m

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ - (void)testRequestCameraPermission_completeWithoutErrorIfPrevoiuslyAuthorized {
2626
OCMStub([mockDevice authorizationStatusForMediaType:AVMediaTypeVideo])
2727
.andReturn(AVAuthorizationStatusAuthorized);
2828

29-
FLTRequestCameraPermission(/*forAudio*/ false, ^(FlutterError *error) {
29+
FLTRequestCameraPermission(^(FlutterError *error) {
3030
if (error == nil) {
3131
[expectation fulfill];
3232
}
@@ -46,7 +46,7 @@ - (void)testRequestCameraPermission_completeWithErrorIfPreviouslyDenied {
4646
id mockDevice = OCMClassMock([AVCaptureDevice class]);
4747
OCMStub([mockDevice authorizationStatusForMediaType:AVMediaTypeVideo])
4848
.andReturn(AVAuthorizationStatusDenied);
49-
FLTRequestCameraPermission(/*forAudio*/ false, ^(FlutterError *error) {
49+
FLTRequestCameraPermission(^(FlutterError *error) {
5050
if ([error isEqual:expectedError]) {
5151
[expectation fulfill];
5252
}
@@ -65,7 +65,7 @@ - (void)testRequestCameraPermission_completeWithErrorIfRestricted {
6565
OCMStub([mockDevice authorizationStatusForMediaType:AVMediaTypeVideo])
6666
.andReturn(AVAuthorizationStatusRestricted);
6767

68-
FLTRequestCameraPermission(/*forAudio*/ false, ^(FlutterError *error) {
68+
FLTRequestCameraPermission(^(FlutterError *error) {
6969
if ([error isEqual:expectedError]) {
7070
[expectation fulfill];
7171
}
@@ -87,7 +87,7 @@ - (void)testRequestCameraPermission_completeWithoutErrorIfUserGrantAccess {
8787
return YES;
8888
}]]);
8989

90-
FLTRequestCameraPermission(/*forAudio*/ false, ^(FlutterError *error) {
90+
FLTRequestCameraPermission(^(FlutterError *error) {
9191
if (error == nil) {
9292
[grantedExpectation fulfill];
9393
}
@@ -113,7 +113,7 @@ - (void)testRequestCameraPermission_completeWithErrorIfUserDenyAccess {
113113
block(NO);
114114
return YES;
115115
}]]);
116-
FLTRequestCameraPermission(/*forAudio*/ false, ^(FlutterError *error) {
116+
FLTRequestCameraPermission(^(FlutterError *error) {
117117
if ([error isEqual:expectedError]) {
118118
[expectation fulfill];
119119
}
@@ -133,7 +133,7 @@ - (void)testRequestAudioPermission_completeWithoutErrorIfPrevoiuslyAuthorized {
133133
OCMStub([mockDevice authorizationStatusForMediaType:AVMediaTypeAudio])
134134
.andReturn(AVAuthorizationStatusAuthorized);
135135

136-
FLTRequestCameraPermission(/*forAudio*/ true, ^(FlutterError *error) {
136+
FLTRequestAudioPermission(^(FlutterError *error) {
137137
if (error == nil) {
138138
[expectation fulfill];
139139
}
@@ -153,7 +153,7 @@ - (void)testRequestAudioPermission_completeWithErrorIfPreviouslyDenied {
153153
id mockDevice = OCMClassMock([AVCaptureDevice class]);
154154
OCMStub([mockDevice authorizationStatusForMediaType:AVMediaTypeAudio])
155155
.andReturn(AVAuthorizationStatusDenied);
156-
FLTRequestCameraPermission(/*forAudio*/ true, ^(FlutterError *error) {
156+
FLTRequestAudioPermission(^(FlutterError *error) {
157157
if ([error isEqual:expectedError]) {
158158
[expectation fulfill];
159159
}
@@ -172,7 +172,7 @@ - (void)testRequestAudioPermission_completeWithErrorIfRestricted {
172172
OCMStub([mockDevice authorizationStatusForMediaType:AVMediaTypeAudio])
173173
.andReturn(AVAuthorizationStatusRestricted);
174174

175-
FLTRequestCameraPermission(/*forAudio*/ true, ^(FlutterError *error) {
175+
FLTRequestAudioPermission(^(FlutterError *error) {
176176
if ([error isEqual:expectedError]) {
177177
[expectation fulfill];
178178
}
@@ -194,7 +194,7 @@ - (void)testRequestAudioPermission_completeWithoutErrorIfUserGrantAccess {
194194
return YES;
195195
}]]);
196196

197-
FLTRequestCameraPermission(/*forAudio*/ true, ^(FlutterError *error) {
197+
FLTRequestAudioPermission(^(FlutterError *error) {
198198
if (error == nil) {
199199
[grantedExpectation fulfill];
200200
}
@@ -219,7 +219,7 @@ - (void)testRequestAudioPermission_completeWithErrorIfUserDenyAccess {
219219
block(NO);
220220
return YES;
221221
}]]);
222-
FLTRequestCameraPermission(/*forAudio*/ true, ^(FlutterError *error) {
222+
FLTRequestAudioPermission(^(FlutterError *error) {
223223
if ([error isEqual:expectedError]) {
224224
[expectation fulfill];
225225
}

packages/camera/camera/ios/Classes/CameraPermissionUtils.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,18 @@ typedef void (^FLTCameraPermissionRequestCompletionHandler)(FlutterError *);
1313
/// screen. Otherwise AVFoundation simply returns the user's previous choice, and in this case the
1414
/// user will have to update the choice in Settings app.
1515
///
16-
/// @param forAudio Requests for `AVMediaTypeAudio` permission if `forAudio` is true, and
17-
/// `AVMediaTypeVideo` permission otherwise.
1816
/// @param handler if access permission is (or was previously) granted, completion handler will be
1917
/// called without error; Otherwise completion handler will be called with error. Handler can be
2018
/// called on an arbitrary dispatch queue.
21-
extern void FLTRequestCameraPermission(BOOL forAudio,
22-
FLTCameraPermissionRequestCompletionHandler handler);
19+
extern void FLTRequestCameraPermission(FLTCameraPermissionRequestCompletionHandler handler);
20+
21+
/// Requests audio access permission.
22+
///
23+
/// If it is the first time requesting audio access, a permission dialog will show up on the
24+
/// screen. Otherwise AVFoundation simply returns the user's previous choice, and in this case the
25+
/// user will have to update the choice in Settings app.
26+
///
27+
/// @param handler if access permission is (or was previously) granted, completion handler will be
28+
/// called without error; Otherwise completion handler will be called with error. Handler can be
29+
/// called on an arbitrary dispatch queue.
30+
extern void FLTRequestAudioPermission(FLTCameraPermissionRequestCompletionHandler handler);

packages/camera/camera/ios/Classes/CameraPermissionUtils.m

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
@import AVFoundation;
66
#import "CameraPermissionUtils.h"
77

8-
void FLTRequestCameraPermission(BOOL forAudio,
9-
FLTCameraPermissionRequestCompletionHandler handler) {
8+
void RequestPermission(BOOL forAudio, FLTCameraPermissionRequestCompletionHandler handler) {
109
AVMediaType mediaType;
1110
if (forAudio) {
1211
mediaType = AVMediaTypeAudio;
@@ -76,3 +75,11 @@ void FLTRequestCameraPermission(BOOL forAudio,
7675
}
7776
}
7877
}
78+
79+
void FLTRequestCameraPermission(FLTCameraPermissionRequestCompletionHandler handler) {
80+
RequestPermission(/*forAudio*/ NO, handler);
81+
}
82+
83+
void FLTRequestAudioPermission(FLTCameraPermissionRequestCompletionHandler handler) {
84+
RequestPermission(/*forAudio*/ YES, handler);
85+
}

packages/camera/camera/ios/Classes/CameraPlugin.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ - (void)handleMethodCallAsync:(FlutterMethodCall *)call
132132
[result sendNotImplemented];
133133
}
134134
} else if ([@"create" isEqualToString:call.method]) {
135-
FLTRequestCameraPermission(/*forAudio*/ false, ^(FlutterError *error) {
135+
FLTRequestCameraPermission(^(FlutterError *error) {
136136
// Create FLTCam only if granted camera access.
137137
if (error) {
138138
[result sendFlutterError:error];
@@ -195,7 +195,7 @@ - (void)handleMethodCallAsync:(FlutterMethodCall *)call
195195
[result sendSuccess];
196196
} else if ([@"prepareForVideoRecording" isEqualToString:call.method]) {
197197
// Setup audio capture session only if granted audio access.
198-
FLTRequestCameraPermission(/*forAudio*/ true, ^(FlutterError *error) {
198+
FLTRequestAudioPermission(^(FlutterError *error) {
199199
if (error) {
200200
[result sendFlutterError:error];
201201
} else {

0 commit comments

Comments
 (0)