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

Commit e5156e9

Browse files
author
Emmanuel Garcia
authored
Enable Android integration tests in remaining plugins (#4514)
1 parent fe1a3c4 commit e5156e9

29 files changed

Lines changed: 165 additions & 70 deletions

File tree

packages/camera/camera/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 0.9.4+5
2+
3+
* Fixes bug where calling a method after the camera was closed resulted in a Java `IllegalStateException` exception.
4+
* Fixes integration tests.
5+
16
## 0.9.4+4
27

38
* Change Android compileSdkVersion to 31.

packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,10 @@ public void onOpened(@NonNull CameraDevice device) {
281281
public void onClosed(@NonNull CameraDevice camera) {
282282
Log.i(TAG, "open | onClosed");
283283

284+
// Prevents calls to methods that would otherwise result in IllegalStateException exceptions.
285+
cameraDevice = null;
286+
closeCaptureSession();
284287
dartMessenger.sendCameraClosingEvent();
285-
super.onClosed(camera);
286288
}
287289

288290
@Override
@@ -364,10 +366,13 @@ private void createCaptureSession(
364366
// Prepare the callback.
365367
CameraCaptureSession.StateCallback callback =
366368
new CameraCaptureSession.StateCallback() {
369+
boolean captureSessionClosed = false;
370+
367371
@Override
368372
public void onConfigured(@NonNull CameraCaptureSession session) {
373+
Log.i(TAG, "CameraCaptureSession onConfigured");
369374
// Camera was already closed.
370-
if (cameraDevice == null) {
375+
if (cameraDevice == null || captureSessionClosed) {
371376
dartMessenger.sendCameraErrorEvent("The camera was closed during configuration.");
372377
return;
373378
}
@@ -382,8 +387,15 @@ public void onConfigured(@NonNull CameraCaptureSession session) {
382387

383388
@Override
384389
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
390+
Log.i(TAG, "CameraCaptureSession onConfigureFailed");
385391
dartMessenger.sendCameraErrorEvent("Failed to configure camera session.");
386392
}
393+
394+
@Override
395+
public void onClosed(@NonNull CameraCaptureSession session) {
396+
Log.i(TAG, "CameraCaptureSession onClosed");
397+
captureSessionClosed = true;
398+
}
387399
};
388400

389401
// Start the session.
@@ -427,10 +439,12 @@ private void createCaptureSession(
427439
// Send a repeating request to refresh capture session.
428440
private void refreshPreviewCaptureSession(
429441
@Nullable Runnable onSuccessCallback, @NonNull ErrorCallback onErrorCallback) {
442+
Log.i(TAG, "refreshPreviewCaptureSession");
443+
430444
if (captureSession == null) {
431445
Log.i(
432446
TAG,
433-
"[refreshPreviewCaptureSession] captureSession not yet initialized, "
447+
"refreshPreviewCaptureSession: captureSession not yet initialized, "
434448
+ "skipping preview capture session refresh.");
435449
return;
436450
}
@@ -445,6 +459,8 @@ private void refreshPreviewCaptureSession(
445459
onSuccessCallback.run();
446460
}
447461

462+
} catch (IllegalStateException e) {
463+
onErrorCallback.onError("cameraAccess", "Camera is closed: " + e.getMessage());
448464
} catch (CameraAccessException e) {
449465
onErrorCallback.onError("cameraAccess", e.getMessage());
450466
}

packages/camera/camera/example/android/app/src/androidTestDebug/java/io/flutter/plugins/DartIntegrationTest.java renamed to packages/camera/camera/example/android/app/src/androidTest/java/io/flutter/plugins/DartIntegrationTest.java

File renamed without changes.

packages/camera/camera/example/android/app/src/androidTestDebug/java/io/flutter/plugins/cameraexample/FlutterActivityTest.java renamed to packages/camera/camera/example/android/app/src/androidTest/java/io/flutter/plugins/cameraexample/FlutterActivityTest.java

File renamed without changes.

packages/camera/camera/example/integration_test/camera_test.dart

Lines changed: 51 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -71,28 +71,32 @@ void main() {
7171
expectedSize, Size(image.height.toDouble(), image.width.toDouble()));
7272
}
7373

74-
testWidgets('Capture specific image resolutions',
75-
(WidgetTester tester) async {
76-
final List<CameraDescription> cameras = await availableCameras();
77-
if (cameras.isEmpty) {
78-
return;
79-
}
80-
for (CameraDescription cameraDescription in cameras) {
81-
bool previousPresetExactlySupported = true;
82-
for (MapEntry<ResolutionPreset, Size> preset
83-
in presetExpectedSizes.entries) {
84-
final CameraController controller =
85-
CameraController(cameraDescription, preset.key);
86-
await controller.initialize();
87-
final bool presetExactlySupported =
88-
await testCaptureImageResolution(controller, preset.key);
89-
assert(!(!previousPresetExactlySupported && presetExactlySupported),
90-
'The camera took higher resolution pictures at a lower resolution.');
91-
previousPresetExactlySupported = presetExactlySupported;
92-
await controller.dispose();
74+
testWidgets(
75+
'Capture specific image resolutions',
76+
(WidgetTester tester) async {
77+
final List<CameraDescription> cameras = await availableCameras();
78+
if (cameras.isEmpty) {
79+
return;
9380
}
94-
}
95-
}, skip: !Platform.isAndroid);
81+
for (CameraDescription cameraDescription in cameras) {
82+
bool previousPresetExactlySupported = true;
83+
for (MapEntry<ResolutionPreset, Size> preset
84+
in presetExpectedSizes.entries) {
85+
final CameraController controller =
86+
CameraController(cameraDescription, preset.key);
87+
await controller.initialize();
88+
final bool presetExactlySupported =
89+
await testCaptureImageResolution(controller, preset.key);
90+
assert(!(!previousPresetExactlySupported && presetExactlySupported),
91+
'The camera took higher resolution pictures at a lower resolution.');
92+
previousPresetExactlySupported = presetExactlySupported;
93+
await controller.dispose();
94+
}
95+
}
96+
},
97+
// TODO(egarciad): Fix https://github.com/flutter/flutter/issues/93686.
98+
skip: true,
99+
);
96100

97101
// This tests that the capture is no bigger than the preset, since we have
98102
// automatic code to fall back to smaller sizes when we need to. Returns
@@ -121,29 +125,33 @@ void main() {
121125
expectedSize, Size(video.height, video.width));
122126
}
123127

124-
testWidgets('Capture specific video resolutions',
125-
(WidgetTester tester) async {
126-
final List<CameraDescription> cameras = await availableCameras();
127-
if (cameras.isEmpty) {
128-
return;
129-
}
130-
for (CameraDescription cameraDescription in cameras) {
131-
bool previousPresetExactlySupported = true;
132-
for (MapEntry<ResolutionPreset, Size> preset
133-
in presetExpectedSizes.entries) {
134-
final CameraController controller =
135-
CameraController(cameraDescription, preset.key);
136-
await controller.initialize();
137-
await controller.prepareForVideoRecording();
138-
final bool presetExactlySupported =
139-
await testCaptureVideoResolution(controller, preset.key);
140-
assert(!(!previousPresetExactlySupported && presetExactlySupported),
141-
'The camera took higher resolution pictures at a lower resolution.');
142-
previousPresetExactlySupported = presetExactlySupported;
143-
await controller.dispose();
128+
testWidgets(
129+
'Capture specific video resolutions',
130+
(WidgetTester tester) async {
131+
final List<CameraDescription> cameras = await availableCameras();
132+
if (cameras.isEmpty) {
133+
return;
144134
}
145-
}
146-
}, skip: !Platform.isAndroid);
135+
for (CameraDescription cameraDescription in cameras) {
136+
bool previousPresetExactlySupported = true;
137+
for (MapEntry<ResolutionPreset, Size> preset
138+
in presetExpectedSizes.entries) {
139+
final CameraController controller =
140+
CameraController(cameraDescription, preset.key);
141+
await controller.initialize();
142+
await controller.prepareForVideoRecording();
143+
final bool presetExactlySupported =
144+
await testCaptureVideoResolution(controller, preset.key);
145+
assert(!(!previousPresetExactlySupported && presetExactlySupported),
146+
'The camera took higher resolution pictures at a lower resolution.');
147+
previousPresetExactlySupported = presetExactlySupported;
148+
await controller.dispose();
149+
}
150+
}
151+
},
152+
// TODO(egarciad): Fix https://github.com/flutter/flutter/issues/93686.
153+
skip: true,
154+
);
147155

148156
testWidgets('Pause and resume video recording', (WidgetTester tester) async {
149157
final List<CameraDescription> cameras = await availableCameras();

packages/camera/camera/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing
44
Dart.
55
repository: https://github.com/flutter/plugins/tree/master/packages/camera/camera
66
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
7-
version: 0.9.4+4
7+
version: 0.9.4+5
88

99
environment:
1010
sdk: ">=2.14.0 <3.0.0"

packages/in_app_purchase/in_app_purchase/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
## NEXT
22

3+
* Fixes integration tests.
34
* Updates example app Android compileSdkVersion to 31.
45

56
* **BREAKING CHANGES**:

packages/in_app_purchase/in_app_purchase/example/android/app/src/main/java/io/flutter/plugins/DartIntegrationTest.java renamed to packages/in_app_purchase/in_app_purchase/example/android/app/src/androidTest/java/io/flutter/plugins/DartIntegrationTest.java

File renamed without changes.

packages/in_app_purchase/in_app_purchase/example/android/app/src/main/java/io/flutter/plugins/inapppurchaseexample/FlutterActivityTest.java renamed to packages/in_app_purchase/in_app_purchase/example/android/app/src/androidTest/java/io/flutter/plugins/inapppurchaseexample/FlutterActivityTest.java

File renamed without changes.

packages/in_app_purchase/in_app_purchase/example/android/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)