From 6125eca646d50407d23be471585203381fc27d58 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 23 Feb 2023 14:35:21 -0800 Subject: [PATCH 01/62] Recreating image capture impl from flutter/plugins --- .../camerax/CameraAndroidCameraxPlugin.java | 6 + .../flutter/plugins/camerax/CameraXProxy.java | 13 ++ .../camerax/GeneratedCameraXLibrary.java | 150 +++++++++++++ .../camerax/ImageCaptureHostApiImpl.java | 141 ++++++++++++ .../plugins/camerax/ImageCaptureTest.java | 211 ++++++++++++++++++ .../integration_test/integration_test.dart | 21 ++ .../example/lib/main.dart | 6 +- .../lib/src/android_camera_camerax.dart | 49 ++++ .../lib/src/camerax_library.g.dart | 116 ++++++++++ .../lib/src/image_capture.dart | 139 ++++++++++++ .../lib/src/preview.dart | 6 +- .../pigeons/camerax_library.dart | 10 + .../test/android_camera_camerax_test.dart | 24 ++ .../android_camera_camerax_test.mocks.dart | 52 ++++- .../test/image_capture_test.dart | 111 +++++++++ .../test/image_capture_test.mocks.dart | 73 ++++++ .../test/test_camerax_library.g.dart | 98 ++++++++ 17 files changed, 1213 insertions(+), 13 deletions(-) create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageCaptureTest.java create mode 100644 packages/camera/camera_android_camerax/lib/src/image_capture.dart create mode 100644 packages/camera/camera_android_camerax/test/image_capture_test.dart create mode 100644 packages/camera/camera_android_camerax/test/image_capture_test.mocks.dart diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java index b61e7ac72224..1f5cdb174504 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java @@ -18,6 +18,7 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, Activity private InstanceManager instanceManager; private FlutterPluginBinding pluginBinding; private ProcessCameraProviderHostApiImpl processCameraProviderHostApi; + private ImageCaptureHostApiImpl imageCaptureHostApi; public SystemServicesHostApiImpl systemServicesHostApi; /** @@ -51,6 +52,8 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex GeneratedCameraXLibrary.SystemServicesHostApi.setup(binaryMessenger, systemServicesHostApi); GeneratedCameraXLibrary.PreviewHostApi.setup( binaryMessenger, new PreviewHostApiImpl(binaryMessenger, instanceManager, textureRegistry)); + imageCaptureHostApi = new ImageCaptureHostApiImpl(binaryMessenger, instanceManager, context); + GeneratedCameraXLibrary.ImageCaptureHostApi.setup(binaryMessenger, imageCaptureHostApi); } @Override @@ -105,5 +108,8 @@ public void updateContext(Context context) { if (processCameraProviderHostApi != null) { processCameraProviderHostApi.setContext(context); } + if (imageCaptureHostApi != null) { + processCameraProviderHostApi.setContext(context); + } } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java index 4a3d277a4dc3..55b9026b3c3d 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java @@ -9,8 +9,10 @@ import android.view.Surface; import androidx.annotation.NonNull; import androidx.camera.core.CameraSelector; +import androidx.camera.core.ImageCapture; import androidx.camera.core.Preview; import io.flutter.plugin.common.BinaryMessenger; +import java.io.File; /** Utility class used to create CameraX-related objects primarily for testing purposes. */ public class CameraXProxy { @@ -48,4 +50,15 @@ public SystemServicesFlutterApiImpl createSystemServicesFlutterApiImpl( @NonNull BinaryMessenger binaryMessenger) { return new SystemServicesFlutterApiImpl(binaryMessenger); } + + public ImageCapture.Builder createImageCaptureBuilder() { + return new ImageCapture.Builder(); + } + + /** + * Creates an {@link ImageCapture.OutputFileOptions} to configure where to save a captured image. + */ + public ImageCapture.OutputFileOptions createImageCaptureOutputFileOptions(File file) { + return new ImageCapture.OutputFileOptions.Builder(file).build(); + } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 1e61ea699292..69716dda453e 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -1100,6 +1100,156 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { } } + private static class ImageCaptureHostApiCodec extends StandardMessageCodec { + public static final ImageCaptureHostApiCodec INSTANCE = new ImageCaptureHostApiCodec(); + + private ImageCaptureHostApiCodec() {} + + @Override + protected Object readValueOfType(byte type, ByteBuffer buffer) { + switch (type) { + case (byte) 128: + return ResolutionInfo.fromMap((Map) readValue(buffer)); + + default: + return super.readValueOfType(type, buffer); + } + } + + @Override + protected void writeValue(ByteArrayOutputStream stream, Object value) { + if (value instanceof ResolutionInfo) { + stream.write(128); + writeValue(stream, ((ResolutionInfo) value).toMap()); + } else { + super.writeValue(stream, value); + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface ImageCaptureHostApi { + void create( + @NonNull Long identifier, + @Nullable Long flashMode, + @Nullable ResolutionInfo targetResolution); + + void setFlashMode(@NonNull Long identifier, @NonNull Long flashMode); + + void takePicture(@NonNull Long identifier, Result result); + + /** The codec used by ImageCaptureHostApi. */ + static MessageCodec getCodec() { + return ImageCaptureHostApiCodec.INSTANCE; + } + + /** + * Sets up an instance of `ImageCaptureHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.create", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number flashModeArg = (Number) args.get(1); + ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (flashModeArg == null) ? null : flashModeArg.longValue(), + targetResolutionArg); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number flashModeArg = (Number) args.get(1); + if (flashModeArg == null) { + throw new NullPointerException("flashModeArg unexpectedly null."); + } + api.setFlashMode( + (identifierArg == null) ? null : identifierArg.longValue(), + (flashModeArg == null) ? null : flashModeArg.longValue()); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.takePicture", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.put("result", result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + wrapped.put("error", wrapError(error)); + reply.reply(wrapped); + } + }; + + api.takePicture( + (identifierArg == null) ? null : identifierArg.longValue(), resultCallback); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + reply.reply(wrapped); + } + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + private static Map wrapError(Throwable exception) { Map errorMap = new HashMap<>(); errorMap.put("message", exception.toString()); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java new file mode 100644 index 000000000000..a491adaff0c3 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java @@ -0,0 +1,141 @@ +// 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. + +package io.flutter.plugins.camerax; + +import android.content.Context; +import android.util.Size; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; +import androidx.camera.core.ImageCapture; +import androidx.camera.core.ImageCaptureException; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageCaptureHostApi; +import java.io.File; +import java.io.IOException; +import java.util.Objects; +import java.util.concurrent.Executors; + +public class ImageCaptureHostApiImpl implements ImageCaptureHostApi { + private final BinaryMessenger binaryMessenger; + private final InstanceManager instanceManager; + + private Context context; + private SystemServicesFlutterApiImpl systemServicesFlutterApiImpl; + + @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); + + public ImageCaptureHostApiImpl( + @NonNull BinaryMessenger binaryMessenger, + @NonNull InstanceManager instanceManager, + @NonNull Context context) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + this.context = context; + } + + /** + * Sets the context that the {@code ImageCapture} will use to find a location to save a captured + * image. + */ + public void setContext(Context context) { + this.context = context; + } + + /** + * Creates a {@link ImageCapture} with the requested flash mode and target resolution if + * specified. + */ + @Override + public void create( + @NonNull Long identifier, + @Nullable Long flashMode, + @Nullable GeneratedCameraXLibrary.ResolutionInfo targetResolution) { + ImageCapture.Builder imageCaptureBuilder = cameraXProxy.createImageCaptureBuilder(); + if (flashMode != null) { + // This sets the requested flash mode, but may fail silently. + imageCaptureBuilder.setFlashMode(flashMode.intValue()); + } + if (targetResolution != null) { + imageCaptureBuilder.setTargetResolution( + new Size( + targetResolution.getWidth().intValue(), targetResolution.getHeight().intValue())); + } + ImageCapture imageCapture = imageCaptureBuilder.build(); + instanceManager.addDartCreatedInstance(imageCapture, identifier); + } + + /** Sets the flash mode of the {@link ImageCapture} instance with the specified identifier. */ + @Override + public void setFlashMode(@NonNull Long identifier, @NonNull Long flashMode) { + ImageCapture imageCapture = + (ImageCapture) Objects.requireNonNull(instanceManager.getInstance(identifier)); + imageCapture.setFlashMode(flashMode.intValue()); + } + + /** Captures a still image and uses the result to return its absolute path in memory. */ + @Override + public void takePicture( + @NonNull Long identifier, @NonNull GeneratedCameraXLibrary.Result result) { + ImageCapture imageCapture = + (ImageCapture) Objects.requireNonNull(instanceManager.getInstance(identifier)); + final File outputDir = context.getCacheDir(); + File temporaryCaptureFile; + try { + temporaryCaptureFile = File.createTempFile("CAP", ".jpg", outputDir); + } catch (IOException | SecurityException e) { + // Send empty path because file could not be created to save image. + result.success(""); + + // Send error. + if (systemServicesFlutterApiImpl == null) { + systemServicesFlutterApiImpl = + cameraXProxy.createSystemServicesFlutterApiImpl(binaryMessenger); + } + systemServicesFlutterApiImpl.sendCameraError( + "Cannot create file to save captured image: " + e.getMessage(), reply -> {}); + return; + } + + ImageCapture.OutputFileOptions outputFileOptions = + cameraXProxy.createImageCaptureOutputFileOptions(temporaryCaptureFile); + ImageCapture.OnImageSavedCallback onImageSavedCallback = + createOnImageSavedCallback(temporaryCaptureFile, result); + + imageCapture.takePicture( + outputFileOptions, Executors.newSingleThreadExecutor(), onImageSavedCallback); + } + + /** Creates a callback used when saving a captured image. */ + @VisibleForTesting + public ImageCapture.OnImageSavedCallback createOnImageSavedCallback( + @NonNull File file, @NonNull GeneratedCameraXLibrary.Result result) { + return new ImageCapture.OnImageSavedCallback() { + @Override + public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) { + result.success(file.getAbsolutePath()); + } + + @Override + public void onError(@NonNull ImageCaptureException exception) { + // Send empty path because image was not saved. + result.success(""); + + // Send error. + if (systemServicesFlutterApiImpl == null) { + systemServicesFlutterApiImpl = + cameraXProxy.createSystemServicesFlutterApiImpl(binaryMessenger); + } + systemServicesFlutterApiImpl.sendCameraError( + getOnImageSavedExceptionDescription(exception), reply -> {}); + } + }; + } + + /** Gets exception description for a failure with saving a captured image. */ + private String getOnImageSavedExceptionDescription(@NonNull ImageCaptureException exception) { + return exception.getImageCaptureError() + ": " + exception.getMessage(); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageCaptureTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageCaptureTest.java new file mode 100644 index 000000000000..911dbf5189f3 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageCaptureTest.java @@ -0,0 +1,211 @@ +// 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. + +package io.flutter.plugins.camerax; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.util.Size; +import androidx.camera.core.ImageCapture; +import androidx.camera.core.ImageCaptureException; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.SystemServicesFlutterApi.Reply; +import java.io.File; +import java.io.IOException; +import java.util.concurrent.Executor; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.robolectric.RobolectricTestRunner; + +@RunWith(RobolectricTestRunner.class) +public class ImageCaptureTest { + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public ImageCapture mockImageCapture; + @Mock public BinaryMessenger mockBinaryMessenger; + @Mock public CameraXProxy mockCameraXProxy; + + InstanceManager testInstanceManager; + private Context context; + private MockedStatic mockedStaticFile; + + @Before + public void setUp() throws Exception { + testInstanceManager = spy(InstanceManager.open(identifier -> {})); + context = mock(Context.class); + mockedStaticFile = mockStatic(File.class); + } + + @After + public void tearDown() { + testInstanceManager.close(); + mockedStaticFile.close(); + } + + @Test + public void create_createsImageCaptureWithCorrectConfiguration() { + final ImageCaptureHostApiImpl imageCaptureHostApiImpl = + new ImageCaptureHostApiImpl(mockBinaryMessenger, testInstanceManager, context); + final ImageCapture.Builder mockImageCaptureBuilder = mock(ImageCapture.Builder.class); + final Long imageCaptureIdentifier = 74L; + final Long flashMode = Long.valueOf(ImageCapture.FLASH_MODE_ON); + final int targetResolutionWidth = 10; + final int targetResolutionHeight = 50; + final GeneratedCameraXLibrary.ResolutionInfo resolutionInfo = + new GeneratedCameraXLibrary.ResolutionInfo.Builder() + .setWidth(Long.valueOf(targetResolutionWidth)) + .setHeight(Long.valueOf(targetResolutionHeight)) + .build(); + + imageCaptureHostApiImpl.cameraXProxy = mockCameraXProxy; + when(mockCameraXProxy.createImageCaptureBuilder()).thenReturn(mockImageCaptureBuilder); + when(mockImageCaptureBuilder.build()).thenReturn(mockImageCapture); + + final ArgumentCaptor sizeCaptor = ArgumentCaptor.forClass(Size.class); + + imageCaptureHostApiImpl.create(imageCaptureIdentifier, flashMode, resolutionInfo); + + verify(mockImageCaptureBuilder).setFlashMode(flashMode.intValue()); + verify(mockImageCaptureBuilder).setTargetResolution(sizeCaptor.capture()); + assertEquals(sizeCaptor.getValue().getWidth(), targetResolutionWidth); + assertEquals(sizeCaptor.getValue().getHeight(), targetResolutionHeight); + verify(mockImageCaptureBuilder).build(); + verify(testInstanceManager).addDartCreatedInstance(mockImageCapture, imageCaptureIdentifier); + } + + @Test + public void setFlashMode_setsFlashModeOfImageCaptureInstance() { + final ImageCaptureHostApiImpl imageCaptureHostApiImpl = + new ImageCaptureHostApiImpl(mockBinaryMessenger, testInstanceManager, context); + final Long imageCaptureIdentifier = 85L; + final Long flashMode = Long.valueOf(ImageCapture.FLASH_MODE_AUTO); + + testInstanceManager.addDartCreatedInstance(mockImageCapture, imageCaptureIdentifier); + + imageCaptureHostApiImpl.setFlashMode(imageCaptureIdentifier, flashMode); + + verify(mockImageCapture).setFlashMode(flashMode.intValue()); + } + + @Test + public void + takePicture_sendsRequestToTakePictureWithExpectedConfigurationWhenTemporaryFileCanBeCreated() { + final ImageCaptureHostApiImpl imageCaptureHostApiImpl = + spy(new ImageCaptureHostApiImpl(mockBinaryMessenger, testInstanceManager, context)); + final Long imageCaptureIdentifier = 6L; + final File mockOutputDir = mock(File.class); + final File mockFile = mock(File.class); + final ImageCapture.OutputFileOptions mockOutputFileOptions = + mock(ImageCapture.OutputFileOptions.class); + final ImageCapture.OnImageSavedCallback mockOnImageSavedCallback = + mock(ImageCapture.OnImageSavedCallback.class); + final GeneratedCameraXLibrary.Result mockResult = + mock(GeneratedCameraXLibrary.Result.class); + + testInstanceManager.addDartCreatedInstance(mockImageCapture, imageCaptureIdentifier); + when(context.getCacheDir()).thenReturn(mockOutputDir); + imageCaptureHostApiImpl.cameraXProxy = mockCameraXProxy; + mockedStaticFile + .when(() -> File.createTempFile("CAP", ".jpg", mockOutputDir)) + .thenReturn(mockFile); + when(mockCameraXProxy.createImageCaptureOutputFileOptions(mockFile)) + .thenReturn(mockOutputFileOptions); + when(imageCaptureHostApiImpl.createOnImageSavedCallback(mockFile, mockResult)) + .thenReturn(mockOnImageSavedCallback); + + imageCaptureHostApiImpl.takePicture(imageCaptureIdentifier, mockResult); + + verify(mockImageCapture) + .takePicture(eq(mockOutputFileOptions), any(Executor.class), eq(mockOnImageSavedCallback)); + } + + @Test + public void takePicture_sendsEmptyPathAndSendsCameraErrorWhenTemporaryFileCannotBeCreated() { + final ImageCaptureHostApiImpl imageCaptureHostApiImpl = + new ImageCaptureHostApiImpl(mockBinaryMessenger, testInstanceManager, context); + final Long imageCaptureIdentifier = 6L; + final File mockOutputDir = mock(File.class); + final File mockTemporaryCaptureFile = mock(File.class); + final GeneratedCameraXLibrary.Result mockResult = + mock(GeneratedCameraXLibrary.Result.class); + final SystemServicesFlutterApiImpl mockSystemServicesFlutterApiImpl = + mock(SystemServicesFlutterApiImpl.class); + + testInstanceManager.addDartCreatedInstance(mockImageCapture, imageCaptureIdentifier); + imageCaptureHostApiImpl.cameraXProxy = mockCameraXProxy; + when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger)) + .thenReturn(mockSystemServicesFlutterApiImpl); + when(context.getCacheDir()).thenReturn(mockOutputDir); + mockedStaticFile + .when(() -> File.createTempFile("CAP", ".jpg", mockOutputDir)) + .thenThrow(new IOException()); + + imageCaptureHostApiImpl.takePicture(imageCaptureIdentifier, mockResult); + + verify(mockResult).success(""); + verify(mockSystemServicesFlutterApiImpl).sendCameraError(anyString(), any(Reply.class)); + verify(mockImageCapture, times(0)) + .takePicture( + any(ImageCapture.OutputFileOptions.class), + any(Executor.class), + any(ImageCapture.OnImageSavedCallback.class)); + } + + @Test + public void takePicture_usesExpectedOnImageSavedCallback() { + final ImageCaptureHostApiImpl imageCaptureHostApiImpl = + new ImageCaptureHostApiImpl(mockBinaryMessenger, testInstanceManager, context); + final SystemServicesFlutterApiImpl mockSystemServicesFlutterApiImpl = + mock(SystemServicesFlutterApiImpl.class); + final File mockFile = mock(File.class); + final GeneratedCameraXLibrary.Result mockResult = + mock(GeneratedCameraXLibrary.Result.class); + final ImageCapture.OutputFileResults mockOutputFileResults = + mock(ImageCapture.OutputFileResults.class); + final String mockFileAbsolutePath = "absolute/path/to/captured/image"; + final ImageCaptureException mockException = mock(ImageCaptureException.class); + final int testImageCaptureError = 54; + final String testExceptionMessage = "Test exception message"; + + imageCaptureHostApiImpl.cameraXProxy = mockCameraXProxy; + when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger)) + .thenReturn(mockSystemServicesFlutterApiImpl); + when(mockFile.getAbsolutePath()).thenReturn(mockFileAbsolutePath); + when(mockException.getImageCaptureError()).thenReturn(testImageCaptureError); + when(mockException.getMessage()).thenReturn(testExceptionMessage); + + ImageCapture.OnImageSavedCallback onImageSavedCallback = + imageCaptureHostApiImpl.createOnImageSavedCallback(mockFile, mockResult); + + // Test success case. + onImageSavedCallback.onImageSaved(mockOutputFileResults); + + verify(mockResult).success(mockFileAbsolutePath); + + // Test error case. + onImageSavedCallback.onError(mockException); + + verify(mockResult).success(""); + verify(mockSystemServicesFlutterApiImpl) + .sendCameraError(eq(testImageCaptureError + ": " + testExceptionMessage), any(Reply.class)); + } +} diff --git a/packages/camera/camera_android_camerax/example/integration_test/integration_test.dart b/packages/camera/camera_android_camerax/example/integration_test/integration_test.dart index b05d14a9cc79..940aa17039d8 100644 --- a/packages/camera/camera_android_camerax/example/integration_test/integration_test.dart +++ b/packages/camera/camera_android_camerax/example/integration_test/integration_test.dart @@ -25,4 +25,25 @@ void main() { expect(cameraDescription.sensorOrientation, anyOf(0, 90, 180, 270)); } }); + + testWidgets('takePictures stores a valid image in memory', + (WidgetTester tester) async { + final List availableCameras = + await CameraPlatform.instance.availableCameras(); + if (cameras.isEmpty) { + return; + } + for (final CameraDescription cameraDescription in availableCameras) { + final CameraController controller = CameraController(cameraDescription); + // Take Picture + final XFile file = await controller.takePicture(); + + // Try loading picture + final File fileImage = File(file.path); + final Image image = + await decodeImageFromList(fileImage.readAsBytesSync()); + + expect(image, isNotNull); + } + }); } diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index 4fd965271baa..c668871b7a62 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -505,7 +505,11 @@ class _CameraExampleHomeState extends State IconButton( icon: const Icon(Icons.camera_alt), color: Colors.blue, - onPressed: () {}, // TODO(camsim99): Add functionality back here. + onPressed: cameraController != null && + cameraController.value.isInitialized && + !cameraController.value.isRecordingVideo + ? onTakePictureButtonPressed + : null, ), IconButton( icon: const Icon(Icons.videocam), diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 18debf688547..9d2ff38ac393 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -12,6 +12,7 @@ import 'camera.dart'; import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.g.dart'; +import 'image_capture.dart'; import 'preview.dart'; import 'process_camera_provider.dart'; import 'surface.dart'; @@ -45,11 +46,19 @@ class AndroidCameraCameraX extends CameraPlatform { bool _previewIsPaused = false; + /// The [ImageCapture] instance that can be configured to capture a still image. + @visibleForTesting + ImageCapture? imageCapture; + /// The [CameraSelector] used to configure the [processCameraProvider] to use /// the desired camera. @visibleForTesting CameraSelector? cameraSelector; + /// The resolution preset used to create a camera that should be used for + /// capturing still images and recording video. + ResolutionPreset? _resolutionPreset; + /// The controller we need to broadcast the different camera events. /// /// It is a `broadcast` because multiple controllers will connect to @@ -141,6 +150,7 @@ class AndroidCameraCameraX extends CameraPlatform { processCameraProvider ??= await ProcessCameraProvider.getInstance(); // Configure Preview instance and bind to ProcessCameraProvider. + _resolutionPreset = resolutionPreset; final int targetRotation = _getTargetRotation(cameraDescription.sensorOrientation); final ResolutionInfo? targetResolution = @@ -270,6 +280,28 @@ class AndroidCameraCameraX extends CameraPlatform { }); } + /// Captures an image and returns the file where it was saved. + /// + /// [cameraId] is not used. + @override + Future takePicture(int cameraId) async { + assert(processCameraProvider != null); + assert(cameraSelector != null); + + final ResolutionInfo? targetResolution = + _getTargetResolutionForImageCapture(_resolutionPreset); + // TODO(camsim99): Add support for flash mode configuration. + // https://github.com/flutter/flutter/issues/120715 + imageCapture ??= + ImageCapture(flashMode: null, targetResolution: targetResolution); + camera = await processCameraProvider! + .bindToLifecycle(cameraSelector!, [imageCapture!]); + String picturePath = await imageCapture!.takePicture(); + processCameraProvider!.unbind([imageCapture!]); + + return XFile(picturePath); + } + // Methods for binding UseCases to the lifecycle of the camera controlled // by a ProcessCameraProvider instance: @@ -343,6 +375,14 @@ class AndroidCameraCameraX extends CameraPlatform { return null; } + /// Returns [ResolutionInfo] that maps to the specified resolution preset for + /// image capture. + ResolutionInfo? _getTargetResolutionForImageCapture( + ResolutionPreset? resolution) { + // TODO(camsim99): Implement resolution configuration. + // https://github.com/flutter/flutter/issues/120462 + } + // Methods for calls that need to be tested: /// Requests camera permissions. @@ -379,4 +419,13 @@ class AndroidCameraCameraX extends CameraPlatform { return Preview( targetRotation: targetRotation, targetResolution: targetResolution); } + + /// Returns an [ImageCapture] configured with specified flash mode and + /// target resolution. + @visibleForTesting + ImageCapture createImageCapture( + int? flashMode, ResolutionInfo? targetResolution) { + return ImageCapture( + flashMode: flashMode, targetResolution: targetResolution); + } } diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index 1d315e5a1600..34170c8e9edc 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -853,3 +853,119 @@ class PreviewHostApi { } } } + +class _ImageCaptureHostApiCodec extends StandardMessageCodec { + const _ImageCaptureHostApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is ResolutionInfo) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return ResolutionInfo.decode(readValue(buffer)!); + + default: + return super.readValueOfType(type, buffer); + } + } +} + +class ImageCaptureHostApi { + /// Constructor for [ImageCaptureHostApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + ImageCaptureHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = _ImageCaptureHostApiCodec(); + + Future create(int arg_identifier, int? arg_flashMode, + ResolutionInfo? arg_targetResolution) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = await channel.send( + [arg_identifier, arg_flashMode, arg_targetResolution]) + as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = + (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return; + } + } + + Future setFlashMode(int arg_identifier, int arg_flashMode) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier, arg_flashMode]) + as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = + (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return; + } + } + + Future takePicture(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier]) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = + (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else if (replyMap['result'] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyMap['result'] as String?)!; + } + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/image_capture.dart b/packages/camera/camera_android_camerax/lib/src/image_capture.dart new file mode 100644 index 000000000000..6aaa54dc4949 --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -0,0 +1,139 @@ +// 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 'package:camera_platform_interface/camera_platform_interface.dart' + show CameraException; +import 'package:flutter/services.dart' show BinaryMessenger; + +import 'camerax_library.g.dart'; +import 'instance_manager.dart'; +import 'java_object.dart'; +import 'use_case.dart'; + +/// Use case for picture taking. +/// +/// See https://developer.android.com/reference/androidx/camera/core/ImageCapture. +class ImageCapture extends UseCase { + /// Creates a [ImageCapture]. + ImageCapture( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + this.flashMode, + this.targetResolution}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = ImageCaptureHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + _api.createFromInstance(this, flashMode, targetResolution); + } + + /// Constructs a [ImageCapture] that is not automatically attached to a native object. + ImageCapture.detached( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + this.flashMode, + this.targetResolution}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = ImageCaptureHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + } + + late final ImageCaptureHostApiImpl _api; + + /// Flash mode used to take a picture. + int? flashMode; + + /// Target resolution of the image output from taking a picture. + final ResolutionInfo? targetResolution; + + /// Constant for automatic flash mode. + /// + /// See https://developer.android.com/reference/androidx/camera/core/ImageCapture#FLASH_MODE_AUTO(). + static const int flashModeAuto = 0; + + /// Constant for on flash mode. + /// + /// See https://developer.android.com/reference/androidx/camera/core/ImageCapture#FLASH_MODE_ON(). + static const int flashModeOn = 1; + + /// Constant for no flash mode. + /// + /// See https://developer.android.com/reference/androidx/camera/core/ImageCapture#FLASH_MODE_OFF(). + static const int flashModeOff = 2; + + /// Sets the flash mode to use for image capture. + void setFlashMode(int newFlashMode) { + _api.setFlashModeFromInstance(this, newFlashMode); + flashMode = newFlashMode; + } + + /// Takes a picture and returns the absolute path of where the capture image + /// was saved. + Future takePicture() async { + return await _api.takePictureFromInstance(this); + } +} + +/// Host API implementation of [ImageCapture]. +class ImageCaptureHostApiImpl extends ImageCaptureHostApi { + /// Constructs a [ImageCaptureHostApiImpl]. + ImageCaptureHostApiImpl( + {this.binaryMessenger, InstanceManager? instanceManager}) { + this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + } + + /// Receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used which routes to + /// the host platform. + final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + late final InstanceManager instanceManager; + + /// Creates a [ImageCapture] instance with the flash mode and target resolution + /// if specified. + void createFromInstance(ImageCapture instance, int? flashMode, + ResolutionInfo? targetResolution) async { + final int identifier = instanceManager.addDartCreatedInstance(instance, + onCopy: (ImageCapture original) { + return ImageCapture.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + flashMode: original.flashMode, + targetResolution: original.targetResolution); + }); + create(identifier, flashMode, targetResolution); + } + + /// Sets the flash mode for the specified [ImageCapture] instance to take + /// a picture with. + void setFlashModeFromInstance(ImageCapture instance, int flashMode) async { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No ImageCapture has the identifer of that requested to get the resolution information for.'); + + setFlashMode(identifier!, flashMode); + } + + /// Takes a picture with the specified [ImageCapture] instance. + Future takePictureFromInstance(ImageCapture instance) async { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No ImageCapture has the identifer of that requested to get the resolution information for.'); + + String picturePath = await takePicture(identifier!); + if (picturePath == '') { + throw CameraException( + 'TAKE_PICTURE_FAILED', + 'Capturing the image failed or the picture failed to save.', + ); + } + + return picturePath; + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/preview.dart b/packages/camera/camera_android_camerax/lib/src/preview.dart index 602bcb3da76a..d62ab77f20f2 100644 --- a/packages/camera/camera_android_camerax/lib/src/preview.dart +++ b/packages/camera/camera_android_camerax/lib/src/preview.dart @@ -84,7 +84,8 @@ class PreviewHostApiImpl extends PreviewHostApi { /// Maintains instances stored to communicate with native language objects. late final InstanceManager instanceManager; - /// Creates a [Preview] with the target rotation provided if specified. + /// Creates a [Preview] with the target rotation and target resolution if + /// specified. void createFromInstance( Preview instance, int? targetRotation, ResolutionInfo? targetResolution) { final int identifier = instanceManager.addDartCreatedInstance(instance, @@ -92,7 +93,8 @@ class PreviewHostApiImpl extends PreviewHostApi { return Preview.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager, - targetRotation: original.targetRotation); + targetRotation: original.targetRotation, + targetResolution: original.targetResolution); }); create(identifier, targetRotation, targetResolution); } diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 4172cd7db073..971f86e88dff 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -131,3 +131,13 @@ abstract class PreviewHostApi { ResolutionInfo getResolutionInfo(int identifier); } + +@HostApi(dartHostTestHandler: 'TestImageCaptureHostApi') +abstract class ImageCaptureHostApi { + void create(int identifier, int? flashMode, ResolutionInfo? targetResolution); + + void setFlashMode(int identifier, int flashMode); + + @async + String takePicture(int identifier); +} diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index acfaf16b9ac4..d1ed0c1bed5a 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart @@ -10,6 +10,7 @@ import 'package:camera_android_camerax/src/camera.dart'; import 'package:camera_android_camerax/src/camera_info.dart'; import 'package:camera_android_camerax/src/camera_selector.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; +import 'package:camera_android_camerax/src/image_capture.dart'; import 'package:camera_android_camerax/src/preview.dart'; import 'package:camera_android_camerax/src/process_camera_provider.dart'; import 'package:camera_android_camerax/src/system_services.dart'; @@ -27,6 +28,7 @@ import 'android_camera_camerax_test.mocks.dart'; MockSpec(), MockSpec(), MockSpec(), + MockSpec(), MockSpec(), MockSpec(), ]) @@ -364,6 +366,28 @@ void main() { as Texture; expect(previewTexture.textureId, equals(textureId)); }); + + test( + 'takePicture binds and unbinds ImageCapture to lifecycle and makes call to take a picture', + () async { + final AndroidCameraCameraX camera = AndroidCameraCameraX(); + const String testPicturePath = "test/absolute/path/to/picture"; + + camera.processCameraProvider = MockProcessCameraProvider(); + camera.cameraSelector = MockCameraSelector(); + camera.imageCapture = MockImageCapture(); + + when(camera.imageCapture!.takePicture()) + .thenAnswer((_) async => testPicturePath); + + XFile imageFile = await camera.takePicture(3); + + verify(camera.processCameraProvider!.bindToLifecycle( + camera.cameraSelector!, [camera.imageCapture!])); + verify( + camera.processCameraProvider!.unbind([camera.imageCapture!])); + expect(imageFile.path, equals(testPicturePath)); + }); } /// Mock of [AndroidCameraCameraX] that stubs behavior of some methods for diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart index af225a10c64a..7bce60af01f9 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart @@ -9,14 +9,15 @@ import 'package:camera_android_camerax/src/camera.dart' as _i3; import 'package:camera_android_camerax/src/camera_info.dart' as _i7; import 'package:camera_android_camerax/src/camera_selector.dart' as _i9; import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i2; -import 'package:camera_android_camerax/src/preview.dart' as _i10; +import 'package:camera_android_camerax/src/image_capture.dart' as _i10; +import 'package:camera_android_camerax/src/preview.dart' as _i11; import 'package:camera_android_camerax/src/process_camera_provider.dart' - as _i11; -import 'package:camera_android_camerax/src/use_case.dart' as _i12; + as _i12; +import 'package:camera_android_camerax/src/use_case.dart' as _i13; import 'package:flutter/foundation.dart' as _i6; import 'package:flutter/services.dart' as _i5; import 'package:flutter/src/widgets/framework.dart' as _i4; -import 'package:flutter/src/widgets/notification_listener.dart' as _i13; +import 'package:flutter/src/widgets/notification_listener.dart' as _i14; import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: type=lint @@ -135,10 +136,41 @@ class MockCameraSelector extends _i1.Mock implements _i9.CameraSelector { ) as _i8.Future>); } +/// A class which mocks [ImageCapture]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockImageCapture extends _i1.Mock implements _i10.ImageCapture { + @override + set flashMode(int? _flashMode) => super.noSuchMethod( + Invocation.setter( + #flashMode, + _flashMode, + ), + returnValueForMissingStub: null, + ); + @override + void setFlashMode(int? newFlashMode) => super.noSuchMethod( + Invocation.method( + #setFlashMode, + [newFlashMode], + ), + returnValueForMissingStub: null, + ); + @override + _i8.Future takePicture() => (super.noSuchMethod( + Invocation.method( + #takePicture, + [], + ), + returnValue: _i8.Future.value(''), + returnValueForMissingStub: _i8.Future.value(''), + ) as _i8.Future); +} + /// A class which mocks [Preview]. /// /// See the documentation for Mockito's code generation for more information. -class MockPreview extends _i1.Mock implements _i10.Preview { +class MockPreview extends _i1.Mock implements _i11.Preview { @override _i8.Future setSurfaceProvider() => (super.noSuchMethod( Invocation.method( @@ -184,7 +216,7 @@ class MockPreview extends _i1.Mock implements _i10.Preview { /// /// See the documentation for Mockito's code generation for more information. class MockProcessCameraProvider extends _i1.Mock - implements _i11.ProcessCameraProvider { + implements _i12.ProcessCameraProvider { @override _i8.Future> getAvailableCameraInfos() => (super.noSuchMethod( @@ -199,7 +231,7 @@ class MockProcessCameraProvider extends _i1.Mock @override _i8.Future<_i3.Camera> bindToLifecycle( _i9.CameraSelector? cameraSelector, - List<_i12.UseCase>? useCases, + List<_i13.UseCase>? useCases, ) => (super.noSuchMethod( Invocation.method( @@ -231,7 +263,7 @@ class MockProcessCameraProvider extends _i1.Mock )), ) as _i8.Future<_i3.Camera>); @override - void unbind(List<_i12.UseCase>? useCases) => super.noSuchMethod( + void unbind(List<_i13.UseCase>? useCases) => super.noSuchMethod( Invocation.method( #unbind, [useCases], @@ -295,7 +327,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { ), ) as _i4.InheritedWidget); @override - void visitAncestorElements(bool Function(_i4.Element)? visitor) => + void visitAncestorElements(_i4.ConditionalElementVisitor? visitor) => super.noSuchMethod( Invocation.method( #visitAncestorElements, @@ -312,7 +344,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValueForMissingStub: null, ); @override - void dispatchNotification(_i13.Notification? notification) => + void dispatchNotification(_i14.Notification? notification) => super.noSuchMethod( Invocation.method( #dispatchNotification, diff --git a/packages/camera/camera_android_camerax/test/image_capture_test.dart b/packages/camera/camera_android_camerax/test/image_capture_test.dart new file mode 100644 index 000000000000..df30a42687d8 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/image_capture_test.dart @@ -0,0 +1,111 @@ +// 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 'package:camera_android_camerax/src/camerax_library.g.dart'; +import 'package:camera_android_camerax/src/image_capture.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'image_capture_test.mocks.dart'; +import 'test_camerax_library.g.dart'; + +@GenerateMocks([TestImageCaptureHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ImageCapture', () { + tearDown(() => TestImageCaptureHostApi.setup(null)); + + test('detached create does not call create on the Java side', () async { + final MockTestImageCaptureHostApi mockApi = MockTestImageCaptureHostApi(); + TestImageCaptureHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + ImageCapture.detached( + instanceManager: instanceManager, + flashMode: ImageCapture.flashModeOn, + targetResolution: ResolutionInfo(width: 50, height: 10), + ); + + verifyNever(mockApi.create(argThat(isA()), argThat(isA()), + argThat(isA()))); + }); + + test('create calls create on the Java side', () async { + final MockTestImageCaptureHostApi mockApi = MockTestImageCaptureHostApi(); + TestImageCaptureHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + const int flashMode = ImageCapture.flashModeAuto; + const int targetResolutionWidth = 10; + const int targetResolutionHeight = 50; + ImageCapture( + instanceManager: instanceManager, + flashMode: flashMode, + targetResolution: ResolutionInfo( + width: targetResolutionWidth, height: targetResolutionHeight), + ); + + final VerificationResult createVerification = verify(mockApi.create( + argThat(isA()), argThat(equals(flashMode)), captureAny)); + final ResolutionInfo capturedResolutionInfo = + createVerification.captured.single as ResolutionInfo; + expect(capturedResolutionInfo.width, equals(targetResolutionWidth)); + expect(capturedResolutionInfo.height, equals(targetResolutionHeight)); + }); + + test('setFlashMode makes call to set flash mode for ImageCapture instance', + () async { + final MockTestImageCaptureHostApi mockApi = MockTestImageCaptureHostApi(); + TestImageCaptureHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + const int flashMode = ImageCapture.flashModeOff; + final ImageCapture imageCapture = ImageCapture.detached( + instanceManager: instanceManager, + ); + instanceManager.addHostCreatedInstance( + imageCapture, + 0, + onCopy: (_) => ImageCapture.detached(), + ); + + imageCapture.setFlashMode(flashMode); + + verify(mockApi.setFlashMode( + instanceManager.getIdentifier(imageCapture), flashMode)); + }); + + test('takePicture makes call to capture still image', () async { + final MockTestImageCaptureHostApi mockApi = MockTestImageCaptureHostApi(); + TestImageCaptureHostApi.setup(mockApi); + + const String expectedPicturePath = 'test/path/to/picture'; + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ImageCapture imageCapture = ImageCapture.detached( + instanceManager: instanceManager, + ); + instanceManager.addHostCreatedInstance( + imageCapture, + 0, + onCopy: (_) => ImageCapture.detached(), + ); + + when(mockApi.takePicture(instanceManager.getIdentifier(imageCapture))) + .thenAnswer((_) async => expectedPicturePath); + expect(await imageCapture.takePicture(), equals(expectedPicturePath)); + verify(mockApi.takePicture(instanceManager.getIdentifier(imageCapture))); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/image_capture_test.mocks.dart b/packages/camera/camera_android_camerax/test/image_capture_test.mocks.dart new file mode 100644 index 000000000000..1dc8a28ecde8 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/image_capture_test.mocks.dart @@ -0,0 +1,73 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in camera_android_camerax/test/image_capture_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i3; +import 'package:mockito/mockito.dart' as _i1; + +import 'test_camerax_library.g.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [TestImageCaptureHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestImageCaptureHostApi extends _i1.Mock + implements _i2.TestImageCaptureHostApi { + MockTestImageCaptureHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void create( + int? identifier, + int? flashMode, + _i3.ResolutionInfo? targetResolution, + ) => + super.noSuchMethod( + Invocation.method( + #create, + [ + identifier, + flashMode, + targetResolution, + ], + ), + returnValueForMissingStub: null, + ); + @override + void setFlashMode( + int? identifier, + int? flashMode, + ) => + super.noSuchMethod( + Invocation.method( + #setFlashMode, + [ + identifier, + flashMode, + ], + ), + returnValueForMissingStub: null, + ); + @override + _i4.Future takePicture(int? identifier) => (super.noSuchMethod( + Invocation.method( + #takePicture, + [identifier], + ), + returnValue: _i4.Future.value(''), + ) as _i4.Future); +} diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index 3f0e9c2d38a5..e4978089ea4f 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -473,3 +473,101 @@ abstract class TestPreviewHostApi { } } } + +class _TestImageCaptureHostApiCodec extends StandardMessageCodec { + const _TestImageCaptureHostApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is ResolutionInfo) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return ResolutionInfo.decode(readValue(buffer)!); + + default: + return super.readValueOfType(type, buffer); + } + } +} + +abstract class TestImageCaptureHostApi { + static const MessageCodec codec = _TestImageCaptureHostApiCodec(); + + void create(int identifier, int? flashMode, ResolutionInfo? targetResolution); + void setFlashMode(int identifier, int flashMode); + Future takePicture(int identifier); + static void setup(TestImageCaptureHostApi? api, + {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); + final int? arg_flashMode = (args[1] as int?); + final ResolutionInfo? arg_targetResolution = + (args[2] as ResolutionInfo?); + api.create(arg_identifier!, arg_flashMode, arg_targetResolution); + return {}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); + final int? arg_flashMode = (args[1] as int?); + assert(arg_flashMode != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); + api.setFlashMode(arg_identifier!, arg_flashMode!); + return {}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null, expected non-null int.'); + final String output = await api.takePicture(arg_identifier!); + return {'result': output}; + }); + } + } + } +} From b2fce3d5248a9a7afb341869c91fc2cccc7100e8 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 23 Feb 2023 14:55:58 -0800 Subject: [PATCH 02/62] Fix integration tesT --- .../example/integration_test/integration_test.dart | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_android_camerax/example/integration_test/integration_test.dart b/packages/camera/camera_android_camerax/example/integration_test/integration_test.dart index 940aa17039d8..ab86ce6a1358 100644 --- a/packages/camera/camera_android_camerax/example/integration_test/integration_test.dart +++ b/packages/camera/camera_android_camerax/example/integration_test/integration_test.dart @@ -2,8 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:io'; +import 'dart:ui'; + import 'package:camera_android_camerax/camera_android_camerax.dart'; +import 'package:camera_android_camerax_example/camera_controller.dart'; import 'package:camera_platform_interface/camera_platform_interface.dart'; +import 'package:flutter/painting.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; @@ -30,11 +35,12 @@ void main() { (WidgetTester tester) async { final List availableCameras = await CameraPlatform.instance.availableCameras(); - if (cameras.isEmpty) { + if (availableCameras.isEmpty) { return; } for (final CameraDescription cameraDescription in availableCameras) { - final CameraController controller = CameraController(cameraDescription); + final CameraController controller = + CameraController(cameraDescription, ResolutionPreset.high); // Take Picture final XFile file = await controller.takePicture(); From 2e3027bd10dbb3506280611f671fad19921f97cc Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 23 Feb 2023 15:12:44 -0800 Subject: [PATCH 03/62] Analyzer pt 2 --- .../lib/src/android_camera_camerax.dart | 7 +++--- .../lib/src/image_capture.dart | 24 +++++++++---------- .../test/android_camera_camerax_test.dart | 4 ++-- .../test/image_capture_test.dart | 8 +++---- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 9d2ff38ac393..4f954dd20033 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -293,10 +293,10 @@ class AndroidCameraCameraX extends CameraPlatform { // TODO(camsim99): Add support for flash mode configuration. // https://github.com/flutter/flutter/issues/120715 imageCapture ??= - ImageCapture(flashMode: null, targetResolution: targetResolution); + ImageCapture(targetResolution: targetResolution); camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [imageCapture!]); - String picturePath = await imageCapture!.takePicture(); + final String picturePath = await imageCapture!.takePicture(); processCameraProvider!.unbind([imageCapture!]); return XFile(picturePath); @@ -381,6 +381,7 @@ class AndroidCameraCameraX extends CameraPlatform { ResolutionPreset? resolution) { // TODO(camsim99): Implement resolution configuration. // https://github.com/flutter/flutter/issues/120462 + return null; } // Methods for calls that need to be tested: @@ -426,6 +427,6 @@ class AndroidCameraCameraX extends CameraPlatform { ImageCapture createImageCapture( int? flashMode, ResolutionInfo? targetResolution) { return ImageCapture( - flashMode: flashMode, targetResolution: targetResolution); + targetFlashMode: flashMode, targetResolution: targetResolution); } } diff --git a/packages/camera/camera_android_camerax/lib/src/image_capture.dart b/packages/camera/camera_android_camerax/lib/src/image_capture.dart index 6aaa54dc4949..d415bb55dfe5 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_capture.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -19,21 +19,21 @@ class ImageCapture extends UseCase { ImageCapture( {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - this.flashMode, + this.targetFlashMode, this.targetResolution}) : super.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager) { _api = ImageCaptureHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); - _api.createFromInstance(this, flashMode, targetResolution); + _api.createFromInstance(this, targetFlashMode, targetResolution); } /// Constructs a [ImageCapture] that is not automatically attached to a native object. ImageCapture.detached( {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - this.flashMode, + this.targetFlashMode, this.targetResolution}) : super.detached( binaryMessenger: binaryMessenger, @@ -45,7 +45,7 @@ class ImageCapture extends UseCase { late final ImageCaptureHostApiImpl _api; /// Flash mode used to take a picture. - int? flashMode; + final int? targetFlashMode; /// Target resolution of the image output from taking a picture. final ResolutionInfo? targetResolution; @@ -68,13 +68,13 @@ class ImageCapture extends UseCase { /// Sets the flash mode to use for image capture. void setFlashMode(int newFlashMode) { _api.setFlashModeFromInstance(this, newFlashMode); - flashMode = newFlashMode; } /// Takes a picture and returns the absolute path of where the capture image /// was saved. Future takePicture() async { - return await _api.takePictureFromInstance(this); + final String pictureFile = await _api.takePictureFromInstance(this); + return pictureFile; } } @@ -97,22 +97,22 @@ class ImageCaptureHostApiImpl extends ImageCaptureHostApi { /// Creates a [ImageCapture] instance with the flash mode and target resolution /// if specified. - void createFromInstance(ImageCapture instance, int? flashMode, - ResolutionInfo? targetResolution) async { + void createFromInstance(ImageCapture instance, int? targetFlashMode, + ResolutionInfo? targetResolution) { final int identifier = instanceManager.addDartCreatedInstance(instance, onCopy: (ImageCapture original) { return ImageCapture.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager, - flashMode: original.flashMode, + targetFlashMode: original.targetFlashMode, targetResolution: original.targetResolution); }); - create(identifier, flashMode, targetResolution); + create(identifier, targetFlashMode, targetResolution); } /// Sets the flash mode for the specified [ImageCapture] instance to take /// a picture with. - void setFlashModeFromInstance(ImageCapture instance, int flashMode) async { + void setFlashModeFromInstance(ImageCapture instance, int flashMode) { final int? identifier = instanceManager.getIdentifier(instance); assert(identifier != null, 'No ImageCapture has the identifer of that requested to get the resolution information for.'); @@ -126,7 +126,7 @@ class ImageCaptureHostApiImpl extends ImageCaptureHostApi { assert(identifier != null, 'No ImageCapture has the identifer of that requested to get the resolution information for.'); - String picturePath = await takePicture(identifier!); + final String picturePath = await takePicture(identifier!); if (picturePath == '') { throw CameraException( 'TAKE_PICTURE_FAILED', diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index d1ed0c1bed5a..ecb50baf0f15 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart @@ -371,7 +371,7 @@ void main() { 'takePicture binds and unbinds ImageCapture to lifecycle and makes call to take a picture', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); - const String testPicturePath = "test/absolute/path/to/picture"; + const String testPicturePath = 'test/absolute/path/to/picture'; camera.processCameraProvider = MockProcessCameraProvider(); camera.cameraSelector = MockCameraSelector(); @@ -380,7 +380,7 @@ void main() { when(camera.imageCapture!.takePicture()) .thenAnswer((_) async => testPicturePath); - XFile imageFile = await camera.takePicture(3); + final XFile imageFile = await camera.takePicture(3); verify(camera.processCameraProvider!.bindToLifecycle( camera.cameraSelector!, [camera.imageCapture!])); diff --git a/packages/camera/camera_android_camerax/test/image_capture_test.dart b/packages/camera/camera_android_camerax/test/image_capture_test.dart index df30a42687d8..d2a057fb05f5 100644 --- a/packages/camera/camera_android_camerax/test/image_capture_test.dart +++ b/packages/camera/camera_android_camerax/test/image_capture_test.dart @@ -28,7 +28,7 @@ void main() { ); ImageCapture.detached( instanceManager: instanceManager, - flashMode: ImageCapture.flashModeOn, + targetFlashMode: ImageCapture.flashModeOn, targetResolution: ResolutionInfo(width: 50, height: 10), ); @@ -43,18 +43,18 @@ void main() { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); - const int flashMode = ImageCapture.flashModeAuto; + const int targetFlashMode = ImageCapture.flashModeAuto; const int targetResolutionWidth = 10; const int targetResolutionHeight = 50; ImageCapture( instanceManager: instanceManager, - flashMode: flashMode, + targetFlashMode: targetFlashMode, targetResolution: ResolutionInfo( width: targetResolutionWidth, height: targetResolutionHeight), ); final VerificationResult createVerification = verify(mockApi.create( - argThat(isA()), argThat(equals(flashMode)), captureAny)); + argThat(isA()), argThat(equals(targetFlashMode)), captureAny)); final ResolutionInfo capturedResolutionInfo = createVerification.captured.single as ResolutionInfo; expect(capturedResolutionInfo.width, equals(targetResolutionWidth)); From dfa477e2ad5680be8e40d53a5c1e930fb2438fb2 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 23 Feb 2023 15:44:33 -0800 Subject: [PATCH 04/62] Personal cleanup --- .../camera_android_camerax/CHANGELOG.md | 1 + .../camerax/ImageCaptureHostApiImpl.java | 36 +++++++++---------- .../lib/src/android_camera_camerax.dart | 3 +- .../android_camera_camerax_test.mocks.dart | 10 +----- 4 files changed, 19 insertions(+), 31 deletions(-) diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index 9e6c5a901fc9..dfc7b2338bf5 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -12,3 +12,4 @@ * Adds implementation of availableCameras(). * Implements camera preview, createCamera, initializeCamera, onCameraError, onDeviceOrientationChanged, and onCameraInitialized. * Adds integration test to plugin. +* Implements image capture. diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java index a491adaff0c3..081daae2ada6 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java @@ -86,16 +86,7 @@ public void takePicture( try { temporaryCaptureFile = File.createTempFile("CAP", ".jpg", outputDir); } catch (IOException | SecurityException e) { - // Send empty path because file could not be created to save image. - result.success(""); - - // Send error. - if (systemServicesFlutterApiImpl == null) { - systemServicesFlutterApiImpl = - cameraXProxy.createSystemServicesFlutterApiImpl(binaryMessenger); - } - systemServicesFlutterApiImpl.sendCameraError( - "Cannot create file to save captured image: " + e.getMessage(), reply -> {}); + handleImageFileError(result, "Cannot create file to save captured image: " + e.getMessage()); return; } @@ -120,20 +111,25 @@ public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResul @Override public void onError(@NonNull ImageCaptureException exception) { - // Send empty path because image was not saved. - result.success(""); - - // Send error. - if (systemServicesFlutterApiImpl == null) { - systemServicesFlutterApiImpl = - cameraXProxy.createSystemServicesFlutterApiImpl(binaryMessenger); - } - systemServicesFlutterApiImpl.sendCameraError( - getOnImageSavedExceptionDescription(exception), reply -> {}); + handleImageFileError(result, getOnImageSavedExceptionDescription(exception)); } }; } + /** Handle errors with creating a file to save captured image or capturing an image. */ + private void handleImageFileError( + @NonNull GeneratedCameraXLibrary.Result result, @NonNull String errorDescription) { + // Send empty path because image was not saved. + result.success(""); + + // Send error. + if (systemServicesFlutterApiImpl == null) { + systemServicesFlutterApiImpl = + cameraXProxy.createSystemServicesFlutterApiImpl(binaryMessenger); + } + systemServicesFlutterApiImpl.sendCameraError(errorDescription, reply -> {}); + } + /** Gets exception description for a failure with saving a captured image. */ private String getOnImageSavedExceptionDescription(@NonNull ImageCaptureException exception) { return exception.getImageCaptureError() + ": " + exception.getMessage(); diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 4f954dd20033..26cb26ac3632 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -292,8 +292,7 @@ class AndroidCameraCameraX extends CameraPlatform { _getTargetResolutionForImageCapture(_resolutionPreset); // TODO(camsim99): Add support for flash mode configuration. // https://github.com/flutter/flutter/issues/120715 - imageCapture ??= - ImageCapture(targetResolution: targetResolution); + imageCapture ??= ImageCapture(targetResolution: targetResolution); camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [imageCapture!]); final String picturePath = await imageCapture!.takePicture(); diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart index 7bce60af01f9..6b0c909ac46f 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart @@ -141,14 +141,6 @@ class MockCameraSelector extends _i1.Mock implements _i9.CameraSelector { /// See the documentation for Mockito's code generation for more information. class MockImageCapture extends _i1.Mock implements _i10.ImageCapture { @override - set flashMode(int? _flashMode) => super.noSuchMethod( - Invocation.setter( - #flashMode, - _flashMode, - ), - returnValueForMissingStub: null, - ); - @override void setFlashMode(int? newFlashMode) => super.noSuchMethod( Invocation.method( #setFlashMode, @@ -327,7 +319,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { ), ) as _i4.InheritedWidget); @override - void visitAncestorElements(_i4.ConditionalElementVisitor? visitor) => + void visitAncestorElements(bool Function(_i4.Element)? visitor) => super.noSuchMethod( Invocation.method( #visitAncestorElements, From a651b92b99dd48f505fc413bb86c28f66342889c Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 24 Feb 2023 13:37:03 -0800 Subject: [PATCH 05/62] Add initialization of controller --- .../example/integration_test/integration_test.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/camera/camera_android_camerax/example/integration_test/integration_test.dart b/packages/camera/camera_android_camerax/example/integration_test/integration_test.dart index ab86ce6a1358..b6cba8da981c 100644 --- a/packages/camera/camera_android_camerax/example/integration_test/integration_test.dart +++ b/packages/camera/camera_android_camerax/example/integration_test/integration_test.dart @@ -41,6 +41,8 @@ void main() { for (final CameraDescription cameraDescription in availableCameras) { final CameraController controller = CameraController(cameraDescription, ResolutionPreset.high); + await controller.initialize(); + // Take Picture final XFile file = await controller.takePicture(); From d5f8b9134c6b877f10b437622d01951325dbc9aa Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 24 Feb 2023 14:04:34 -0800 Subject: [PATCH 06/62] Modify some docs --- .../flutter/plugins/camerax/ImageCaptureHostApiImpl.java | 8 ++++---- .../camera_android_camerax/lib/src/image_capture.dart | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java index 081daae2ada6..3bb4794c1990 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java @@ -37,7 +37,7 @@ public ImageCaptureHostApiImpl( } /** - * Sets the context that the {@code ImageCapture} will use to find a location to save a captured + * Sets the context that the {@link ImageCapture} will use to find a location to save a captured * image. */ public void setContext(Context context) { @@ -86,7 +86,7 @@ public void takePicture( try { temporaryCaptureFile = File.createTempFile("CAP", ".jpg", outputDir); } catch (IOException | SecurityException e) { - handleImageFileError(result, "Cannot create file to save captured image: " + e.getMessage()); + handleTakePictureError(result, "Cannot create file to save captured image: " + e.getMessage()); return; } @@ -111,13 +111,13 @@ public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResul @Override public void onError(@NonNull ImageCaptureException exception) { - handleImageFileError(result, getOnImageSavedExceptionDescription(exception)); + handleTakePictureError(result, getOnImageSavedExceptionDescription(exception)); } }; } /** Handle errors with creating a file to save captured image or capturing an image. */ - private void handleImageFileError( + private void handleTakePictureError( @NonNull GeneratedCameraXLibrary.Result result, @NonNull String errorDescription) { // Send empty path because image was not saved. result.success(""); diff --git a/packages/camera/camera_android_camerax/lib/src/image_capture.dart b/packages/camera/camera_android_camerax/lib/src/image_capture.dart index d415bb55dfe5..11da1443af1d 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_capture.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -88,7 +88,7 @@ class ImageCaptureHostApiImpl extends ImageCaptureHostApi { /// Receives binary data across the Flutter platform barrier. /// - /// If it is null, the default BinaryMessenger will be used which routes to + /// If it is null, the default [BinaryMessenger] will be used which routes to /// the host platform. final BinaryMessenger? binaryMessenger; From 060b7e5ff76e8f56a6a74c032c85b5bfa373c732 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 1 Mar 2023 16:56:59 -0800 Subject: [PATCH 07/62] Address review --- .../flutter/plugins/camerax/CameraXProxy.java | 2 +- .../camerax/ImageCaptureHostApiImpl.java | 28 ++++--------------- .../plugins/camerax/ImageCaptureTest.java | 14 ++++++++-- .../lib/src/image_capture.dart | 7 ----- 4 files changed, 19 insertions(+), 32 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java index 55b9026b3c3d..d6a6a60cc1e1 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java @@ -58,7 +58,7 @@ public ImageCapture.Builder createImageCaptureBuilder() { /** * Creates an {@link ImageCapture.OutputFileOptions} to configure where to save a captured image. */ - public ImageCapture.OutputFileOptions createImageCaptureOutputFileOptions(File file) { + public ImageCapture.OutputFileOptions createImageCaptureOutputFileOptions(@NonNull File file) { return new ImageCapture.OutputFileOptions.Builder(file).build(); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java index 3bb4794c1990..69af9b6ccdfa 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java @@ -25,6 +25,9 @@ public class ImageCaptureHostApiImpl implements ImageCaptureHostApi { private Context context; private SystemServicesFlutterApiImpl systemServicesFlutterApiImpl; + public static final String TEMPORARY_FILE_NAME = "CAP"; + public static final String JPG_FILE_TYPE = ".jpg"; + @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); public ImageCaptureHostApiImpl( @@ -84,9 +87,9 @@ public void takePicture( final File outputDir = context.getCacheDir(); File temporaryCaptureFile; try { - temporaryCaptureFile = File.createTempFile("CAP", ".jpg", outputDir); + temporaryCaptureFile = File.createTempFile(TEMPORARY_FILE_NAME, JPG_FILE_TYPE, outputDir); } catch (IOException | SecurityException e) { - handleTakePictureError(result, "Cannot create file to save captured image: " + e.getMessage()); + result.error(e); return; } @@ -111,27 +114,8 @@ public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResul @Override public void onError(@NonNull ImageCaptureException exception) { - handleTakePictureError(result, getOnImageSavedExceptionDescription(exception)); + result.error(exception); } }; } - - /** Handle errors with creating a file to save captured image or capturing an image. */ - private void handleTakePictureError( - @NonNull GeneratedCameraXLibrary.Result result, @NonNull String errorDescription) { - // Send empty path because image was not saved. - result.success(""); - - // Send error. - if (systemServicesFlutterApiImpl == null) { - systemServicesFlutterApiImpl = - cameraXProxy.createSystemServicesFlutterApiImpl(binaryMessenger); - } - systemServicesFlutterApiImpl.sendCameraError(errorDescription, reply -> {}); - } - - /** Gets exception description for a failure with saving a captured image. */ - private String getOnImageSavedExceptionDescription(@NonNull ImageCaptureException exception) { - return exception.getImageCaptureError() + ": " + exception.getMessage(); - } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageCaptureTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageCaptureTest.java index 911dbf5189f3..324a2bd51434 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageCaptureTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageCaptureTest.java @@ -125,7 +125,12 @@ public void setFlashMode_setsFlashModeOfImageCaptureInstance() { when(context.getCacheDir()).thenReturn(mockOutputDir); imageCaptureHostApiImpl.cameraXProxy = mockCameraXProxy; mockedStaticFile - .when(() -> File.createTempFile("CAP", ".jpg", mockOutputDir)) + .when( + () -> + File.createTempFile( + ImageCaptureHostApiImpl.TEMPORARY_FILE_NAME, + ImageCaptureHostApiImpl.JPG_FILE_TYPE, + mockOutputDir)) .thenReturn(mockFile); when(mockCameraXProxy.createImageCaptureOutputFileOptions(mockFile)) .thenReturn(mockOutputFileOptions); @@ -156,7 +161,12 @@ public void takePicture_sendsEmptyPathAndSendsCameraErrorWhenTemporaryFileCannot .thenReturn(mockSystemServicesFlutterApiImpl); when(context.getCacheDir()).thenReturn(mockOutputDir); mockedStaticFile - .when(() -> File.createTempFile("CAP", ".jpg", mockOutputDir)) + .when( + () -> + File.createTempFile( + ImageCaptureHostApiImpl.TEMPORARY_FILE_NAME, + ImageCaptureHostApiImpl.JPG_FILE_TYPE, + mockOutputDir)) .thenThrow(new IOException()); imageCaptureHostApiImpl.takePicture(imageCaptureIdentifier, mockResult); diff --git a/packages/camera/camera_android_camerax/lib/src/image_capture.dart b/packages/camera/camera_android_camerax/lib/src/image_capture.dart index 11da1443af1d..b0a4da50e4f9 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_capture.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -127,13 +127,6 @@ class ImageCaptureHostApiImpl extends ImageCaptureHostApi { 'No ImageCapture has the identifer of that requested to get the resolution information for.'); final String picturePath = await takePicture(identifier!); - if (picturePath == '') { - throw CameraException( - 'TAKE_PICTURE_FAILED', - 'Capturing the image failed or the picture failed to save.', - ); - } - return picturePath; } } From fe6f1fcfd96a48108fe881198f98c5169e07e11a Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 1 Mar 2023 17:02:16 -0800 Subject: [PATCH 08/62] Fix analyze --- .../camera/camera_android_camerax/lib/src/image_capture.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/camera/camera_android_camerax/lib/src/image_capture.dart b/packages/camera/camera_android_camerax/lib/src/image_capture.dart index b0a4da50e4f9..1edd13c8b7df 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_capture.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:camera_platform_interface/camera_platform_interface.dart' - show CameraException; import 'package:flutter/services.dart' show BinaryMessenger; import 'camerax_library.g.dart'; From e2643ae15a5c4f99d0ddb1c081d3ec720c662743 Mon Sep 17 00:00:00 2001 From: Camille Simon <43054281+camsim99@users.noreply.github.com> Date: Fri, 3 Mar 2023 08:59:37 -0800 Subject: [PATCH 09/62] Update packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java Co-authored-by: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> --- .../io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java index 69af9b6ccdfa..e93d81da14e9 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java @@ -48,7 +48,7 @@ public void setContext(Context context) { } /** - * Creates a {@link ImageCapture} with the requested flash mode and target resolution if + * Creates an {@link ImageCapture} with the requested flash mode and target resolution if * specified. */ @Override From b7194f7c1b2a9b60d0a8df1bf4ce81e36cad9fe8 Mon Sep 17 00:00:00 2001 From: Camille Simon <43054281+camsim99@users.noreply.github.com> Date: Fri, 3 Mar 2023 09:03:23 -0800 Subject: [PATCH 10/62] Update packages/camera/camera_android_camerax/lib/src/image_capture.dart Co-authored-by: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> --- .../camera/camera_android_camerax/lib/src/image_capture.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/lib/src/image_capture.dart b/packages/camera/camera_android_camerax/lib/src/image_capture.dart index 1edd13c8b7df..304d9e354547 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_capture.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -13,7 +13,7 @@ import 'use_case.dart'; /// /// See https://developer.android.com/reference/androidx/camera/core/ImageCapture. class ImageCapture extends UseCase { - /// Creates a [ImageCapture]. + /// Creates an [ImageCapture]. ImageCapture( {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, From dadc230cce96d570fc0721443311294643cfc732 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 6 Mar 2023 08:46:26 -0800 Subject: [PATCH 11/62] Start addressing review --- .../lib/src/android_camera_camerax.dart | 34 ++++++++------ .../lib/src/image_capture.dart | 34 ++++++++++---- .../test/android_camera_camerax_test.dart | 46 +++++++++++++------ .../android_camera_camerax_test.mocks.dart | 7 +-- 4 files changed, 82 insertions(+), 39 deletions(-) diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 26cb26ac3632..4b855c4d8f25 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -146,20 +146,31 @@ class AndroidCameraCameraX extends CameraPlatform { startListeningForDeviceOrientationChange( cameraIsFrontFacing, cameraDescription.sensorOrientation); - // Retrieve a ProcessCameraProvider instance. + // Retrieve a fresh ProcessCameraProvider instance. processCameraProvider ??= await ProcessCameraProvider.getInstance(); + processCameraProvider.unbindAll(); - // Configure Preview instance and bind to ProcessCameraProvider. + // Configure Preview instance. _resolutionPreset = resolutionPreset; final int targetRotation = _getTargetRotation(cameraDescription.sensorOrientation); - final ResolutionInfo? targetResolution = + final ResolutionInfo? previewTargetResolution = _getTargetResolutionForPreview(resolutionPreset); - preview = createPreview(targetRotation, targetResolution); - previewIsBound = false; - _previewIsPaused = false; + preview = createPreview(targetRotation, previewTargetResolution); final int flutterSurfaceTextureId = await preview!.setSurfaceProvider(); + // Configure ImageCapture instance. + final ResolutionInfo? imageCaptureTargetResolution = + _getTargetResolutionForImageCapture(_resolutionPreset); + imageCapture = createImageCapture(null, imageCaptureTargetResolution); + + // Bind configured UseCases to ProcessCameraProvider instance & mark Preview + // instance as bound but not paused. + camera = await processCameraProvider! + .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); + _previewIsPaused = false; + previewIsBound = true; + return flutterSurfaceTextureId; } @@ -188,10 +199,8 @@ class AndroidCameraCameraX extends CameraPlatform { preview != null, 'Preview instance not found. Please call the "createCamera" method before calling "initializeCamera"', ); - await _bindPreviewToLifecycle(); final ResolutionInfo previewResolutionInfo = await preview!.getResolutionInfo(); - _unbindPreviewFromLifecycle(); // Retrieve exposure and focus mode configurations: // TODO(camsim99): Implement support for retrieving exposure mode configuration. @@ -287,16 +296,11 @@ class AndroidCameraCameraX extends CameraPlatform { Future takePicture(int cameraId) async { assert(processCameraProvider != null); assert(cameraSelector != null); + assert(imageCapture != null); - final ResolutionInfo? targetResolution = - _getTargetResolutionForImageCapture(_resolutionPreset); // TODO(camsim99): Add support for flash mode configuration. // https://github.com/flutter/flutter/issues/120715 - imageCapture ??= ImageCapture(targetResolution: targetResolution); - camera = await processCameraProvider! - .bindToLifecycle(cameraSelector!, [imageCapture!]); - final String picturePath = await imageCapture!.takePicture(); - processCameraProvider!.unbind([imageCapture!]); + String picturePath = await imageCapture!.takePicture(); return XFile(picturePath); } diff --git a/packages/camera/camera_android_camerax/lib/src/image_capture.dart b/packages/camera/camera_android_camerax/lib/src/image_capture.dart index 304d9e354547..8afbe2320911 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_capture.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -18,10 +18,12 @@ class ImageCapture extends UseCase { {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, this.targetFlashMode, - this.targetResolution}) + this.targetResolution, + }) : super.detached( binaryMessenger: binaryMessenger, - instanceManager: instanceManager) { + instanceManager: instanceManager, + ) { _api = ImageCaptureHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); _api.createFromInstance(this, targetFlashMode, targetResolution); @@ -32,10 +34,12 @@ class ImageCapture extends UseCase { {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, this.targetFlashMode, - this.targetResolution}) + this.targetResolution, + }) : super.detached( binaryMessenger: binaryMessenger, - instanceManager: instanceManager) { + instanceManager: instanceManager, + ) { _api = ImageCaptureHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); } @@ -64,15 +68,29 @@ class ImageCapture extends UseCase { static const int flashModeOff = 2; /// Sets the flash mode to use for image capture. - void setFlashMode(int newFlashMode) { - _api.setFlashModeFromInstance(this, newFlashMode); + Future setFlashMode(int newFlashMode) async { + return _api.setFlashModeFromInstance(this, newFlashMode); } /// Takes a picture and returns the absolute path of where the capture image /// was saved. + /// + /// This method is not a direct mapping of the takePicture method in the CameraX, + /// as it also: + /// + /// * Configures an instance of the ImageCapture.OutputFileOptions to specify + /// how to handle the captured image. + /// * Configures an instance of ImageCapture.OnImageSavedCallback to receive + /// the results of the image capture as an instance of + /// ImageCapture.OutputFileResults. + /// * Converts the ImageCapture.OutputFileResults output instance to a String + /// that represents the full path where the captured image was saved in + /// memory to return. + /// + /// See https://developer.android.com/reference/androidx/camera/core/ImageCapture + /// for more information. Future takePicture() async { - final String pictureFile = await _api.takePictureFromInstance(this); - return pictureFile; + return await _api.takePictureFromInstance(this); } } diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index ecb50baf0f15..986b9b4c31a9 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart @@ -129,10 +129,33 @@ void main() { // Verify the camera's Preview instance is instantiated properly. expect(camera.preview, equals(camera.testPreview)); + // Verify the camera's ImageCapture instance is instantiated properly. + expect(camera.imageCapture, equals(camera.testImageCapture)); + // Verify the camera's Preview instance has its surface provider set. verify(camera.preview!.setSurfaceProvider()); }); + test('createCamera binds Preview and ImageCapture use cases to ProcessCameraProvider instance', () async { + final MockAndroidCameraCamerax camera = MockAndroidCameraCamerax(); + camera.processCameraProvider = MockProcessCameraProvider(); + const CameraLensDirection testLensDirection = CameraLensDirection.back; + const int testSensorOrientation = 90; + const CameraDescription testCameraDescription = CameraDescription( + name: 'cameraName', + lensDirection: testLensDirection, + sensorOrientation: testSensorOrientation); + const ResolutionPreset testResolutionPreset = ResolutionPreset.veryHigh; + const bool enableAudio = true; + const int testSurfaceTextureId = 6; + + await camera.createCamera(testCameraDescription, testResolutionPreset, + enableAudio: enableAudio); + + verify(camera.processCameraProvider!.bindToLifecycle( + camera.cameraSelector!, [camera.testPreview, camera.testImageCapture])); + }); + test( 'initializeCamera throws AssertionError when createCamera has not been called before initializedCamera', () async { @@ -179,7 +202,7 @@ void main() { enableAudio: enableAudio); when(camera.processCameraProvider!.bindToLifecycle( - camera.cameraSelector!, [camera.testPreview])) + camera.cameraSelector!, [camera.testPreview, camera.testImageCapture])) .thenAnswer((_) async => mockCamera); when(camera.testPreview.getResolutionInfo()) .thenAnswer((_) async => testResolutionInfo); @@ -192,14 +215,8 @@ void main() { await camera.initializeCamera(cameraId); - // Verify preview was bound and unbound to get preview resolution information. - verify(camera.processCameraProvider!.bindToLifecycle( - camera.cameraSelector!, [camera.testPreview])); - verify(camera.processCameraProvider!.unbind([camera.testPreview])); - - // Check camera instance was received, but preview is no longer bound. - expect(camera.camera, equals(mockCamera)); - expect(camera.previewIsBound, isFalse); + // Check camera instance was received. + expect(camera.camera, isNotNull); }); test('dispose releases Flutter surface texture and unbinds all use cases', @@ -382,10 +399,6 @@ void main() { final XFile imageFile = await camera.takePicture(3); - verify(camera.processCameraProvider!.bindToLifecycle( - camera.cameraSelector!, [camera.imageCapture!])); - verify( - camera.processCameraProvider!.unbind([camera.imageCapture!])); expect(imageFile.path, equals(testPicturePath)); }); } @@ -396,6 +409,7 @@ class MockAndroidCameraCamerax extends AndroidCameraCameraX { bool cameraPermissionsRequested = false; bool startedListeningForDeviceOrientationChanges = false; final MockPreview testPreview = MockPreview(); + final MockImageCapture testImageCapture = MockImageCapture(); final MockCameraSelector mockBackCameraSelector = MockCameraSelector(); final MockCameraSelector mockFrontCameraSelector = MockCameraSelector(); @@ -426,4 +440,10 @@ class MockAndroidCameraCamerax extends AndroidCameraCameraX { Preview createPreview(int targetRotation, ResolutionInfo? targetResolution) { return testPreview; } + + @override + ImageCapture createImageCapture( + int? flashMode, ResolutionInfo? targetResolution) { + return testImageCapture; + } } diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart index 6b0c909ac46f..bfee7a181ac7 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart @@ -141,13 +141,14 @@ class MockCameraSelector extends _i1.Mock implements _i9.CameraSelector { /// See the documentation for Mockito's code generation for more information. class MockImageCapture extends _i1.Mock implements _i10.ImageCapture { @override - void setFlashMode(int? newFlashMode) => super.noSuchMethod( + _i8.Future setFlashMode(int? newFlashMode) => (super.noSuchMethod( Invocation.method( #setFlashMode, [newFlashMode], ), - returnValueForMissingStub: null, - ); + returnValue: _i8.Future.value(), + returnValueForMissingStub: _i8.Future.value(), + ) as _i8.Future); @override _i8.Future takePicture() => (super.noSuchMethod( Invocation.method( From d15e1d45429b445525a9474ba8e3bed345ac4f39 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 6 Mar 2023 16:53:44 -0800 Subject: [PATCH 12/62] Finish addressing review --- .../camerax/GeneratedCameraXLibrary.java | 37 ++++++++++++++++++ .../ProcessCameraProviderHostApiImpl.java | 9 +++++ .../lib/src/android_camera_camerax.dart | 15 +++----- .../lib/src/camerax_library.g.dart | 30 +++++++++++++++ .../lib/src/image_capture.dart | 38 +++++++++---------- .../lib/src/process_camera_provider.dart | 22 +++++++++++ .../pigeons/camerax_library.dart | 2 + .../test/android_camera_camerax_test.dart | 27 +++++++------ .../android_camera_camerax_test.mocks.dart | 11 +++++- .../process_camera_provider_test.mocks.dart | 15 ++++++++ .../test/test_camerax_library.g.dart | 24 ++++++++++++ 11 files changed, 188 insertions(+), 42 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 69716dda453e..e8ed92e4448c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -488,6 +488,9 @@ Long bindToLifecycle( @NonNull Long cameraSelectorIdentifier, @NonNull List useCaseIds); + @NonNull + Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); + void unbind(@NonNull Long identifier, @NonNull List useCaseIds); void unbindAll(@NonNull Long identifier); @@ -607,6 +610,40 @@ public void error(Throwable error) { channel.setMessageHandler(null); } } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number useCaseIdentifierArg = (Number) args.get(1); + if (useCaseIdentifierArg == null) { + throw new NullPointerException("useCaseIdentifierArg unexpectedly null."); + } + Boolean output = + api.isBound( + (identifierArg == null) ? null : identifierArg.longValue(), + (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); + wrapped.put("result", output); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } { BasicMessageChannel channel = new BasicMessageChannel<>( diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java index e7036e7090c1..ba05b4a496f2 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java @@ -133,6 +133,15 @@ public Long bindToLifecycle( return instanceManager.getIdentifierForStrongReference(camera); } + @Override + public Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier) { + ProcessCameraProvider processCameraProvider = + (ProcessCameraProvider) Objects.requireNonNull(instanceManager.getInstance(identifier)); + UseCase useCase = + (UseCase) Objects.requireNonNull(instanceManager.getInstance(useCaseIdentifier)); + return processCameraProvider.isBound(useCase); + } + @Override public void unbind(@NonNull Long identifier, @NonNull List useCaseIds) { ProcessCameraProvider processCameraProvider = diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 4b855c4d8f25..c5bee32f0f2c 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -39,11 +39,6 @@ class AndroidCameraCameraX extends CameraPlatform { @visibleForTesting Preview? preview; - /// Whether or not the [preview] is currently bound to the lifecycle that the - /// [processCameraProvider] tracks. - @visibleForTesting - bool previewIsBound = false; - bool _previewIsPaused = false; /// The [ImageCapture] instance that can be configured to capture a still image. @@ -148,7 +143,7 @@ class AndroidCameraCameraX extends CameraPlatform { // Retrieve a fresh ProcessCameraProvider instance. processCameraProvider ??= await ProcessCameraProvider.getInstance(); - processCameraProvider.unbindAll(); + processCameraProvider!.unbindAll(); // Configure Preview instance. _resolutionPreset = resolutionPreset; @@ -169,7 +164,6 @@ class AndroidCameraCameraX extends CameraPlatform { camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); _previewIsPaused = false; - previewIsBound = true; return flutterSurfaceTextureId; } @@ -313,7 +307,9 @@ class AndroidCameraCameraX extends CameraPlatform { Future _bindPreviewToLifecycle() async { assert(processCameraProvider != null); assert(cameraSelector != null); + assert(preview != null); + bool previewIsBound = await processCameraProvider!.isBound(preview!); if (previewIsBound || _previewIsPaused) { // Only bind if preview is not already bound or intentionally paused. return; @@ -321,12 +317,12 @@ class AndroidCameraCameraX extends CameraPlatform { camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!]); - previewIsBound = true; } /// Unbinds [preview] instance to camera lifecycle controlled by the /// [processCameraProvider]. - void _unbindPreviewFromLifecycle() { + Future _unbindPreviewFromLifecycle() async { + bool previewIsBound = await processCameraProvider!.isBound(preview!); if (preview == null || !previewIsBound) { return; } @@ -334,7 +330,6 @@ class AndroidCameraCameraX extends CameraPlatform { assert(processCameraProvider != null); processCameraProvider!.unbind([preview!]); - previewIsBound = false; } // Methods for mapping Flutter camera constants to CameraX constants: diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index 34170c8e9edc..2ed53bb2ab5a 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -423,6 +423,36 @@ class ProcessCameraProviderHostApi { } } + Future isBound(int arg_identifier, int arg_useCaseIdentifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier, arg_useCaseIdentifier]) + as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = + (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else if (replyMap['result'] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyMap['result'] as bool?)!; + } + } + Future unbind(int arg_identifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, diff --git a/packages/camera/camera_android_camerax/lib/src/image_capture.dart b/packages/camera/camera_android_camerax/lib/src/image_capture.dart index 8afbe2320911..67268802a10c 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_capture.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -14,32 +14,30 @@ import 'use_case.dart'; /// See https://developer.android.com/reference/androidx/camera/core/ImageCapture. class ImageCapture extends UseCase { /// Creates an [ImageCapture]. - ImageCapture( - {BinaryMessenger? binaryMessenger, - InstanceManager? instanceManager, - this.targetFlashMode, - this.targetResolution, - }) - : super.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, - ) { + ImageCapture({ + BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + this.targetFlashMode, + this.targetResolution, + }) : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ) { _api = ImageCaptureHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); _api.createFromInstance(this, targetFlashMode, targetResolution); } /// Constructs a [ImageCapture] that is not automatically attached to a native object. - ImageCapture.detached( - {BinaryMessenger? binaryMessenger, - InstanceManager? instanceManager, - this.targetFlashMode, - this.targetResolution, - }) - : super.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, - ) { + ImageCapture.detached({ + BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + this.targetFlashMode, + this.targetResolution, + }) : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ) { _api = ImageCaptureHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); } diff --git a/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart index ed9e820a1fa0..a18ee2800dab 100644 --- a/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart +++ b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart @@ -53,6 +53,12 @@ class ProcessCameraProvider extends JavaObject { return _api.bindToLifecycleFromInstances(this, cameraSelector, useCases); } + /// Returns whether or not the specified [UseCase] has been bound to the + /// lifecycle of the camera that this instance tracks. + Future isBound(UseCase useCase) { + return _api.isBoundFromInstances(this, useCase); + } + /// Unbinds specified [UseCase]s from the lifecycle of the camera that this /// instance tracks. void unbind(List useCases) { @@ -136,6 +142,22 @@ class ProcessCameraProviderHostApiImpl extends ProcessCameraProviderHostApi { as Camera; } + /// Returns whether or not the specified [UseCase] has been bound to the + /// lifecycle of the camera that this instance tracks. + Future isBoundFromInstances( + ProcessCameraProvider instance, + UseCase useCase, + ) async { + final int identifier = getProcessCameraProviderIdentifier(instance); + final int? useCaseId = instanceManager.getIdentifier(useCase); + + assert(useCaseId != null, + 'UseCase must have been created in order for this check to be valid.'); + + bool useCaseIsBound = await isBound(identifier, useCaseId!); + return useCaseIsBound; + } + /// Unbinds specified [UseCase]s from the lifecycle of the camera which the /// provided [ProcessCameraProvider] instance tracks. void unbindFromInstances( diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 971f86e88dff..033c63ed9fd1 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -88,6 +88,8 @@ abstract class ProcessCameraProviderHostApi { int bindToLifecycle( int identifier, int cameraSelectorIdentifier, List useCaseIds); + bool isBound(int identifier, int useCaseIdentifier); + void unbind(int identifier, List useCaseIds); void unbindAll(int identifier); diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index 986b9b4c31a9..f20605514fed 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart @@ -136,7 +136,9 @@ void main() { verify(camera.preview!.setSurfaceProvider()); }); - test('createCamera binds Preview and ImageCapture use cases to ProcessCameraProvider instance', () async { + test( + 'createCamera binds Preview and ImageCapture use cases to ProcessCameraProvider instance', + () async { final MockAndroidCameraCamerax camera = MockAndroidCameraCamerax(); camera.processCameraProvider = MockProcessCameraProvider(); const CameraLensDirection testLensDirection = CameraLensDirection.back; @@ -149,11 +151,11 @@ void main() { const bool enableAudio = true; const int testSurfaceTextureId = 6; - await camera.createCamera(testCameraDescription, testResolutionPreset, - enableAudio: enableAudio); + await camera.createCamera(testCameraDescription, testResolutionPreset, + enableAudio: enableAudio); - verify(camera.processCameraProvider!.bindToLifecycle( - camera.cameraSelector!, [camera.testPreview, camera.testImageCapture])); + verify(camera.processCameraProvider!.bindToLifecycle(camera.cameraSelector!, + [camera.testPreview, camera.testImageCapture])); }); test( @@ -201,8 +203,8 @@ void main() { await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); - when(camera.processCameraProvider!.bindToLifecycle( - camera.cameraSelector!, [camera.testPreview, camera.testImageCapture])) + when(camera.processCameraProvider!.bindToLifecycle(camera.cameraSelector!, + [camera.testPreview, camera.testImageCapture])) .thenAnswer((_) async => mockCamera); when(camera.testPreview.getResolutionInfo()) .thenAnswer((_) async => testResolutionInfo); @@ -287,12 +289,13 @@ void main() { camera.processCameraProvider = MockProcessCameraProvider(); camera.preview = MockPreview(); - camera.previewIsBound = true; + + when(camera.processCameraProvider!.isBound(camera.preview!)) + .thenAnswer((_) async => true); await camera.pausePreview(579); verify(camera.processCameraProvider!.unbind([camera.preview!])); - expect(camera.previewIsBound, isFalse); }); test( @@ -316,7 +319,9 @@ void main() { camera.processCameraProvider = MockProcessCameraProvider(); camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - camera.previewIsBound = true; + + when(camera.processCameraProvider!.isBound(camera.preview!)) + .thenAnswer((_) async => true); await camera.resumePreview(78); @@ -444,6 +449,6 @@ class MockAndroidCameraCamerax extends AndroidCameraCameraX { @override ImageCapture createImageCapture( int? flashMode, ResolutionInfo? targetResolution) { - return testImageCapture; + return testImageCapture; } } diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart index bfee7a181ac7..f4d243ac2a75 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart @@ -256,6 +256,15 @@ class MockProcessCameraProvider extends _i1.Mock )), ) as _i8.Future<_i3.Camera>); @override + _i8.Future isBound(_i13.UseCase? useCase) => (super.noSuchMethod( + Invocation.method( + #isBound, + [useCase], + ), + returnValue: _i8.Future.value(false), + returnValueForMissingStub: _i8.Future.value(false), + ) as _i8.Future); + @override void unbind(List<_i13.UseCase>? useCases) => super.noSuchMethod( Invocation.method( #unbind, @@ -320,7 +329,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { ), ) as _i4.InheritedWidget); @override - void visitAncestorElements(bool Function(_i4.Element)? visitor) => + void visitAncestorElements(_i4.ConditionalElementVisitor? visitor) => super.noSuchMethod( Invocation.method( #visitAncestorElements, diff --git a/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart b/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart index 2ce4ab72fa57..d55415babc03 100644 --- a/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart @@ -63,6 +63,21 @@ class MockTestProcessCameraProviderHostApi extends _i1.Mock returnValue: 0, ) as int); @override + bool isBound( + int? identifier, + int? useCaseIdentifier, + ) => + (super.noSuchMethod( + Invocation.method( + #isBound, + [ + identifier, + useCaseIdentifier, + ], + ), + returnValue: false, + ) as bool); + @override void unbind( int? identifier, List? useCaseIds, diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index e4978089ea4f..546344ef0e41 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -148,6 +148,7 @@ abstract class TestProcessCameraProviderHostApi { List getAvailableCameraInfos(int identifier); int bindToLifecycle( int identifier, int cameraSelectorIdentifier, List useCaseIds); + bool isBound(int identifier, int useCaseIdentifier); void unbind(int identifier, List useCaseIds); void unbindAll(int identifier); static void setup(TestProcessCameraProviderHostApi? api, @@ -215,6 +216,29 @@ abstract class TestProcessCameraProviderHostApi { }); } } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); + final int? arg_useCaseIdentifier = (args[1] as int?); + assert(arg_useCaseIdentifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); + final bool output = + api.isBound(arg_identifier!, arg_useCaseIdentifier!); + return {'result': output}; + }); + } + } { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, From 6dc2b77c5ffd0ba0e1d78fe5db08a365af819880 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 6 Mar 2023 16:58:43 -0800 Subject: [PATCH 13/62] Fix analyze --- .../lib/src/android_camera_camerax.dart | 6 +++--- .../camera_android_camerax/lib/src/image_capture.dart | 2 +- .../lib/src/process_camera_provider.dart | 2 +- .../test/android_camera_camerax_test.dart | 1 - 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index c5bee32f0f2c..adafd74f33f9 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -294,7 +294,7 @@ class AndroidCameraCameraX extends CameraPlatform { // TODO(camsim99): Add support for flash mode configuration. // https://github.com/flutter/flutter/issues/120715 - String picturePath = await imageCapture!.takePicture(); + final String picturePath = await imageCapture!.takePicture(); return XFile(picturePath); } @@ -309,7 +309,7 @@ class AndroidCameraCameraX extends CameraPlatform { assert(cameraSelector != null); assert(preview != null); - bool previewIsBound = await processCameraProvider!.isBound(preview!); + final bool previewIsBound = await processCameraProvider!.isBound(preview!); if (previewIsBound || _previewIsPaused) { // Only bind if preview is not already bound or intentionally paused. return; @@ -322,7 +322,7 @@ class AndroidCameraCameraX extends CameraPlatform { /// Unbinds [preview] instance to camera lifecycle controlled by the /// [processCameraProvider]. Future _unbindPreviewFromLifecycle() async { - bool previewIsBound = await processCameraProvider!.isBound(preview!); + final bool previewIsBound = await processCameraProvider!.isBound(preview!); if (preview == null || !previewIsBound) { return; } diff --git a/packages/camera/camera_android_camerax/lib/src/image_capture.dart b/packages/camera/camera_android_camerax/lib/src/image_capture.dart index 67268802a10c..b56748fe5c2d 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_capture.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -88,7 +88,7 @@ class ImageCapture extends UseCase { /// See https://developer.android.com/reference/androidx/camera/core/ImageCapture /// for more information. Future takePicture() async { - return await _api.takePictureFromInstance(this); + return _api.takePictureFromInstance(this); } } diff --git a/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart index a18ee2800dab..2186ddbd544b 100644 --- a/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart +++ b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart @@ -154,7 +154,7 @@ class ProcessCameraProviderHostApiImpl extends ProcessCameraProviderHostApi { assert(useCaseId != null, 'UseCase must have been created in order for this check to be valid.'); - bool useCaseIsBound = await isBound(identifier, useCaseId!); + final bool useCaseIsBound = await isBound(identifier, useCaseId!); return useCaseIsBound; } diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index f20605514fed..640c1ed2d248 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart @@ -149,7 +149,6 @@ void main() { sensorOrientation: testSensorOrientation); const ResolutionPreset testResolutionPreset = ResolutionPreset.veryHigh; const bool enableAudio = true; - const int testSurfaceTextureId = 6; await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); From f826b62290c2e7b55fc69645f7b36409d0d2d3a0 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 6 Mar 2023 17:04:24 -0800 Subject: [PATCH 14/62] Generate mocks on stable --- .../test/android_camera_camerax_test.mocks.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart index f4d243ac2a75..09a645a08504 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart @@ -329,7 +329,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { ), ) as _i4.InheritedWidget); @override - void visitAncestorElements(_i4.ConditionalElementVisitor? visitor) => + void visitAncestorElements(bool Function(_i4.Element)? visitor) => super.noSuchMethod( Invocation.method( #visitAncestorElements, From 0f7f29adbdb53b97493becd30ae20b1f3bd65bcd Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 7 Mar 2023 10:16:57 -0800 Subject: [PATCH 15/62] Fix/add tests --- .../plugins/camerax/ImageCaptureTest.java | 20 +++++-------------- .../camerax/ProcessCameraProviderTest.java | 16 +++++++++++++++ 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageCaptureTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageCaptureTest.java index 324a2bd51434..01f16f0b1120 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageCaptureTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageCaptureTest.java @@ -7,7 +7,6 @@ import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.spy; @@ -20,7 +19,6 @@ import androidx.camera.core.ImageCapture; import androidx.camera.core.ImageCaptureException; import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.SystemServicesFlutterApi.Reply; import java.io.File; import java.io.IOException; import java.util.concurrent.Executor; @@ -144,7 +142,7 @@ public void setFlashMode_setsFlashModeOfImageCaptureInstance() { } @Test - public void takePicture_sendsEmptyPathAndSendsCameraErrorWhenTemporaryFileCannotBeCreated() { + public void takePicture_sendsErrorWhenTemporaryFileCannotBeCreated() { final ImageCaptureHostApiImpl imageCaptureHostApiImpl = new ImageCaptureHostApiImpl(mockBinaryMessenger, testInstanceManager, context); final Long imageCaptureIdentifier = 6L; @@ -152,13 +150,10 @@ public void takePicture_sendsEmptyPathAndSendsCameraErrorWhenTemporaryFileCannot final File mockTemporaryCaptureFile = mock(File.class); final GeneratedCameraXLibrary.Result mockResult = mock(GeneratedCameraXLibrary.Result.class); - final SystemServicesFlutterApiImpl mockSystemServicesFlutterApiImpl = - mock(SystemServicesFlutterApiImpl.class); + final IOException fileCreationException = new IOException(); testInstanceManager.addDartCreatedInstance(mockImageCapture, imageCaptureIdentifier); imageCaptureHostApiImpl.cameraXProxy = mockCameraXProxy; - when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger)) - .thenReturn(mockSystemServicesFlutterApiImpl); when(context.getCacheDir()).thenReturn(mockOutputDir); mockedStaticFile .when( @@ -167,12 +162,11 @@ public void takePicture_sendsEmptyPathAndSendsCameraErrorWhenTemporaryFileCannot ImageCaptureHostApiImpl.TEMPORARY_FILE_NAME, ImageCaptureHostApiImpl.JPG_FILE_TYPE, mockOutputDir)) - .thenThrow(new IOException()); + .thenThrow(fileCreationException); imageCaptureHostApiImpl.takePicture(imageCaptureIdentifier, mockResult); - verify(mockResult).success(""); - verify(mockSystemServicesFlutterApiImpl).sendCameraError(anyString(), any(Reply.class)); + verify(mockResult).error(fileCreationException); verify(mockImageCapture, times(0)) .takePicture( any(ImageCapture.OutputFileOptions.class), @@ -200,8 +194,6 @@ public void takePicture_usesExpectedOnImageSavedCallback() { when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger)) .thenReturn(mockSystemServicesFlutterApiImpl); when(mockFile.getAbsolutePath()).thenReturn(mockFileAbsolutePath); - when(mockException.getImageCaptureError()).thenReturn(testImageCaptureError); - when(mockException.getMessage()).thenReturn(testExceptionMessage); ImageCapture.OnImageSavedCallback onImageSavedCallback = imageCaptureHostApiImpl.createOnImageSavedCallback(mockFile, mockResult); @@ -214,8 +206,6 @@ public void takePicture_usesExpectedOnImageSavedCallback() { // Test error case. onImageSavedCallback.onError(mockException); - verify(mockResult).success(""); - verify(mockSystemServicesFlutterApiImpl) - .sendCameraError(eq(testImageCaptureError + ": " + testExceptionMessage), any(Reply.class)); + verify(mockResult).error(mockException); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java index 47b4ed6ad26d..37a0882bbed3 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java @@ -5,6 +5,7 @@ package io.flutter.plugins.camerax; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -130,6 +131,21 @@ public void bindToLifecycleTest() { .bindToLifecycle(mockLifecycleOwner, mockCameraSelector, mockUseCases); } + @Test + public void isBoundTest() { + final ProcessCameraProviderHostApiImpl processCameraProviderHostApiImpl = + new ProcessCameraProviderHostApiImpl(mockBinaryMessenger, testInstanceManager, context); + final UseCase mockUseCase = mock(UseCase.class); + + testInstanceManager.addDartCreatedInstance(processCameraProvider, 0); + testInstanceManager.addDartCreatedInstance(mockUseCase, 27); + + when(processCameraProvider.isBound(mockUseCase)).thenReturn(true); + + assertTrue(processCameraProviderHostApiImpl.isBound(0L, 27L)); + verify(processCameraProvider).isBound(mockUseCase); + } + @Test public void unbindTest() { final ProcessCameraProviderHostApiImpl processCameraProviderHostApi = From 1e9739bc2de6dd9453c633e18d5758cabad6fa0c Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 7 Mar 2023 10:39:47 -0800 Subject: [PATCH 16/62] Add isBound dart test --- .../test/process_camera_provider_test.dart | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart b/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart index 548ac3e00d65..d20545103c26 100644 --- a/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart +++ b/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart @@ -129,6 +129,38 @@ void main() { verify(mockApi.bindToLifecycle(0, 1, [2])); }); + test('isBoundTest', () async { + final MockTestProcessCameraProviderHostApi mockApi = + MockTestProcessCameraProviderHostApi(); + TestProcessCameraProviderHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ProcessCameraProvider processCameraProvider = + ProcessCameraProvider.detached( + instanceManager: instanceManager, + ); + final UseCase fakeUseCase = + UseCase.detached(instanceManager: instanceManager); + + instanceManager.addHostCreatedInstance( + processCameraProvider, + 0, + onCopy: (_) => ProcessCameraProvider.detached(), + ); + instanceManager.addHostCreatedInstance( + fakeUseCase, + 27, + onCopy: (_) => UseCase.detached(), + ); + + when(mockApi.isBound(0, 27)).thenReturn(true); + + expect(await processCameraProvider.isBound(fakeUseCase), isTrue); + verify(mockApi.isBound(0, 27)); + }); + test('unbindTest', () async { final MockTestProcessCameraProviderHostApi mockApi = MockTestProcessCameraProviderHostApi(); From 83d6969b627cb6d7b79e935dc8f324436658485f Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 13 Mar 2023 10:09:26 -0700 Subject: [PATCH 17/62] Start impl --- .../camerax/CameraAndroidCameraxPlugin.java | 1 + .../flutter/plugins/camerax/CameraXProxy.java | 14 + .../camerax/GeneratedCameraXLibrary.java | 1313 ++++++++--------- .../camerax/ImageCaptureHostApiImpl.java | 4 +- .../plugins/camerax/PreviewHostApiImpl.java | 4 +- .../lib/src/android_camera_camerax.dart | 25 +- .../lib/src/camerax_library.g.dart | 414 +++--- .../pigeons/camerax_library.dart | 7 + .../test/test_camerax_library.g.dart | 369 +++-- 9 files changed, 993 insertions(+), 1158 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java index 1f5cdb174504..b03e2c3955a6 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java @@ -54,6 +54,7 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex binaryMessenger, new PreviewHostApiImpl(binaryMessenger, instanceManager, textureRegistry)); imageCaptureHostApi = new ImageCaptureHostApiImpl(binaryMessenger, instanceManager, context); GeneratedCameraXLibrary.ImageCaptureHostApi.setup(binaryMessenger, imageCaptureHostApi); + GeneratedCameraXLibrary.ImageAnalysisHostApi.setup(binaryMessenger, new ImageAnalysisHostApiImpl(binaryMessenger, instanceManager)); } @Override diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java index d6a6a60cc1e1..6893f0f2819d 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java @@ -6,12 +6,16 @@ import android.app.Activity; import android.graphics.SurfaceTexture; +import android.util.Size; import android.view.Surface; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.camera.core.CameraSelector; +import androidx.camera.core.ImageAnalysis; import androidx.camera.core.ImageCapture; import androidx.camera.core.Preview; import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ResolutionInfo; import java.io.File; /** Utility class used to create CameraX-related objects primarily for testing purposes. */ @@ -61,4 +65,14 @@ public ImageCapture.Builder createImageCaptureBuilder() { public ImageCapture.OutputFileOptions createImageCaptureOutputFileOptions(@NonNull File file) { return new ImageCapture.OutputFileOptions.Builder(file).build(); } + + /** */ + public ImageAnalysis.Builder createImageAnalysisBuilder() { + return new ImageAnalysis.Builder(); + } + + public static Size sizeFromResolution(@NonNull ResolutionInfo resolutionInfo) { + return new Size( + resolutionInfo.getWidth().intValue(), resolutionInfo.getHeight().intValue()); + } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index e8ed92e4448c..d504f17a781f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -15,11 +15,11 @@ import io.flutter.plugin.common.StandardMessageCodec; import java.io.ByteArrayOutputStream; import java.nio.ByteBuffer; -import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.HashMap; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) @@ -28,11 +28,7 @@ public class GeneratedCameraXLibrary { /** Generated class from Pigeon that represents data sent in messages. */ public static class ResolutionInfo { private @NonNull Long width; - - public @NonNull Long getWidth() { - return width; - } - + public @NonNull Long getWidth() { return width; } public void setWidth(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"width\" is null."); @@ -41,11 +37,7 @@ public void setWidth(@NonNull Long setterArg) { } private @NonNull Long height; - - public @NonNull Long getHeight() { - return height; - } - + public @NonNull Long getHeight() { return height; } public void setHeight(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"height\" is null."); @@ -55,22 +47,17 @@ public void setHeight(@NonNull Long setterArg) { /** Constructor is private to enforce null safety; use Builder. */ private ResolutionInfo() {} - public static final class Builder { private @Nullable Long width; - public @NonNull Builder setWidth(@NonNull Long setterArg) { this.width = setterArg; return this; } - private @Nullable Long height; - public @NonNull Builder setHeight(@NonNull Long setterArg) { this.height = setterArg; return this; } - public @NonNull ResolutionInfo build() { ResolutionInfo pigeonReturn = new ResolutionInfo(); pigeonReturn.setWidth(width); @@ -78,25 +65,18 @@ public static final class Builder { return pigeonReturn; } } - - @NonNull - Map toMap() { + @NonNull Map toMap() { Map toMapResult = new HashMap<>(); toMapResult.put("width", width); toMapResult.put("height", height); return toMapResult; } - static @NonNull ResolutionInfo fromMap(@NonNull Map map) { ResolutionInfo pigeonResult = new ResolutionInfo(); Object width = map.get("width"); - pigeonResult.setWidth( - (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); + pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer)width : (Long)width)); Object height = map.get("height"); - pigeonResult.setHeight( - (height == null) - ? null - : ((height instanceof Integer) ? (Integer) height : (Long) height)); + pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer)height : (Long)height)); return pigeonResult; } } @@ -104,11 +84,7 @@ Map toMap() { /** Generated class from Pigeon that represents data sent in messages. */ public static class CameraPermissionsErrorData { private @NonNull String errorCode; - - public @NonNull String getErrorCode() { - return errorCode; - } - + public @NonNull String getErrorCode() { return errorCode; } public void setErrorCode(@NonNull String setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"errorCode\" is null."); @@ -117,11 +93,7 @@ public void setErrorCode(@NonNull String setterArg) { } private @NonNull String description; - - public @NonNull String getDescription() { - return description; - } - + public @NonNull String getDescription() { return description; } public void setDescription(@NonNull String setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"description\" is null."); @@ -131,22 +103,17 @@ public void setDescription(@NonNull String setterArg) { /** Constructor is private to enforce null safety; use Builder. */ private CameraPermissionsErrorData() {} - public static final class Builder { private @Nullable String errorCode; - public @NonNull Builder setErrorCode(@NonNull String setterArg) { this.errorCode = setterArg; return this; } - private @Nullable String description; - public @NonNull Builder setDescription(@NonNull String setterArg) { this.description = setterArg; return this; } - public @NonNull CameraPermissionsErrorData build() { CameraPermissionsErrorData pigeonReturn = new CameraPermissionsErrorData(); pigeonReturn.setErrorCode(errorCode); @@ -154,38 +121,32 @@ public static final class Builder { return pigeonReturn; } } - - @NonNull - Map toMap() { + @NonNull Map toMap() { Map toMapResult = new HashMap<>(); toMapResult.put("errorCode", errorCode); toMapResult.put("description", description); return toMapResult; } - static @NonNull CameraPermissionsErrorData fromMap(@NonNull Map map) { CameraPermissionsErrorData pigeonResult = new CameraPermissionsErrorData(); Object errorCode = map.get("errorCode"); - pigeonResult.setErrorCode((String) errorCode); + pigeonResult.setErrorCode((String)errorCode); Object description = map.get("description"); - pigeonResult.setDescription((String) description); + pigeonResult.setDescription((String)description); return pigeonResult; } } public interface Result { void success(T result); - void error(Throwable error); } - private static class JavaObjectHostApiCodec extends StandardMessageCodec { public static final JavaObjectHostApiCodec INSTANCE = new JavaObjectHostApiCodec(); - private JavaObjectHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface JavaObjectHostApi { void dispose(@NonNull Long identifier); @@ -194,305 +155,238 @@ static MessageCodec getCodec() { return JavaObjectHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. - */ + /** Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, JavaObjectHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.JavaObjectHostApi.dispose", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.JavaObjectHostApi.dispose", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - api.dispose((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + api.dispose((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class JavaObjectFlutterApiCodec extends StandardMessageCodec { public static final JavaObjectFlutterApiCodec INSTANCE = new JavaObjectFlutterApiCodec(); - private JavaObjectFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class JavaObjectFlutterApi { private final BinaryMessenger binaryMessenger; - - public JavaObjectFlutterApi(BinaryMessenger argBinaryMessenger) { + public JavaObjectFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return JavaObjectFlutterApiCodec.INSTANCE; } public void dispose(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.JavaObjectFlutterApi.dispose", getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.JavaObjectFlutterApi.dispose", getCodec()); + channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { + callback.reply(null); + }); } } - private static class CameraInfoHostApiCodec extends StandardMessageCodec { public static final CameraInfoHostApiCodec INSTANCE = new CameraInfoHostApiCodec(); - private CameraInfoHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface CameraInfoHostApi { - @NonNull - Long getSensorRotationDegrees(@NonNull Long identifier); + @NonNull Long getSensorRotationDegrees(@NonNull Long identifier); /** The codec used by CameraInfoHostApi. */ static MessageCodec getCodec() { return CameraInfoHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. - */ + /** Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Long output = - api.getSensorRotationDegrees( - (identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Long output = api.getSensorRotationDegrees((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class CameraInfoFlutterApiCodec extends StandardMessageCodec { public static final CameraInfoFlutterApiCodec INSTANCE = new CameraInfoFlutterApiCodec(); - private CameraInfoFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class CameraInfoFlutterApi { private final BinaryMessenger binaryMessenger; - - public CameraInfoFlutterApi(BinaryMessenger argBinaryMessenger) { + public CameraInfoFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return CameraInfoFlutterApiCodec.INSTANCE; } public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoFlutterApi.create", getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraInfoFlutterApi.create", getCodec()); + channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { + callback.reply(null); + }); } } - private static class CameraSelectorHostApiCodec extends StandardMessageCodec { public static final CameraSelectorHostApiCodec INSTANCE = new CameraSelectorHostApiCodec(); - private CameraSelectorHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface CameraSelectorHostApi { void create(@NonNull Long identifier, @Nullable Long lensFacing); - - @NonNull - List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); + @NonNull List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); /** The codec used by CameraSelectorHostApi. */ static MessageCodec getCodec() { return CameraSelectorHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `CameraSelectorHostApi` to handle messages through the - * `binaryMessenger`. - */ + /** Sets up an instance of `CameraSelectorHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.create", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.create", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number lensFacingArg = (Number) args.get(1); - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - (lensFacingArg == null) ? null : lensFacingArg.longValue()); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number lensFacingArg = (Number)args.get(1); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (lensFacingArg == null) ? null : lensFacingArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.filter", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.filter", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - List cameraInfoIdsArg = (List) args.get(1); - if (cameraInfoIdsArg == null) { - throw new NullPointerException("cameraInfoIdsArg unexpectedly null."); - } - List output = - api.filter( - (identifierArg == null) ? null : identifierArg.longValue(), - cameraInfoIdsArg); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + List cameraInfoIdsArg = (List)args.get(1); + if (cameraInfoIdsArg == null) { + throw new NullPointerException("cameraInfoIdsArg unexpectedly null."); + } + List output = api.filter((identifierArg == null) ? null : identifierArg.longValue(), cameraInfoIdsArg); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class CameraSelectorFlutterApiCodec extends StandardMessageCodec { - public static final CameraSelectorFlutterApiCodec INSTANCE = - new CameraSelectorFlutterApiCodec(); - + public static final CameraSelectorFlutterApiCodec INSTANCE = new CameraSelectorFlutterApiCodec(); private CameraSelectorFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class CameraSelectorFlutterApi { private final BinaryMessenger binaryMessenger; - - public CameraSelectorFlutterApi(BinaryMessenger argBinaryMessenger) { + public CameraSelectorFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return CameraSelectorFlutterApiCodec.INSTANCE; } - public void create( - @NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { + public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg, lensFacingArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); + channel.send(new ArrayList(Arrays.asList(identifierArg, lensFacingArg)), channelReply -> { + callback.reply(null); + }); } } - private static class ProcessCameraProviderHostApiCodec extends StandardMessageCodec { - public static final ProcessCameraProviderHostApiCodec INSTANCE = - new ProcessCameraProviderHostApiCodec(); - + public static final ProcessCameraProviderHostApiCodec INSTANCE = new ProcessCameraProviderHostApiCodec(); private ProcessCameraProviderHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface ProcessCameraProviderHostApi { void getInstance(Result result); - - @NonNull - List getAvailableCameraInfos(@NonNull Long identifier); - - @NonNull - Long bindToLifecycle( - @NonNull Long identifier, - @NonNull Long cameraSelectorIdentifier, - @NonNull List useCaseIds); - - @NonNull - Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); - + @NonNull List getAvailableCameraInfos(@NonNull Long identifier); + @NonNull Long bindToLifecycle(@NonNull Long identifier, @NonNull Long cameraSelectorIdentifier, @NonNull List useCaseIds); + @NonNull Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); void unbind(@NonNull Long identifier, @NonNull List useCaseIds); - void unbindAll(@NonNull Long identifier); /** The codec used by ProcessCameraProviderHostApi. */ @@ -500,318 +394,257 @@ static MessageCodec getCodec() { return ProcessCameraProviderHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the - * `binaryMessenger`. - */ + /** Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, ProcessCameraProviderHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - Result resultCallback = - new Result() { - public void success(Long result) { - wrapped.put("result", result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - wrapped.put("error", wrapError(error)); - reply.reply(wrapped); - } - }; - - api.getInstance(resultCallback); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + Result resultCallback = new Result() { + public void success(Long result) { + wrapped.put("result", result); reply.reply(wrapped); } - }); + public void error(Throwable error) { + wrapped.put("error", wrapError(error)); + reply.reply(wrapped); + } + }; + + api.getInstance(resultCallback); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + reply.reply(wrapped); + } + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - List output = - api.getAvailableCameraInfos( - (identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + List output = api.getAvailableCameraInfos((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number cameraSelectorIdentifierArg = (Number) args.get(1); - if (cameraSelectorIdentifierArg == null) { - throw new NullPointerException( - "cameraSelectorIdentifierArg unexpectedly null."); - } - List useCaseIdsArg = (List) args.get(2); - if (useCaseIdsArg == null) { - throw new NullPointerException("useCaseIdsArg unexpectedly null."); - } - Long output = - api.bindToLifecycle( - (identifierArg == null) ? null : identifierArg.longValue(), - (cameraSelectorIdentifierArg == null) - ? null - : cameraSelectorIdentifierArg.longValue(), - useCaseIdsArg); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number cameraSelectorIdentifierArg = (Number)args.get(1); + if (cameraSelectorIdentifierArg == null) { + throw new NullPointerException("cameraSelectorIdentifierArg unexpectedly null."); + } + List useCaseIdsArg = (List)args.get(2); + if (useCaseIdsArg == null) { + throw new NullPointerException("useCaseIdsArg unexpectedly null."); + } + Long output = api.bindToLifecycle((identifierArg == null) ? null : identifierArg.longValue(), (cameraSelectorIdentifierArg == null) ? null : cameraSelectorIdentifierArg.longValue(), useCaseIdsArg); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number useCaseIdentifierArg = (Number) args.get(1); - if (useCaseIdentifierArg == null) { - throw new NullPointerException("useCaseIdentifierArg unexpectedly null."); - } - Boolean output = - api.isBound( - (identifierArg == null) ? null : identifierArg.longValue(), - (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number useCaseIdentifierArg = (Number)args.get(1); + if (useCaseIdentifierArg == null) { + throw new NullPointerException("useCaseIdentifierArg unexpectedly null."); + } + Boolean output = api.isBound((identifierArg == null) ? null : identifierArg.longValue(), (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - List useCaseIdsArg = (List) args.get(1); - if (useCaseIdsArg == null) { - throw new NullPointerException("useCaseIdsArg unexpectedly null."); - } - api.unbind( - (identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + List useCaseIdsArg = (List)args.get(1); + if (useCaseIdsArg == null) { + throw new NullPointerException("useCaseIdsArg unexpectedly null."); + } + api.unbind((identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - api.unbindAll((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + api.unbindAll((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class ProcessCameraProviderFlutterApiCodec extends StandardMessageCodec { - public static final ProcessCameraProviderFlutterApiCodec INSTANCE = - new ProcessCameraProviderFlutterApiCodec(); - + public static final ProcessCameraProviderFlutterApiCodec INSTANCE = new ProcessCameraProviderFlutterApiCodec(); private ProcessCameraProviderFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class ProcessCameraProviderFlutterApi { private final BinaryMessenger binaryMessenger; - - public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger) { + public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return ProcessCameraProviderFlutterApiCodec.INSTANCE; } public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", - getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", getCodec()); + channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { + callback.reply(null); + }); } } - private static class CameraFlutterApiCodec extends StandardMessageCodec { public static final CameraFlutterApiCodec INSTANCE = new CameraFlutterApiCodec(); - private CameraFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class CameraFlutterApi { private final BinaryMessenger binaryMessenger; - - public CameraFlutterApi(BinaryMessenger argBinaryMessenger) { + public CameraFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return CameraFlutterApiCodec.INSTANCE; } public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraFlutterApi.create", getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraFlutterApi.create", getCodec()); + channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { + callback.reply(null); + }); } } - private static class SystemServicesHostApiCodec extends StandardMessageCodec { public static final SystemServicesHostApiCodec INSTANCE = new SystemServicesHostApiCodec(); - private SystemServicesHostApiCodec() {} - @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte) 128: + case (byte)128: return CameraPermissionsErrorData.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); + } } - @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof CameraPermissionsErrorData) { stream.write(128); writeValue(stream, ((CameraPermissionsErrorData) value).toMap()); - } else { + } else +{ super.writeValue(stream, value); } } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface SystemServicesHostApi { - void requestCameraPermissions( - @NonNull Boolean enableAudio, Result result); - - void startListeningForDeviceOrientationChange( - @NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); - + void requestCameraPermissions(@NonNull Boolean enableAudio, Result result); + void startListeningForDeviceOrientationChange(@NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); void stopListeningForDeviceOrientationChange(); /** The codec used by SystemServicesHostApi. */ @@ -819,205 +652,163 @@ static MessageCodec getCodec() { return SystemServicesHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `SystemServicesHostApi` to handle messages through the - * `binaryMessenger`. - */ + /** Sets up an instance of `SystemServicesHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, SystemServicesHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Boolean enableAudioArg = (Boolean) args.get(0); - if (enableAudioArg == null) { - throw new NullPointerException("enableAudioArg unexpectedly null."); - } - Result resultCallback = - new Result() { - public void success(CameraPermissionsErrorData result) { - wrapped.put("result", result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - wrapped.put("error", wrapError(error)); - reply.reply(wrapped); - } - }; - - api.requestCameraPermissions(enableAudioArg, resultCallback); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Boolean enableAudioArg = (Boolean)args.get(0); + if (enableAudioArg == null) { + throw new NullPointerException("enableAudioArg unexpectedly null."); + } + Result resultCallback = new Result() { + public void success(CameraPermissionsErrorData result) { + wrapped.put("result", result); + reply.reply(wrapped); + } + public void error(Throwable error) { + wrapped.put("error", wrapError(error)); reply.reply(wrapped); } - }); + }; + + api.requestCameraPermissions(enableAudioArg, resultCallback); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + reply.reply(wrapped); + } + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Boolean isFrontFacingArg = (Boolean) args.get(0); - if (isFrontFacingArg == null) { - throw new NullPointerException("isFrontFacingArg unexpectedly null."); - } - Number sensorOrientationArg = (Number) args.get(1); - if (sensorOrientationArg == null) { - throw new NullPointerException("sensorOrientationArg unexpectedly null."); - } - api.startListeningForDeviceOrientationChange( - isFrontFacingArg, - (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Boolean isFrontFacingArg = (Boolean)args.get(0); + if (isFrontFacingArg == null) { + throw new NullPointerException("isFrontFacingArg unexpectedly null."); + } + Number sensorOrientationArg = (Number)args.get(1); + if (sensorOrientationArg == null) { + throw new NullPointerException("sensorOrientationArg unexpectedly null."); + } + api.startListeningForDeviceOrientationChange(isFrontFacingArg, (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - api.stopListeningForDeviceOrientationChange(); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + api.stopListeningForDeviceOrientationChange(); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class SystemServicesFlutterApiCodec extends StandardMessageCodec { - public static final SystemServicesFlutterApiCodec INSTANCE = - new SystemServicesFlutterApiCodec(); - + public static final SystemServicesFlutterApiCodec INSTANCE = new SystemServicesFlutterApiCodec(); private SystemServicesFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class SystemServicesFlutterApi { private final BinaryMessenger binaryMessenger; - - public SystemServicesFlutterApi(BinaryMessenger argBinaryMessenger) { + public SystemServicesFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return SystemServicesFlutterApiCodec.INSTANCE; } public void onDeviceOrientationChanged(@NonNull String orientationArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", - getCodec()); - channel.send( - new ArrayList(Arrays.asList(orientationArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", getCodec()); + channel.send(new ArrayList(Arrays.asList(orientationArg)), channelReply -> { + callback.reply(null); + }); } - public void onCameraError(@NonNull String errorDescriptionArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", - getCodec()); - channel.send( - new ArrayList(Arrays.asList(errorDescriptionArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", getCodec()); + channel.send(new ArrayList(Arrays.asList(errorDescriptionArg)), channelReply -> { + callback.reply(null); + }); } } - private static class PreviewHostApiCodec extends StandardMessageCodec { public static final PreviewHostApiCodec INSTANCE = new PreviewHostApiCodec(); - private PreviewHostApiCodec() {} - @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte) 128: + case (byte)128: return ResolutionInfo.fromMap((Map) readValue(buffer)); - - case (byte) 129: + + case (byte)129: return ResolutionInfo.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); + } } - @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof ResolutionInfo) { stream.write(128); writeValue(stream, ((ResolutionInfo) value).toMap()); - } else if (value instanceof ResolutionInfo) { + } else + if (value instanceof ResolutionInfo) { stream.write(129); writeValue(stream, ((ResolutionInfo) value).toMap()); - } else { + } else +{ super.writeValue(stream, value); } } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface PreviewHostApi { - void create( - @NonNull Long identifier, - @Nullable Long rotation, - @Nullable ResolutionInfo targetResolution); - - @NonNull - Long setSurfaceProvider(@NonNull Long identifier); - + void create(@NonNull Long identifier, @Nullable Long rotation, @Nullable ResolutionInfo targetResolution); + @NonNull Long setSurfaceProvider(@NonNull Long identifier); void releaseFlutterSurfaceTexture(); - - @NonNull - ResolutionInfo getResolutionInfo(@NonNull Long identifier); + @NonNull ResolutionInfo getResolutionInfo(@NonNull Long identifier); /** The codec used by PreviewHostApi. */ static MessageCodec getCodec() { @@ -1028,151 +819,129 @@ static MessageCodec getCodec() { static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.create", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.create", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number rotationArg = (Number) args.get(1); - ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - (rotationArg == null) ? null : rotationArg.longValue(), - targetResolutionArg); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number rotationArg = (Number)args.get(1); + ResolutionInfo targetResolutionArg = (ResolutionInfo)args.get(2); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (rotationArg == null) ? null : rotationArg.longValue(), targetResolutionArg); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Long output = - api.setSurfaceProvider( - (identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Long output = api.setSurfaceProvider((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - api.releaseFlutterSurfaceTexture(); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + api.releaseFlutterSurfaceTexture(); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.getResolutionInfo", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.getResolutionInfo", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - ResolutionInfo output = - api.getResolutionInfo( - (identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + ResolutionInfo output = api.getResolutionInfo((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class ImageCaptureHostApiCodec extends StandardMessageCodec { public static final ImageCaptureHostApiCodec INSTANCE = new ImageCaptureHostApiCodec(); - private ImageCaptureHostApiCodec() {} - @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte) 128: + case (byte)128: return ResolutionInfo.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); + } } - @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof ResolutionInfo) { stream.write(128); writeValue(stream, ((ResolutionInfo) value).toMap()); - } else { + } else +{ super.writeValue(stream, value); } } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface ImageCaptureHostApi { - void create( - @NonNull Long identifier, - @Nullable Long flashMode, - @Nullable ResolutionInfo targetResolution); - + void create(@NonNull Long identifier, @Nullable Long flashMode, @Nullable ResolutionInfo targetResolution); void setFlashMode(@NonNull Long identifier, @NonNull Long flashMode); - void takePicture(@NonNull Long identifier, Result result); /** The codec used by ImageCaptureHostApi. */ @@ -1180,120 +949,192 @@ static MessageCodec getCodec() { return ImageCaptureHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `ImageCaptureHostApi` to handle messages through the - * `binaryMessenger`. - */ + /** Sets up an instance of `ImageCaptureHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.create", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.create", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number flashModeArg = (Number) args.get(1); - ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - (flashModeArg == null) ? null : flashModeArg.longValue(), - targetResolutionArg); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number flashModeArg = (Number)args.get(1); + ResolutionInfo targetResolutionArg = (ResolutionInfo)args.get(2); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue(), targetResolutionArg); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number flashModeArg = (Number) args.get(1); - if (flashModeArg == null) { - throw new NullPointerException("flashModeArg unexpectedly null."); - } - api.setFlashMode( - (identifierArg == null) ? null : identifierArg.longValue(), - (flashModeArg == null) ? null : flashModeArg.longValue()); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number flashModeArg = (Number)args.get(1); + if (flashModeArg == null) { + throw new NullPointerException("flashModeArg unexpectedly null."); + } + api.setFlashMode((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.takePicture", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.takePicture", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Result resultCallback = - new Result() { - public void success(String result) { - wrapped.put("result", result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - wrapped.put("error", wrapError(error)); - reply.reply(wrapped); - } - }; - - api.takePicture( - (identifierArg == null) ? null : identifierArg.longValue(), resultCallback); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Result resultCallback = new Result() { + public void success(String result) { + wrapped.put("result", result); + reply.reply(wrapped); + } + public void error(Throwable error) { + wrapped.put("error", wrapError(error)); reply.reply(wrapped); } - }); + }; + + api.takePicture((identifierArg == null) ? null : identifierArg.longValue(), resultCallback); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + reply.reply(wrapped); + } + }); } else { channel.setMessageHandler(null); } } } } + private static class ImageAnalysisHostApiCodec extends StandardMessageCodec { + public static final ImageAnalysisHostApiCodec INSTANCE = new ImageAnalysisHostApiCodec(); + private ImageAnalysisHostApiCodec() {} + @Override + protected Object readValueOfType(byte type, ByteBuffer buffer) { + switch (type) { + case (byte)128: + return ResolutionInfo.fromMap((Map) readValue(buffer)); + + default: + return super.readValueOfType(type, buffer); + + } + } + @Override + protected void writeValue(ByteArrayOutputStream stream, Object value) { + if (value instanceof ResolutionInfo) { + stream.write(128); + writeValue(stream, ((ResolutionInfo) value).toMap()); + } else +{ + super.writeValue(stream, value); + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + public interface ImageAnalysisHostApi { + void create(@NonNull Long identifier, @Nullable ResolutionInfo targetResolution); + void setAnalyzer(@NonNull Long identifier); + + /** The codec used by ImageAnalysisHostApi. */ + static MessageCodec getCodec() { + return ImageAnalysisHostApiCodec.INSTANCE; + } + /** Sets up an instance of `ImageAnalysisHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.create", getCodec()); + if (api != null) { + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + ResolutionInfo targetResolutionArg = (ResolutionInfo)args.get(1); + api.create((identifierArg == null) ? null : identifierArg.longValue(), targetResolutionArg); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer", getCodec()); + if (api != null) { + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } private static Map wrapError(Throwable exception) { Map errorMap = new HashMap<>(); errorMap.put("message", exception.toString()); errorMap.put("code", exception.getClass().getSimpleName()); - errorMap.put( - "details", - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + errorMap.put("details", "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); return errorMap; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java index e93d81da14e9..38e31099ad1a 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java @@ -62,9 +62,7 @@ public void create( imageCaptureBuilder.setFlashMode(flashMode.intValue()); } if (targetResolution != null) { - imageCaptureBuilder.setTargetResolution( - new Size( - targetResolution.getWidth().intValue(), targetResolution.getHeight().intValue())); + imageCaptureBuilder.setTargetResolution(CameraXProxy.sizeFromResolution(targetResolution)); } ImageCapture imageCapture = imageCaptureBuilder.build(); instanceManager.addDartCreatedInstance(imageCapture, identifier); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewHostApiImpl.java index 838f0b3d656c..8491fa25fd42 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewHostApiImpl.java @@ -46,9 +46,7 @@ public void create( previewBuilder.setTargetRotation(rotation.intValue()); } if (targetResolution != null) { - previewBuilder.setTargetResolution( - new Size( - targetResolution.getWidth().intValue(), targetResolution.getHeight().intValue())); + previewBuilder.setTargetResolution(CameraXProxy.sizeFromResolution(targetResolution)); } Preview preview = previewBuilder.build(); instanceManager.addDartCreatedInstance(preview, identifier); diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index adafd74f33f9..2c3e326dd584 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -12,6 +12,7 @@ import 'camera.dart'; import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.g.dart'; +import 'image_analysis.dart'; import 'image_capture.dart'; import 'preview.dart'; import 'process_camera_provider.dart'; @@ -45,6 +46,9 @@ class AndroidCameraCameraX extends CameraPlatform { @visibleForTesting ImageCapture? imageCapture; + /// + ImageAnalysis? imageAnalysis; + /// The [CameraSelector] used to configure the [processCameraProvider] to use /// the desired camera. @visibleForTesting @@ -159,10 +163,14 @@ class AndroidCameraCameraX extends CameraPlatform { _getTargetResolutionForImageCapture(_resolutionPreset); imageCapture = createImageCapture(null, imageCaptureTargetResolution); + final ResolutionInfo? imageAnalysisTargetResolution = null; + imageAnalysis = ImageAnalysis(targetResolution: imageAnalysisTargetResolution); + imageAnalysis!.setAnalyzer(); + // Bind configured UseCases to ProcessCameraProvider instance & mark Preview // instance as bound but not paused. camera = await processCameraProvider! - .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); + .bindToLifecycle(cameraSelector!, [preview!, imageCapture!, imageAnalysis!]); _previewIsPaused = false; return flutterSurfaceTextureId; @@ -299,6 +307,21 @@ class AndroidCameraCameraX extends CameraPlatform { return XFile(picturePath); } + /// A new streamed frame is available. + /// + /// Listening to this stream will start streaming, and canceling will stop. + /// Pausing will throw a [CameraException], as pausing the stream would cause + /// very high memory usage; to temporarily stop receiving frames, cancel, then + /// listen again later. + /// + /// + // TODO(bmparr): Add options to control streaming settings (e.g., + // resolution and FPS). + Stream onStreamedFrameAvailable(int cameraId, + {CameraImageStreamOptions? options}) { + throw UnimplementedError('onStreamedFrameAvailable() is not implemented.'); + } + // Methods for binding UseCases to the lifecycle of the camera controlled // by a ProcessCameraProvider instance: diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index 2ed53bb2ab5a..e3213b3922db 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -68,8 +68,7 @@ class JavaObjectHostApi { /// Constructor for [JavaObjectHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - JavaObjectHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + JavaObjectHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -77,8 +76,7 @@ class JavaObjectHostApi { Future dispose(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -87,8 +85,7 @@ class JavaObjectHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -103,27 +100,22 @@ class JavaObjectHostApi { class _JavaObjectFlutterApiCodec extends StandardMessageCodec { const _JavaObjectFlutterApiCodec(); } - abstract class JavaObjectFlutterApi { static const MessageCodec codec = _JavaObjectFlutterApiCodec(); void dispose(int identifier); - static void setup(JavaObjectFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(JavaObjectFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaObjectFlutterApi.dispose', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.JavaObjectFlutterApi.dispose', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null, expected non-null int.'); api.dispose(arg_identifier!); return; }); @@ -140,8 +132,7 @@ class CameraInfoHostApi { /// Constructor for [CameraInfoHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - CameraInfoHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + CameraInfoHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -149,8 +140,7 @@ class CameraInfoHostApi { Future getSensorRotationDegrees(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -159,8 +149,7 @@ class CameraInfoHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -180,27 +169,22 @@ class CameraInfoHostApi { class _CameraInfoFlutterApiCodec extends StandardMessageCodec { const _CameraInfoFlutterApiCodec(); } - abstract class CameraInfoFlutterApi { static const MessageCodec codec = _CameraInfoFlutterApiCodec(); void create(int identifier); - static void setup(CameraInfoFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(CameraInfoFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoFlutterApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraInfoFlutterApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); @@ -217,8 +201,7 @@ class CameraSelectorHostApi { /// Constructor for [CameraSelectorHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - CameraSelectorHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + CameraSelectorHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -226,19 +209,16 @@ class CameraSelectorHostApi { Future create(int arg_identifier, int? arg_lensFacing) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_lensFacing]) - as Map?; + await channel.send([arg_identifier, arg_lensFacing]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -249,22 +229,18 @@ class CameraSelectorHostApi { } } - Future> filter( - int arg_identifier, List arg_cameraInfoIds) async { + Future> filter(int arg_identifier, List arg_cameraInfoIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_cameraInfoIds]) - as Map?; + await channel.send([arg_identifier, arg_cameraInfoIds]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -284,27 +260,22 @@ class CameraSelectorHostApi { class _CameraSelectorFlutterApiCodec extends StandardMessageCodec { const _CameraSelectorFlutterApiCodec(); } - abstract class CameraSelectorFlutterApi { static const MessageCodec codec = _CameraSelectorFlutterApiCodec(); void create(int identifier, int? lensFacing); - static void setup(CameraSelectorFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(CameraSelectorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null, expected non-null int.'); final int? arg_lensFacing = (args[1] as int?); api.create(arg_identifier!, arg_lensFacing); return; @@ -322,18 +293,15 @@ class ProcessCameraProviderHostApi { /// Constructor for [ProcessCameraProviderHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - ProcessCameraProviderHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + ProcessCameraProviderHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - static const MessageCodec codec = - _ProcessCameraProviderHostApiCodec(); + static const MessageCodec codec = _ProcessCameraProviderHostApiCodec(); Future getInstance() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send(null) as Map?; if (replyMap == null) { @@ -342,8 +310,7 @@ class ProcessCameraProviderHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -361,9 +328,7 @@ class ProcessCameraProviderHostApi { Future> getAvailableCameraInfos(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', - codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -372,8 +337,7 @@ class ProcessCameraProviderHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -389,25 +353,18 @@ class ProcessCameraProviderHostApi { } } - Future bindToLifecycle(int arg_identifier, - int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { + Future bindToLifecycle(int arg_identifier, int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', - codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = await channel.send([ - arg_identifier, - arg_cameraSelectorIdentifier, - arg_useCaseIds - ]) as Map?; + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier, arg_cameraSelectorIdentifier, arg_useCaseIds]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -425,19 +382,16 @@ class ProcessCameraProviderHostApi { Future isBound(int arg_identifier, int arg_useCaseIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_useCaseIdentifier]) - as Map?; + await channel.send([arg_identifier, arg_useCaseIdentifier]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -455,19 +409,16 @@ class ProcessCameraProviderHostApi { Future unbind(int arg_identifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_useCaseIds]) - as Map?; + await channel.send([arg_identifier, arg_useCaseIds]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -480,8 +431,7 @@ class ProcessCameraProviderHostApi { Future unbindAll(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -490,8 +440,7 @@ class ProcessCameraProviderHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -506,28 +455,22 @@ class ProcessCameraProviderHostApi { class _ProcessCameraProviderFlutterApiCodec extends StandardMessageCodec { const _ProcessCameraProviderFlutterApiCodec(); } - abstract class ProcessCameraProviderFlutterApi { - static const MessageCodec codec = - _ProcessCameraProviderFlutterApiCodec(); + static const MessageCodec codec = _ProcessCameraProviderFlutterApiCodec(); void create(int identifier); - static void setup(ProcessCameraProviderFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(ProcessCameraProviderFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); @@ -539,7 +482,6 @@ abstract class ProcessCameraProviderFlutterApi { class _CameraFlutterApiCodec extends StandardMessageCodec { const _CameraFlutterApiCodec(); } - abstract class CameraFlutterApi { static const MessageCodec codec = _CameraFlutterApiCodec(); @@ -547,18 +489,15 @@ abstract class CameraFlutterApi { static void setup(CameraFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraFlutterApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraFlutterApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); @@ -574,19 +513,20 @@ class _SystemServicesHostApiCodec extends StandardMessageCodec { if (value is CameraPermissionsErrorData) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } @@ -595,29 +535,24 @@ class SystemServicesHostApi { /// Constructor for [SystemServicesHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - SystemServicesHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + SystemServicesHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _SystemServicesHostApiCodec(); - Future requestCameraPermissions( - bool arg_enableAudio) async { + Future requestCameraPermissions(bool arg_enableAudio) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', - codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = await channel - .send([arg_enableAudio]) as Map?; + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_enableAudio]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -628,23 +563,18 @@ class SystemServicesHostApi { } } - Future startListeningForDeviceOrientationChange( - bool arg_isFrontFacing, int arg_sensorOrientation) async { + Future startListeningForDeviceOrientationChange(bool arg_isFrontFacing, int arg_sensorOrientation) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', - codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_isFrontFacing, arg_sensorOrientation]) - as Map?; + await channel.send([arg_isFrontFacing, arg_sensorOrientation]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -657,9 +587,7 @@ class SystemServicesHostApi { Future stopListeningForDeviceOrientationChange() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', - codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send(null) as Map?; if (replyMap == null) { @@ -668,8 +596,7 @@ class SystemServicesHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -684,29 +611,23 @@ class SystemServicesHostApi { class _SystemServicesFlutterApiCodec extends StandardMessageCodec { const _SystemServicesFlutterApiCodec(); } - abstract class SystemServicesFlutterApi { static const MessageCodec codec = _SystemServicesFlutterApiCodec(); void onDeviceOrientationChanged(String orientation); void onCameraError(String errorDescription); - static void setup(SystemServicesFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(SystemServicesFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); final List args = (message as List?)!; final String? arg_orientation = (args[0] as String?); - assert(arg_orientation != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null, expected non-null String.'); + assert(arg_orientation != null, 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null, expected non-null String.'); api.onDeviceOrientationChanged(arg_orientation!); return; }); @@ -714,18 +635,15 @@ abstract class SystemServicesFlutterApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); final List args = (message as List?)!; final String? arg_errorDescription = (args[0] as String?); - assert(arg_errorDescription != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null, expected non-null String.'); + assert(arg_errorDescription != null, 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null, expected non-null String.'); api.onCameraError(arg_errorDescription!); return; }); @@ -741,25 +659,27 @@ class _PreviewHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else if (value is ResolutionInfo) { + } else + if (value is ResolutionInfo) { buffer.putUint8(129); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - case 129: + + case 129: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } @@ -768,29 +688,24 @@ class PreviewHostApi { /// Constructor for [PreviewHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - PreviewHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + PreviewHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _PreviewHostApiCodec(); - Future create(int arg_identifier, int? arg_rotation, - ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_rotation, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.create', codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = await channel - .send([arg_identifier, arg_rotation, arg_targetResolution]) - as Map?; + 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier, arg_rotation, arg_targetResolution]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -803,8 +718,7 @@ class PreviewHostApi { Future setSurfaceProvider(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -813,8 +727,7 @@ class PreviewHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -832,8 +745,7 @@ class PreviewHostApi { Future releaseFlutterSurfaceTexture() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send(null) as Map?; if (replyMap == null) { @@ -842,8 +754,7 @@ class PreviewHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -856,8 +767,7 @@ class PreviewHostApi { Future getResolutionInfo(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -866,8 +776,7 @@ class PreviewHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -891,19 +800,20 @@ class _ImageCaptureHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } @@ -912,29 +822,24 @@ class ImageCaptureHostApi { /// Constructor for [ImageCaptureHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - ImageCaptureHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + ImageCaptureHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _ImageCaptureHostApiCodec(); - Future create(int arg_identifier, int? arg_flashMode, - ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_flashMode, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = await channel.send( - [arg_identifier, arg_flashMode, arg_targetResolution]) - as Map?; + 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier, arg_flashMode, arg_targetResolution]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -947,19 +852,16 @@ class ImageCaptureHostApi { Future setFlashMode(int arg_identifier, int arg_flashMode) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_flashMode]) - as Map?; + await channel.send([arg_identifier, arg_flashMode]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -972,8 +874,7 @@ class ImageCaptureHostApi { Future takePicture(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -982,8 +883,7 @@ class ImageCaptureHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -999,3 +899,83 @@ class ImageCaptureHostApi { } } } + +class _ImageAnalysisHostApiCodec extends StandardMessageCodec { + const _ImageAnalysisHostApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is ResolutionInfo) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else +{ + super.writeValue(buffer, value); + } + } + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return ResolutionInfo.decode(readValue(buffer)!); + + default: + return super.readValueOfType(type, buffer); + + } + } +} + +class ImageAnalysisHostApi { + /// Constructor for [ImageAnalysisHostApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + ImageAnalysisHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = _ImageAnalysisHostApiCodec(); + + Future create(int arg_identifier, ResolutionInfo? arg_targetResolution) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier, arg_targetResolution]) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return; + } + } + + Future setAnalyzer(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier]) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return; + } + } +} diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 033c63ed9fd1..a2828afa8c68 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -143,3 +143,10 @@ abstract class ImageCaptureHostApi { @async String takePicture(int identifier); } + +@HostApi(dartHostTestHandler: 'TestImageAnalysisHostApi') +abstract class ImageAnalysisHostApi { + void create(int identifier, ResolutionInfo? targetResolution); + + void setAnalyzer(int identifier); +} diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index 546344ef0e41..f18af633b09a 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -16,27 +16,22 @@ import 'package:camera_android_camerax/src/camerax_library.g.dart'; class _TestJavaObjectHostApiCodec extends StandardMessageCodec { const _TestJavaObjectHostApiCodec(); } - abstract class TestJavaObjectHostApi { static const MessageCodec codec = _TestJavaObjectHostApiCodec(); void dispose(int identifier); - static void setup(TestJavaObjectHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestJavaObjectHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null, expected non-null int.'); api.dispose(arg_identifier!); return {}; }); @@ -48,28 +43,22 @@ abstract class TestJavaObjectHostApi { class _TestCameraInfoHostApiCodec extends StandardMessageCodec { const _TestCameraInfoHostApiCodec(); } - abstract class TestCameraInfoHostApi { static const MessageCodec codec = _TestCameraInfoHostApiCodec(); int getSensorRotationDegrees(int identifier); - static void setup(TestCameraInfoHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraInfoHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null, expected non-null int.'); final int output = api.getSensorRotationDegrees(arg_identifier!); return {'result': output}; }); @@ -81,28 +70,23 @@ abstract class TestCameraInfoHostApi { class _TestCameraSelectorHostApiCodec extends StandardMessageCodec { const _TestCameraSelectorHostApiCodec(); } - abstract class TestCameraSelectorHostApi { static const MessageCodec codec = _TestCameraSelectorHostApiCodec(); void create(int identifier, int? lensFacing); List filter(int identifier, List cameraInfoIds); - static void setup(TestCameraSelectorHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraSelectorHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null, expected non-null int.'); final int? arg_lensFacing = (args[1] as int?); api.create(arg_identifier!, arg_lensFacing); return {}; @@ -111,24 +95,18 @@ abstract class TestCameraSelectorHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); - final List? arg_cameraInfoIds = - (args[1] as List?)?.cast(); - assert(arg_cameraInfoIds != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); - final List output = - api.filter(arg_identifier!, arg_cameraInfoIds!); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); + final List? arg_cameraInfoIds = (args[1] as List?)?.cast(); + assert(arg_cameraInfoIds != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); + final List output = api.filter(arg_identifier!, arg_cameraInfoIds!); return {'result': output}; }); } @@ -139,24 +117,19 @@ abstract class TestCameraSelectorHostApi { class _TestProcessCameraProviderHostApiCodec extends StandardMessageCodec { const _TestProcessCameraProviderHostApiCodec(); } - abstract class TestProcessCameraProviderHostApi { - static const MessageCodec codec = - _TestProcessCameraProviderHostApiCodec(); + static const MessageCodec codec = _TestProcessCameraProviderHostApiCodec(); Future getInstance(); List getAvailableCameraInfos(int identifier); - int bindToLifecycle( - int identifier, int cameraSelectorIdentifier, List useCaseIds); + int bindToLifecycle(int identifier, int cameraSelectorIdentifier, List useCaseIds); bool isBound(int identifier, int useCaseIdentifier); void unbind(int identifier, List useCaseIds); void unbindAll(int identifier); - static void setup(TestProcessCameraProviderHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestProcessCameraProviderHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -169,94 +142,71 @@ abstract class TestProcessCameraProviderHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); - final List output = - api.getAvailableCameraInfos(arg_identifier!); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); + final List output = api.getAvailableCameraInfos(arg_identifier!); return {'result': output}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); final int? arg_cameraSelectorIdentifier = (args[1] as int?); - assert(arg_cameraSelectorIdentifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); - final List? arg_useCaseIds = - (args[2] as List?)?.cast(); - assert(arg_useCaseIds != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null List.'); - final int output = api.bindToLifecycle( - arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); + assert(arg_cameraSelectorIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); + final List? arg_useCaseIds = (args[2] as List?)?.cast(); + assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null List.'); + final int output = api.bindToLifecycle(arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); return {'result': output}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); final int? arg_useCaseIdentifier = (args[1] as int?); - assert(arg_useCaseIdentifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); - final bool output = - api.isBound(arg_identifier!, arg_useCaseIdentifier!); + assert(arg_useCaseIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); + final bool output = api.isBound(arg_identifier!, arg_useCaseIdentifier!); return {'result': output}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null int.'); - final List? arg_useCaseIds = - (args[1] as List?)?.cast(); - assert(arg_useCaseIds != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null List.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null int.'); + final List? arg_useCaseIds = (args[1] as List?)?.cast(); + assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null List.'); api.unbind(arg_identifier!, arg_useCaseIds!); return {}; }); @@ -264,18 +214,15 @@ abstract class TestProcessCameraProviderHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null, expected non-null int.'); api.unbindAll(arg_identifier!); return {}; }); @@ -291,83 +238,67 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { if (value is CameraPermissionsErrorData) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } - abstract class TestSystemServicesHostApi { static const MessageCodec codec = _TestSystemServicesHostApiCodec(); - Future requestCameraPermissions( - bool enableAudio); - void startListeningForDeviceOrientationChange( - bool isFrontFacing, int sensorOrientation); + Future requestCameraPermissions(bool enableAudio); + void startListeningForDeviceOrientationChange(bool isFrontFacing, int sensorOrientation); void stopListeningForDeviceOrientationChange(); - static void setup(TestSystemServicesHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestSystemServicesHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); final List args = (message as List?)!; final bool? arg_enableAudio = (args[0] as bool?); - assert(arg_enableAudio != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null, expected non-null bool.'); - final CameraPermissionsErrorData? output = - await api.requestCameraPermissions(arg_enableAudio!); + assert(arg_enableAudio != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null, expected non-null bool.'); + final CameraPermissionsErrorData? output = await api.requestCameraPermissions(arg_enableAudio!); return {'result': output}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); final List args = (message as List?)!; final bool? arg_isFrontFacing = (args[0] as bool?); - assert(arg_isFrontFacing != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null bool.'); + assert(arg_isFrontFacing != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null bool.'); final int? arg_sensorOrientation = (args[1] as int?); - assert(arg_sensorOrientation != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null int.'); - api.startListeningForDeviceOrientationChange( - arg_isFrontFacing!, arg_sensorOrientation!); + assert(arg_sensorOrientation != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null int.'); + api.startListeningForDeviceOrientationChange(arg_isFrontFacing!, arg_sensorOrientation!); return {}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -388,29 +319,30 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else if (value is ResolutionInfo) { + } else + if (value is ResolutionInfo) { buffer.putUint8(129); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - case 129: + + case 129: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } - abstract class TestPreviewHostApi { static const MessageCodec codec = _TestPreviewHostApiCodec(); @@ -418,25 +350,20 @@ abstract class TestPreviewHostApi { int setSurfaceProvider(int identifier); void releaseFlutterSurfaceTexture(); ResolutionInfo getResolutionInfo(int identifier); - static void setup(TestPreviewHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestPreviewHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null, expected non-null int.'); final int? arg_rotation = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = - (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_rotation, arg_targetResolution); return {}; }); @@ -444,18 +371,15 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null, expected non-null int.'); final int output = api.setSurfaceProvider(arg_identifier!); return {'result': output}; }); @@ -463,9 +387,7 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -478,18 +400,15 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null, expected non-null int.'); final ResolutionInfo output = api.getResolutionInfo(arg_identifier!); return {'result': output}; }); @@ -505,48 +424,43 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } - abstract class TestImageCaptureHostApi { static const MessageCodec codec = _TestImageCaptureHostApiCodec(); void create(int identifier, int? flashMode, ResolutionInfo? targetResolution); void setFlashMode(int identifier, int flashMode); Future takePicture(int identifier); - static void setup(TestImageCaptureHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageCaptureHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); final int? arg_flashMode = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = - (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_flashMode, arg_targetResolution); return {}; }); @@ -554,21 +468,17 @@ abstract class TestImageCaptureHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); final int? arg_flashMode = (args[1] as int?); - assert(arg_flashMode != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); + assert(arg_flashMode != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); api.setFlashMode(arg_identifier!, arg_flashMode!); return {}; }); @@ -576,18 +486,15 @@ abstract class TestImageCaptureHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null, expected non-null int.'); final String output = await api.takePicture(arg_identifier!); return {'result': output}; }); @@ -595,3 +502,69 @@ abstract class TestImageCaptureHostApi { } } } + +class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { + const _TestImageAnalysisHostApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is ResolutionInfo) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else +{ + super.writeValue(buffer, value); + } + } + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return ResolutionInfo.decode(readValue(buffer)!); + + default: + return super.readValueOfType(type, buffer); + + } + } +} +abstract class TestImageAnalysisHostApi { + static const MessageCodec codec = _TestImageAnalysisHostApiCodec(); + + void create(int identifier, ResolutionInfo? targetResolution); + void setAnalyzer(int identifier); + static void setup(TestImageAnalysisHostApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); + final ResolutionInfo? arg_targetResolution = (args[1] as ResolutionInfo?); + api.create(arg_identifier!, arg_targetResolution); + return {}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null, expected non-null int.'); + api.setAnalyzer(arg_identifier!); + return {}; + }); + } + } + } +} From 0f387e27fe045c40b80f4f6fa1c4d4649ac9edca Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 13 Mar 2023 10:33:57 -0700 Subject: [PATCH 18/62] Add image analysis files --- .../camerax/ImageAnalysisHostApiImpl.java | 63 ++++++++++++++ .../lib/src/image_analysis.dart | 83 +++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java create mode 100644 packages/camera/camera_android_camerax/lib/src/image_analysis.dart diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java new file mode 100644 index 000000000000..dd24957cddb8 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -0,0 +1,63 @@ +// 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. + +package io.flutter.plugins.camerax; + +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; +import androidx.camera.core.ImageAnalysis; +import androidx.camera.core.ImageProxy; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageAnalysisHostApi; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ResolutionInfo; +import java.util.Objects; +import java.util.concurrent.Executors; + +public class ImageAnalysisHostApiImpl implements ImageAnalysisHostApi { + + private InstanceManager instanceManager; + private BinaryMessenger binaryMessenger; + + @VisibleForTesting CameraXProxy cameraXProxy = new CameraXProxy(); + + public ImageAnalysisHostApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + } + + @Override + public void create(@NonNull Long identifier, @Nullable ResolutionInfo targetResolution) { + ImageAnalysis.Builder imageAnalysisBuilder = cameraXProxy.createImageAnalysisBuilder(); + + if (targetResolution != null) { + imageAnalysisBuilder.setTargetResolution(CameraXProxy.sizeFromResolution(targetResolution)); + } + + ImageAnalysis imageAnalysis = imageAnalysisBuilder.build(); + instanceManager.addDartCreatedInstance(imageAnalysis, identifier); + } + + @Override + public void setAnalyzer(@NonNull Long identifier) { + ImageAnalysis imageAnalysis = + (ImageAnalysis) Objects.requireNonNull(instanceManager.getInstance(identifier)); + ImageAnalysis.Analyzer analyzer = createImageAnalysisAnalyzer(); + imageAnalysis.setAnalyzer(Executors.newSingleThreadExecutor(), analyzer); + } + + private ImageAnalysis.Analyzer createImageAnalysisAnalyzer() { + return new ImageAnalysis.Analyzer() { + @Override + public void analyze(@NonNull ImageProxy image) { + ImageProxy.PlaneProxy[] planes = image.getPlanes(); + Log.v( + "ImageAnalysisHostApiImpl", "Image timestamp: " + image.getImageInfo().getTimestamp()); + image.close(); + } + }; + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart new file mode 100644 index 000000000000..d0354c6071de --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -0,0 +1,83 @@ +// 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 'package:flutter/services.dart' show BinaryMessenger; + +import 'camerax_library.g.dart'; +import 'instance_manager.dart'; +import 'java_object.dart'; +import 'use_case.dart'; + +class ImageAnalysis extends UseCase { + /// Creates a [ImageAnalysis]. + ImageAnalysis( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + this.targetResolution}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = ImageAnalysisHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + _api.createFromInstance(this, targetResolution); + } + + late final ImageAnalysisHostApiImpl _api; + + /// Constructs a [ImageAnalysis] that is not automatically attached to a native object. + ImageAnalysis.detached( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + this.targetResolution}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = ImageAnalysisHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + } + + /// Target resolution of the camera preview stream. + final ResolutionInfo? targetResolution; + + Future setAnalyzer() async { + _api.setAnalyzerFromInstance(this); + } +} + +class ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { + /// Constructs a [ImageAnalysisHostApiImpl]. + ImageAnalysisHostApiImpl( + {this.binaryMessenger, InstanceManager? instanceManager}) { + this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + } + + /// Receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used which routes to + /// the host platform. + final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + late final InstanceManager instanceManager; + + Future createFromInstance( + ImageAnalysis instance, ResolutionInfo? targetResolution) async { + final int identifier = instanceManager.addDartCreatedInstance(instance, + onCopy: (ImageAnalysis original) { + return ImageAnalysis.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + targetResolution: original.targetResolution); + }); + create(identifier, targetResolution); + } + + Future setAnalyzerFromInstance(ImageAnalysis instance) async { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No ImageAnalysis instanced in the instance manager has been found.'); + + setAnalyzer(identifier!); + } +} From 0bf4f9a162d576f70d2478f1e30514eb0b12e45d Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 13 Mar 2023 12:26:01 -0700 Subject: [PATCH 19/62] Start filling in image streaming info --- .../camerax/ImageAnalysisHostApiImpl.java | 28 +++++++++++++++++-- .../pigeons/camerax_library.dart | 26 +++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index dd24957cddb8..2a294fef233b 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -11,6 +11,7 @@ import androidx.camera.core.ImageAnalysis; import androidx.camera.core.ImageProxy; import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageAnalysisHostApi; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ResolutionInfo; import java.util.Objects; @@ -54,8 +55,31 @@ private ImageAnalysis.Analyzer createImageAnalysisAnalyzer() { @Override public void analyze(@NonNull ImageProxy image) { ImageProxy.PlaneProxy[] planes = image.getPlanes(); - Log.v( - "ImageAnalysisHostApiImpl", "Image timestamp: " + image.getImageInfo().getTimestamp()); + + List imagePlanesInformation = new ArrayList(); + for(ImageProxy.PlaneProxy plane : planes) { + ByteBuffer byteBuffer = plane.getBuffer(); + byte[] bytes = new byte[byteBuffer.remaining()]; + buffer.get(bytes, 0, bytes.length); + GeneratedCameraXLibrary.ImagePlaneInformation.Builder imagePlaneInfoBuilder = new GeneratedCameraXLibrary.ImagePlaneInformation.Builder(); + + imagePlanesInformation.add( + imagePlaneInfoBuilder + .setBytesPerRow(plane.getRowStride()) + .setBytesPerPixel(plane.getPixelStride()) + .setBytes(bytes) + .build()); + } + + GeneratedCameraXLibrary.ImageInformation.Builder imageInfoBuilder = new GeneratedCameraXLibrary.ImageInformation.Builder(); + imageInfoBuilder.setWidth(image.getWidth()); + imageInfoBuilder.setHeight(image.getHeight()); + imageInfoBuilder.setFormat(image.getFormat()); + imageInfoBuilder.setPlanes(imagePlanesInformation); + // last lens aperture + // last sensor exposure time + // last sensor sensitivity + image.close(); } }; diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index a2828afa8c68..794699837d5e 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -46,6 +46,32 @@ class CameraPermissionsErrorData { String description; } +class ImagePlaneInformation { + ImagePlaneInformation({ + required this.bytesPerRow, + required this.bytesPerPixel, + required this.bytes, + }); + + int bytesPerRow; + int bytesPerPixel; + Uint8List bytes; +} + +class ImageInformation { + ImageInformation({ + required this.width, + required this.height, + required this.format, + required this.imagePlanesInformation, + }); + + int width; + int height; + String format; + List imagePlanesInformation; +} + @HostApi(dartHostTestHandler: 'TestJavaObjectHostApi') abstract class JavaObjectHostApi { void dispose(int identifier); From 97912fc2f2911475a98990b162cbbb79ab3ad952 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 15 Mar 2023 09:14:17 -0700 Subject: [PATCH 20/62] More dev --- .../camerax/GeneratedCameraXLibrary.java | 220 ++++++++++++++++++ .../lib/src/camerax_library.g.dart | 117 ++++++++++ .../lib/src/image_analysis.dart | 37 +++ .../pigeons/camerax_library.dart | 7 +- 4 files changed, 380 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index d504f17a781f..4c33d0d2f447 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -137,6 +137,172 @@ public static final class Builder { } } + /** Generated class from Pigeon that represents data sent in messages. */ + public static class ImagePlaneInformation { + private @NonNull Long bytesPerRow; + public @NonNull Long getBytesPerRow() { return bytesPerRow; } + public void setBytesPerRow(@NonNull Long setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"bytesPerRow\" is null."); + } + this.bytesPerRow = setterArg; + } + + private @NonNull Long bytesPerPixel; + public @NonNull Long getBytesPerPixel() { return bytesPerPixel; } + public void setBytesPerPixel(@NonNull Long setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"bytesPerPixel\" is null."); + } + this.bytesPerPixel = setterArg; + } + + private @NonNull byte[] bytes; + public @NonNull byte[] getBytes() { return bytes; } + public void setBytes(@NonNull byte[] setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"bytes\" is null."); + } + this.bytes = setterArg; + } + + /** Constructor is private to enforce null safety; use Builder. */ + private ImagePlaneInformation() {} + public static final class Builder { + private @Nullable Long bytesPerRow; + public @NonNull Builder setBytesPerRow(@NonNull Long setterArg) { + this.bytesPerRow = setterArg; + return this; + } + private @Nullable Long bytesPerPixel; + public @NonNull Builder setBytesPerPixel(@NonNull Long setterArg) { + this.bytesPerPixel = setterArg; + return this; + } + private @Nullable byte[] bytes; + public @NonNull Builder setBytes(@NonNull byte[] setterArg) { + this.bytes = setterArg; + return this; + } + public @NonNull ImagePlaneInformation build() { + ImagePlaneInformation pigeonReturn = new ImagePlaneInformation(); + pigeonReturn.setBytesPerRow(bytesPerRow); + pigeonReturn.setBytesPerPixel(bytesPerPixel); + pigeonReturn.setBytes(bytes); + return pigeonReturn; + } + } + @NonNull Map toMap() { + Map toMapResult = new HashMap<>(); + toMapResult.put("bytesPerRow", bytesPerRow); + toMapResult.put("bytesPerPixel", bytesPerPixel); + toMapResult.put("bytes", bytes); + return toMapResult; + } + static @NonNull ImagePlaneInformation fromMap(@NonNull Map map) { + ImagePlaneInformation pigeonResult = new ImagePlaneInformation(); + Object bytesPerRow = map.get("bytesPerRow"); + pigeonResult.setBytesPerRow((bytesPerRow == null) ? null : ((bytesPerRow instanceof Integer) ? (Integer)bytesPerRow : (Long)bytesPerRow)); + Object bytesPerPixel = map.get("bytesPerPixel"); + pigeonResult.setBytesPerPixel((bytesPerPixel == null) ? null : ((bytesPerPixel instanceof Integer) ? (Integer)bytesPerPixel : (Long)bytesPerPixel)); + Object bytes = map.get("bytes"); + pigeonResult.setBytes((byte[])bytes); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static class ImageInformation { + private @NonNull Long width; + public @NonNull Long getWidth() { return width; } + public void setWidth(@NonNull Long setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"width\" is null."); + } + this.width = setterArg; + } + + private @NonNull Long height; + public @NonNull Long getHeight() { return height; } + public void setHeight(@NonNull Long setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"height\" is null."); + } + this.height = setterArg; + } + + private @NonNull String format; + public @NonNull String getFormat() { return format; } + public void setFormat(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"format\" is null."); + } + this.format = setterArg; + } + + private @NonNull List imagePlanesInformation; + public @NonNull List getImagePlanesInformation() { return imagePlanesInformation; } + public void setImagePlanesInformation(@NonNull List setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"imagePlanesInformation\" is null."); + } + this.imagePlanesInformation = setterArg; + } + + /** Constructor is private to enforce null safety; use Builder. */ + private ImageInformation() {} + public static final class Builder { + private @Nullable Long width; + public @NonNull Builder setWidth(@NonNull Long setterArg) { + this.width = setterArg; + return this; + } + private @Nullable Long height; + public @NonNull Builder setHeight(@NonNull Long setterArg) { + this.height = setterArg; + return this; + } + private @Nullable String format; + public @NonNull Builder setFormat(@NonNull String setterArg) { + this.format = setterArg; + return this; + } + private @Nullable List imagePlanesInformation; + public @NonNull Builder setImagePlanesInformation(@NonNull List setterArg) { + this.imagePlanesInformation = setterArg; + return this; + } + public @NonNull ImageInformation build() { + ImageInformation pigeonReturn = new ImageInformation(); + pigeonReturn.setWidth(width); + pigeonReturn.setHeight(height); + pigeonReturn.setFormat(format); + pigeonReturn.setImagePlanesInformation(imagePlanesInformation); + return pigeonReturn; + } + } + @NonNull Map toMap() { + Map toMapResult = new HashMap<>(); + toMapResult.put("width", width); + toMapResult.put("height", height); + toMapResult.put("format", format); + toMapResult.put("imagePlanesInformation", imagePlanesInformation); + return toMapResult; + } + static @NonNull ImageInformation fromMap(@NonNull Map map) { + ImageInformation pigeonResult = new ImageInformation(); + Object width = map.get("width"); + pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer)width : (Long)width)); + Object height = map.get("height"); + pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer)height : (Long)height)); + Object format = map.get("format"); + pigeonResult.setFormat((String)format); + Object imagePlanesInformation = map.get("imagePlanesInformation"); + pigeonResult.setImagePlanesInformation((List)imagePlanesInformation); + return pigeonResult; + } + } + public interface Result { void success(T result); void error(Throwable error); @@ -1130,6 +1296,60 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { } } } + private static class ImageAnalysisFlutterApiCodec extends StandardMessageCodec { + public static final ImageAnalysisFlutterApiCodec INSTANCE = new ImageAnalysisFlutterApiCodec(); + private ImageAnalysisFlutterApiCodec() {} + @Override + protected Object readValueOfType(byte type, ByteBuffer buffer) { + switch (type) { + case (byte)128: + return ImageInformation.fromMap((Map) readValue(buffer)); + + case (byte)129: + return ImagePlaneInformation.fromMap((Map) readValue(buffer)); + + default: + return super.readValueOfType(type, buffer); + + } + } + @Override + protected void writeValue(ByteArrayOutputStream stream, Object value) { + if (value instanceof ImageInformation) { + stream.write(128); + writeValue(stream, ((ImageInformation) value).toMap()); + } else + if (value instanceof ImagePlaneInformation) { + stream.write(129); + writeValue(stream, ((ImagePlaneInformation) value).toMap()); + } else +{ + super.writeValue(stream, value); + } + } + } + + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ + public static class ImageAnalysisFlutterApi { + private final BinaryMessenger binaryMessenger; + public ImageAnalysisFlutterApi(BinaryMessenger argBinaryMessenger){ + this.binaryMessenger = argBinaryMessenger; + } + public interface Reply { + void reply(T reply); + } + static MessageCodec getCodec() { + return ImageAnalysisFlutterApiCodec.INSTANCE; + } + + public void onImageAnalyzed(@NonNull ImageInformation imageInformationArg, Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed", getCodec()); + channel.send(new ArrayList(Arrays.asList(imageInformationArg)), channelReply -> { + callback.reply(null); + }); + } + } private static Map wrapError(Throwable exception) { Map errorMap = new HashMap<>(); errorMap.put("message", exception.toString()); diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index e3213b3922db..0e9ab4254399 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -60,6 +60,68 @@ class CameraPermissionsErrorData { } } +class ImagePlaneInformation { + ImagePlaneInformation({ + required this.bytesPerRow, + required this.bytesPerPixel, + required this.bytes, + }); + + int bytesPerRow; + int bytesPerPixel; + Uint8List bytes; + + Object encode() { + final Map pigeonMap = {}; + pigeonMap['bytesPerRow'] = bytesPerRow; + pigeonMap['bytesPerPixel'] = bytesPerPixel; + pigeonMap['bytes'] = bytes; + return pigeonMap; + } + + static ImagePlaneInformation decode(Object message) { + final Map pigeonMap = message as Map; + return ImagePlaneInformation( + bytesPerRow: pigeonMap['bytesPerRow']! as int, + bytesPerPixel: pigeonMap['bytesPerPixel']! as int, + bytes: pigeonMap['bytes']! as Uint8List, + ); + } +} + +class ImageInformation { + ImageInformation({ + required this.width, + required this.height, + required this.format, + required this.imagePlanesInformation, + }); + + int width; + int height; + String format; + List imagePlanesInformation; + + Object encode() { + final Map pigeonMap = {}; + pigeonMap['width'] = width; + pigeonMap['height'] = height; + pigeonMap['format'] = format; + pigeonMap['imagePlanesInformation'] = imagePlanesInformation; + return pigeonMap; + } + + static ImageInformation decode(Object message) { + final Map pigeonMap = message as Map; + return ImageInformation( + width: pigeonMap['width']! as int, + height: pigeonMap['height']! as int, + format: pigeonMap['format']! as String, + imagePlanesInformation: (pigeonMap['imagePlanesInformation'] as List?)!.cast(), + ); + } +} + class _JavaObjectHostApiCodec extends StandardMessageCodec { const _JavaObjectHostApiCodec(); } @@ -979,3 +1041,58 @@ class ImageAnalysisHostApi { } } } + +class _ImageAnalysisFlutterApiCodec extends StandardMessageCodec { + const _ImageAnalysisFlutterApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is ImageInformation) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else + if (value is ImagePlaneInformation) { + buffer.putUint8(129); + writeValue(buffer, value.encode()); + } else +{ + super.writeValue(buffer, value); + } + } + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return ImageInformation.decode(readValue(buffer)!); + + case 129: + return ImagePlaneInformation.decode(readValue(buffer)!); + + default: + return super.readValueOfType(type, buffer); + + } + } +} +abstract class ImageAnalysisFlutterApi { + static const MessageCodec codec = _ImageAnalysisFlutterApiCodec(); + + void onImageAnalyzed(ImageInformation imageInformation); + static void setup(ImageAnalysisFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null.'); + final List args = (message as List?)!; + final ImageInformation? arg_imageInformation = (args[0] as ImageInformation?); + assert(arg_imageInformation != null, 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null, expected non-null ImageInformation.'); + api.onImageAnalyzed(arg_imageInformation!); + return; + }); + } + } + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index d0354c6071de..6ed562e0e52f 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -81,3 +81,40 @@ class ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { setAnalyzer(identifier!); } } + +/// Flutter API implementation of [ImageAnalysis]. +class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { + /// Constructs a [ImageAnalysislutterApiImpl]. + ImageAnalysisFlutterApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + + /// Receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used which routes to + /// the host platform. + final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + final InstanceManager instanceManager; + + @override + void onImageAnalyzed(ImageInformation imageInformation) { + List imagePlanes = + imageInformation.imagePlanesInformation! + .map((ImagePlaneInformation imagePlaneInformation) { + return CameraImagePlane( + bytes: imagePlaneInformation.bytes, + bytesPerRow: imagePlaneInformation.bytesPerRow, + bytesPerPixel: imagePlaneInformatino.bytesPerPixel, + ); + }); + return CameraImageData( + format: imageInformation.format, + planes: imagePlanes, + height: imageInformation.height, + width: imageInformation.width, + ); + } +} diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 794699837d5e..463fc4ecd4a4 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -69,7 +69,7 @@ class ImageInformation { int width; int height; String format; - List imagePlanesInformation; + List imagePlanesInformation; } @HostApi(dartHostTestHandler: 'TestJavaObjectHostApi') @@ -176,3 +176,8 @@ abstract class ImageAnalysisHostApi { void setAnalyzer(int identifier); } + +@FlutterApi() +abstract class ImageAnalysisFlutterApi { + void onImageAnalyzed(ImageInformation imageInformation); +} From b889e9893763f4f1cb14ce11a9b4de59009fb2f2 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 16 Mar 2023 13:47:16 -0700 Subject: [PATCH 21/62] Dev --- .../camerax/CameraAndroidCameraxPlugin.java | 7 +++- .../io/flutter/plugins/camerax/Executors.java | 35 +++++++++++++++++ .../camerax/GeneratedCameraXLibrary.java | 12 +++--- .../camerax/ImageAnalysisFlutterApiImpl.java | 22 +++++++++++ .../camerax/ImageAnalysisHostApiImpl.java | 39 +++++++++++++------ .../example/lib/main.dart | 36 ++++++++--------- .../lib/src/android_camera_camerax.dart | 11 +++--- .../lib/src/camerax_library.g.dart | 4 +- .../lib/src/image_analysis.dart | 38 ++++++++++++++---- .../pigeons/camerax_library.dart | 2 +- 10 files changed, 153 insertions(+), 53 deletions(-) create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Executors.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java index b03e2c3955a6..48ed56c58f28 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java @@ -18,6 +18,7 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, Activity private InstanceManager instanceManager; private FlutterPluginBinding pluginBinding; private ProcessCameraProviderHostApiImpl processCameraProviderHostApi; + private ImageAnalysisHostApiImpl imageAnalysisHostApiImpl; private ImageCaptureHostApiImpl imageCaptureHostApi; public SystemServicesHostApiImpl systemServicesHostApi; @@ -54,7 +55,8 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex binaryMessenger, new PreviewHostApiImpl(binaryMessenger, instanceManager, textureRegistry)); imageCaptureHostApi = new ImageCaptureHostApiImpl(binaryMessenger, instanceManager, context); GeneratedCameraXLibrary.ImageCaptureHostApi.setup(binaryMessenger, imageCaptureHostApi); - GeneratedCameraXLibrary.ImageAnalysisHostApi.setup(binaryMessenger, new ImageAnalysisHostApiImpl(binaryMessenger, instanceManager)); + imageAnalysisHostApiImpl = new ImageAnalysisHostApiImpl(binaryMessenger, instanceManager); + GeneratedCameraXLibrary.ImageAnalysisHostApi.setup(binaryMessenger, imageAnalysisHostApiImpl); } @Override @@ -112,5 +114,8 @@ public void updateContext(Context context) { if (imageCaptureHostApi != null) { processCameraProviderHostApi.setContext(context); } + if (imageAnalysisHostApiImpl != null) { + imageAnalysisHostApiImpl.setContext(context); + } } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Executors.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Executors.java new file mode 100644 index 000000000000..bf227d84dfc2 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Executors.java @@ -0,0 +1,35 @@ +// 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. + +package io.flutter.plugins.camerax; + +import android.os.Handler; +import android.os.Looper; +import java.util.concurrent.Executor; + +/** + * Factory and utility methods for {@code Executor}. + * + *

TODO(jackson): If this class is useful for other plugins, consider including it in a shared + * library or in the Flutter engine + */ +public final class Executors { + + private static final class UiThreadExecutor implements Executor { + private static final Handler UI_THREAD = new Handler(Looper.getMainLooper()); + + @Override + public void execute(Runnable command) { + UI_THREAD.post(command); + } + } + + /** Returns an {@code Executor} that will post commands to the UI thread. */ + public static Executor uiThreadExecutor() { + return new UiThreadExecutor(); + } + + // Should never be instantiated. + private Executors() {} +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 4c33d0d2f447..25fc09dc1acf 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -231,9 +231,9 @@ public void setHeight(@NonNull Long setterArg) { this.height = setterArg; } - private @NonNull String format; - public @NonNull String getFormat() { return format; } - public void setFormat(@NonNull String setterArg) { + private @NonNull Long format; + public @NonNull Long getFormat() { return format; } + public void setFormat(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"format\" is null."); } @@ -262,8 +262,8 @@ public static final class Builder { this.height = setterArg; return this; } - private @Nullable String format; - public @NonNull Builder setFormat(@NonNull String setterArg) { + private @Nullable Long format; + public @NonNull Builder setFormat(@NonNull Long setterArg) { this.format = setterArg; return this; } @@ -296,7 +296,7 @@ public static final class Builder { Object height = map.get("height"); pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer)height : (Long)height)); Object format = map.get("format"); - pigeonResult.setFormat((String)format); + pigeonResult.setFormat((format == null) ? null : ((format instanceof Integer) ? (Integer)format : (Long)format)); Object imagePlanesInformation = map.get("imagePlanesInformation"); pigeonResult.setImagePlanesInformation((List)imagePlanesInformation); return pigeonResult; diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java new file mode 100644 index 000000000000..3801779d5f74 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java @@ -0,0 +1,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. + +package io.flutter.plugins.camerax; + +import android.util.Log; +import androidx.annotation.NonNull; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageAnalysisFlutterApi; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageInformation; + +public class ImageAnalysisFlutterApiImpl extends ImageAnalysisFlutterApi { + public ImageAnalysisFlutterApiImpl(@NonNull BinaryMessenger binaryMessenger) { + super(binaryMessenger); + } + + public void sendOnImageAnalyzedEvent(@NonNull ImageInformation imageInformation, Reply callback) { + Log.v("FLUTTER", "sendOnImageAnalyzedEvent"); + onImageAnalyzed(imageInformation, callback); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index 2a294fef233b..62831c723e91 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -4,23 +4,30 @@ package io.flutter.plugins.camerax; +import android.content.Context; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.camera.core.ImageAnalysis; import androidx.camera.core.ImageProxy; +import androidx.core.content.ContextCompat; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary; +import io.flutter.plugins.camerax.ImageAnalysisFlutterApiImpl; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageAnalysisHostApi; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ResolutionInfo; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; -import java.util.concurrent.Executors; +// import java.util.concurrent.Executors; public class ImageAnalysisHostApiImpl implements ImageAnalysisHostApi { private InstanceManager instanceManager; private BinaryMessenger binaryMessenger; + private Context context; @VisibleForTesting CameraXProxy cameraXProxy = new CameraXProxy(); @@ -30,6 +37,10 @@ public ImageAnalysisHostApiImpl( this.instanceManager = instanceManager; } + public void setContext(Context context) { + this.context = context; + } + @Override public void create(@NonNull Long identifier, @Nullable ResolutionInfo targetResolution) { ImageAnalysis.Builder imageAnalysisBuilder = cameraXProxy.createImageAnalysisBuilder(); @@ -44,42 +55,46 @@ public void create(@NonNull Long identifier, @Nullable ResolutionInfo targetReso @Override public void setAnalyzer(@NonNull Long identifier) { + Log.v("FLUTTER", "set analyzer called"); ImageAnalysis imageAnalysis = (ImageAnalysis) Objects.requireNonNull(instanceManager.getInstance(identifier)); ImageAnalysis.Analyzer analyzer = createImageAnalysisAnalyzer(); - imageAnalysis.setAnalyzer(Executors.newSingleThreadExecutor(), analyzer); + imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(context), analyzer); } private ImageAnalysis.Analyzer createImageAnalysisAnalyzer() { return new ImageAnalysis.Analyzer() { @Override public void analyze(@NonNull ImageProxy image) { + Log.v("FLUTTER", "Analyzing images!!!!!"); ImageProxy.PlaneProxy[] planes = image.getPlanes(); List imagePlanesInformation = new ArrayList(); for(ImageProxy.PlaneProxy plane : planes) { ByteBuffer byteBuffer = plane.getBuffer(); byte[] bytes = new byte[byteBuffer.remaining()]; - buffer.get(bytes, 0, bytes.length); + byteBuffer.get(bytes, 0, bytes.length); GeneratedCameraXLibrary.ImagePlaneInformation.Builder imagePlaneInfoBuilder = new GeneratedCameraXLibrary.ImagePlaneInformation.Builder(); imagePlanesInformation.add( imagePlaneInfoBuilder - .setBytesPerRow(plane.getRowStride()) - .setBytesPerPixel(plane.getPixelStride()) + .setBytesPerRow(Long.valueOf(plane.getRowStride())) + .setBytesPerPixel(Long.valueOf(plane.getPixelStride())) .setBytes(bytes) .build()); } GeneratedCameraXLibrary.ImageInformation.Builder imageInfoBuilder = new GeneratedCameraXLibrary.ImageInformation.Builder(); - imageInfoBuilder.setWidth(image.getWidth()); - imageInfoBuilder.setHeight(image.getHeight()); - imageInfoBuilder.setFormat(image.getFormat()); - imageInfoBuilder.setPlanes(imagePlanesInformation); - // last lens aperture - // last sensor exposure time - // last sensor sensitivity + imageInfoBuilder.setWidth(Long.valueOf(image.getWidth())); + imageInfoBuilder.setHeight(Long.valueOf(image.getHeight())); + imageInfoBuilder.setFormat(Long.valueOf(image.getFormat())); + imageInfoBuilder.setImagePlanesInformation(imagePlanesInformation); + // TODO: last lens aperture + // TODO: last sensor exposure time + // TODO: last sensor sensitivity + ImageAnalysisFlutterApiImpl imageAnalysisFlutterApiImpl = new ImageAnalysisFlutterApiImpl(binaryMessenger); + imageAnalysisFlutterApiImpl.sendOnImageAnalyzedEvent(imageInfoBuilder.build(), reply -> {}); image.close(); } }; diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index c668871b7a62..c09eebcd3b26 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -637,24 +637,24 @@ class _CameraExampleHomeState extends State try { await cameraController.initialize(); - await Future.wait(>[ - // The exposure mode is currently not supported on the web. - ...!kIsWeb - ? >[ - cameraController.getMinExposureOffset().then( - (double value) => _minAvailableExposureOffset = value), - cameraController - .getMaxExposureOffset() - .then((double value) => _maxAvailableExposureOffset = value) - ] - : >[], - cameraController - .getMaxZoomLevel() - .then((double value) => _maxAvailableZoom = value), - cameraController - .getMinZoomLevel() - .then((double value) => _minAvailableZoom = value), - ]); + // await Future.wait(>[ + // // The exposure mode is currently not supported on the web. + // ...!kIsWeb + // ? >[ + // cameraController.getMinExposureOffset().then( + // (double value) => _minAvailableExposureOffset = value), + // cameraController + // .getMaxExposureOffset() + // .then((double value) => _maxAvailableExposureOffset = value) + // ] + // : >[], + // cameraController + // .getMaxZoomLevel() + // .then((double value) => _maxAvailableZoom = value), + // cameraController + // .getMinZoomLevel() + // .then((double value) => _minAvailableZoom = value), + // ]); } on CameraException catch (e) { switch (e.code) { case 'CameraAccessDenied': diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 2c3e326dd584..c7fd20d93328 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -310,16 +310,15 @@ class AndroidCameraCameraX extends CameraPlatform { /// A new streamed frame is available. /// /// Listening to this stream will start streaming, and canceling will stop. - /// Pausing will throw a [CameraException], as pausing the stream would cause + /// [?????] Pausing will throw a [CameraException], as pausing the stream would cause /// very high memory usage; to temporarily stop receiving frames, cancel, then /// listen again later. - /// - /// - // TODO(bmparr): Add options to control streaming settings (e.g., - // resolution and FPS). Stream onStreamedFrameAvailable(int cameraId, {CameraImageStreamOptions? options}) { - throw UnimplementedError('onStreamedFrameAvailable() is not implemented.'); + // options not used, cameraId not used + // TODO(camsim99): I should probably bind image analysis here actually... + // or at the very least, I need to be aware of the state of the stream. + return ImageAnalysis.onStreamedFrameAvailableStreamController.stream; } // Methods for binding UseCases to the lifecycle of the camera controlled diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index 0e9ab4254399..ee8efe4b5990 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -99,7 +99,7 @@ class ImageInformation { int width; int height; - String format; + int format; List imagePlanesInformation; Object encode() { @@ -116,7 +116,7 @@ class ImageInformation { return ImageInformation( width: pigeonMap['width']! as int, height: pigeonMap['height']! as int, - format: pigeonMap['format']! as String, + format: pigeonMap['format']! as int, imagePlanesInformation: (pigeonMap['imagePlanesInformation'] as List?)!.cast(), ); } diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index 6ed562e0e52f..ee2725ec3d48 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -2,6 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:async'; + +import 'package:camera_platform_interface/camera_platform_interface.dart' + show CameraImageData, CameraImageFormat, CameraImagePlane, ImageFormatGroup; import 'package:flutter/services.dart' show BinaryMessenger; import 'camerax_library.g.dart'; @@ -23,6 +27,10 @@ class ImageAnalysis extends UseCase { _api.createFromInstance(this, targetResolution); } + /// Stream that emits an event whenever a frame is received for image streaming. + static final StreamController onStreamedFrameAvailableStreamController = + StreamController.broadcast(); + late final ImageAnalysisHostApiImpl _api; /// Constructs a [ImageAnalysis] that is not automatically attached to a native object. @@ -101,20 +109,36 @@ class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { @override void onImageAnalyzed(ImageInformation imageInformation) { + print('HELLO?!?!?!?!?'); List imagePlanes = imageInformation.imagePlanesInformation! - .map((ImagePlaneInformation imagePlaneInformation) { + .map((ImagePlaneInformation? imagePlaneInformation) { return CameraImagePlane( - bytes: imagePlaneInformation.bytes, - bytesPerRow: imagePlaneInformation.bytesPerRow, - bytesPerPixel: imagePlaneInformatino.bytesPerPixel, + bytes: imagePlaneInformation!.bytes, + bytesPerRow: imagePlaneInformation!.bytesPerRow, + bytesPerPixel: imagePlaneInformation!.bytesPerPixel, ); - }); - return CameraImageData( - format: imageInformation.format, + }).toList(); + + CameraImageData data = CameraImageData( + format: CameraImageFormat(_imageFormatGroupFromFormatCode(imageInformation.format), raw: imageInformation.format), planes: imagePlanes, height: imageInformation.height, width: imageInformation.width, ); + + print('CAMILLE'); + + ImageAnalysis.onStreamedFrameAvailableStreamController.add(data); + } + + ImageFormatGroup _imageFormatGroupFromFormatCode(int format) { + switch (format) { + case 35: // android.graphics.ImageFormat.YUV_420_888 + return ImageFormatGroup.yuv420; + case 256: // android.graphics.ImageFormat.JPEG + return ImageFormatGroup.jpeg; + } + return ImageFormatGroup.unknown; } } diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 463fc4ecd4a4..a44390ef0c8c 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -68,7 +68,7 @@ class ImageInformation { int width; int height; - String format; + int format; List imagePlanesInformation; } From e96c2ecae4f56b9c20203a2e7fdb682d5a1de021 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 20 Mar 2023 14:11:57 -0700 Subject: [PATCH 22/62] Fix flutter api --- .../camerax/ImageAnalysisFlutterApiImpl.java | 1 - .../camerax/ImageAnalysisHostApiImpl.java | 1 - ...droid_camera_camerax_flutter_api_impls.dart | 8 ++++++++ .../lib/src/image_analysis.dart | 18 +++++++++--------- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java index 3801779d5f74..325de2a1d435 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java @@ -16,7 +16,6 @@ public ImageAnalysisFlutterApiImpl(@NonNull BinaryMessenger binaryMessenger) { } public void sendOnImageAnalyzedEvent(@NonNull ImageInformation imageInformation, Reply callback) { - Log.v("FLUTTER", "sendOnImageAnalyzedEvent"); onImageAnalyzed(imageInformation, callback); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index 62831c723e91..89e2ef798e84 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -66,7 +66,6 @@ private ImageAnalysis.Analyzer createImageAnalysisAnalyzer() { return new ImageAnalysis.Analyzer() { @Override public void analyze(@NonNull ImageProxy image) { - Log.v("FLUTTER", "Analyzing images!!!!!"); ImageProxy.PlaneProxy[] planes = image.getPlanes(); List imagePlanesInformation = new ArrayList(); diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart index 0a1b3ce3b285..ab5a92a8495c 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart @@ -6,6 +6,7 @@ import 'camera.dart'; import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.g.dart'; +import 'image_analysis.dart'; import 'java_object.dart'; import 'process_camera_provider.dart'; import 'system_services.dart'; @@ -20,6 +21,7 @@ class AndroidCameraXCameraFlutterApis { CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi, ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi, SystemServicesFlutterApiImpl? systemServicesFlutterApi, + ImageAnalysisFlutterApiImpl? imageAnalysisFlutterApiImpl, }) { this.javaObjectFlutterApi = javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); @@ -32,6 +34,8 @@ class AndroidCameraXCameraFlutterApis { this.cameraFlutterApi = cameraFlutterApi ?? CameraFlutterApiImpl(); this.systemServicesFlutterApi = systemServicesFlutterApi ?? SystemServicesFlutterApiImpl(); + this.imageAnalysisFlutterApiImpl = + imageAnalysisFlutterApiImpl ?? ImageAnalysisFlutterApiImpl(); } static bool _haveBeenSetUp = false; @@ -61,6 +65,9 @@ class AndroidCameraXCameraFlutterApis { /// Flutter Api for [SystemServices]. late final SystemServicesFlutterApiImpl systemServicesFlutterApi; + /// Flutter Api for [ImageAnalysis]. + late final ImageAnalysisFlutterApiImpl imageAnalysisFlutterApiImpl; + /// Ensures all the Flutter APIs have been setup to receive calls from native code. void ensureSetUp() { if (!_haveBeenSetUp) { @@ -70,6 +77,7 @@ class AndroidCameraXCameraFlutterApis { ProcessCameraProviderFlutterApi.setup(processCameraProviderFlutterApi); CameraFlutterApi.setup(cameraFlutterApi); SystemServicesFlutterApi.setup(systemServicesFlutterApi); + ImageAnalysisFlutterApi.setup(imageAnalysisFlutterApiImpl); _haveBeenSetUp = true; } } diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index ee2725ec3d48..b6ed618e1ee4 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -8,6 +8,7 @@ import 'package:camera_platform_interface/camera_platform_interface.dart' show CameraImageData, CameraImageFormat, CameraImagePlane, ImageFormatGroup; import 'package:flutter/services.dart' show BinaryMessenger; +import 'android_camera_camerax_flutter_api_impls.dart'; import 'camerax_library.g.dart'; import 'instance_manager.dart'; import 'java_object.dart'; @@ -25,14 +26,9 @@ class ImageAnalysis extends UseCase { _api = ImageAnalysisHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); _api.createFromInstance(this, targetResolution); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - /// Stream that emits an event whenever a frame is received for image streaming. - static final StreamController onStreamedFrameAvailableStreamController = - StreamController.broadcast(); - - late final ImageAnalysisHostApiImpl _api; - /// Constructs a [ImageAnalysis] that is not automatically attached to a native object. ImageAnalysis.detached( {BinaryMessenger? binaryMessenger, @@ -43,8 +39,15 @@ class ImageAnalysis extends UseCase { instanceManager: instanceManager) { _api = ImageAnalysisHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } + /// Stream that emits an event whenever a frame is received for image streaming. + static final StreamController onStreamedFrameAvailableStreamController = + StreamController.broadcast(); + + late final ImageAnalysisHostApiImpl _api; + /// Target resolution of the camera preview stream. final ResolutionInfo? targetResolution; @@ -109,7 +112,6 @@ class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { @override void onImageAnalyzed(ImageInformation imageInformation) { - print('HELLO?!?!?!?!?'); List imagePlanes = imageInformation.imagePlanesInformation! .map((ImagePlaneInformation? imagePlaneInformation) { @@ -127,8 +129,6 @@ class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { width: imageInformation.width, ); - print('CAMILLE'); - ImageAnalysis.onStreamedFrameAvailableStreamController.add(data); } From cc2fcbe3f164ce9fdaf6f44d796ca23f5ac169fc Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 22 Mar 2023 10:06:07 -0700 Subject: [PATCH 23/62] Binding refactor --- .../lib/src/android_camera_camerax.dart | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index c7fd20d93328..433cd8e41fbd 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -163,14 +163,10 @@ class AndroidCameraCameraX extends CameraPlatform { _getTargetResolutionForImageCapture(_resolutionPreset); imageCapture = createImageCapture(null, imageCaptureTargetResolution); - final ResolutionInfo? imageAnalysisTargetResolution = null; - imageAnalysis = ImageAnalysis(targetResolution: imageAnalysisTargetResolution); - imageAnalysis!.setAnalyzer(); - // Bind configured UseCases to ProcessCameraProvider instance & mark Preview // instance as bound but not paused. camera = await processCameraProvider! - .bindToLifecycle(cameraSelector!, [preview!, imageCapture!, imageAnalysis!]); + .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); _previewIsPaused = false; return flutterSurfaceTextureId; @@ -313,11 +309,20 @@ class AndroidCameraCameraX extends CameraPlatform { /// [?????] Pausing will throw a [CameraException], as pausing the stream would cause /// very high memory usage; to temporarily stop receiving frames, cancel, then /// listen again later. + /// + /// [cameraId] and [options] are not used. Stream onStreamedFrameAvailable(int cameraId, {CameraImageStreamOptions? options}) { - // options not used, cameraId not used - // TODO(camsim99): I should probably bind image analysis here actually... - // or at the very least, I need to be aware of the state of the stream. + assert(processCameraProvider != null); + assert(cameraSelector != null); + + // TODO(camsim99): Support resolution configuration. + final ResolutionInfo? imageAnalysisTargetResolution = null; + imageAnalysis = ImageAnalysis(targetResolution: imageAnalysisTargetResolution); + imageAnalysis!.setAnalyzer(); + + camera = await processCameraProvider!.bindToLifecycle(cameraSelector!, [imageAnalysis!]); + return ImageAnalysis.onStreamedFrameAvailableStreamController.stream; } From 1e13e533f1a071bd71b9f23534b4853b81cf5ec7 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 24 Mar 2023 13:59:54 -0700 Subject: [PATCH 24/62] Undo format changes and change to example --- .../flutter/plugins/camerax/CameraXProxy.java | 4 +- .../camerax/GeneratedCameraXLibrary.java | 1504 ++++++++++------- .../camerax/ImageAnalysisFlutterApiImpl.java | 4 +- .../camerax/ImageAnalysisHostApiImpl.java | 26 +- .../camerax/ImageCaptureHostApiImpl.java | 1 - .../example/lib/main.dart | 36 +- .../lib/src/android_camera_camerax.dart | 8 +- .../lib/src/camerax_library.g.dart | 413 +++-- .../lib/src/image_analysis.dart | 21 +- .../test/test_camerax_library.g.dart | 346 ++-- 10 files changed, 1463 insertions(+), 900 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java index 6893f0f2819d..cfaf08a62eac 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java @@ -9,7 +9,6 @@ import android.util.Size; import android.view.Surface; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.camera.core.CameraSelector; import androidx.camera.core.ImageAnalysis; import androidx.camera.core.ImageCapture; @@ -72,7 +71,6 @@ public ImageAnalysis.Builder createImageAnalysisBuilder() { } public static Size sizeFromResolution(@NonNull ResolutionInfo resolutionInfo) { - return new Size( - resolutionInfo.getWidth().intValue(), resolutionInfo.getHeight().intValue()); + return new Size(resolutionInfo.getWidth().intValue(), resolutionInfo.getHeight().intValue()); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index ff7a7ef4ccac..b0edf3aa605c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -15,11 +15,11 @@ import io.flutter.plugin.common.StandardMessageCodec; import java.io.ByteArrayOutputStream; import java.nio.ByteBuffer; -import java.util.Arrays; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.HashMap; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) @@ -28,7 +28,11 @@ public class GeneratedCameraXLibrary { /** Generated class from Pigeon that represents data sent in messages. */ public static class ResolutionInfo { private @NonNull Long width; - public @NonNull Long getWidth() { return width; } + + public @NonNull Long getWidth() { + return width; + } + public void setWidth(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"width\" is null."); @@ -37,7 +41,11 @@ public void setWidth(@NonNull Long setterArg) { } private @NonNull Long height; - public @NonNull Long getHeight() { return height; } + + public @NonNull Long getHeight() { + return height; + } + public void setHeight(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"height\" is null."); @@ -47,17 +55,22 @@ public void setHeight(@NonNull Long setterArg) { /** Constructor is private to enforce null safety; use Builder. */ private ResolutionInfo() {} + public static final class Builder { private @Nullable Long width; + public @NonNull Builder setWidth(@NonNull Long setterArg) { this.width = setterArg; return this; } + private @Nullable Long height; + public @NonNull Builder setHeight(@NonNull Long setterArg) { this.height = setterArg; return this; } + public @NonNull ResolutionInfo build() { ResolutionInfo pigeonReturn = new ResolutionInfo(); pigeonReturn.setWidth(width); @@ -65,18 +78,25 @@ public static final class Builder { return pigeonReturn; } } - @NonNull Map toMap() { + + @NonNull + Map toMap() { Map toMapResult = new HashMap<>(); toMapResult.put("width", width); toMapResult.put("height", height); return toMapResult; } + static @NonNull ResolutionInfo fromMap(@NonNull Map map) { ResolutionInfo pigeonResult = new ResolutionInfo(); Object width = map.get("width"); - pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer)width : (Long)width)); + pigeonResult.setWidth( + (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); Object height = map.get("height"); - pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer)height : (Long)height)); + pigeonResult.setHeight( + (height == null) + ? null + : ((height instanceof Integer) ? (Integer) height : (Long) height)); return pigeonResult; } } @@ -84,7 +104,11 @@ public static final class Builder { /** Generated class from Pigeon that represents data sent in messages. */ public static class CameraPermissionsErrorData { private @NonNull String errorCode; - public @NonNull String getErrorCode() { return errorCode; } + + public @NonNull String getErrorCode() { + return errorCode; + } + public void setErrorCode(@NonNull String setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"errorCode\" is null."); @@ -93,7 +117,11 @@ public void setErrorCode(@NonNull String setterArg) { } private @NonNull String description; - public @NonNull String getDescription() { return description; } + + public @NonNull String getDescription() { + return description; + } + public void setDescription(@NonNull String setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"description\" is null."); @@ -103,17 +131,22 @@ public void setDescription(@NonNull String setterArg) { /** Constructor is private to enforce null safety; use Builder. */ private CameraPermissionsErrorData() {} + public static final class Builder { private @Nullable String errorCode; + public @NonNull Builder setErrorCode(@NonNull String setterArg) { this.errorCode = setterArg; return this; } + private @Nullable String description; + public @NonNull Builder setDescription(@NonNull String setterArg) { this.description = setterArg; return this; } + public @NonNull CameraPermissionsErrorData build() { CameraPermissionsErrorData pigeonReturn = new CameraPermissionsErrorData(); pigeonReturn.setErrorCode(errorCode); @@ -121,18 +154,21 @@ public static final class Builder { return pigeonReturn; } } - @NonNull Map toMap() { + + @NonNull + Map toMap() { Map toMapResult = new HashMap<>(); toMapResult.put("errorCode", errorCode); toMapResult.put("description", description); return toMapResult; } + static @NonNull CameraPermissionsErrorData fromMap(@NonNull Map map) { CameraPermissionsErrorData pigeonResult = new CameraPermissionsErrorData(); Object errorCode = map.get("errorCode"); - pigeonResult.setErrorCode((String)errorCode); + pigeonResult.setErrorCode((String) errorCode); Object description = map.get("description"); - pigeonResult.setDescription((String)description); + pigeonResult.setDescription((String) description); return pigeonResult; } } @@ -140,7 +176,11 @@ public static final class Builder { /** Generated class from Pigeon that represents data sent in messages. */ public static class ImagePlaneInformation { private @NonNull Long bytesPerRow; - public @NonNull Long getBytesPerRow() { return bytesPerRow; } + + public @NonNull Long getBytesPerRow() { + return bytesPerRow; + } + public void setBytesPerRow(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"bytesPerRow\" is null."); @@ -149,7 +189,11 @@ public void setBytesPerRow(@NonNull Long setterArg) { } private @NonNull Long bytesPerPixel; - public @NonNull Long getBytesPerPixel() { return bytesPerPixel; } + + public @NonNull Long getBytesPerPixel() { + return bytesPerPixel; + } + public void setBytesPerPixel(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"bytesPerPixel\" is null."); @@ -158,7 +202,11 @@ public void setBytesPerPixel(@NonNull Long setterArg) { } private @NonNull byte[] bytes; - public @NonNull byte[] getBytes() { return bytes; } + + public @NonNull byte[] getBytes() { + return bytes; + } + public void setBytes(@NonNull byte[] setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"bytes\" is null."); @@ -168,22 +216,29 @@ public void setBytes(@NonNull byte[] setterArg) { /** Constructor is private to enforce null safety; use Builder. */ private ImagePlaneInformation() {} + public static final class Builder { private @Nullable Long bytesPerRow; + public @NonNull Builder setBytesPerRow(@NonNull Long setterArg) { this.bytesPerRow = setterArg; return this; } + private @Nullable Long bytesPerPixel; + public @NonNull Builder setBytesPerPixel(@NonNull Long setterArg) { this.bytesPerPixel = setterArg; return this; } + private @Nullable byte[] bytes; + public @NonNull Builder setBytes(@NonNull byte[] setterArg) { this.bytes = setterArg; return this; } + public @NonNull ImagePlaneInformation build() { ImagePlaneInformation pigeonReturn = new ImagePlaneInformation(); pigeonReturn.setBytesPerRow(bytesPerRow); @@ -192,21 +247,32 @@ public static final class Builder { return pigeonReturn; } } - @NonNull Map toMap() { + + @NonNull + Map toMap() { Map toMapResult = new HashMap<>(); toMapResult.put("bytesPerRow", bytesPerRow); toMapResult.put("bytesPerPixel", bytesPerPixel); toMapResult.put("bytes", bytes); return toMapResult; } + static @NonNull ImagePlaneInformation fromMap(@NonNull Map map) { ImagePlaneInformation pigeonResult = new ImagePlaneInformation(); Object bytesPerRow = map.get("bytesPerRow"); - pigeonResult.setBytesPerRow((bytesPerRow == null) ? null : ((bytesPerRow instanceof Integer) ? (Integer)bytesPerRow : (Long)bytesPerRow)); + pigeonResult.setBytesPerRow( + (bytesPerRow == null) + ? null + : ((bytesPerRow instanceof Integer) ? (Integer) bytesPerRow : (Long) bytesPerRow)); Object bytesPerPixel = map.get("bytesPerPixel"); - pigeonResult.setBytesPerPixel((bytesPerPixel == null) ? null : ((bytesPerPixel instanceof Integer) ? (Integer)bytesPerPixel : (Long)bytesPerPixel)); + pigeonResult.setBytesPerPixel( + (bytesPerPixel == null) + ? null + : ((bytesPerPixel instanceof Integer) + ? (Integer) bytesPerPixel + : (Long) bytesPerPixel)); Object bytes = map.get("bytes"); - pigeonResult.setBytes((byte[])bytes); + pigeonResult.setBytes((byte[]) bytes); return pigeonResult; } } @@ -214,7 +280,11 @@ public static final class Builder { /** Generated class from Pigeon that represents data sent in messages. */ public static class ImageInformation { private @NonNull Long width; - public @NonNull Long getWidth() { return width; } + + public @NonNull Long getWidth() { + return width; + } + public void setWidth(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"width\" is null."); @@ -223,7 +293,11 @@ public void setWidth(@NonNull Long setterArg) { } private @NonNull Long height; - public @NonNull Long getHeight() { return height; } + + public @NonNull Long getHeight() { + return height; + } + public void setHeight(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"height\" is null."); @@ -232,7 +306,11 @@ public void setHeight(@NonNull Long setterArg) { } private @NonNull Long format; - public @NonNull Long getFormat() { return format; } + + public @NonNull Long getFormat() { + return format; + } + public void setFormat(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"format\" is null."); @@ -241,7 +319,11 @@ public void setFormat(@NonNull Long setterArg) { } private @NonNull List imagePlanesInformation; - public @NonNull List getImagePlanesInformation() { return imagePlanesInformation; } + + public @NonNull List getImagePlanesInformation() { + return imagePlanesInformation; + } + public void setImagePlanesInformation(@NonNull List setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"imagePlanesInformation\" is null."); @@ -251,27 +333,37 @@ public void setImagePlanesInformation(@NonNull List sette /** Constructor is private to enforce null safety; use Builder. */ private ImageInformation() {} + public static final class Builder { private @Nullable Long width; + public @NonNull Builder setWidth(@NonNull Long setterArg) { this.width = setterArg; return this; } + private @Nullable Long height; + public @NonNull Builder setHeight(@NonNull Long setterArg) { this.height = setterArg; return this; } + private @Nullable Long format; + public @NonNull Builder setFormat(@NonNull Long setterArg) { this.format = setterArg; return this; } + private @Nullable List imagePlanesInformation; - public @NonNull Builder setImagePlanesInformation(@NonNull List setterArg) { + + public @NonNull Builder setImagePlanesInformation( + @NonNull List setterArg) { this.imagePlanesInformation = setterArg; return this; } + public @NonNull ImageInformation build() { ImageInformation pigeonReturn = new ImageInformation(); pigeonReturn.setWidth(width); @@ -281,7 +373,9 @@ public static final class Builder { return pigeonReturn; } } - @NonNull Map toMap() { + + @NonNull + Map toMap() { Map toMapResult = new HashMap<>(); toMapResult.put("width", width); toMapResult.put("height", height); @@ -289,30 +383,41 @@ public static final class Builder { toMapResult.put("imagePlanesInformation", imagePlanesInformation); return toMapResult; } + static @NonNull ImageInformation fromMap(@NonNull Map map) { ImageInformation pigeonResult = new ImageInformation(); Object width = map.get("width"); - pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer)width : (Long)width)); + pigeonResult.setWidth( + (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); Object height = map.get("height"); - pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer)height : (Long)height)); + pigeonResult.setHeight( + (height == null) + ? null + : ((height instanceof Integer) ? (Integer) height : (Long) height)); Object format = map.get("format"); - pigeonResult.setFormat((format == null) ? null : ((format instanceof Integer) ? (Integer)format : (Long)format)); + pigeonResult.setFormat( + (format == null) + ? null + : ((format instanceof Integer) ? (Integer) format : (Long) format)); Object imagePlanesInformation = map.get("imagePlanesInformation"); - pigeonResult.setImagePlanesInformation((List)imagePlanesInformation); + pigeonResult.setImagePlanesInformation((List) imagePlanesInformation); return pigeonResult; } } public interface Result { void success(T result); + void error(Throwable error); } + private static class InstanceManagerHostApiCodec extends StandardMessageCodec { public static final InstanceManagerHostApiCodec INSTANCE = new InstanceManagerHostApiCodec(); + private InstanceManagerHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface InstanceManagerHostApi { void clear(); @@ -321,35 +426,41 @@ static MessageCodec getCodec() { return InstanceManagerHostApiCodec.INSTANCE; } - /** Sets up an instance of `InstanceManagerHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `InstanceManagerHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, InstanceManagerHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.InstanceManagerHostApi.clear", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.InstanceManagerHostApi.clear", getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - api.clear(); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + api.clear(); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } + private static class JavaObjectHostApiCodec extends StandardMessageCodec { public static final JavaObjectHostApiCodec INSTANCE = new JavaObjectHostApiCodec(); + private JavaObjectHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface JavaObjectHostApi { void dispose(@NonNull Long identifier); @@ -358,238 +469,305 @@ static MessageCodec getCodec() { return JavaObjectHostApiCodec.INSTANCE; } - /** Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, JavaObjectHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.JavaObjectHostApi.dispose", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.JavaObjectHostApi.dispose", getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - api.dispose((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + api.dispose((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } + private static class JavaObjectFlutterApiCodec extends StandardMessageCodec { public static final JavaObjectFlutterApiCodec INSTANCE = new JavaObjectFlutterApiCodec(); + private JavaObjectFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class JavaObjectFlutterApi { private final BinaryMessenger binaryMessenger; - public JavaObjectFlutterApi(BinaryMessenger argBinaryMessenger){ + + public JavaObjectFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } + public interface Reply { void reply(T reply); } + static MessageCodec getCodec() { return JavaObjectFlutterApiCodec.INSTANCE; } public void dispose(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.JavaObjectFlutterApi.dispose", getCodec()); - channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.JavaObjectFlutterApi.dispose", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg)), + channelReply -> { + callback.reply(null); + }); } } + private static class CameraInfoHostApiCodec extends StandardMessageCodec { public static final CameraInfoHostApiCodec INSTANCE = new CameraInfoHostApiCodec(); + private CameraInfoHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraInfoHostApi { - @NonNull Long getSensorRotationDegrees(@NonNull Long identifier); + @NonNull + Long getSensorRotationDegrees(@NonNull Long identifier); /** The codec used by CameraInfoHostApi. */ static MessageCodec getCodec() { return CameraInfoHostApiCodec.INSTANCE; } - /** Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", + getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Long output = api.getSensorRotationDegrees((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Long output = + api.getSensorRotationDegrees( + (identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } + private static class CameraInfoFlutterApiCodec extends StandardMessageCodec { public static final CameraInfoFlutterApiCodec INSTANCE = new CameraInfoFlutterApiCodec(); + private CameraInfoFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class CameraInfoFlutterApi { private final BinaryMessenger binaryMessenger; - public CameraInfoFlutterApi(BinaryMessenger argBinaryMessenger){ + + public CameraInfoFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } + public interface Reply { void reply(T reply); } + static MessageCodec getCodec() { return CameraInfoFlutterApiCodec.INSTANCE; } public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraInfoFlutterApi.create", getCodec()); - channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraInfoFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg)), + channelReply -> { + callback.reply(null); + }); } } + private static class CameraSelectorHostApiCodec extends StandardMessageCodec { public static final CameraSelectorHostApiCodec INSTANCE = new CameraSelectorHostApiCodec(); + private CameraSelectorHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraSelectorHostApi { void create(@NonNull Long identifier, @Nullable Long lensFacing); - @NonNull List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); + + @NonNull + List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); /** The codec used by CameraSelectorHostApi. */ static MessageCodec getCodec() { return CameraSelectorHostApiCodec.INSTANCE; } - /** Sets up an instance of `CameraSelectorHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `CameraSelectorHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.create", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.create", getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number lensFacingArg = (Number)args.get(1); - api.create((identifierArg == null) ? null : identifierArg.longValue(), (lensFacingArg == null) ? null : lensFacingArg.longValue()); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number lensFacingArg = (Number) args.get(1); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (lensFacingArg == null) ? null : lensFacingArg.longValue()); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.filter", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.filter", getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - List cameraInfoIdsArg = (List)args.get(1); - if (cameraInfoIdsArg == null) { - throw new NullPointerException("cameraInfoIdsArg unexpectedly null."); - } - List output = api.filter((identifierArg == null) ? null : identifierArg.longValue(), cameraInfoIdsArg); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + List cameraInfoIdsArg = (List) args.get(1); + if (cameraInfoIdsArg == null) { + throw new NullPointerException("cameraInfoIdsArg unexpectedly null."); + } + List output = + api.filter( + (identifierArg == null) ? null : identifierArg.longValue(), + cameraInfoIdsArg); + wrapped.put("result", output); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } + private static class CameraSelectorFlutterApiCodec extends StandardMessageCodec { - public static final CameraSelectorFlutterApiCodec INSTANCE = new CameraSelectorFlutterApiCodec(); + public static final CameraSelectorFlutterApiCodec INSTANCE = + new CameraSelectorFlutterApiCodec(); + private CameraSelectorFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class CameraSelectorFlutterApi { private final BinaryMessenger binaryMessenger; - public CameraSelectorFlutterApi(BinaryMessenger argBinaryMessenger){ + + public CameraSelectorFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } + public interface Reply { void reply(T reply); } + static MessageCodec getCodec() { return CameraSelectorFlutterApiCodec.INSTANCE; } - public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { + public void create( + @NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); - channel.send(new ArrayList(Arrays.asList(identifierArg, lensFacingArg)), channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg, lensFacingArg)), + channelReply -> { + callback.reply(null); + }); } } + private static class ProcessCameraProviderHostApiCodec extends StandardMessageCodec { - public static final ProcessCameraProviderHostApiCodec INSTANCE = new ProcessCameraProviderHostApiCodec(); + public static final ProcessCameraProviderHostApiCodec INSTANCE = + new ProcessCameraProviderHostApiCodec(); + private ProcessCameraProviderHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ProcessCameraProviderHostApi { void getInstance(Result result); - @NonNull List getAvailableCameraInfos(@NonNull Long identifier); - @NonNull Long bindToLifecycle(@NonNull Long identifier, @NonNull Long cameraSelectorIdentifier, @NonNull List useCaseIds); - @NonNull Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); + + @NonNull + List getAvailableCameraInfos(@NonNull Long identifier); + + @NonNull + Long bindToLifecycle( + @NonNull Long identifier, + @NonNull Long cameraSelectorIdentifier, + @NonNull List useCaseIds); + + @NonNull + Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); + void unbind(@NonNull Long identifier, @NonNull List useCaseIds); + void unbindAll(@NonNull Long identifier); /** The codec used by ProcessCameraProviderHostApi. */ @@ -597,257 +775,318 @@ static MessageCodec getCodec() { return ProcessCameraProviderHostApiCodec.INSTANCE; } - /** Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, ProcessCameraProviderHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", + getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - Result resultCallback = new Result() { - public void success(Long result) { - wrapped.put("result", result); - reply.reply(wrapped); - } - public void error(Throwable error) { - wrapped.put("error", wrapError(error)); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + Result resultCallback = + new Result() { + public void success(Long result) { + wrapped.put("result", result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + wrapped.put("error", wrapError(error)); + reply.reply(wrapped); + } + }; + + api.getInstance(resultCallback); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); reply.reply(wrapped); } - }; - - api.getInstance(resultCallback); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - reply.reply(wrapped); - } - }); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", + getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - List output = api.getAvailableCameraInfos((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + List output = + api.getAvailableCameraInfos( + (identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", + getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number cameraSelectorIdentifierArg = (Number)args.get(1); - if (cameraSelectorIdentifierArg == null) { - throw new NullPointerException("cameraSelectorIdentifierArg unexpectedly null."); - } - List useCaseIdsArg = (List)args.get(2); - if (useCaseIdsArg == null) { - throw new NullPointerException("useCaseIdsArg unexpectedly null."); - } - Long output = api.bindToLifecycle((identifierArg == null) ? null : identifierArg.longValue(), (cameraSelectorIdentifierArg == null) ? null : cameraSelectorIdentifierArg.longValue(), useCaseIdsArg); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number cameraSelectorIdentifierArg = (Number) args.get(1); + if (cameraSelectorIdentifierArg == null) { + throw new NullPointerException( + "cameraSelectorIdentifierArg unexpectedly null."); + } + List useCaseIdsArg = (List) args.get(2); + if (useCaseIdsArg == null) { + throw new NullPointerException("useCaseIdsArg unexpectedly null."); + } + Long output = + api.bindToLifecycle( + (identifierArg == null) ? null : identifierArg.longValue(), + (cameraSelectorIdentifierArg == null) + ? null + : cameraSelectorIdentifierArg.longValue(), + useCaseIdsArg); + wrapped.put("result", output); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", + getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number useCaseIdentifierArg = (Number)args.get(1); - if (useCaseIdentifierArg == null) { - throw new NullPointerException("useCaseIdentifierArg unexpectedly null."); - } - Boolean output = api.isBound((identifierArg == null) ? null : identifierArg.longValue(), (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number useCaseIdentifierArg = (Number) args.get(1); + if (useCaseIdentifierArg == null) { + throw new NullPointerException("useCaseIdentifierArg unexpectedly null."); + } + Boolean output = + api.isBound( + (identifierArg == null) ? null : identifierArg.longValue(), + (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); + wrapped.put("result", output); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", + getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - List useCaseIdsArg = (List)args.get(1); - if (useCaseIdsArg == null) { - throw new NullPointerException("useCaseIdsArg unexpectedly null."); - } - api.unbind((identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + List useCaseIdsArg = (List) args.get(1); + if (useCaseIdsArg == null) { + throw new NullPointerException("useCaseIdsArg unexpectedly null."); + } + api.unbind( + (identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", + getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - api.unbindAll((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + api.unbindAll((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } + private static class ProcessCameraProviderFlutterApiCodec extends StandardMessageCodec { - public static final ProcessCameraProviderFlutterApiCodec INSTANCE = new ProcessCameraProviderFlutterApiCodec(); + public static final ProcessCameraProviderFlutterApiCodec INSTANCE = + new ProcessCameraProviderFlutterApiCodec(); + private ProcessCameraProviderFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class ProcessCameraProviderFlutterApi { private final BinaryMessenger binaryMessenger; - public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger){ + + public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } + public interface Reply { void reply(T reply); } + static MessageCodec getCodec() { return ProcessCameraProviderFlutterApiCodec.INSTANCE; } public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", getCodec()); - channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", + getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg)), + channelReply -> { + callback.reply(null); + }); } } + private static class CameraFlutterApiCodec extends StandardMessageCodec { public static final CameraFlutterApiCodec INSTANCE = new CameraFlutterApiCodec(); + private CameraFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class CameraFlutterApi { private final BinaryMessenger binaryMessenger; - public CameraFlutterApi(BinaryMessenger argBinaryMessenger){ + + public CameraFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } + public interface Reply { void reply(T reply); } + static MessageCodec getCodec() { return CameraFlutterApiCodec.INSTANCE; } public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraFlutterApi.create", getCodec()); - channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg)), + channelReply -> { + callback.reply(null); + }); } } + private static class SystemServicesHostApiCodec extends StandardMessageCodec { public static final SystemServicesHostApiCodec INSTANCE = new SystemServicesHostApiCodec(); + private SystemServicesHostApiCodec() {} + @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte)128: + case (byte) 128: return CameraPermissionsErrorData.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); - } } + @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof CameraPermissionsErrorData) { stream.write(128); writeValue(stream, ((CameraPermissionsErrorData) value).toMap()); - } else -{ + } else { super.writeValue(stream, value); } } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface SystemServicesHostApi { - void requestCameraPermissions(@NonNull Boolean enableAudio, Result result); - void startListeningForDeviceOrientationChange(@NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); + void requestCameraPermissions( + @NonNull Boolean enableAudio, Result result); + + void startListeningForDeviceOrientationChange( + @NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); + void stopListeningForDeviceOrientationChange(); /** The codec used by SystemServicesHostApi. */ @@ -855,163 +1094,205 @@ static MessageCodec getCodec() { return SystemServicesHostApiCodec.INSTANCE; } - /** Sets up an instance of `SystemServicesHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `SystemServicesHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, SystemServicesHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", + getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Boolean enableAudioArg = (Boolean)args.get(0); - if (enableAudioArg == null) { - throw new NullPointerException("enableAudioArg unexpectedly null."); - } - Result resultCallback = new Result() { - public void success(CameraPermissionsErrorData result) { - wrapped.put("result", result); - reply.reply(wrapped); - } - public void error(Throwable error) { - wrapped.put("error", wrapError(error)); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Boolean enableAudioArg = (Boolean) args.get(0); + if (enableAudioArg == null) { + throw new NullPointerException("enableAudioArg unexpectedly null."); + } + Result resultCallback = + new Result() { + public void success(CameraPermissionsErrorData result) { + wrapped.put("result", result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + wrapped.put("error", wrapError(error)); + reply.reply(wrapped); + } + }; + + api.requestCameraPermissions(enableAudioArg, resultCallback); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); reply.reply(wrapped); } - }; - - api.requestCameraPermissions(enableAudioArg, resultCallback); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - reply.reply(wrapped); - } - }); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", + getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Boolean isFrontFacingArg = (Boolean)args.get(0); - if (isFrontFacingArg == null) { - throw new NullPointerException("isFrontFacingArg unexpectedly null."); - } - Number sensorOrientationArg = (Number)args.get(1); - if (sensorOrientationArg == null) { - throw new NullPointerException("sensorOrientationArg unexpectedly null."); - } - api.startListeningForDeviceOrientationChange(isFrontFacingArg, (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Boolean isFrontFacingArg = (Boolean) args.get(0); + if (isFrontFacingArg == null) { + throw new NullPointerException("isFrontFacingArg unexpectedly null."); + } + Number sensorOrientationArg = (Number) args.get(1); + if (sensorOrientationArg == null) { + throw new NullPointerException("sensorOrientationArg unexpectedly null."); + } + api.startListeningForDeviceOrientationChange( + isFrontFacingArg, + (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", + getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - api.stopListeningForDeviceOrientationChange(); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + api.stopListeningForDeviceOrientationChange(); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } + private static class SystemServicesFlutterApiCodec extends StandardMessageCodec { - public static final SystemServicesFlutterApiCodec INSTANCE = new SystemServicesFlutterApiCodec(); + public static final SystemServicesFlutterApiCodec INSTANCE = + new SystemServicesFlutterApiCodec(); + private SystemServicesFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class SystemServicesFlutterApi { private final BinaryMessenger binaryMessenger; - public SystemServicesFlutterApi(BinaryMessenger argBinaryMessenger){ + + public SystemServicesFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } + public interface Reply { void reply(T reply); } + static MessageCodec getCodec() { return SystemServicesFlutterApiCodec.INSTANCE; } public void onDeviceOrientationChanged(@NonNull String orientationArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", getCodec()); - channel.send(new ArrayList(Arrays.asList(orientationArg)), channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", + getCodec()); + channel.send( + new ArrayList(Arrays.asList(orientationArg)), + channelReply -> { + callback.reply(null); + }); } + public void onCameraError(@NonNull String errorDescriptionArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", getCodec()); - channel.send(new ArrayList(Arrays.asList(errorDescriptionArg)), channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", + getCodec()); + channel.send( + new ArrayList(Arrays.asList(errorDescriptionArg)), + channelReply -> { + callback.reply(null); + }); } } + private static class PreviewHostApiCodec extends StandardMessageCodec { public static final PreviewHostApiCodec INSTANCE = new PreviewHostApiCodec(); + private PreviewHostApiCodec() {} + @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte)128: + case (byte) 128: return ResolutionInfo.fromMap((Map) readValue(buffer)); - - case (byte)129: + + case (byte) 129: return ResolutionInfo.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); - } } + @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof ResolutionInfo) { stream.write(128); writeValue(stream, ((ResolutionInfo) value).toMap()); - } else - if (value instanceof ResolutionInfo) { + } else if (value instanceof ResolutionInfo) { stream.write(129); writeValue(stream, ((ResolutionInfo) value).toMap()); - } else -{ + } else { super.writeValue(stream, value); } } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface PreviewHostApi { - void create(@NonNull Long identifier, @Nullable Long rotation, @Nullable ResolutionInfo targetResolution); - @NonNull Long setSurfaceProvider(@NonNull Long identifier); + void create( + @NonNull Long identifier, + @Nullable Long rotation, + @Nullable ResolutionInfo targetResolution); + + @NonNull + Long setSurfaceProvider(@NonNull Long identifier); + void releaseFlutterSurfaceTexture(); - @NonNull ResolutionInfo getResolutionInfo(@NonNull Long identifier); + + @NonNull + ResolutionInfo getResolutionInfo(@NonNull Long identifier); /** The codec used by PreviewHostApi. */ static MessageCodec getCodec() { @@ -1022,129 +1303,151 @@ static MessageCodec getCodec() { static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.create", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.create", getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number rotationArg = (Number)args.get(1); - ResolutionInfo targetResolutionArg = (ResolutionInfo)args.get(2); - api.create((identifierArg == null) ? null : identifierArg.longValue(), (rotationArg == null) ? null : rotationArg.longValue(), targetResolutionArg); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number rotationArg = (Number) args.get(1); + ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (rotationArg == null) ? null : rotationArg.longValue(), + targetResolutionArg); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", + getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Long output = api.setSurfaceProvider((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Long output = + api.setSurfaceProvider( + (identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", + getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - api.releaseFlutterSurfaceTexture(); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + api.releaseFlutterSurfaceTexture(); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.getResolutionInfo", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.getResolutionInfo", getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - ResolutionInfo output = api.getResolutionInfo((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + ResolutionInfo output = + api.getResolutionInfo( + (identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } + private static class ImageCaptureHostApiCodec extends StandardMessageCodec { public static final ImageCaptureHostApiCodec INSTANCE = new ImageCaptureHostApiCodec(); + private ImageCaptureHostApiCodec() {} + @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte)128: + case (byte) 128: return ResolutionInfo.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); - } } + @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof ResolutionInfo) { stream.write(128); writeValue(stream, ((ResolutionInfo) value).toMap()); - } else -{ + } else { super.writeValue(stream, value); } } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ImageCaptureHostApi { - void create(@NonNull Long identifier, @Nullable Long flashMode, @Nullable ResolutionInfo targetResolution); + void create( + @NonNull Long identifier, + @Nullable Long flashMode, + @Nullable ResolutionInfo targetResolution); + void setFlashMode(@NonNull Long identifier, @NonNull Long flashMode); + void takePicture(@NonNull Long identifier, Result result); /** The codec used by ImageCaptureHostApi. */ @@ -1152,127 +1455,144 @@ static MessageCodec getCodec() { return ImageCaptureHostApiCodec.INSTANCE; } - /** Sets up an instance of `ImageCaptureHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ImageCaptureHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.create", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.create", getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number flashModeArg = (Number)args.get(1); - ResolutionInfo targetResolutionArg = (ResolutionInfo)args.get(2); - api.create((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue(), targetResolutionArg); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number flashModeArg = (Number) args.get(1); + ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (flashModeArg == null) ? null : flashModeArg.longValue(), + targetResolutionArg); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode", getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number flashModeArg = (Number)args.get(1); - if (flashModeArg == null) { - throw new NullPointerException("flashModeArg unexpectedly null."); - } - api.setFlashMode((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue()); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number flashModeArg = (Number) args.get(1); + if (flashModeArg == null) { + throw new NullPointerException("flashModeArg unexpectedly null."); + } + api.setFlashMode( + (identifierArg == null) ? null : identifierArg.longValue(), + (flashModeArg == null) ? null : flashModeArg.longValue()); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.takePicture", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.takePicture", getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Result resultCallback = new Result() { - public void success(String result) { - wrapped.put("result", result); - reply.reply(wrapped); - } - public void error(Throwable error) { - wrapped.put("error", wrapError(error)); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.put("result", result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + wrapped.put("error", wrapError(error)); + reply.reply(wrapped); + } + }; + + api.takePicture( + (identifierArg == null) ? null : identifierArg.longValue(), resultCallback); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); reply.reply(wrapped); } - }; - - api.takePicture((identifierArg == null) ? null : identifierArg.longValue(), resultCallback); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - reply.reply(wrapped); - } - }); + }); } else { channel.setMessageHandler(null); } } } } + private static class ImageAnalysisHostApiCodec extends StandardMessageCodec { public static final ImageAnalysisHostApiCodec INSTANCE = new ImageAnalysisHostApiCodec(); + private ImageAnalysisHostApiCodec() {} + @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte)128: + case (byte) 128: return ResolutionInfo.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); - } } + @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof ResolutionInfo) { stream.write(128); writeValue(stream, ((ResolutionInfo) value).toMap()); - } else -{ + } else { super.writeValue(stream, value); } } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ImageAnalysisHostApi { void create(@NonNull Long identifier, @Nullable ResolutionInfo targetResolution); + void setAnalyzer(@NonNull Long identifier); /** The codec used by ImageAnalysisHostApi. */ @@ -1280,118 +1600,138 @@ static MessageCodec getCodec() { return ImageAnalysisHostApiCodec.INSTANCE; } - /** Sets up an instance of `ImageAnalysisHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ImageAnalysisHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.create", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.create", getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - ResolutionInfo targetResolutionArg = (ResolutionInfo)args.get(1); - api.create((identifierArg == null) ? null : identifierArg.longValue(), targetResolutionArg); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(1); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + targetResolutionArg); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer", getCodec()); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - Number identifierArg = (Number)args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", null); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } + private static class ImageAnalysisFlutterApiCodec extends StandardMessageCodec { public static final ImageAnalysisFlutterApiCodec INSTANCE = new ImageAnalysisFlutterApiCodec(); + private ImageAnalysisFlutterApiCodec() {} + @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte)128: + case (byte) 128: return ImageInformation.fromMap((Map) readValue(buffer)); - - case (byte)129: + + case (byte) 129: return ImagePlaneInformation.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); - } } + @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof ImageInformation) { stream.write(128); writeValue(stream, ((ImageInformation) value).toMap()); - } else - if (value instanceof ImagePlaneInformation) { + } else if (value instanceof ImagePlaneInformation) { stream.write(129); writeValue(stream, ((ImagePlaneInformation) value).toMap()); - } else -{ + } else { super.writeValue(stream, value); } } } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class ImageAnalysisFlutterApi { private final BinaryMessenger binaryMessenger; - public ImageAnalysisFlutterApi(BinaryMessenger argBinaryMessenger){ + + public ImageAnalysisFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } + public interface Reply { void reply(T reply); } + static MessageCodec getCodec() { return ImageAnalysisFlutterApiCodec.INSTANCE; } - public void onImageAnalyzed(@NonNull ImageInformation imageInformationArg, Reply callback) { + public void onImageAnalyzed( + @NonNull ImageInformation imageInformationArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed", getCodec()); - channel.send(new ArrayList(Arrays.asList(imageInformationArg)), channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed", + getCodec()); + channel.send( + new ArrayList(Arrays.asList(imageInformationArg)), + channelReply -> { + callback.reply(null); + }); } } + private static Map wrapError(Throwable exception) { Map errorMap = new HashMap<>(); errorMap.put("message", exception.toString()); errorMap.put("code", exception.getClass().getSimpleName()); - errorMap.put("details", "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + errorMap.put( + "details", + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); return errorMap; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java index 325de2a1d435..b37c043a6e3f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java @@ -4,7 +4,6 @@ package io.flutter.plugins.camerax; -import android.util.Log; import androidx.annotation.NonNull; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageAnalysisFlutterApi; @@ -15,7 +14,8 @@ public ImageAnalysisFlutterApiImpl(@NonNull BinaryMessenger binaryMessenger) { super(binaryMessenger); } - public void sendOnImageAnalyzedEvent(@NonNull ImageInformation imageInformation, Reply callback) { + public void sendOnImageAnalyzedEvent( + @NonNull ImageInformation imageInformation, Reply callback) { onImageAnalyzed(imageInformation, callback); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index 89e2ef798e84..e761267e0a8f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -13,8 +13,6 @@ import androidx.camera.core.ImageProxy; import androidx.core.content.ContextCompat; import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary; -import io.flutter.plugins.camerax.ImageAnalysisFlutterApiImpl; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageAnalysisHostApi; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ResolutionInfo; import java.nio.ByteBuffer; @@ -68,22 +66,25 @@ private ImageAnalysis.Analyzer createImageAnalysisAnalyzer() { public void analyze(@NonNull ImageProxy image) { ImageProxy.PlaneProxy[] planes = image.getPlanes(); - List imagePlanesInformation = new ArrayList(); - for(ImageProxy.PlaneProxy plane : planes) { + List imagePlanesInformation = + new ArrayList(); + for (ImageProxy.PlaneProxy plane : planes) { ByteBuffer byteBuffer = plane.getBuffer(); byte[] bytes = new byte[byteBuffer.remaining()]; byteBuffer.get(bytes, 0, bytes.length); - GeneratedCameraXLibrary.ImagePlaneInformation.Builder imagePlaneInfoBuilder = new GeneratedCameraXLibrary.ImagePlaneInformation.Builder(); + GeneratedCameraXLibrary.ImagePlaneInformation.Builder imagePlaneInfoBuilder = + new GeneratedCameraXLibrary.ImagePlaneInformation.Builder(); imagePlanesInformation.add( - imagePlaneInfoBuilder - .setBytesPerRow(Long.valueOf(plane.getRowStride())) - .setBytesPerPixel(Long.valueOf(plane.getPixelStride())) - .setBytes(bytes) - .build()); + imagePlaneInfoBuilder + .setBytesPerRow(Long.valueOf(plane.getRowStride())) + .setBytesPerPixel(Long.valueOf(plane.getPixelStride())) + .setBytes(bytes) + .build()); } - GeneratedCameraXLibrary.ImageInformation.Builder imageInfoBuilder = new GeneratedCameraXLibrary.ImageInformation.Builder(); + GeneratedCameraXLibrary.ImageInformation.Builder imageInfoBuilder = + new GeneratedCameraXLibrary.ImageInformation.Builder(); imageInfoBuilder.setWidth(Long.valueOf(image.getWidth())); imageInfoBuilder.setHeight(Long.valueOf(image.getHeight())); imageInfoBuilder.setFormat(Long.valueOf(image.getFormat())); @@ -92,7 +93,8 @@ public void analyze(@NonNull ImageProxy image) { // TODO: last sensor exposure time // TODO: last sensor sensitivity - ImageAnalysisFlutterApiImpl imageAnalysisFlutterApiImpl = new ImageAnalysisFlutterApiImpl(binaryMessenger); + ImageAnalysisFlutterApiImpl imageAnalysisFlutterApiImpl = + new ImageAnalysisFlutterApiImpl(binaryMessenger); imageAnalysisFlutterApiImpl.sendOnImageAnalyzedEvent(imageInfoBuilder.build(), reply -> {}); image.close(); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java index 38e31099ad1a..0c00ed63f2f8 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureHostApiImpl.java @@ -5,7 +5,6 @@ package io.flutter.plugins.camerax; import android.content.Context; -import android.util.Size; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index c09eebcd3b26..c668871b7a62 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -637,24 +637,24 @@ class _CameraExampleHomeState extends State try { await cameraController.initialize(); - // await Future.wait(>[ - // // The exposure mode is currently not supported on the web. - // ...!kIsWeb - // ? >[ - // cameraController.getMinExposureOffset().then( - // (double value) => _minAvailableExposureOffset = value), - // cameraController - // .getMaxExposureOffset() - // .then((double value) => _maxAvailableExposureOffset = value) - // ] - // : >[], - // cameraController - // .getMaxZoomLevel() - // .then((double value) => _maxAvailableZoom = value), - // cameraController - // .getMinZoomLevel() - // .then((double value) => _minAvailableZoom = value), - // ]); + await Future.wait(>[ + // The exposure mode is currently not supported on the web. + ...!kIsWeb + ? >[ + cameraController.getMinExposureOffset().then( + (double value) => _minAvailableExposureOffset = value), + cameraController + .getMaxExposureOffset() + .then((double value) => _maxAvailableExposureOffset = value) + ] + : >[], + cameraController + .getMaxZoomLevel() + .then((double value) => _maxAvailableZoom = value), + cameraController + .getMinZoomLevel() + .then((double value) => _minAvailableZoom = value), + ]); } on CameraException catch (e) { switch (e.code) { case 'CameraAccessDenied': diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index f29125cfd94e..8ff76b7308d8 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -314,16 +314,18 @@ class AndroidCameraCameraX extends CameraPlatform { /// [cameraId] and [options] are not used. @override Stream onStreamedFrameAvailable(int cameraId, - {CameraImageStreamOptions? options}) { + {CameraImageStreamOptions? options}) async { assert(processCameraProvider != null); assert(cameraSelector != null); // TODO(camsim99): Support resolution configuration. final ResolutionInfo? imageAnalysisTargetResolution = null; - imageAnalysis = ImageAnalysis(targetResolution: imageAnalysisTargetResolution); + imageAnalysis = + ImageAnalysis(targetResolution: imageAnalysisTargetResolution); imageAnalysis!.setAnalyzer(); - camera = await processCameraProvider!.bindToLifecycle(cameraSelector!, [imageAnalysis!]); + camera = await processCameraProvider! + .bindToLifecycle(cameraSelector!, [imageAnalysis!]); return ImageAnalysis.onStreamedFrameAvailableStreamController.stream; } diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index a08d0cd0b3d8..0527335909e9 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -117,7 +117,9 @@ class ImageInformation { width: pigeonMap['width']! as int, height: pigeonMap['height']! as int, format: pigeonMap['format']! as int, - imagePlanesInformation: (pigeonMap['imagePlanesInformation'] as List?)!.cast(), + imagePlanesInformation: + (pigeonMap['imagePlanesInformation'] as List?)! + .cast(), ); } } @@ -130,7 +132,8 @@ class InstanceManagerHostApi { /// Constructor for [InstanceManagerHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - InstanceManagerHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + InstanceManagerHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -138,7 +141,8 @@ class InstanceManagerHostApi { Future clear() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send(null) as Map?; if (replyMap == null) { @@ -147,7 +151,8 @@ class InstanceManagerHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -167,7 +172,8 @@ class JavaObjectHostApi { /// Constructor for [JavaObjectHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - JavaObjectHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + JavaObjectHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -175,7 +181,8 @@ class JavaObjectHostApi { Future dispose(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -184,7 +191,8 @@ class JavaObjectHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -199,22 +207,27 @@ class JavaObjectHostApi { class _JavaObjectFlutterApiCodec extends StandardMessageCodec { const _JavaObjectFlutterApiCodec(); } + abstract class JavaObjectFlutterApi { static const MessageCodec codec = _JavaObjectFlutterApiCodec(); void dispose(int identifier); - static void setup(JavaObjectFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(JavaObjectFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaObjectFlutterApi.dispose', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.JavaObjectFlutterApi.dispose', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null, expected non-null int.'); api.dispose(arg_identifier!); return; }); @@ -231,7 +244,8 @@ class CameraInfoHostApi { /// Constructor for [CameraInfoHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - CameraInfoHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + CameraInfoHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -239,7 +253,8 @@ class CameraInfoHostApi { Future getSensorRotationDegrees(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -248,7 +263,8 @@ class CameraInfoHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -268,22 +284,27 @@ class CameraInfoHostApi { class _CameraInfoFlutterApiCodec extends StandardMessageCodec { const _CameraInfoFlutterApiCodec(); } + abstract class CameraInfoFlutterApi { static const MessageCodec codec = _CameraInfoFlutterApiCodec(); void create(int identifier); - static void setup(CameraInfoFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraInfoFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoFlutterApi.create', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraInfoFlutterApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); @@ -300,7 +321,8 @@ class CameraSelectorHostApi { /// Constructor for [CameraSelectorHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - CameraSelectorHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + CameraSelectorHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -308,16 +330,19 @@ class CameraSelectorHostApi { Future create(int arg_identifier, int? arg_lensFacing) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_lensFacing]) as Map?; + await channel.send([arg_identifier, arg_lensFacing]) + as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -328,18 +353,22 @@ class CameraSelectorHostApi { } } - Future> filter(int arg_identifier, List arg_cameraInfoIds) async { + Future> filter( + int arg_identifier, List arg_cameraInfoIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_cameraInfoIds]) as Map?; + await channel.send([arg_identifier, arg_cameraInfoIds]) + as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -359,22 +388,27 @@ class CameraSelectorHostApi { class _CameraSelectorFlutterApiCodec extends StandardMessageCodec { const _CameraSelectorFlutterApiCodec(); } + abstract class CameraSelectorFlutterApi { static const MessageCodec codec = _CameraSelectorFlutterApiCodec(); void create(int identifier, int? lensFacing); - static void setup(CameraSelectorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraSelectorFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null, expected non-null int.'); final int? arg_lensFacing = (args[1] as int?); api.create(arg_identifier!, arg_lensFacing); return; @@ -392,15 +426,18 @@ class ProcessCameraProviderHostApi { /// Constructor for [ProcessCameraProviderHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - ProcessCameraProviderHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + ProcessCameraProviderHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - static const MessageCodec codec = _ProcessCameraProviderHostApiCodec(); + static const MessageCodec codec = + _ProcessCameraProviderHostApiCodec(); Future getInstance() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send(null) as Map?; if (replyMap == null) { @@ -409,7 +446,8 @@ class ProcessCameraProviderHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -427,7 +465,9 @@ class ProcessCameraProviderHostApi { Future> getAvailableCameraInfos(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', + codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -436,7 +476,8 @@ class ProcessCameraProviderHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -452,18 +493,25 @@ class ProcessCameraProviderHostApi { } } - Future bindToLifecycle(int arg_identifier, int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { + Future bindToLifecycle(int arg_identifier, + int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_identifier, arg_cameraSelectorIdentifier, arg_useCaseIds]) as Map?; + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', + codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = await channel.send([ + arg_identifier, + arg_cameraSelectorIdentifier, + arg_useCaseIds + ]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -481,16 +529,19 @@ class ProcessCameraProviderHostApi { Future isBound(int arg_identifier, int arg_useCaseIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_useCaseIdentifier]) as Map?; + await channel.send([arg_identifier, arg_useCaseIdentifier]) + as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -508,16 +559,19 @@ class ProcessCameraProviderHostApi { Future unbind(int arg_identifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_useCaseIds]) as Map?; + await channel.send([arg_identifier, arg_useCaseIds]) + as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -530,7 +584,8 @@ class ProcessCameraProviderHostApi { Future unbindAll(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -539,7 +594,8 @@ class ProcessCameraProviderHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -554,22 +610,28 @@ class ProcessCameraProviderHostApi { class _ProcessCameraProviderFlutterApiCodec extends StandardMessageCodec { const _ProcessCameraProviderFlutterApiCodec(); } + abstract class ProcessCameraProviderFlutterApi { - static const MessageCodec codec = _ProcessCameraProviderFlutterApiCodec(); + static const MessageCodec codec = + _ProcessCameraProviderFlutterApiCodec(); void create(int identifier); - static void setup(ProcessCameraProviderFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ProcessCameraProviderFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); @@ -581,6 +643,7 @@ abstract class ProcessCameraProviderFlutterApi { class _CameraFlutterApiCodec extends StandardMessageCodec { const _CameraFlutterApiCodec(); } + abstract class CameraFlutterApi { static const MessageCodec codec = _CameraFlutterApiCodec(); @@ -588,15 +651,18 @@ abstract class CameraFlutterApi { static void setup(CameraFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraFlutterApi.create', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraFlutterApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); @@ -612,20 +678,19 @@ class _SystemServicesHostApiCodec extends StandardMessageCodec { if (value is CameraPermissionsErrorData) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else -{ + } else { super.writeValue(buffer, value); } } + @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); - } } } @@ -634,24 +699,29 @@ class SystemServicesHostApi { /// Constructor for [SystemServicesHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - SystemServicesHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + SystemServicesHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _SystemServicesHostApiCodec(); - Future requestCameraPermissions(bool arg_enableAudio) async { + Future requestCameraPermissions( + bool arg_enableAudio) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_enableAudio]) as Map?; + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', + codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = await channel + .send([arg_enableAudio]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -662,18 +732,23 @@ class SystemServicesHostApi { } } - Future startListeningForDeviceOrientationChange(bool arg_isFrontFacing, int arg_sensorOrientation) async { + Future startListeningForDeviceOrientationChange( + bool arg_isFrontFacing, int arg_sensorOrientation) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', + codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_isFrontFacing, arg_sensorOrientation]) as Map?; + await channel.send([arg_isFrontFacing, arg_sensorOrientation]) + as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -686,7 +761,9 @@ class SystemServicesHostApi { Future stopListeningForDeviceOrientationChange() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', + codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send(null) as Map?; if (replyMap == null) { @@ -695,7 +772,8 @@ class SystemServicesHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -710,23 +788,29 @@ class SystemServicesHostApi { class _SystemServicesFlutterApiCodec extends StandardMessageCodec { const _SystemServicesFlutterApiCodec(); } + abstract class SystemServicesFlutterApi { static const MessageCodec codec = _SystemServicesFlutterApiCodec(); void onDeviceOrientationChanged(String orientation); void onCameraError(String errorDescription); - static void setup(SystemServicesFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(SystemServicesFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); final List args = (message as List?)!; final String? arg_orientation = (args[0] as String?); - assert(arg_orientation != null, 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null, expected non-null String.'); + assert(arg_orientation != null, + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null, expected non-null String.'); api.onDeviceOrientationChanged(arg_orientation!); return; }); @@ -734,15 +818,18 @@ abstract class SystemServicesFlutterApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); final List args = (message as List?)!; final String? arg_errorDescription = (args[0] as String?); - assert(arg_errorDescription != null, 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null, expected non-null String.'); + assert(arg_errorDescription != null, + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null, expected non-null String.'); api.onCameraError(arg_errorDescription!); return; }); @@ -758,27 +845,25 @@ class _PreviewHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else - if (value is ResolutionInfo) { + } else if (value is ResolutionInfo) { buffer.putUint8(129); writeValue(buffer, value.encode()); - } else -{ + } else { super.writeValue(buffer, value); } } + @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - case 129: + + case 129: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); - } } } @@ -787,24 +872,29 @@ class PreviewHostApi { /// Constructor for [PreviewHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - PreviewHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + PreviewHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _PreviewHostApiCodec(); - Future create(int arg_identifier, int? arg_rotation, ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_rotation, + ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_identifier, arg_rotation, arg_targetResolution]) as Map?; + 'dev.flutter.pigeon.PreviewHostApi.create', codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = await channel + .send([arg_identifier, arg_rotation, arg_targetResolution]) + as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -817,7 +907,8 @@ class PreviewHostApi { Future setSurfaceProvider(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -826,7 +917,8 @@ class PreviewHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -844,7 +936,8 @@ class PreviewHostApi { Future releaseFlutterSurfaceTexture() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send(null) as Map?; if (replyMap == null) { @@ -853,7 +946,8 @@ class PreviewHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -866,7 +960,8 @@ class PreviewHostApi { Future getResolutionInfo(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -875,7 +970,8 @@ class PreviewHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -899,20 +995,19 @@ class _ImageCaptureHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else -{ + } else { super.writeValue(buffer, value); } } + @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); - } } } @@ -921,24 +1016,29 @@ class ImageCaptureHostApi { /// Constructor for [ImageCaptureHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - ImageCaptureHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + ImageCaptureHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _ImageCaptureHostApiCodec(); - Future create(int arg_identifier, int? arg_flashMode, ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_flashMode, + ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_identifier, arg_flashMode, arg_targetResolution]) as Map?; + 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = await channel.send( + [arg_identifier, arg_flashMode, arg_targetResolution]) + as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -951,16 +1051,19 @@ class ImageCaptureHostApi { Future setFlashMode(int arg_identifier, int arg_flashMode) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_flashMode]) as Map?; + await channel.send([arg_identifier, arg_flashMode]) + as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -973,7 +1076,8 @@ class ImageCaptureHostApi { Future takePicture(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -982,7 +1086,8 @@ class ImageCaptureHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -1006,20 +1111,19 @@ class _ImageAnalysisHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else -{ + } else { super.writeValue(buffer, value); } } + @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); - } } } @@ -1028,24 +1132,29 @@ class ImageAnalysisHostApi { /// Constructor for [ImageAnalysisHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - ImageAnalysisHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + ImageAnalysisHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _ImageAnalysisHostApiCodec(); - Future create(int arg_identifier, ResolutionInfo? arg_targetResolution) async { + Future create( + int arg_identifier, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_targetResolution]) as Map?; + await channel.send([arg_identifier, arg_targetResolution]) + as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -1058,7 +1167,8 @@ class ImageAnalysisHostApi { Future setAnalyzer(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -1067,7 +1177,8 @@ class ImageAnalysisHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + final Map error = + (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -1086,46 +1197,50 @@ class _ImageAnalysisFlutterApiCodec extends StandardMessageCodec { if (value is ImageInformation) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else - if (value is ImagePlaneInformation) { + } else if (value is ImagePlaneInformation) { buffer.putUint8(129); writeValue(buffer, value.encode()); - } else -{ + } else { super.writeValue(buffer, value); } } + @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ImageInformation.decode(readValue(buffer)!); - - case 129: + + case 129: return ImagePlaneInformation.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); - } } } + abstract class ImageAnalysisFlutterApi { static const MessageCodec codec = _ImageAnalysisFlutterApiCodec(); void onImageAnalyzed(ImageInformation imageInformation); - static void setup(ImageAnalysisFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ImageAnalysisFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null.'); final List args = (message as List?)!; - final ImageInformation? arg_imageInformation = (args[0] as ImageInformation?); - assert(arg_imageInformation != null, 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null, expected non-null ImageInformation.'); + final ImageInformation? arg_imageInformation = + (args[0] as ImageInformation?); + assert(arg_imageInformation != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null, expected non-null ImageInformation.'); api.onImageAnalyzed(arg_imageInformation!); return; }); diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index b6ed618e1ee4..d6cec452af90 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -43,7 +43,8 @@ class ImageAnalysis extends UseCase { } /// Stream that emits an event whenever a frame is received for image streaming. - static final StreamController onStreamedFrameAvailableStreamController = + static final StreamController + onStreamedFrameAvailableStreamController = StreamController.broadcast(); late final ImageAnalysisHostApiImpl _api; @@ -112,18 +113,20 @@ class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { @override void onImageAnalyzed(ImageInformation imageInformation) { - List imagePlanes = - imageInformation.imagePlanesInformation! + List imagePlanes = imageInformation + .imagePlanesInformation! .map((ImagePlaneInformation? imagePlaneInformation) { - return CameraImagePlane( - bytes: imagePlaneInformation!.bytes, - bytesPerRow: imagePlaneInformation!.bytesPerRow, - bytesPerPixel: imagePlaneInformation!.bytesPerPixel, - ); + return CameraImagePlane( + bytes: imagePlaneInformation!.bytes, + bytesPerRow: imagePlaneInformation!.bytesPerRow, + bytesPerPixel: imagePlaneInformation!.bytesPerPixel, + ); }).toList(); CameraImageData data = CameraImageData( - format: CameraImageFormat(_imageFormatGroupFromFormatCode(imageInformation.format), raw: imageInformation.format), + format: CameraImageFormat( + _imageFormatGroupFromFormatCode(imageInformation.format), + raw: imageInformation.format), planes: imagePlanes, height: imageInformation.height, width: imageInformation.width, diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index b711bdf39ba7..2fa4b539c428 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -16,14 +16,17 @@ import 'package:camera_android_camerax/src/camerax_library.g.dart'; class _TestInstanceManagerHostApiCodec extends StandardMessageCodec { const _TestInstanceManagerHostApiCodec(); } + abstract class TestInstanceManagerHostApi { static const MessageCodec codec = _TestInstanceManagerHostApiCodec(); void clear(); - static void setup(TestInstanceManagerHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestInstanceManagerHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -40,22 +43,27 @@ abstract class TestInstanceManagerHostApi { class _TestJavaObjectHostApiCodec extends StandardMessageCodec { const _TestJavaObjectHostApiCodec(); } + abstract class TestJavaObjectHostApi { static const MessageCodec codec = _TestJavaObjectHostApiCodec(); void dispose(int identifier); - static void setup(TestJavaObjectHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestJavaObjectHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null, expected non-null int.'); api.dispose(arg_identifier!); return {}; }); @@ -67,22 +75,28 @@ abstract class TestJavaObjectHostApi { class _TestCameraInfoHostApiCodec extends StandardMessageCodec { const _TestCameraInfoHostApiCodec(); } + abstract class TestCameraInfoHostApi { static const MessageCodec codec = _TestCameraInfoHostApiCodec(); int getSensorRotationDegrees(int identifier); - static void setup(TestCameraInfoHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraInfoHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null, expected non-null int.'); final int output = api.getSensorRotationDegrees(arg_identifier!); return {'result': output}; }); @@ -94,23 +108,28 @@ abstract class TestCameraInfoHostApi { class _TestCameraSelectorHostApiCodec extends StandardMessageCodec { const _TestCameraSelectorHostApiCodec(); } + abstract class TestCameraSelectorHostApi { static const MessageCodec codec = _TestCameraSelectorHostApiCodec(); void create(int identifier, int? lensFacing); List filter(int identifier, List cameraInfoIds); - static void setup(TestCameraSelectorHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraSelectorHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null, expected non-null int.'); final int? arg_lensFacing = (args[1] as int?); api.create(arg_identifier!, arg_lensFacing); return {}; @@ -119,18 +138,24 @@ abstract class TestCameraSelectorHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); - final List? arg_cameraInfoIds = (args[1] as List?)?.cast(); - assert(arg_cameraInfoIds != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); - final List output = api.filter(arg_identifier!, arg_cameraInfoIds!); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); + final List? arg_cameraInfoIds = + (args[1] as List?)?.cast(); + assert(arg_cameraInfoIds != null, + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); + final List output = + api.filter(arg_identifier!, arg_cameraInfoIds!); return {'result': output}; }); } @@ -141,19 +166,24 @@ abstract class TestCameraSelectorHostApi { class _TestProcessCameraProviderHostApiCodec extends StandardMessageCodec { const _TestProcessCameraProviderHostApiCodec(); } + abstract class TestProcessCameraProviderHostApi { - static const MessageCodec codec = _TestProcessCameraProviderHostApiCodec(); + static const MessageCodec codec = + _TestProcessCameraProviderHostApiCodec(); Future getInstance(); List getAvailableCameraInfos(int identifier); - int bindToLifecycle(int identifier, int cameraSelectorIdentifier, List useCaseIds); + int bindToLifecycle( + int identifier, int cameraSelectorIdentifier, List useCaseIds); bool isBound(int identifier, int useCaseIdentifier); void unbind(int identifier, List useCaseIds); void unbindAll(int identifier); - static void setup(TestProcessCameraProviderHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestProcessCameraProviderHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -166,71 +196,94 @@ abstract class TestProcessCameraProviderHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); - final List output = api.getAvailableCameraInfos(arg_identifier!); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); + final List output = + api.getAvailableCameraInfos(arg_identifier!); return {'result': output}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); final int? arg_cameraSelectorIdentifier = (args[1] as int?); - assert(arg_cameraSelectorIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); - final List? arg_useCaseIds = (args[2] as List?)?.cast(); - assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null List.'); - final int output = api.bindToLifecycle(arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); + assert(arg_cameraSelectorIdentifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); + final List? arg_useCaseIds = + (args[2] as List?)?.cast(); + assert(arg_useCaseIds != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null List.'); + final int output = api.bindToLifecycle( + arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); return {'result': output}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); final int? arg_useCaseIdentifier = (args[1] as int?); - assert(arg_useCaseIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); - final bool output = api.isBound(arg_identifier!, arg_useCaseIdentifier!); + assert(arg_useCaseIdentifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); + final bool output = + api.isBound(arg_identifier!, arg_useCaseIdentifier!); return {'result': output}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null int.'); - final List? arg_useCaseIds = (args[1] as List?)?.cast(); - assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null List.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null int.'); + final List? arg_useCaseIds = + (args[1] as List?)?.cast(); + assert(arg_useCaseIds != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null List.'); api.unbind(arg_identifier!, arg_useCaseIds!); return {}; }); @@ -238,15 +291,18 @@ abstract class TestProcessCameraProviderHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null, expected non-null int.'); api.unbindAll(arg_identifier!); return {}; }); @@ -262,67 +318,83 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { if (value is CameraPermissionsErrorData) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else -{ + } else { super.writeValue(buffer, value); } } + @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); - } } } + abstract class TestSystemServicesHostApi { static const MessageCodec codec = _TestSystemServicesHostApiCodec(); - Future requestCameraPermissions(bool enableAudio); - void startListeningForDeviceOrientationChange(bool isFrontFacing, int sensorOrientation); + Future requestCameraPermissions( + bool enableAudio); + void startListeningForDeviceOrientationChange( + bool isFrontFacing, int sensorOrientation); void stopListeningForDeviceOrientationChange(); - static void setup(TestSystemServicesHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestSystemServicesHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); final List args = (message as List?)!; final bool? arg_enableAudio = (args[0] as bool?); - assert(arg_enableAudio != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null, expected non-null bool.'); - final CameraPermissionsErrorData? output = await api.requestCameraPermissions(arg_enableAudio!); + assert(arg_enableAudio != null, + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null, expected non-null bool.'); + final CameraPermissionsErrorData? output = + await api.requestCameraPermissions(arg_enableAudio!); return {'result': output}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); final List args = (message as List?)!; final bool? arg_isFrontFacing = (args[0] as bool?); - assert(arg_isFrontFacing != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null bool.'); + assert(arg_isFrontFacing != null, + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null bool.'); final int? arg_sensorOrientation = (args[1] as int?); - assert(arg_sensorOrientation != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null int.'); - api.startListeningForDeviceOrientationChange(arg_isFrontFacing!, arg_sensorOrientation!); + assert(arg_sensorOrientation != null, + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null int.'); + api.startListeningForDeviceOrientationChange( + arg_isFrontFacing!, arg_sensorOrientation!); return {}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -343,30 +415,29 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else - if (value is ResolutionInfo) { + } else if (value is ResolutionInfo) { buffer.putUint8(129); writeValue(buffer, value.encode()); - } else -{ + } else { super.writeValue(buffer, value); } } + @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - case 129: + + case 129: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); - } } } + abstract class TestPreviewHostApi { static const MessageCodec codec = _TestPreviewHostApiCodec(); @@ -374,20 +445,25 @@ abstract class TestPreviewHostApi { int setSurfaceProvider(int identifier); void releaseFlutterSurfaceTexture(); ResolutionInfo getResolutionInfo(int identifier); - static void setup(TestPreviewHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestPreviewHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null, expected non-null int.'); final int? arg_rotation = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = + (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_rotation, arg_targetResolution); return {}; }); @@ -395,15 +471,18 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null, expected non-null int.'); final int output = api.setSurfaceProvider(arg_identifier!); return {'result': output}; }); @@ -411,7 +490,9 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -424,15 +505,18 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null, expected non-null int.'); final ResolutionInfo output = api.getResolutionInfo(arg_identifier!); return {'result': output}; }); @@ -448,43 +532,48 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else -{ + } else { super.writeValue(buffer, value); } } + @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); - } } } + abstract class TestImageCaptureHostApi { static const MessageCodec codec = _TestImageCaptureHostApiCodec(); void create(int identifier, int? flashMode, ResolutionInfo? targetResolution); void setFlashMode(int identifier, int flashMode); Future takePicture(int identifier); - static void setup(TestImageCaptureHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageCaptureHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); final int? arg_flashMode = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = + (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_flashMode, arg_targetResolution); return {}; }); @@ -492,17 +581,21 @@ abstract class TestImageCaptureHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); final int? arg_flashMode = (args[1] as int?); - assert(arg_flashMode != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); + assert(arg_flashMode != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); api.setFlashMode(arg_identifier!, arg_flashMode!); return {}; }); @@ -510,15 +603,18 @@ abstract class TestImageCaptureHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null, expected non-null int.'); final String output = await api.takePicture(arg_identifier!); return {'result': output}; }); @@ -534,41 +630,46 @@ class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else -{ + } else { super.writeValue(buffer, value); } } + @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); - } } } + abstract class TestImageAnalysisHostApi { static const MessageCodec codec = _TestImageAnalysisHostApiCodec(); void create(int identifier, ResolutionInfo? targetResolution); void setAnalyzer(int identifier); - static void setup(TestImageAnalysisHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageAnalysisHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); - final ResolutionInfo? arg_targetResolution = (args[1] as ResolutionInfo?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); + final ResolutionInfo? arg_targetResolution = + (args[1] as ResolutionInfo?); api.create(arg_identifier!, arg_targetResolution); return {}; }); @@ -576,15 +677,18 @@ abstract class TestImageAnalysisHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null, expected non-null int.'); api.setAnalyzer(arg_identifier!); return {}; }); From c37db5c6509358630257bb205f39701bfa612e85 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 24 Mar 2023 14:58:33 -0700 Subject: [PATCH 25/62] Start fixing ci errors --- .../lib/src/android_camera_camerax.dart | 31 ++++++++++++------- .../lib/src/process_camera_provider.dart | 16 ---------- 2 files changed, 19 insertions(+), 28 deletions(-) diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 8ff76b7308d8..fa407bbea4c2 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -315,18 +315,7 @@ class AndroidCameraCameraX extends CameraPlatform { @override Stream onStreamedFrameAvailable(int cameraId, {CameraImageStreamOptions? options}) async { - assert(processCameraProvider != null); - assert(cameraSelector != null); - - // TODO(camsim99): Support resolution configuration. - final ResolutionInfo? imageAnalysisTargetResolution = null; - imageAnalysis = - ImageAnalysis(targetResolution: imageAnalysisTargetResolution); - imageAnalysis!.setAnalyzer(); - - camera = await processCameraProvider! - .bindToLifecycle(cameraSelector!, [imageAnalysis!]); - + _bindImageAnalysisToLifecycle(); return ImageAnalysis.onStreamedFrameAvailableStreamController.stream; } @@ -363,6 +352,24 @@ class AndroidCameraCameraX extends CameraPlatform { processCameraProvider!.unbind([preview!]); } + /// Binds [imageAnalysis] instance to camera lifecycle controlled by the + /// [processCameraProvider]. + Future _bindImageAnalysisToLifecycle() async { + assert(processCameraProvider != null); + assert(cameraSelector != null); + + // TODO(camsim99): Support resolution configuration. + final ResolutionInfo? imageAnalysisTargetResolution = null; + imageAnalysis = + ImageAnalysis(targetResolution: imageAnalysisTargetResolution); + imageAnalysis!.setAnalyzer(); + + camera = await processCameraProvider! + .bindToLifecycle(cameraSelector!, [imageAnalysis!]); + // TODO(camsim99): Reset live camera state observers here when + // https://github.com/flutter/packages/pull/3419 lands. + } + // Methods for mapping Flutter camera constants to CameraX constants: /// Returns [CameraSelector] lens direction that maps to specified diff --git a/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart index f97e362bd33d..d722cf524fae 100644 --- a/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart +++ b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart @@ -158,22 +158,6 @@ class ProcessCameraProviderHostApiImpl extends ProcessCameraProviderHostApi { return useCaseIsBound; } - /// Returns whether or not the specified [UseCase] has been bound to the - /// lifecycle of the camera that this instance tracks. - Future isBoundFromInstances( - ProcessCameraProvider instance, - UseCase useCase, - ) async { - final int identifier = getProcessCameraProviderIdentifier(instance); - final int? useCaseId = instanceManager.getIdentifier(useCase); - - assert(useCaseId != null, - 'UseCase must have been created in order for this check to be valid.'); - - final bool useCaseIsBound = await isBound(identifier, useCaseId!); - return useCaseIsBound; - } - /// Unbinds specified [UseCase]s from the lifecycle of the camera which the /// provided [ProcessCameraProvider] instance tracks. void unbindFromInstances( From 80753a93b45db164e56a2a5299a777a236cebf9e Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 24 Mar 2023 15:45:45 -0700 Subject: [PATCH 26/62] Fix fl analyze --- .../camerax/ImageAnalysisHostApiImpl.java | 8 +-- .../lib/src/android_camera_camerax.dart | 60 +++++++++++++++---- .../lib/src/image_analysis.dart | 17 ++++-- .../lib/src/image_capture.dart | 2 +- 4 files changed, 64 insertions(+), 23 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index e761267e0a8f..8591803f3ea2 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -19,7 +19,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; -// import java.util.concurrent.Executors; public class ImageAnalysisHostApiImpl implements ImageAnalysisHostApi { @@ -53,10 +52,10 @@ public void create(@NonNull Long identifier, @Nullable ResolutionInfo targetReso @Override public void setAnalyzer(@NonNull Long identifier) { - Log.v("FLUTTER", "set analyzer called"); ImageAnalysis imageAnalysis = (ImageAnalysis) Objects.requireNonNull(instanceManager.getInstance(identifier)); ImageAnalysis.Analyzer analyzer = createImageAnalysisAnalyzer(); + // TODO(camsim99): Determine what executor to use. imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(context), analyzer); } @@ -83,15 +82,14 @@ public void analyze(@NonNull ImageProxy image) { .build()); } + // TODO (camsim99): Retrieve and send the following when made available by b/274791178: + // last lens aperture, last sensor exposure time, last sensor sensitivity. GeneratedCameraXLibrary.ImageInformation.Builder imageInfoBuilder = new GeneratedCameraXLibrary.ImageInformation.Builder(); imageInfoBuilder.setWidth(Long.valueOf(image.getWidth())); imageInfoBuilder.setHeight(Long.valueOf(image.getHeight())); imageInfoBuilder.setFormat(Long.valueOf(image.getFormat())); imageInfoBuilder.setImagePlanesInformation(imagePlanesInformation); - // TODO: last lens aperture - // TODO: last sensor exposure time - // TODO: last sensor sensitivity ImageAnalysisFlutterApiImpl imageAnalysisFlutterApiImpl = new ImageAnalysisFlutterApiImpl(binaryMessenger); diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index fa407bbea4c2..7bf9442db560 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -307,16 +307,17 @@ class AndroidCameraCameraX extends CameraPlatform { /// A new streamed frame is available. /// /// Listening to this stream will start streaming, and canceling will stop. - /// [?????] Pausing will throw a [CameraException], as pausing the stream would cause + /// Pausing will throw a [CameraException], as pausing the stream would cause /// very high memory usage; to temporarily stop receiving frames, cancel, then /// listen again later. /// /// [cameraId] and [options] are not used. @override Stream onStreamedFrameAvailable(int cameraId, - {CameraImageStreamOptions? options}) async { - _bindImageAnalysisToLifecycle(); - return ImageAnalysis.onStreamedFrameAvailableStreamController.stream; + {CameraImageStreamOptions? options}) { + final StreamController cameraImageDataStreamController = ImageAnalysis.onStreamedFrameAvailableStreamController; + _configureStreamController(cameraImageDataStreamController); + return cameraImageDataStreamController.stream; } // Methods for binding UseCases to the lifecycle of the camera controlled @@ -339,11 +340,11 @@ class AndroidCameraCameraX extends CameraPlatform { .bindToLifecycle(cameraSelector!, [preview!]); } - /// Unbinds [preview] instance to camera lifecycle controlled by the + /// Unbinds [preview] instance from camera lifecycle controlled by the /// [processCameraProvider]. Future _unbindPreviewFromLifecycle() async { - final bool previewIsBound = await processCameraProvider!.isBound(preview!); - if (preview == null || !previewIsBound) { + final bool imageAnalysisIsBound = preview != null && await processCameraProvider!.isBound(imageAnalysis!); + if (imageAnalysisIsBound) { return; } @@ -359,15 +360,50 @@ class AndroidCameraCameraX extends CameraPlatform { assert(cameraSelector != null); // TODO(camsim99): Support resolution configuration. - final ResolutionInfo? imageAnalysisTargetResolution = null; - imageAnalysis = - ImageAnalysis(targetResolution: imageAnalysisTargetResolution); + imageAnalysis = ImageAnalysis(); imageAnalysis!.setAnalyzer(); - camera = await processCameraProvider! - .bindToLifecycle(cameraSelector!, [imageAnalysis!]); // TODO(camsim99): Reset live camera state observers here when // https://github.com/flutter/packages/pull/3419 lands. + camera = await processCameraProvider! + .bindToLifecycle(cameraSelector!, [imageAnalysis!]); + } + + /// Unbinds [imageAnalysis] instance from camera lifecycle controlled by the + /// [processCameraProvider]. + // TODO(camsim99): Make general unbind method since logic will be same. + Future _unbindImageAnalysisFromLifecycle() async { + final bool imageAnalysisIsBound = imageAnalysis != null && await processCameraProvider!.isBound(imageAnalysis!); + if (imageAnalysisIsBound) { + return; + } + + assert(processCameraProvider != null); + + processCameraProvider!.unbind([imageAnalysis!]); + } + + // Methods for configuring image streaming: + + void _configureStreamController(StreamController controller) { + controller.onListen = _onFrameStreamListen; + controller.onPause = _onFrameStreamPauseResume; + controller.onResume = _onFrameStreamPauseResume; + controller.onCancel = _onFrameStreamCancel; + } + + void _onFrameStreamListen() { + _bindImageAnalysisToLifecycle(); + } + + void _onFrameStreamPauseResume() { + // Consistent implementation with camera_android. + throw CameraException('InvalidCall', + 'Pause and resume are not supported for onStreamedFrameAvailable'); + } + + FutureOr _onFrameStreamCancel() async { + _unbindImageAnalysisFromLifecycle(); } // Methods for mapping Flutter camera constants to CameraX constants: diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index d6cec452af90..8a88bbc96005 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -14,6 +14,7 @@ import 'instance_manager.dart'; import 'java_object.dart'; import 'use_case.dart'; +/// Use case for providing CPU accessible images for performing image analysis. class ImageAnalysis extends UseCase { /// Creates a [ImageAnalysis]. ImageAnalysis( @@ -52,11 +53,15 @@ class ImageAnalysis extends UseCase { /// Target resolution of the camera preview stream. final ResolutionInfo? targetResolution; + /// Configures this instance for image streaming support. + /// + /// This is an indirect wrapping of ... Future setAnalyzer() async { _api.setAnalyzerFromInstance(this); } } +/// Host API implementation of [ImageAnalysis]. class ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { /// Constructs a [ImageAnalysisHostApiImpl]. ImageAnalysisHostApiImpl( @@ -73,6 +78,7 @@ class ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { /// Maintains instances stored to communicate with native language objects. late final InstanceManager instanceManager; + /// Creates an [ImageAnallysis] instance with the specified target resolution. Future createFromInstance( ImageAnalysis instance, ResolutionInfo? targetResolution) async { final int identifier = instanceManager.addDartCreatedInstance(instance, @@ -85,6 +91,7 @@ class ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { create(identifier, targetResolution); } + /// Sets analyzer for the provided instance to support image streaming. Future setAnalyzerFromInstance(ImageAnalysis instance) async { final int? identifier = instanceManager.getIdentifier(instance); assert(identifier != null, @@ -113,17 +120,17 @@ class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { @override void onImageAnalyzed(ImageInformation imageInformation) { - List imagePlanes = imageInformation - .imagePlanesInformation! + final List imagePlanes = imageInformation + .imagePlanesInformation .map((ImagePlaneInformation? imagePlaneInformation) { return CameraImagePlane( bytes: imagePlaneInformation!.bytes, - bytesPerRow: imagePlaneInformation!.bytesPerRow, - bytesPerPixel: imagePlaneInformation!.bytesPerPixel, + bytesPerRow: imagePlaneInformation.bytesPerRow, + bytesPerPixel: imagePlaneInformation.bytesPerPixel, ); }).toList(); - CameraImageData data = CameraImageData( + final CameraImageData data = CameraImageData( format: CameraImageFormat( _imageFormatGroupFromFormatCode(imageInformation.format), raw: imageInformation.format), diff --git a/packages/camera/camera_android_camerax/lib/src/image_capture.dart b/packages/camera/camera_android_camerax/lib/src/image_capture.dart index 6545908cb215..60754c577090 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_capture.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -109,7 +109,7 @@ class ImageCaptureHostApiImpl extends ImageCaptureHostApi { /// Maintains instances stored to communicate with native language objects. late final InstanceManager instanceManager; - /// Creates a [ImageCapture] instance with the flash mode and target resolution + /// Creates an [ImageCapture] instance with the flash mode and target resolution /// if specified. void createFromInstance(ImageCapture instance, int? targetFlashMode, ResolutionInfo? targetResolution) { From 7ce175efe08ae68fed93150b48ec0a5ea22ebff8 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 27 Mar 2023 14:12:22 -0700 Subject: [PATCH 27/62] Finish implementation --- .../camerax/GeneratedCameraXLibrary.java | 1529 +++++++---------- .../camerax/ImageAnalysisHostApiImpl.java | 10 +- .../example/lib/main.dart | 5 +- .../lib/src/android_camera_camerax.dart | 60 +- .../lib/src/camerax_library.g.dart | 435 ++--- .../lib/src/image_analysis.dart | 19 +- .../pigeons/camerax_library.dart | 2 + .../test/test_camerax_library.g.dart | 363 ++-- 8 files changed, 967 insertions(+), 1456 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index b0edf3aa605c..13265a3492a2 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -15,11 +15,11 @@ import io.flutter.plugin.common.StandardMessageCodec; import java.io.ByteArrayOutputStream; import java.nio.ByteBuffer; -import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.HashMap; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) @@ -28,11 +28,7 @@ public class GeneratedCameraXLibrary { /** Generated class from Pigeon that represents data sent in messages. */ public static class ResolutionInfo { private @NonNull Long width; - - public @NonNull Long getWidth() { - return width; - } - + public @NonNull Long getWidth() { return width; } public void setWidth(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"width\" is null."); @@ -41,11 +37,7 @@ public void setWidth(@NonNull Long setterArg) { } private @NonNull Long height; - - public @NonNull Long getHeight() { - return height; - } - + public @NonNull Long getHeight() { return height; } public void setHeight(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"height\" is null."); @@ -55,22 +47,17 @@ public void setHeight(@NonNull Long setterArg) { /** Constructor is private to enforce null safety; use Builder. */ private ResolutionInfo() {} - public static final class Builder { private @Nullable Long width; - public @NonNull Builder setWidth(@NonNull Long setterArg) { this.width = setterArg; return this; } - private @Nullable Long height; - public @NonNull Builder setHeight(@NonNull Long setterArg) { this.height = setterArg; return this; } - public @NonNull ResolutionInfo build() { ResolutionInfo pigeonReturn = new ResolutionInfo(); pigeonReturn.setWidth(width); @@ -78,25 +65,18 @@ public static final class Builder { return pigeonReturn; } } - - @NonNull - Map toMap() { + @NonNull Map toMap() { Map toMapResult = new HashMap<>(); toMapResult.put("width", width); toMapResult.put("height", height); return toMapResult; } - static @NonNull ResolutionInfo fromMap(@NonNull Map map) { ResolutionInfo pigeonResult = new ResolutionInfo(); Object width = map.get("width"); - pigeonResult.setWidth( - (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); + pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer)width : (Long)width)); Object height = map.get("height"); - pigeonResult.setHeight( - (height == null) - ? null - : ((height instanceof Integer) ? (Integer) height : (Long) height)); + pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer)height : (Long)height)); return pigeonResult; } } @@ -104,11 +84,7 @@ Map toMap() { /** Generated class from Pigeon that represents data sent in messages. */ public static class CameraPermissionsErrorData { private @NonNull String errorCode; - - public @NonNull String getErrorCode() { - return errorCode; - } - + public @NonNull String getErrorCode() { return errorCode; } public void setErrorCode(@NonNull String setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"errorCode\" is null."); @@ -117,11 +93,7 @@ public void setErrorCode(@NonNull String setterArg) { } private @NonNull String description; - - public @NonNull String getDescription() { - return description; - } - + public @NonNull String getDescription() { return description; } public void setDescription(@NonNull String setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"description\" is null."); @@ -131,22 +103,17 @@ public void setDescription(@NonNull String setterArg) { /** Constructor is private to enforce null safety; use Builder. */ private CameraPermissionsErrorData() {} - public static final class Builder { private @Nullable String errorCode; - public @NonNull Builder setErrorCode(@NonNull String setterArg) { this.errorCode = setterArg; return this; } - private @Nullable String description; - public @NonNull Builder setDescription(@NonNull String setterArg) { this.description = setterArg; return this; } - public @NonNull CameraPermissionsErrorData build() { CameraPermissionsErrorData pigeonReturn = new CameraPermissionsErrorData(); pigeonReturn.setErrorCode(errorCode); @@ -154,21 +121,18 @@ public static final class Builder { return pigeonReturn; } } - - @NonNull - Map toMap() { + @NonNull Map toMap() { Map toMapResult = new HashMap<>(); toMapResult.put("errorCode", errorCode); toMapResult.put("description", description); return toMapResult; } - static @NonNull CameraPermissionsErrorData fromMap(@NonNull Map map) { CameraPermissionsErrorData pigeonResult = new CameraPermissionsErrorData(); Object errorCode = map.get("errorCode"); - pigeonResult.setErrorCode((String) errorCode); + pigeonResult.setErrorCode((String)errorCode); Object description = map.get("description"); - pigeonResult.setDescription((String) description); + pigeonResult.setDescription((String)description); return pigeonResult; } } @@ -176,11 +140,7 @@ Map toMap() { /** Generated class from Pigeon that represents data sent in messages. */ public static class ImagePlaneInformation { private @NonNull Long bytesPerRow; - - public @NonNull Long getBytesPerRow() { - return bytesPerRow; - } - + public @NonNull Long getBytesPerRow() { return bytesPerRow; } public void setBytesPerRow(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"bytesPerRow\" is null."); @@ -189,11 +149,7 @@ public void setBytesPerRow(@NonNull Long setterArg) { } private @NonNull Long bytesPerPixel; - - public @NonNull Long getBytesPerPixel() { - return bytesPerPixel; - } - + public @NonNull Long getBytesPerPixel() { return bytesPerPixel; } public void setBytesPerPixel(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"bytesPerPixel\" is null."); @@ -202,11 +158,7 @@ public void setBytesPerPixel(@NonNull Long setterArg) { } private @NonNull byte[] bytes; - - public @NonNull byte[] getBytes() { - return bytes; - } - + public @NonNull byte[] getBytes() { return bytes; } public void setBytes(@NonNull byte[] setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"bytes\" is null."); @@ -216,29 +168,22 @@ public void setBytes(@NonNull byte[] setterArg) { /** Constructor is private to enforce null safety; use Builder. */ private ImagePlaneInformation() {} - public static final class Builder { private @Nullable Long bytesPerRow; - public @NonNull Builder setBytesPerRow(@NonNull Long setterArg) { this.bytesPerRow = setterArg; return this; } - private @Nullable Long bytesPerPixel; - public @NonNull Builder setBytesPerPixel(@NonNull Long setterArg) { this.bytesPerPixel = setterArg; return this; } - private @Nullable byte[] bytes; - public @NonNull Builder setBytes(@NonNull byte[] setterArg) { this.bytes = setterArg; return this; } - public @NonNull ImagePlaneInformation build() { ImagePlaneInformation pigeonReturn = new ImagePlaneInformation(); pigeonReturn.setBytesPerRow(bytesPerRow); @@ -247,32 +192,21 @@ public static final class Builder { return pigeonReturn; } } - - @NonNull - Map toMap() { + @NonNull Map toMap() { Map toMapResult = new HashMap<>(); toMapResult.put("bytesPerRow", bytesPerRow); toMapResult.put("bytesPerPixel", bytesPerPixel); toMapResult.put("bytes", bytes); return toMapResult; } - static @NonNull ImagePlaneInformation fromMap(@NonNull Map map) { ImagePlaneInformation pigeonResult = new ImagePlaneInformation(); Object bytesPerRow = map.get("bytesPerRow"); - pigeonResult.setBytesPerRow( - (bytesPerRow == null) - ? null - : ((bytesPerRow instanceof Integer) ? (Integer) bytesPerRow : (Long) bytesPerRow)); + pigeonResult.setBytesPerRow((bytesPerRow == null) ? null : ((bytesPerRow instanceof Integer) ? (Integer)bytesPerRow : (Long)bytesPerRow)); Object bytesPerPixel = map.get("bytesPerPixel"); - pigeonResult.setBytesPerPixel( - (bytesPerPixel == null) - ? null - : ((bytesPerPixel instanceof Integer) - ? (Integer) bytesPerPixel - : (Long) bytesPerPixel)); + pigeonResult.setBytesPerPixel((bytesPerPixel == null) ? null : ((bytesPerPixel instanceof Integer) ? (Integer)bytesPerPixel : (Long)bytesPerPixel)); Object bytes = map.get("bytes"); - pigeonResult.setBytes((byte[]) bytes); + pigeonResult.setBytes((byte[])bytes); return pigeonResult; } } @@ -280,11 +214,7 @@ Map toMap() { /** Generated class from Pigeon that represents data sent in messages. */ public static class ImageInformation { private @NonNull Long width; - - public @NonNull Long getWidth() { - return width; - } - + public @NonNull Long getWidth() { return width; } public void setWidth(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"width\" is null."); @@ -293,11 +223,7 @@ public void setWidth(@NonNull Long setterArg) { } private @NonNull Long height; - - public @NonNull Long getHeight() { - return height; - } - + public @NonNull Long getHeight() { return height; } public void setHeight(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"height\" is null."); @@ -306,11 +232,7 @@ public void setHeight(@NonNull Long setterArg) { } private @NonNull Long format; - - public @NonNull Long getFormat() { - return format; - } - + public @NonNull Long getFormat() { return format; } public void setFormat(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"format\" is null."); @@ -319,11 +241,7 @@ public void setFormat(@NonNull Long setterArg) { } private @NonNull List imagePlanesInformation; - - public @NonNull List getImagePlanesInformation() { - return imagePlanesInformation; - } - + public @NonNull List getImagePlanesInformation() { return imagePlanesInformation; } public void setImagePlanesInformation(@NonNull List setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"imagePlanesInformation\" is null."); @@ -333,37 +251,27 @@ public void setImagePlanesInformation(@NonNull List sette /** Constructor is private to enforce null safety; use Builder. */ private ImageInformation() {} - public static final class Builder { private @Nullable Long width; - public @NonNull Builder setWidth(@NonNull Long setterArg) { this.width = setterArg; return this; } - private @Nullable Long height; - public @NonNull Builder setHeight(@NonNull Long setterArg) { this.height = setterArg; return this; } - private @Nullable Long format; - public @NonNull Builder setFormat(@NonNull Long setterArg) { this.format = setterArg; return this; } - private @Nullable List imagePlanesInformation; - - public @NonNull Builder setImagePlanesInformation( - @NonNull List setterArg) { + public @NonNull Builder setImagePlanesInformation(@NonNull List setterArg) { this.imagePlanesInformation = setterArg; return this; } - public @NonNull ImageInformation build() { ImageInformation pigeonReturn = new ImageInformation(); pigeonReturn.setWidth(width); @@ -373,9 +281,7 @@ public static final class Builder { return pigeonReturn; } } - - @NonNull - Map toMap() { + @NonNull Map toMap() { Map toMapResult = new HashMap<>(); toMapResult.put("width", width); toMapResult.put("height", height); @@ -383,41 +289,30 @@ Map toMap() { toMapResult.put("imagePlanesInformation", imagePlanesInformation); return toMapResult; } - static @NonNull ImageInformation fromMap(@NonNull Map map) { ImageInformation pigeonResult = new ImageInformation(); Object width = map.get("width"); - pigeonResult.setWidth( - (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); + pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer)width : (Long)width)); Object height = map.get("height"); - pigeonResult.setHeight( - (height == null) - ? null - : ((height instanceof Integer) ? (Integer) height : (Long) height)); + pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer)height : (Long)height)); Object format = map.get("format"); - pigeonResult.setFormat( - (format == null) - ? null - : ((format instanceof Integer) ? (Integer) format : (Long) format)); + pigeonResult.setFormat((format == null) ? null : ((format instanceof Integer) ? (Integer)format : (Long)format)); Object imagePlanesInformation = map.get("imagePlanesInformation"); - pigeonResult.setImagePlanesInformation((List) imagePlanesInformation); + pigeonResult.setImagePlanesInformation((List)imagePlanesInformation); return pigeonResult; } } public interface Result { void success(T result); - void error(Throwable error); } - private static class InstanceManagerHostApiCodec extends StandardMessageCodec { public static final InstanceManagerHostApiCodec INSTANCE = new InstanceManagerHostApiCodec(); - private InstanceManagerHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface InstanceManagerHostApi { void clear(); @@ -426,41 +321,35 @@ static MessageCodec getCodec() { return InstanceManagerHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `InstanceManagerHostApi` to handle messages through the - * `binaryMessenger`. - */ + /** Sets up an instance of `InstanceManagerHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, InstanceManagerHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.InstanceManagerHostApi.clear", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.InstanceManagerHostApi.clear", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - api.clear(); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + api.clear(); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class JavaObjectHostApiCodec extends StandardMessageCodec { public static final JavaObjectHostApiCodec INSTANCE = new JavaObjectHostApiCodec(); - private JavaObjectHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface JavaObjectHostApi { void dispose(@NonNull Long identifier); @@ -469,305 +358,238 @@ static MessageCodec getCodec() { return JavaObjectHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. - */ + /** Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, JavaObjectHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.JavaObjectHostApi.dispose", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.JavaObjectHostApi.dispose", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - api.dispose((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + api.dispose((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class JavaObjectFlutterApiCodec extends StandardMessageCodec { public static final JavaObjectFlutterApiCodec INSTANCE = new JavaObjectFlutterApiCodec(); - private JavaObjectFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class JavaObjectFlutterApi { private final BinaryMessenger binaryMessenger; - - public JavaObjectFlutterApi(BinaryMessenger argBinaryMessenger) { + public JavaObjectFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return JavaObjectFlutterApiCodec.INSTANCE; } public void dispose(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.JavaObjectFlutterApi.dispose", getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.JavaObjectFlutterApi.dispose", getCodec()); + channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { + callback.reply(null); + }); } } - private static class CameraInfoHostApiCodec extends StandardMessageCodec { public static final CameraInfoHostApiCodec INSTANCE = new CameraInfoHostApiCodec(); - private CameraInfoHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface CameraInfoHostApi { - @NonNull - Long getSensorRotationDegrees(@NonNull Long identifier); + @NonNull Long getSensorRotationDegrees(@NonNull Long identifier); /** The codec used by CameraInfoHostApi. */ static MessageCodec getCodec() { return CameraInfoHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. - */ + /** Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Long output = - api.getSensorRotationDegrees( - (identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Long output = api.getSensorRotationDegrees((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class CameraInfoFlutterApiCodec extends StandardMessageCodec { public static final CameraInfoFlutterApiCodec INSTANCE = new CameraInfoFlutterApiCodec(); - private CameraInfoFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class CameraInfoFlutterApi { private final BinaryMessenger binaryMessenger; - - public CameraInfoFlutterApi(BinaryMessenger argBinaryMessenger) { + public CameraInfoFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return CameraInfoFlutterApiCodec.INSTANCE; } public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoFlutterApi.create", getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraInfoFlutterApi.create", getCodec()); + channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { + callback.reply(null); + }); } } - private static class CameraSelectorHostApiCodec extends StandardMessageCodec { public static final CameraSelectorHostApiCodec INSTANCE = new CameraSelectorHostApiCodec(); - private CameraSelectorHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface CameraSelectorHostApi { void create(@NonNull Long identifier, @Nullable Long lensFacing); - - @NonNull - List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); + @NonNull List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); /** The codec used by CameraSelectorHostApi. */ static MessageCodec getCodec() { return CameraSelectorHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `CameraSelectorHostApi` to handle messages through the - * `binaryMessenger`. - */ + /** Sets up an instance of `CameraSelectorHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.create", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.create", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number lensFacingArg = (Number) args.get(1); - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - (lensFacingArg == null) ? null : lensFacingArg.longValue()); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number lensFacingArg = (Number)args.get(1); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (lensFacingArg == null) ? null : lensFacingArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.filter", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.filter", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - List cameraInfoIdsArg = (List) args.get(1); - if (cameraInfoIdsArg == null) { - throw new NullPointerException("cameraInfoIdsArg unexpectedly null."); - } - List output = - api.filter( - (identifierArg == null) ? null : identifierArg.longValue(), - cameraInfoIdsArg); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + List cameraInfoIdsArg = (List)args.get(1); + if (cameraInfoIdsArg == null) { + throw new NullPointerException("cameraInfoIdsArg unexpectedly null."); + } + List output = api.filter((identifierArg == null) ? null : identifierArg.longValue(), cameraInfoIdsArg); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class CameraSelectorFlutterApiCodec extends StandardMessageCodec { - public static final CameraSelectorFlutterApiCodec INSTANCE = - new CameraSelectorFlutterApiCodec(); - + public static final CameraSelectorFlutterApiCodec INSTANCE = new CameraSelectorFlutterApiCodec(); private CameraSelectorFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class CameraSelectorFlutterApi { private final BinaryMessenger binaryMessenger; - - public CameraSelectorFlutterApi(BinaryMessenger argBinaryMessenger) { + public CameraSelectorFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return CameraSelectorFlutterApiCodec.INSTANCE; } - public void create( - @NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { + public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg, lensFacingArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); + channel.send(new ArrayList(Arrays.asList(identifierArg, lensFacingArg)), channelReply -> { + callback.reply(null); + }); } } - private static class ProcessCameraProviderHostApiCodec extends StandardMessageCodec { - public static final ProcessCameraProviderHostApiCodec INSTANCE = - new ProcessCameraProviderHostApiCodec(); - + public static final ProcessCameraProviderHostApiCodec INSTANCE = new ProcessCameraProviderHostApiCodec(); private ProcessCameraProviderHostApiCodec() {} } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface ProcessCameraProviderHostApi { void getInstance(Result result); - - @NonNull - List getAvailableCameraInfos(@NonNull Long identifier); - - @NonNull - Long bindToLifecycle( - @NonNull Long identifier, - @NonNull Long cameraSelectorIdentifier, - @NonNull List useCaseIds); - - @NonNull - Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); - + @NonNull List getAvailableCameraInfos(@NonNull Long identifier); + @NonNull Long bindToLifecycle(@NonNull Long identifier, @NonNull Long cameraSelectorIdentifier, @NonNull List useCaseIds); + @NonNull Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); void unbind(@NonNull Long identifier, @NonNull List useCaseIds); - void unbindAll(@NonNull Long identifier); /** The codec used by ProcessCameraProviderHostApi. */ @@ -775,318 +597,257 @@ static MessageCodec getCodec() { return ProcessCameraProviderHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the - * `binaryMessenger`. - */ + /** Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, ProcessCameraProviderHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - Result resultCallback = - new Result() { - public void success(Long result) { - wrapped.put("result", result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - wrapped.put("error", wrapError(error)); - reply.reply(wrapped); - } - }; - - api.getInstance(resultCallback); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + Result resultCallback = new Result() { + public void success(Long result) { + wrapped.put("result", result); + reply.reply(wrapped); + } + public void error(Throwable error) { + wrapped.put("error", wrapError(error)); reply.reply(wrapped); } - }); + }; + + api.getInstance(resultCallback); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + reply.reply(wrapped); + } + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - List output = - api.getAvailableCameraInfos( - (identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + List output = api.getAvailableCameraInfos((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number cameraSelectorIdentifierArg = (Number) args.get(1); - if (cameraSelectorIdentifierArg == null) { - throw new NullPointerException( - "cameraSelectorIdentifierArg unexpectedly null."); - } - List useCaseIdsArg = (List) args.get(2); - if (useCaseIdsArg == null) { - throw new NullPointerException("useCaseIdsArg unexpectedly null."); - } - Long output = - api.bindToLifecycle( - (identifierArg == null) ? null : identifierArg.longValue(), - (cameraSelectorIdentifierArg == null) - ? null - : cameraSelectorIdentifierArg.longValue(), - useCaseIdsArg); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number cameraSelectorIdentifierArg = (Number)args.get(1); + if (cameraSelectorIdentifierArg == null) { + throw new NullPointerException("cameraSelectorIdentifierArg unexpectedly null."); + } + List useCaseIdsArg = (List)args.get(2); + if (useCaseIdsArg == null) { + throw new NullPointerException("useCaseIdsArg unexpectedly null."); + } + Long output = api.bindToLifecycle((identifierArg == null) ? null : identifierArg.longValue(), (cameraSelectorIdentifierArg == null) ? null : cameraSelectorIdentifierArg.longValue(), useCaseIdsArg); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number useCaseIdentifierArg = (Number) args.get(1); - if (useCaseIdentifierArg == null) { - throw new NullPointerException("useCaseIdentifierArg unexpectedly null."); - } - Boolean output = - api.isBound( - (identifierArg == null) ? null : identifierArg.longValue(), - (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number useCaseIdentifierArg = (Number)args.get(1); + if (useCaseIdentifierArg == null) { + throw new NullPointerException("useCaseIdentifierArg unexpectedly null."); + } + Boolean output = api.isBound((identifierArg == null) ? null : identifierArg.longValue(), (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - List useCaseIdsArg = (List) args.get(1); - if (useCaseIdsArg == null) { - throw new NullPointerException("useCaseIdsArg unexpectedly null."); - } - api.unbind( - (identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + List useCaseIdsArg = (List)args.get(1); + if (useCaseIdsArg == null) { + throw new NullPointerException("useCaseIdsArg unexpectedly null."); + } + api.unbind((identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - api.unbindAll((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + api.unbindAll((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class ProcessCameraProviderFlutterApiCodec extends StandardMessageCodec { - public static final ProcessCameraProviderFlutterApiCodec INSTANCE = - new ProcessCameraProviderFlutterApiCodec(); - + public static final ProcessCameraProviderFlutterApiCodec INSTANCE = new ProcessCameraProviderFlutterApiCodec(); private ProcessCameraProviderFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class ProcessCameraProviderFlutterApi { private final BinaryMessenger binaryMessenger; - - public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger) { + public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return ProcessCameraProviderFlutterApiCodec.INSTANCE; } public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", - getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", getCodec()); + channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { + callback.reply(null); + }); } } - private static class CameraFlutterApiCodec extends StandardMessageCodec { public static final CameraFlutterApiCodec INSTANCE = new CameraFlutterApiCodec(); - private CameraFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class CameraFlutterApi { private final BinaryMessenger binaryMessenger; - - public CameraFlutterApi(BinaryMessenger argBinaryMessenger) { + public CameraFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return CameraFlutterApiCodec.INSTANCE; } public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraFlutterApi.create", getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraFlutterApi.create", getCodec()); + channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { + callback.reply(null); + }); } } - private static class SystemServicesHostApiCodec extends StandardMessageCodec { public static final SystemServicesHostApiCodec INSTANCE = new SystemServicesHostApiCodec(); - private SystemServicesHostApiCodec() {} - @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte) 128: + case (byte)128: return CameraPermissionsErrorData.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); + } } - @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof CameraPermissionsErrorData) { stream.write(128); writeValue(stream, ((CameraPermissionsErrorData) value).toMap()); - } else { + } else +{ super.writeValue(stream, value); } } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface SystemServicesHostApi { - void requestCameraPermissions( - @NonNull Boolean enableAudio, Result result); - - void startListeningForDeviceOrientationChange( - @NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); - + void requestCameraPermissions(@NonNull Boolean enableAudio, Result result); + void startListeningForDeviceOrientationChange(@NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); void stopListeningForDeviceOrientationChange(); /** The codec used by SystemServicesHostApi. */ @@ -1094,205 +855,163 @@ static MessageCodec getCodec() { return SystemServicesHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `SystemServicesHostApi` to handle messages through the - * `binaryMessenger`. - */ + /** Sets up an instance of `SystemServicesHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, SystemServicesHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Boolean enableAudioArg = (Boolean) args.get(0); - if (enableAudioArg == null) { - throw new NullPointerException("enableAudioArg unexpectedly null."); - } - Result resultCallback = - new Result() { - public void success(CameraPermissionsErrorData result) { - wrapped.put("result", result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - wrapped.put("error", wrapError(error)); - reply.reply(wrapped); - } - }; - - api.requestCameraPermissions(enableAudioArg, resultCallback); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Boolean enableAudioArg = (Boolean)args.get(0); + if (enableAudioArg == null) { + throw new NullPointerException("enableAudioArg unexpectedly null."); + } + Result resultCallback = new Result() { + public void success(CameraPermissionsErrorData result) { + wrapped.put("result", result); reply.reply(wrapped); } - }); + public void error(Throwable error) { + wrapped.put("error", wrapError(error)); + reply.reply(wrapped); + } + }; + + api.requestCameraPermissions(enableAudioArg, resultCallback); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + reply.reply(wrapped); + } + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Boolean isFrontFacingArg = (Boolean) args.get(0); - if (isFrontFacingArg == null) { - throw new NullPointerException("isFrontFacingArg unexpectedly null."); - } - Number sensorOrientationArg = (Number) args.get(1); - if (sensorOrientationArg == null) { - throw new NullPointerException("sensorOrientationArg unexpectedly null."); - } - api.startListeningForDeviceOrientationChange( - isFrontFacingArg, - (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Boolean isFrontFacingArg = (Boolean)args.get(0); + if (isFrontFacingArg == null) { + throw new NullPointerException("isFrontFacingArg unexpectedly null."); + } + Number sensorOrientationArg = (Number)args.get(1); + if (sensorOrientationArg == null) { + throw new NullPointerException("sensorOrientationArg unexpectedly null."); + } + api.startListeningForDeviceOrientationChange(isFrontFacingArg, (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - api.stopListeningForDeviceOrientationChange(); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + api.stopListeningForDeviceOrientationChange(); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class SystemServicesFlutterApiCodec extends StandardMessageCodec { - public static final SystemServicesFlutterApiCodec INSTANCE = - new SystemServicesFlutterApiCodec(); - + public static final SystemServicesFlutterApiCodec INSTANCE = new SystemServicesFlutterApiCodec(); private SystemServicesFlutterApiCodec() {} } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class SystemServicesFlutterApi { private final BinaryMessenger binaryMessenger; - - public SystemServicesFlutterApi(BinaryMessenger argBinaryMessenger) { + public SystemServicesFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return SystemServicesFlutterApiCodec.INSTANCE; } public void onDeviceOrientationChanged(@NonNull String orientationArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", - getCodec()); - channel.send( - new ArrayList(Arrays.asList(orientationArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", getCodec()); + channel.send(new ArrayList(Arrays.asList(orientationArg)), channelReply -> { + callback.reply(null); + }); } - public void onCameraError(@NonNull String errorDescriptionArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", - getCodec()); - channel.send( - new ArrayList(Arrays.asList(errorDescriptionArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", getCodec()); + channel.send(new ArrayList(Arrays.asList(errorDescriptionArg)), channelReply -> { + callback.reply(null); + }); } } - private static class PreviewHostApiCodec extends StandardMessageCodec { public static final PreviewHostApiCodec INSTANCE = new PreviewHostApiCodec(); - private PreviewHostApiCodec() {} - @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte) 128: + case (byte)128: return ResolutionInfo.fromMap((Map) readValue(buffer)); - - case (byte) 129: + + case (byte)129: return ResolutionInfo.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); + } } - @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof ResolutionInfo) { stream.write(128); writeValue(stream, ((ResolutionInfo) value).toMap()); - } else if (value instanceof ResolutionInfo) { + } else + if (value instanceof ResolutionInfo) { stream.write(129); writeValue(stream, ((ResolutionInfo) value).toMap()); - } else { + } else +{ super.writeValue(stream, value); } } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface PreviewHostApi { - void create( - @NonNull Long identifier, - @Nullable Long rotation, - @Nullable ResolutionInfo targetResolution); - - @NonNull - Long setSurfaceProvider(@NonNull Long identifier); - + void create(@NonNull Long identifier, @Nullable Long rotation, @Nullable ResolutionInfo targetResolution); + @NonNull Long setSurfaceProvider(@NonNull Long identifier); void releaseFlutterSurfaceTexture(); - - @NonNull - ResolutionInfo getResolutionInfo(@NonNull Long identifier); + @NonNull ResolutionInfo getResolutionInfo(@NonNull Long identifier); /** The codec used by PreviewHostApi. */ static MessageCodec getCodec() { @@ -1303,151 +1022,129 @@ static MessageCodec getCodec() { static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.create", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.create", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number rotationArg = (Number) args.get(1); - ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - (rotationArg == null) ? null : rotationArg.longValue(), - targetResolutionArg); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number rotationArg = (Number)args.get(1); + ResolutionInfo targetResolutionArg = (ResolutionInfo)args.get(2); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (rotationArg == null) ? null : rotationArg.longValue(), targetResolutionArg); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Long output = - api.setSurfaceProvider( - (identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Long output = api.setSurfaceProvider((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - api.releaseFlutterSurfaceTexture(); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + api.releaseFlutterSurfaceTexture(); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.getResolutionInfo", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.getResolutionInfo", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - ResolutionInfo output = - api.getResolutionInfo( - (identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + ResolutionInfo output = api.getResolutionInfo((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class ImageCaptureHostApiCodec extends StandardMessageCodec { public static final ImageCaptureHostApiCodec INSTANCE = new ImageCaptureHostApiCodec(); - private ImageCaptureHostApiCodec() {} - @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte) 128: + case (byte)128: return ResolutionInfo.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); + } } - @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof ResolutionInfo) { stream.write(128); writeValue(stream, ((ResolutionInfo) value).toMap()); - } else { + } else +{ super.writeValue(stream, value); } } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface ImageCaptureHostApi { - void create( - @NonNull Long identifier, - @Nullable Long flashMode, - @Nullable ResolutionInfo targetResolution); - + void create(@NonNull Long identifier, @Nullable Long flashMode, @Nullable ResolutionInfo targetResolution); void setFlashMode(@NonNull Long identifier, @NonNull Long flashMode); - void takePicture(@NonNull Long identifier, Result result); /** The codec used by ImageCaptureHostApi. */ @@ -1455,283 +1152,271 @@ static MessageCodec getCodec() { return ImageCaptureHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `ImageCaptureHostApi` to handle messages through the - * `binaryMessenger`. - */ + /** Sets up an instance of `ImageCaptureHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.create", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.create", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number flashModeArg = (Number) args.get(1); - ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - (flashModeArg == null) ? null : flashModeArg.longValue(), - targetResolutionArg); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number flashModeArg = (Number)args.get(1); + ResolutionInfo targetResolutionArg = (ResolutionInfo)args.get(2); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue(), targetResolutionArg); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Number flashModeArg = (Number) args.get(1); - if (flashModeArg == null) { - throw new NullPointerException("flashModeArg unexpectedly null."); - } - api.setFlashMode( - (identifierArg == null) ? null : identifierArg.longValue(), - (flashModeArg == null) ? null : flashModeArg.longValue()); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number flashModeArg = (Number)args.get(1); + if (flashModeArg == null) { + throw new NullPointerException("flashModeArg unexpectedly null."); + } + api.setFlashMode((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.takePicture", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageCaptureHostApi.takePicture", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - Result resultCallback = - new Result() { - public void success(String result) { - wrapped.put("result", result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - wrapped.put("error", wrapError(error)); - reply.reply(wrapped); - } - }; - - api.takePicture( - (identifierArg == null) ? null : identifierArg.longValue(), resultCallback); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Result resultCallback = new Result() { + public void success(String result) { + wrapped.put("result", result); reply.reply(wrapped); } - }); + public void error(Throwable error) { + wrapped.put("error", wrapError(error)); + reply.reply(wrapped); + } + }; + + api.takePicture((identifierArg == null) ? null : identifierArg.longValue(), resultCallback); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + reply.reply(wrapped); + } + }); } else { channel.setMessageHandler(null); } } } } - private static class ImageAnalysisHostApiCodec extends StandardMessageCodec { public static final ImageAnalysisHostApiCodec INSTANCE = new ImageAnalysisHostApiCodec(); - private ImageAnalysisHostApiCodec() {} - @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte) 128: + case (byte)128: return ResolutionInfo.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); + } } - @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof ResolutionInfo) { stream.write(128); writeValue(stream, ((ResolutionInfo) value).toMap()); - } else { + } else +{ super.writeValue(stream, value); } } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ public interface ImageAnalysisHostApi { void create(@NonNull Long identifier, @Nullable ResolutionInfo targetResolution); - void setAnalyzer(@NonNull Long identifier); + void clearAnalyzer(@NonNull Long identifier); /** The codec used by ImageAnalysisHostApi. */ static MessageCodec getCodec() { return ImageAnalysisHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `ImageAnalysisHostApi` to handle messages through the - * `binaryMessenger`. - */ + /** Sets up an instance of `ImageAnalysisHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.create", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.create", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(1); - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - targetResolutionArg); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + ResolutionInfo targetResolutionArg = (ResolutionInfo)args.get(1); + api.create((identifierArg == null) ? null : identifierArg.longValue(), targetResolutionArg); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer", getCodec()); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", null); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", getCodec()); + if (api != null) { + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + Number identifierArg = (Number)args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + api.clearAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", null); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static class ImageAnalysisFlutterApiCodec extends StandardMessageCodec { public static final ImageAnalysisFlutterApiCodec INSTANCE = new ImageAnalysisFlutterApiCodec(); - private ImageAnalysisFlutterApiCodec() {} - @Override protected Object readValueOfType(byte type, ByteBuffer buffer) { switch (type) { - case (byte) 128: + case (byte)128: return ImageInformation.fromMap((Map) readValue(buffer)); - - case (byte) 129: + + case (byte)129: return ImagePlaneInformation.fromMap((Map) readValue(buffer)); - - default: + + default: return super.readValueOfType(type, buffer); + } } - @Override - protected void writeValue(ByteArrayOutputStream stream, Object value) { + protected void writeValue(ByteArrayOutputStream stream, Object value) { if (value instanceof ImageInformation) { stream.write(128); writeValue(stream, ((ImageInformation) value).toMap()); - } else if (value instanceof ImagePlaneInformation) { + } else + if (value instanceof ImagePlaneInformation) { stream.write(129); writeValue(stream, ((ImagePlaneInformation) value).toMap()); - } else { + } else +{ super.writeValue(stream, value); } } } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ public static class ImageAnalysisFlutterApi { private final BinaryMessenger binaryMessenger; - - public ImageAnalysisFlutterApi(BinaryMessenger argBinaryMessenger) { + public ImageAnalysisFlutterApi(BinaryMessenger argBinaryMessenger){ this.binaryMessenger = argBinaryMessenger; } - public interface Reply { void reply(T reply); } - static MessageCodec getCodec() { return ImageAnalysisFlutterApiCodec.INSTANCE; } - public void onImageAnalyzed( - @NonNull ImageInformation imageInformationArg, Reply callback) { + public void onImageAnalyzed(@NonNull ImageInformation imageInformationArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed", - getCodec()); - channel.send( - new ArrayList(Arrays.asList(imageInformationArg)), - channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed", getCodec()); + channel.send(new ArrayList(Arrays.asList(imageInformationArg)), channelReply -> { + callback.reply(null); + }); } } - private static Map wrapError(Throwable exception) { Map errorMap = new HashMap<>(); errorMap.put("message", exception.toString()); errorMap.put("code", exception.getClass().getSimpleName()); - errorMap.put( - "details", - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + errorMap.put("details", "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); return errorMap; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index 8591803f3ea2..451ec5c11a1a 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -37,6 +37,7 @@ public ImageAnalysisHostApiImpl( public void setContext(Context context) { this.context = context; } + @Override public void create(@NonNull Long identifier, @Nullable ResolutionInfo targetResolution) { @@ -55,7 +56,6 @@ public void setAnalyzer(@NonNull Long identifier) { ImageAnalysis imageAnalysis = (ImageAnalysis) Objects.requireNonNull(instanceManager.getInstance(identifier)); ImageAnalysis.Analyzer analyzer = createImageAnalysisAnalyzer(); - // TODO(camsim99): Determine what executor to use. imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(context), analyzer); } @@ -98,4 +98,12 @@ public void analyze(@NonNull ImageProxy image) { } }; } + + @Override + public void clearAnalyzer(@NonNull Long identifier) { + ImageAnalysis imageAnalysis = + (ImageAnalysis) Objects.requireNonNull(instanceManager.getInstance(identifier)); + imageAnalysis.clearAnalyzer(); + } + } diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index c668871b7a62..9d0e0fafce54 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -13,6 +13,7 @@ import 'package:video_player/video_player.dart'; import 'camera_controller.dart'; import 'camera_preview.dart'; +import 'camera_image.dart'; /// Camera example home widget. class CameraExampleHome extends StatefulWidget { @@ -276,7 +277,7 @@ class _CameraExampleHomeState extends State IconButton( icon: const Icon(Icons.flash_on), color: Colors.blue, - onPressed: () {}, // TODO(camsim99): Add functionality back here. + onPressed: () {controller?.startImageStream((CameraImage image) {}); }, // TODO(camsim99): Add functionality back here. ), // The exposure and focus mode are currently not supported on the web. ...!kIsWeb @@ -285,7 +286,7 @@ class _CameraExampleHomeState extends State icon: const Icon(Icons.exposure), color: Colors.blue, onPressed: - () {}, // TODO(camsim99): Add functionality back here. + () {controller?.stopImageStream(); }, // TODO(camsim99): Add functionality back here. ), IconButton( icon: const Icon(Icons.filter_center_focus), diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 7bf9442db560..d00a108f6c8b 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -179,18 +179,15 @@ class AndroidCameraCameraX extends CameraPlatform { /// the CameraX library, this method just retrieves information about the /// camera and sends a [CameraInitializedEvent]. /// - /// [imageFormatGroup] is used to specify the image formatting used. - /// On Android this defaults to ImageFormat.YUV_420_888 and applies only to - /// the image stream. + /// [imageFormatGroup] is used to specify the image formatting used for image + /// streaming, but CameraX currently only supports YUV_420_888, supported by + /// Flutter, and RGBA, not supported by Flutter. CameraX uses YUV_420_888 + /// by default, so [imageFormatGroup] is not used. @override Future initializeCamera( int cameraId, { ImageFormatGroup imageFormatGroup = ImageFormatGroup.unknown, }) async { - // TODO(camsim99): Use imageFormatGroup to configure ImageAnalysis use case - // for image streaming. - // https://github.com/flutter/flutter/issues/120463 - // Configure CameraInitializedEvent to send as representation of a // configured camera: // Retrieve preview resolution. @@ -257,7 +254,8 @@ class AndroidCameraCameraX extends CameraPlatform { /// [cameraId] not used. @override Future pausePreview(int cameraId) async { - _unbindPreviewFromLifecycle(); + assert(preview != null); + _unbindUseCaseFromLifecycle(preview!); _previewIsPaused = true; } @@ -307,9 +305,11 @@ class AndroidCameraCameraX extends CameraPlatform { /// A new streamed frame is available. /// /// Listening to this stream will start streaming, and canceling will stop. - /// Pausing will throw a [CameraException], as pausing the stream would cause - /// very high memory usage; to temporarily stop receiving frames, cancel, then - /// listen again later. + /// To temporarily stop receiving frames, cancel, then listen again later. + /// Pausing/resuming is not supported, as pausing the stream would cause + /// very high memory usage, and will throw an exception due to the + /// implementation using a broadcast [StreamController], which does not + /// support those operations. /// /// [cameraId] and [options] are not used. @override @@ -340,19 +340,6 @@ class AndroidCameraCameraX extends CameraPlatform { .bindToLifecycle(cameraSelector!, [preview!]); } - /// Unbinds [preview] instance from camera lifecycle controlled by the - /// [processCameraProvider]. - Future _unbindPreviewFromLifecycle() async { - final bool imageAnalysisIsBound = preview != null && await processCameraProvider!.isBound(imageAnalysis!); - if (imageAnalysisIsBound) { - return; - } - - assert(processCameraProvider != null); - - processCameraProvider!.unbind([preview!]); - } - /// Binds [imageAnalysis] instance to camera lifecycle controlled by the /// [processCameraProvider]. Future _bindImageAnalysisToLifecycle() async { @@ -360,6 +347,7 @@ class AndroidCameraCameraX extends CameraPlatform { assert(cameraSelector != null); // TODO(camsim99): Support resolution configuration. + // Defaults to YUV_420_888 image format. imageAnalysis = ImageAnalysis(); imageAnalysis!.setAnalyzer(); @@ -369,26 +357,22 @@ class AndroidCameraCameraX extends CameraPlatform { .bindToLifecycle(cameraSelector!, [imageAnalysis!]); } - /// Unbinds [imageAnalysis] instance from camera lifecycle controlled by the + /// Unbinds [useCase] from camera lifecycle controlled by the /// [processCameraProvider]. - // TODO(camsim99): Make general unbind method since logic will be same. - Future _unbindImageAnalysisFromLifecycle() async { - final bool imageAnalysisIsBound = imageAnalysis != null && await processCameraProvider!.isBound(imageAnalysis!); - if (imageAnalysisIsBound) { + Future _unbindUseCaseFromLifecycle(UseCase useCase) async { + final bool useCaseIsBound = await processCameraProvider!.isBound(useCase); + if (!useCaseIsBound) { return; } assert(processCameraProvider != null); - - processCameraProvider!.unbind([imageAnalysis!]); + processCameraProvider!.unbind([useCase]); } // Methods for configuring image streaming: void _configureStreamController(StreamController controller) { controller.onListen = _onFrameStreamListen; - controller.onPause = _onFrameStreamPauseResume; - controller.onResume = _onFrameStreamPauseResume; controller.onCancel = _onFrameStreamCancel; } @@ -396,14 +380,10 @@ class AndroidCameraCameraX extends CameraPlatform { _bindImageAnalysisToLifecycle(); } - void _onFrameStreamPauseResume() { - // Consistent implementation with camera_android. - throw CameraException('InvalidCall', - 'Pause and resume are not supported for onStreamedFrameAvailable'); - } - FutureOr _onFrameStreamCancel() async { - _unbindImageAnalysisFromLifecycle(); + assert(imageAnalysis != null); + imageAnalysis!.clearAnalyzer(); + _unbindUseCaseFromLifecycle(imageAnalysis!); } // Methods for mapping Flutter camera constants to CameraX constants: diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index 0527335909e9..075f5eb76de2 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -117,9 +117,7 @@ class ImageInformation { width: pigeonMap['width']! as int, height: pigeonMap['height']! as int, format: pigeonMap['format']! as int, - imagePlanesInformation: - (pigeonMap['imagePlanesInformation'] as List?)! - .cast(), + imagePlanesInformation: (pigeonMap['imagePlanesInformation'] as List?)!.cast(), ); } } @@ -132,8 +130,7 @@ class InstanceManagerHostApi { /// Constructor for [InstanceManagerHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - InstanceManagerHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + InstanceManagerHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -141,8 +138,7 @@ class InstanceManagerHostApi { Future clear() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send(null) as Map?; if (replyMap == null) { @@ -151,8 +147,7 @@ class InstanceManagerHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -172,8 +167,7 @@ class JavaObjectHostApi { /// Constructor for [JavaObjectHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - JavaObjectHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + JavaObjectHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -181,8 +175,7 @@ class JavaObjectHostApi { Future dispose(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -191,8 +184,7 @@ class JavaObjectHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -207,27 +199,22 @@ class JavaObjectHostApi { class _JavaObjectFlutterApiCodec extends StandardMessageCodec { const _JavaObjectFlutterApiCodec(); } - abstract class JavaObjectFlutterApi { static const MessageCodec codec = _JavaObjectFlutterApiCodec(); void dispose(int identifier); - static void setup(JavaObjectFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(JavaObjectFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaObjectFlutterApi.dispose', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.JavaObjectFlutterApi.dispose', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null, expected non-null int.'); api.dispose(arg_identifier!); return; }); @@ -244,8 +231,7 @@ class CameraInfoHostApi { /// Constructor for [CameraInfoHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - CameraInfoHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + CameraInfoHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -253,8 +239,7 @@ class CameraInfoHostApi { Future getSensorRotationDegrees(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -263,8 +248,7 @@ class CameraInfoHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -284,27 +268,22 @@ class CameraInfoHostApi { class _CameraInfoFlutterApiCodec extends StandardMessageCodec { const _CameraInfoFlutterApiCodec(); } - abstract class CameraInfoFlutterApi { static const MessageCodec codec = _CameraInfoFlutterApiCodec(); void create(int identifier); - static void setup(CameraInfoFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(CameraInfoFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoFlutterApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraInfoFlutterApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); @@ -321,8 +300,7 @@ class CameraSelectorHostApi { /// Constructor for [CameraSelectorHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - CameraSelectorHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + CameraSelectorHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -330,19 +308,16 @@ class CameraSelectorHostApi { Future create(int arg_identifier, int? arg_lensFacing) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_lensFacing]) - as Map?; + await channel.send([arg_identifier, arg_lensFacing]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -353,22 +328,18 @@ class CameraSelectorHostApi { } } - Future> filter( - int arg_identifier, List arg_cameraInfoIds) async { + Future> filter(int arg_identifier, List arg_cameraInfoIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_cameraInfoIds]) - as Map?; + await channel.send([arg_identifier, arg_cameraInfoIds]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -388,27 +359,22 @@ class CameraSelectorHostApi { class _CameraSelectorFlutterApiCodec extends StandardMessageCodec { const _CameraSelectorFlutterApiCodec(); } - abstract class CameraSelectorFlutterApi { static const MessageCodec codec = _CameraSelectorFlutterApiCodec(); void create(int identifier, int? lensFacing); - static void setup(CameraSelectorFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(CameraSelectorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null, expected non-null int.'); final int? arg_lensFacing = (args[1] as int?); api.create(arg_identifier!, arg_lensFacing); return; @@ -426,18 +392,15 @@ class ProcessCameraProviderHostApi { /// Constructor for [ProcessCameraProviderHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - ProcessCameraProviderHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + ProcessCameraProviderHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - static const MessageCodec codec = - _ProcessCameraProviderHostApiCodec(); + static const MessageCodec codec = _ProcessCameraProviderHostApiCodec(); Future getInstance() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send(null) as Map?; if (replyMap == null) { @@ -446,8 +409,7 @@ class ProcessCameraProviderHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -465,9 +427,7 @@ class ProcessCameraProviderHostApi { Future> getAvailableCameraInfos(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', - codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -476,8 +436,7 @@ class ProcessCameraProviderHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -493,25 +452,18 @@ class ProcessCameraProviderHostApi { } } - Future bindToLifecycle(int arg_identifier, - int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { + Future bindToLifecycle(int arg_identifier, int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', - codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = await channel.send([ - arg_identifier, - arg_cameraSelectorIdentifier, - arg_useCaseIds - ]) as Map?; + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier, arg_cameraSelectorIdentifier, arg_useCaseIds]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -529,19 +481,16 @@ class ProcessCameraProviderHostApi { Future isBound(int arg_identifier, int arg_useCaseIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_useCaseIdentifier]) - as Map?; + await channel.send([arg_identifier, arg_useCaseIdentifier]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -559,19 +508,16 @@ class ProcessCameraProviderHostApi { Future unbind(int arg_identifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_useCaseIds]) - as Map?; + await channel.send([arg_identifier, arg_useCaseIds]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -584,8 +530,7 @@ class ProcessCameraProviderHostApi { Future unbindAll(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -594,8 +539,7 @@ class ProcessCameraProviderHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -610,28 +554,22 @@ class ProcessCameraProviderHostApi { class _ProcessCameraProviderFlutterApiCodec extends StandardMessageCodec { const _ProcessCameraProviderFlutterApiCodec(); } - abstract class ProcessCameraProviderFlutterApi { - static const MessageCodec codec = - _ProcessCameraProviderFlutterApiCodec(); + static const MessageCodec codec = _ProcessCameraProviderFlutterApiCodec(); void create(int identifier); - static void setup(ProcessCameraProviderFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(ProcessCameraProviderFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); @@ -643,7 +581,6 @@ abstract class ProcessCameraProviderFlutterApi { class _CameraFlutterApiCodec extends StandardMessageCodec { const _CameraFlutterApiCodec(); } - abstract class CameraFlutterApi { static const MessageCodec codec = _CameraFlutterApiCodec(); @@ -651,18 +588,15 @@ abstract class CameraFlutterApi { static void setup(CameraFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraFlutterApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraFlutterApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); @@ -678,19 +612,20 @@ class _SystemServicesHostApiCodec extends StandardMessageCodec { if (value is CameraPermissionsErrorData) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } @@ -699,29 +634,24 @@ class SystemServicesHostApi { /// Constructor for [SystemServicesHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - SystemServicesHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + SystemServicesHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _SystemServicesHostApiCodec(); - Future requestCameraPermissions( - bool arg_enableAudio) async { + Future requestCameraPermissions(bool arg_enableAudio) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', - codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = await channel - .send([arg_enableAudio]) as Map?; + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_enableAudio]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -732,23 +662,18 @@ class SystemServicesHostApi { } } - Future startListeningForDeviceOrientationChange( - bool arg_isFrontFacing, int arg_sensorOrientation) async { + Future startListeningForDeviceOrientationChange(bool arg_isFrontFacing, int arg_sensorOrientation) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', - codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_isFrontFacing, arg_sensorOrientation]) - as Map?; + await channel.send([arg_isFrontFacing, arg_sensorOrientation]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -761,9 +686,7 @@ class SystemServicesHostApi { Future stopListeningForDeviceOrientationChange() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', - codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send(null) as Map?; if (replyMap == null) { @@ -772,8 +695,7 @@ class SystemServicesHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -788,29 +710,23 @@ class SystemServicesHostApi { class _SystemServicesFlutterApiCodec extends StandardMessageCodec { const _SystemServicesFlutterApiCodec(); } - abstract class SystemServicesFlutterApi { static const MessageCodec codec = _SystemServicesFlutterApiCodec(); void onDeviceOrientationChanged(String orientation); void onCameraError(String errorDescription); - static void setup(SystemServicesFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(SystemServicesFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); final List args = (message as List?)!; final String? arg_orientation = (args[0] as String?); - assert(arg_orientation != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null, expected non-null String.'); + assert(arg_orientation != null, 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null, expected non-null String.'); api.onDeviceOrientationChanged(arg_orientation!); return; }); @@ -818,18 +734,15 @@ abstract class SystemServicesFlutterApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); final List args = (message as List?)!; final String? arg_errorDescription = (args[0] as String?); - assert(arg_errorDescription != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null, expected non-null String.'); + assert(arg_errorDescription != null, 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null, expected non-null String.'); api.onCameraError(arg_errorDescription!); return; }); @@ -845,25 +758,27 @@ class _PreviewHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else if (value is ResolutionInfo) { + } else + if (value is ResolutionInfo) { buffer.putUint8(129); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - case 129: + + case 129: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } @@ -872,29 +787,24 @@ class PreviewHostApi { /// Constructor for [PreviewHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - PreviewHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + PreviewHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _PreviewHostApiCodec(); - Future create(int arg_identifier, int? arg_rotation, - ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_rotation, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.create', codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = await channel - .send([arg_identifier, arg_rotation, arg_targetResolution]) - as Map?; + 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier, arg_rotation, arg_targetResolution]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -907,8 +817,7 @@ class PreviewHostApi { Future setSurfaceProvider(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -917,8 +826,7 @@ class PreviewHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -936,8 +844,7 @@ class PreviewHostApi { Future releaseFlutterSurfaceTexture() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send(null) as Map?; if (replyMap == null) { @@ -946,8 +853,7 @@ class PreviewHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -960,8 +866,7 @@ class PreviewHostApi { Future getResolutionInfo(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -970,8 +875,7 @@ class PreviewHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -995,19 +899,20 @@ class _ImageCaptureHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } @@ -1016,29 +921,24 @@ class ImageCaptureHostApi { /// Constructor for [ImageCaptureHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - ImageCaptureHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + ImageCaptureHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _ImageCaptureHostApiCodec(); - Future create(int arg_identifier, int? arg_flashMode, - ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_flashMode, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = await channel.send( - [arg_identifier, arg_flashMode, arg_targetResolution]) - as Map?; + 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier, arg_flashMode, arg_targetResolution]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -1051,19 +951,16 @@ class ImageCaptureHostApi { Future setFlashMode(int arg_identifier, int arg_flashMode) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_flashMode]) - as Map?; + await channel.send([arg_identifier, arg_flashMode]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -1076,8 +973,7 @@ class ImageCaptureHostApi { Future takePicture(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -1086,8 +982,7 @@ class ImageCaptureHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -1111,19 +1006,20 @@ class _ImageAnalysisHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } @@ -1132,29 +1028,24 @@ class ImageAnalysisHostApi { /// Constructor for [ImageAnalysisHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - ImageAnalysisHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + ImageAnalysisHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _ImageAnalysisHostApiCodec(); - Future create( - int arg_identifier, ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = - await channel.send([arg_identifier, arg_targetResolution]) - as Map?; + await channel.send([arg_identifier, arg_targetResolution]) as Map?; if (replyMap == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -1167,8 +1058,7 @@ class ImageAnalysisHostApi { Future setAnalyzer(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -1177,8 +1067,29 @@ class ImageAnalysisHostApi { message: 'Unable to establish connection on channel.', ); } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + final Map error = (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return; + } + } + + Future clearAnalyzer(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier]) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = (replyMap['error'] as Map?)!; throw PlatformException( code: (error['code'] as String?)!, message: error['message'] as String?, @@ -1197,50 +1108,46 @@ class _ImageAnalysisFlutterApiCodec extends StandardMessageCodec { if (value is ImageInformation) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else if (value is ImagePlaneInformation) { + } else + if (value is ImagePlaneInformation) { buffer.putUint8(129); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ImageInformation.decode(readValue(buffer)!); - - case 129: + + case 129: return ImagePlaneInformation.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } - abstract class ImageAnalysisFlutterApi { static const MessageCodec codec = _ImageAnalysisFlutterApiCodec(); void onImageAnalyzed(ImageInformation imageInformation); - static void setup(ImageAnalysisFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(ImageAnalysisFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null.'); final List args = (message as List?)!; - final ImageInformation? arg_imageInformation = - (args[0] as ImageInformation?); - assert(arg_imageInformation != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null, expected non-null ImageInformation.'); + final ImageInformation? arg_imageInformation = (args[0] as ImageInformation?); + assert(arg_imageInformation != null, 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null, expected non-null ImageInformation.'); api.onImageAnalyzed(arg_imageInformation!); return; }); diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index 8a88bbc96005..d55de15f1fe8 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -59,6 +59,11 @@ class ImageAnalysis extends UseCase { Future setAnalyzer() async { _api.setAnalyzerFromInstance(this); } + + /// Clears previously set analyzer for image streaming support. + Future clearAnalyzer() async { + _api.clearAnalyzerFromInstance(this); + } } /// Host API implementation of [ImageAnalysis]. @@ -78,7 +83,7 @@ class ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { /// Maintains instances stored to communicate with native language objects. late final InstanceManager instanceManager; - /// Creates an [ImageAnallysis] instance with the specified target resolution. + /// Creates an [ImageAnalysis] instance with the specified target resolution. Future createFromInstance( ImageAnalysis instance, ResolutionInfo? targetResolution) async { final int identifier = instanceManager.addDartCreatedInstance(instance, @@ -95,10 +100,19 @@ class ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { Future setAnalyzerFromInstance(ImageAnalysis instance) async { final int? identifier = instanceManager.getIdentifier(instance); assert(identifier != null, - 'No ImageAnalysis instanced in the instance manager has been found.'); + 'No ImageAnalysis instance in the instance manager has been found.'); setAnalyzer(identifier!); } + + /// Clears analyzer of provide instance for image streaming support. + Future clearAnalyzerFromInstance(ImageAnalysis instance) async { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No ImageAnalysis instance in the instance manager has been found.'); + + clearAnalyzer(identifier!); + } } /// Flutter API implementation of [ImageAnalysis]. @@ -120,6 +134,7 @@ class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { @override void onImageAnalyzed(ImageInformation imageInformation) { + print('whoops!'); final List imagePlanes = imageInformation .imagePlanesInformation .map((ImagePlaneInformation? imagePlaneInformation) { diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 126eae49c862..20e8aa476018 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -183,6 +183,8 @@ abstract class ImageAnalysisHostApi { void create(int identifier, ResolutionInfo? targetResolution); void setAnalyzer(int identifier); + + void clearAnalyzer(int identifier); } @FlutterApi() diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index 2fa4b539c428..45846486fb69 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -16,17 +16,14 @@ import 'package:camera_android_camerax/src/camerax_library.g.dart'; class _TestInstanceManagerHostApiCodec extends StandardMessageCodec { const _TestInstanceManagerHostApiCodec(); } - abstract class TestInstanceManagerHostApi { static const MessageCodec codec = _TestInstanceManagerHostApiCodec(); void clear(); - static void setup(TestInstanceManagerHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestInstanceManagerHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -43,27 +40,22 @@ abstract class TestInstanceManagerHostApi { class _TestJavaObjectHostApiCodec extends StandardMessageCodec { const _TestJavaObjectHostApiCodec(); } - abstract class TestJavaObjectHostApi { static const MessageCodec codec = _TestJavaObjectHostApiCodec(); void dispose(int identifier); - static void setup(TestJavaObjectHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestJavaObjectHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null, expected non-null int.'); api.dispose(arg_identifier!); return {}; }); @@ -75,28 +67,22 @@ abstract class TestJavaObjectHostApi { class _TestCameraInfoHostApiCodec extends StandardMessageCodec { const _TestCameraInfoHostApiCodec(); } - abstract class TestCameraInfoHostApi { static const MessageCodec codec = _TestCameraInfoHostApiCodec(); int getSensorRotationDegrees(int identifier); - static void setup(TestCameraInfoHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraInfoHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null, expected non-null int.'); final int output = api.getSensorRotationDegrees(arg_identifier!); return {'result': output}; }); @@ -108,28 +94,23 @@ abstract class TestCameraInfoHostApi { class _TestCameraSelectorHostApiCodec extends StandardMessageCodec { const _TestCameraSelectorHostApiCodec(); } - abstract class TestCameraSelectorHostApi { static const MessageCodec codec = _TestCameraSelectorHostApiCodec(); void create(int identifier, int? lensFacing); List filter(int identifier, List cameraInfoIds); - static void setup(TestCameraSelectorHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraSelectorHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null, expected non-null int.'); final int? arg_lensFacing = (args[1] as int?); api.create(arg_identifier!, arg_lensFacing); return {}; @@ -138,24 +119,18 @@ abstract class TestCameraSelectorHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); - final List? arg_cameraInfoIds = - (args[1] as List?)?.cast(); - assert(arg_cameraInfoIds != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); - final List output = - api.filter(arg_identifier!, arg_cameraInfoIds!); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); + final List? arg_cameraInfoIds = (args[1] as List?)?.cast(); + assert(arg_cameraInfoIds != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); + final List output = api.filter(arg_identifier!, arg_cameraInfoIds!); return {'result': output}; }); } @@ -166,24 +141,19 @@ abstract class TestCameraSelectorHostApi { class _TestProcessCameraProviderHostApiCodec extends StandardMessageCodec { const _TestProcessCameraProviderHostApiCodec(); } - abstract class TestProcessCameraProviderHostApi { - static const MessageCodec codec = - _TestProcessCameraProviderHostApiCodec(); + static const MessageCodec codec = _TestProcessCameraProviderHostApiCodec(); Future getInstance(); List getAvailableCameraInfos(int identifier); - int bindToLifecycle( - int identifier, int cameraSelectorIdentifier, List useCaseIds); + int bindToLifecycle(int identifier, int cameraSelectorIdentifier, List useCaseIds); bool isBound(int identifier, int useCaseIdentifier); void unbind(int identifier, List useCaseIds); void unbindAll(int identifier); - static void setup(TestProcessCameraProviderHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestProcessCameraProviderHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -196,94 +166,71 @@ abstract class TestProcessCameraProviderHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); - final List output = - api.getAvailableCameraInfos(arg_identifier!); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); + final List output = api.getAvailableCameraInfos(arg_identifier!); return {'result': output}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); final int? arg_cameraSelectorIdentifier = (args[1] as int?); - assert(arg_cameraSelectorIdentifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); - final List? arg_useCaseIds = - (args[2] as List?)?.cast(); - assert(arg_useCaseIds != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null List.'); - final int output = api.bindToLifecycle( - arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); + assert(arg_cameraSelectorIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); + final List? arg_useCaseIds = (args[2] as List?)?.cast(); + assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null List.'); + final int output = api.bindToLifecycle(arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); return {'result': output}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); final int? arg_useCaseIdentifier = (args[1] as int?); - assert(arg_useCaseIdentifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); - final bool output = - api.isBound(arg_identifier!, arg_useCaseIdentifier!); + assert(arg_useCaseIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); + final bool output = api.isBound(arg_identifier!, arg_useCaseIdentifier!); return {'result': output}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null int.'); - final List? arg_useCaseIds = - (args[1] as List?)?.cast(); - assert(arg_useCaseIds != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null List.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null int.'); + final List? arg_useCaseIds = (args[1] as List?)?.cast(); + assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null List.'); api.unbind(arg_identifier!, arg_useCaseIds!); return {}; }); @@ -291,18 +238,15 @@ abstract class TestProcessCameraProviderHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null, expected non-null int.'); api.unbindAll(arg_identifier!); return {}; }); @@ -318,83 +262,67 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { if (value is CameraPermissionsErrorData) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } - abstract class TestSystemServicesHostApi { static const MessageCodec codec = _TestSystemServicesHostApiCodec(); - Future requestCameraPermissions( - bool enableAudio); - void startListeningForDeviceOrientationChange( - bool isFrontFacing, int sensorOrientation); + Future requestCameraPermissions(bool enableAudio); + void startListeningForDeviceOrientationChange(bool isFrontFacing, int sensorOrientation); void stopListeningForDeviceOrientationChange(); - static void setup(TestSystemServicesHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestSystemServicesHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); final List args = (message as List?)!; final bool? arg_enableAudio = (args[0] as bool?); - assert(arg_enableAudio != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null, expected non-null bool.'); - final CameraPermissionsErrorData? output = - await api.requestCameraPermissions(arg_enableAudio!); + assert(arg_enableAudio != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null, expected non-null bool.'); + final CameraPermissionsErrorData? output = await api.requestCameraPermissions(arg_enableAudio!); return {'result': output}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); final List args = (message as List?)!; final bool? arg_isFrontFacing = (args[0] as bool?); - assert(arg_isFrontFacing != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null bool.'); + assert(arg_isFrontFacing != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null bool.'); final int? arg_sensorOrientation = (args[1] as int?); - assert(arg_sensorOrientation != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null int.'); - api.startListeningForDeviceOrientationChange( - arg_isFrontFacing!, arg_sensorOrientation!); + assert(arg_sensorOrientation != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null int.'); + api.startListeningForDeviceOrientationChange(arg_isFrontFacing!, arg_sensorOrientation!); return {}; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -415,29 +343,30 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else if (value is ResolutionInfo) { + } else + if (value is ResolutionInfo) { buffer.putUint8(129); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - case 129: + + case 129: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } - abstract class TestPreviewHostApi { static const MessageCodec codec = _TestPreviewHostApiCodec(); @@ -445,25 +374,20 @@ abstract class TestPreviewHostApi { int setSurfaceProvider(int identifier); void releaseFlutterSurfaceTexture(); ResolutionInfo getResolutionInfo(int identifier); - static void setup(TestPreviewHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestPreviewHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null, expected non-null int.'); final int? arg_rotation = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = - (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_rotation, arg_targetResolution); return {}; }); @@ -471,18 +395,15 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null, expected non-null int.'); final int output = api.setSurfaceProvider(arg_identifier!); return {'result': output}; }); @@ -490,9 +411,7 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -505,18 +424,15 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null, expected non-null int.'); final ResolutionInfo output = api.getResolutionInfo(arg_identifier!); return {'result': output}; }); @@ -532,48 +448,43 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } - abstract class TestImageCaptureHostApi { static const MessageCodec codec = _TestImageCaptureHostApiCodec(); void create(int identifier, int? flashMode, ResolutionInfo? targetResolution); void setFlashMode(int identifier, int flashMode); Future takePicture(int identifier); - static void setup(TestImageCaptureHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageCaptureHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); final int? arg_flashMode = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = - (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_flashMode, arg_targetResolution); return {}; }); @@ -581,21 +492,17 @@ abstract class TestImageCaptureHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); final int? arg_flashMode = (args[1] as int?); - assert(arg_flashMode != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); + assert(arg_flashMode != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null, expected non-null int.'); api.setFlashMode(arg_identifier!, arg_flashMode!); return {}; }); @@ -603,18 +510,15 @@ abstract class TestImageCaptureHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null, expected non-null int.'); final String output = await api.takePicture(arg_identifier!); return {'result': output}; }); @@ -630,46 +534,42 @@ class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { if (value is ResolutionInfo) { buffer.putUint8(128); writeValue(buffer, value.encode()); - } else { + } else +{ super.writeValue(buffer, value); } } - @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - - default: + + default: return super.readValueOfType(type, buffer); + } } } - abstract class TestImageAnalysisHostApi { static const MessageCodec codec = _TestImageAnalysisHostApiCodec(); void create(int identifier, ResolutionInfo? targetResolution); void setAnalyzer(int identifier); - static void setup(TestImageAnalysisHostApi? api, - {BinaryMessenger? binaryMessenger}) { + void clearAnalyzer(int identifier); + static void setup(TestImageAnalysisHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); - final ResolutionInfo? arg_targetResolution = - (args[1] as ResolutionInfo?); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); + final ResolutionInfo? arg_targetResolution = (args[1] as ResolutionInfo?); api.create(arg_identifier!, arg_targetResolution); return {}; }); @@ -677,22 +577,35 @@ abstract class TestImageAnalysisHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null, expected non-null int.'); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null, expected non-null int.'); api.setAnalyzer(arg_identifier!); return {}; }); } } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null, expected non-null int.'); + api.clearAnalyzer(arg_identifier!); + return {}; + }); + } + } } } From cb620631b74cacdca2456ac23d81c49fa2d9f44c Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 27 Mar 2023 14:18:20 -0700 Subject: [PATCH 28/62] Generate mocks --- .../camera_android_camerax/lib/src/image_analysis.dart | 1 - .../test/android_camera_camerax_test.mocks.dart | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index d55de15f1fe8..18f9b117efa5 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -134,7 +134,6 @@ class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { @override void onImageAnalyzed(ImageInformation imageInformation) { - print('whoops!'); final List imagePlanes = imageInformation .imagePlanesInformation .map((ImagePlaneInformation? imagePlaneInformation) { diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart index 09a645a08504..0f60e00c0717 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart @@ -16,8 +16,7 @@ import 'package:camera_android_camerax/src/process_camera_provider.dart' import 'package:camera_android_camerax/src/use_case.dart' as _i13; import 'package:flutter/foundation.dart' as _i6; import 'package:flutter/services.dart' as _i5; -import 'package:flutter/src/widgets/framework.dart' as _i4; -import 'package:flutter/src/widgets/notification_listener.dart' as _i14; +import 'package:flutter/widgets.dart' as _i4; import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: type=lint @@ -346,7 +345,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValueForMissingStub: null, ); @override - void dispatchNotification(_i14.Notification? notification) => + void dispatchNotification(_i4.Notification? notification) => super.noSuchMethod( Invocation.method( #dispatchNotification, From 8ccc7edeaac16e94e3e524b342e88e1aea4a0286 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 28 Mar 2023 09:18:25 -0700 Subject: [PATCH 29/62] Start adding tests --- .../io/flutter/plugins/camerax/Executors.java | 35 ----- .../test/image_analysis_test.dart | 128 ++++++++++++++++++ .../test/image_analysis_test.mocks.dart | 62 +++++++++ 3 files changed, 190 insertions(+), 35 deletions(-) delete mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Executors.java create mode 100644 packages/camera/camera_android_camerax/test/image_analysis_test.dart create mode 100644 packages/camera/camera_android_camerax/test/image_analysis_test.mocks.dart diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Executors.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Executors.java deleted file mode 100644 index bf227d84dfc2..000000000000 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Executors.java +++ /dev/null @@ -1,35 +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. - -package io.flutter.plugins.camerax; - -import android.os.Handler; -import android.os.Looper; -import java.util.concurrent.Executor; - -/** - * Factory and utility methods for {@code Executor}. - * - *

TODO(jackson): If this class is useful for other plugins, consider including it in a shared - * library or in the Flutter engine - */ -public final class Executors { - - private static final class UiThreadExecutor implements Executor { - private static final Handler UI_THREAD = new Handler(Looper.getMainLooper()); - - @Override - public void execute(Runnable command) { - UI_THREAD.post(command); - } - } - - /** Returns an {@code Executor} that will post commands to the UI thread. */ - public static Executor uiThreadExecutor() { - return new UiThreadExecutor(); - } - - // Should never be instantiated. - private Executors() {} -} diff --git a/packages/camera/camera_android_camerax/test/image_analysis_test.dart b/packages/camera/camera_android_camerax/test/image_analysis_test.dart new file mode 100644 index 000000000000..8fa1817c71aa --- /dev/null +++ b/packages/camera/camera_android_camerax/test/image_analysis_test.dart @@ -0,0 +1,128 @@ +// 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 'package:camera_android_camerax/src/camerax_library.g.dart'; +import 'package:camera_android_camerax/src/image_analysis.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'image_analysis_test.mocks.dart'; +import 'test_camerax_library.g.dart'; + +@GenerateMocks([TestImageAnalysisHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ImageAnalysis', () { + tearDown(() => TestImageAnalysisHostApi.setup(null)); + + test('detached create does not call create on the Java side', () async { + final MockTestImageAnalysisHostApi mockApi = MockTestImageAnalysisHostApi(); + TestImageAnalysisHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + ImageAnalysis.detached( + instanceManager: instanceManager, + targetResolution: ResolutionInfo(width: 50, height: 10), + ); + + verifyNever(mockApi.create(argThat(isA()), + argThat(isA()))); + }); + + test('create calls create on the Java side', () async { + final MockTestImageAnalysisHostApi mockApi = MockTestImageAnalysisHostApi(); + TestImageAnalysisHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + const int targetResolutionWidth = 10; + const int targetResolutionHeight = 50; + ImageAnalysis( + instanceManager: instanceManager, + targetResolution: ResolutionInfo( + width: targetResolutionWidth, height: targetResolutionHeight), + ); + + final VerificationResult createVerification = verify(mockApi.create( + argThat(isA()), captureAny)); + final ResolutionInfo capturedResolutionInfo = + createVerification.captured.single as ResolutionInfo; + expect(capturedResolutionInfo.width, equals(targetResolutionWidth)); + expect(capturedResolutionInfo.height, equals(targetResolutionHeight)); + }); + + test('setAnalyzer makes call to set analyzer on ImageAnalysis instance', + () async { + final MockTestImageAnalysisHostApi mockApi = MockTestImageAnalysisHostApi(); + TestImageAnalysisHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ImageAnalysis imageAnalysis = ImageAnalysis.detached( + instanceManager: instanceManager, + ); + const int imageAnalysisIdentifier = 99; + instanceManager.addHostCreatedInstance( + imageAnalysis, + imageAnalysisIdentifier, + onCopy: (_) => ImageAnalysis.detached(), + ); + + imageAnalysis.setAnalyzer(); + + verify(mockApi.setAnalyzer(imageAnalysisIdentifier)); + }); + + test('clearAnalyzer makes call to set analyzer on ImageAnalysis instance', + () async { + final MockTestImageAnalysisHostApi mockApi = MockTestImageAnalysisHostApi(); + TestImageAnalysisHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ImageAnalysis imageAnalysis = ImageAnalysis.detached( + instanceManager: instanceManager, + ); + const int imageAnalysisIdentifier = 59; + instanceManager.addHostCreatedInstance( + imageAnalysis, + imageAnalysisIdentifier, + onCopy: (_) => ImageAnalysis.detached(), + ); + + imageAnalysis.clearAnalyzer(); + + verify(mockApi.clearAnalyzer(imageAnalysisIdentifier)); + }); + + test('flutterApi onImageAnalyzed adds event with image information to expected stream', () async { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ProcessCameraProviderFlutterApiImpl flutterApi = + ProcessCameraProviderFlutterApiImpl( + instanceManager: instanceManager, + ); + + flutterApi.create(0); + + expect(instanceManager.getInstanceWithWeakReference(0), + isA()); + + const String testErrorDescription = 'Test error description!'; + SystemServices.cameraErrorStreamController.stream + .listen((String errorDescription) { + expect(errorDescription, equals(testErrorDescription)); + }); + SystemServicesFlutterApiImpl().onCameraError(testErrorDescription); + }); +} diff --git a/packages/camera/camera_android_camerax/test/image_analysis_test.mocks.dart b/packages/camera/camera_android_camerax/test/image_analysis_test.mocks.dart new file mode 100644 index 000000000000..a251891b0669 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/image_analysis_test.mocks.dart @@ -0,0 +1,62 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in camera_android_camerax/test/image_analysis_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i3; +import 'package:mockito/mockito.dart' as _i1; + +import 'test_camerax_library.g.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [TestImageAnalysisHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestImageAnalysisHostApi extends _i1.Mock + implements _i2.TestImageAnalysisHostApi { + MockTestImageAnalysisHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void create( + int? identifier, + _i3.ResolutionInfo? targetResolution, + ) => + super.noSuchMethod( + Invocation.method( + #create, + [ + identifier, + targetResolution, + ], + ), + returnValueForMissingStub: null, + ); + @override + void setAnalyzer(int? identifier) => super.noSuchMethod( + Invocation.method( + #setAnalyzer, + [identifier], + ), + returnValueForMissingStub: null, + ); + @override + void clearAnalyzer(int? identifier) => super.noSuchMethod( + Invocation.method( + #clearAnalyzer, + [identifier], + ), + returnValueForMissingStub: null, + ); +} From a27cd4c5632ba0207486c6a6a80d575b7a56cb25 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 28 Mar 2023 10:42:30 -0700 Subject: [PATCH 30/62] Start adding tests --- .../camerax/ImageAnalysisHostApiImpl.java | 4 +- .../test/image_analysis_test.dart | 64 +++++++++++++------ .../test/image_analysis_test.mocks.dart | 19 ++++++ 3 files changed, 66 insertions(+), 21 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index 451ec5c11a1a..76c684a8c911 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -26,7 +26,7 @@ public class ImageAnalysisHostApiImpl implements ImageAnalysisHostApi { private BinaryMessenger binaryMessenger; private Context context; - @VisibleForTesting CameraXProxy cameraXProxy = new CameraXProxy(); + @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); public ImageAnalysisHostApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { @@ -64,9 +64,9 @@ private ImageAnalysis.Analyzer createImageAnalysisAnalyzer() { @Override public void analyze(@NonNull ImageProxy image) { ImageProxy.PlaneProxy[] planes = image.getPlanes(); - List imagePlanesInformation = new ArrayList(); + for (ImageProxy.PlaneProxy plane : planes) { ByteBuffer byteBuffer = plane.getBuffer(); byte[] bytes = new byte[byteBuffer.remaining()]; diff --git a/packages/camera/camera_android_camerax/test/image_analysis_test.dart b/packages/camera/camera_android_camerax/test/image_analysis_test.dart index 8fa1817c71aa..379750ecc5a6 100644 --- a/packages/camera/camera_android_camerax/test/image_analysis_test.dart +++ b/packages/camera/camera_android_camerax/test/image_analysis_test.dart @@ -2,9 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:typed_data' show Uint8List; + import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/image_analysis.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:camera_platform_interface/camera_platform_interface.dart' + show CameraImageData, CameraImageFormat, CameraImagePlane, ImageFormatGroup; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; @@ -12,10 +16,13 @@ import 'package:mockito/mockito.dart'; import 'image_analysis_test.mocks.dart'; import 'test_camerax_library.g.dart'; -@GenerateMocks([TestImageAnalysisHostApi]) +@GenerateMocks([TestImageAnalysisHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); + // Mocks the call to clear the native InstanceManager. + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + group('ImageAnalysis', () { tearDown(() => TestImageAnalysisHostApi.setup(null)); @@ -105,24 +112,43 @@ void main() { }); test('flutterApi onImageAnalyzed adds event with image information to expected stream', () async { - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - final ProcessCameraProviderFlutterApiImpl flutterApi = - ProcessCameraProviderFlutterApiImpl( - instanceManager: instanceManager, - ); - - flutterApi.create(0); - - expect(instanceManager.getInstanceWithWeakReference(0), - isA()); - - const String testErrorDescription = 'Test error description!'; - SystemServices.cameraErrorStreamController.stream - .listen((String errorDescription) { - expect(errorDescription, equals(testErrorDescription)); + final ImageAnalysisFlutterApiImpl flutterApi = + ImageAnalysisFlutterApiImpl(); + + // Fake image information for testing. + const int bytesPerRow = 5; + const int bytesPerPixel = 1; + final Uint8List bytes = Uint8List(50); + final List imagePlanesInformation = [ + ImagePlaneInformation( + bytesPerRow: bytesPerRow, + bytesPerPixel: bytesPerPixel, + bytes: bytes, + )]; + const int width = 5; + const int height = 10; + const int format = 35; + final ImageInformation imageInformation = + ImageInformation( + width: width, + height: height, + format: format, + imagePlanesInformation: imagePlanesInformation, + ); + + ImageAnalysis.onStreamedFrameAvailableStreamController.stream + .listen((CameraImageData cameraImageData) { + expect(cameraImageData.format!.group, equals(ImageFormatGroup.yuv420)); + expect(cameraImageData.planes.first, isNotNull); + expect(cameraImageData.planes.first!.bytes, equals(bytes)); + expect(cameraImageData.planes.first!.bytesPerRow, equals(bytesPerRow)); + expect(cameraImageData.planes.first!.bytesPerPixel, equals(bytesPerPixel)); + expect(cameraImageData.format!.raw, equals(format)); + expect(cameraImageData.height, equals(height)); + expect(cameraImageData.width, equals(width)); }); - SystemServicesFlutterApiImpl().onCameraError(testErrorDescription); + + flutterApi.onImageAnalyzed(imageInformation); }); + }); } diff --git a/packages/camera/camera_android_camerax/test/image_analysis_test.mocks.dart b/packages/camera/camera_android_camerax/test/image_analysis_test.mocks.dart index a251891b0669..46aabdffabf3 100644 --- a/packages/camera/camera_android_camerax/test/image_analysis_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/image_analysis_test.mocks.dart @@ -60,3 +60,22 @@ class MockTestImageAnalysisHostApi extends _i1.Mock returnValueForMissingStub: null, ); } + +/// A class which mocks [TestInstanceManagerHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestInstanceManagerHostApi extends _i1.Mock + implements _i2.TestInstanceManagerHostApi { + MockTestInstanceManagerHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void clear() => super.noSuchMethod( + Invocation.method( + #clear, + [], + ), + returnValueForMissingStub: null, + ); +} From 9d7495634199db1c1651e768332d56e6a53cc4ea Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 28 Mar 2023 10:42:51 -0700 Subject: [PATCH 31/62] Add file --- .../plugins/camerax/ImageAnalysisTest.java | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java new file mode 100644 index 000000000000..6ba1068d7af4 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java @@ -0,0 +1,119 @@ +import io.flutter.plugins.camerax.CameraXProxy; +import io.flutter.plugins.camerax.ImageAnalysisFlutterApiImpl; +import io.flutter.plugins.camerax.ImageAnalysisHostApiImpl; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageInformation; +import io.flutter.plugins.webviewflutter.InstanceManager; + +// 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. + +public class ImageAnalysisTest { + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public ImageAnalysis mockImageAnalysis; + @Mock public BinaryMessenger mockBinaryMessenger; + @Mock public CameraXProxy mockCameraXProxy; + + InstanceManager testInstanceManager; + private Context context; + private MockedStatic mockedStaticFile; + + @Before + public void setUp() throws Exception { + testInstanceManager = spy(InstanceManager.open(identifier -> {})); + context = mock(Context.class); + } + + @After + public void tearDown() { + testInstanceManager.close(); + } + + @Test + public void create_buildsExpectedImageAnalysisInstance() { + final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); + final Long imageAnalysisIdentifier = 83L; + final int targetResolutionWidth = 11; + final int targetResolutionHeight = 51; + final GeneratedCameraXLibrary.ResolutionInfo resolutionInfo = + new GeneratedCameraXLibrary.ResolutionInfo.Builder() + .setWidth(Long.valueOf(targetResolutionWidth)) + .setHeight(Long.valueOf(targetResolutionHeight)) + .build(); + final ImageAnalysis.Builder mockImageAnalysisBuilder = mock(ImageAnalysis.Builder.class); + + imageAnalysisHostApiImpl.cameraXProxy = mockCameraXProxy; + when(mockCameraXProxy.createImageAnalysisBuilder()).thenReturn(mockImageAnalysisBuilder); + when(mockImageAnalysisBuilder.build()).thenReturn(mockImageAnalysis); + + final ArgumentCaptor sizeCaptor = ArgumentCaptor.forClass(Size.class); + + imageAnalysisHostApiImpl.create(imageAnalysisIdentifier, resolutionInfo); + + verify(mockImageAnalysisBuilder).setTargetResolution(sizeCaptor.capture()); + assertEquals(sizeCaptor.getValue().getWidth(), targetResolutionWidth); + assertEquals(sizeCaptor.getValue().getHeight(), targetResolutionHeight); + verify(mockImageAnalysisBuilder).build(); + verify(testInstanceManager).addDartCreatedInstance(mockImageAnalysis, imageAnalysisIdentifier); + } + + @Test + public void setAnalyzer_() { + final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); + final Long mockImageAnalysisIdentifier = 37L; + final ImageProxy mockImageProxy = mock(ImageProxy.class); + + testInstanceManager.addDartCreatedInstance(mockImageAnalysis, mockImageAnalysisIdentifier); + + final ArgumentCaptor analyzerCaptor = ArgumentCaptor.forClass(ImageAnalysis.Analyzer.class); + + imageAnalysisHostApiImpl.setAnalyzer(mockImageAnalysisIdentifier); + + // todo: try verifying executor, may need real context + verify(mockImageAnalysis).setAnalyzer(any(Executor.class), analyzerCaptor.capture()); + ImageAnalysis.Analyzer analyzer = analyzerCaptor.getValue(); + + when(mockImageProxy.getPlanes()).thenReturn(); + // mock at least one plane, give it values for everything. can use captor to verify + + // for the rest, give real/mock info and mock the flutter api. capture whatever it sends and check info with it + when(mockImageProxy.getWidth()).thenReturn(); + when(mockImageProxy.getHeight()).thenReturn(); + when(mockImageProxy.getFormat()).thenReturn(); + + + analyzer.analyze(mockImageProxy); + + verify(mockImageAnalysisFlutterApiImpl).sendOnImageAnalyzedEvent(..., any()); + verify(mockImageProxy).close(); + + + } + + @Test + public void clearAnalyzer_makesCallToClearAnalyzer() { + final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); + final Long mockImageAnalysisIdentifier = 12L; + + testInstanceManager.addDartCreatedInstance(mockImageAnalysis, mockImageAnalysisIdentifier); + + imageAnalysisHostApiImpl.clearAnalyzer(mockImageAnalysisIdentifier); + + verify(mockImageAnalysis).clearAnalyzer(); + } + + @Test + public void sendOnImageAnalyzedEvent_callsOnImageAnalyzed() { + final ImageAnalysisFlutterApiImpl spyFlutterApi = + spy(new ImageAnalysisFlutterApiImpl(mockBinaryMessenger)); + final ImageInformation mockImageInformation = mock(ImageInformation.class); + + spyFlutterApi.sendOnImageAnalyzedEvent(mockImageInformation, reply -> {}); + + verify(spyFlutterApi).onImageAnalyzed(eq(mockImageInformation), any()); + } + } From 64b190e6b157ae2156bfa38c7726f9e5ecedb1bd Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 28 Mar 2023 11:43:33 -0700 Subject: [PATCH 32/62] Add java test --- .../flutter/plugins/camerax/CameraXProxy.java | 10 ++ .../camerax/ImageAnalysisHostApiImpl.java | 3 +- .../plugins/camerax/ImageAnalysisTest.java | 104 ++++++++++++++---- 3 files changed, 95 insertions(+), 22 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java index cfaf08a62eac..605ae70de7dc 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java @@ -73,4 +73,14 @@ public ImageAnalysis.Builder createImageAnalysisBuilder() { public static Size sizeFromResolution(@NonNull ResolutionInfo resolutionInfo) { return new Size(resolutionInfo.getWidth().intValue(), resolutionInfo.getHeight().intValue()); } + + /** + * Creates an instance of the {@code ImageAnalysisFlutterApiImpl}. + * + *

Included in this class for testing purposes. + */ + public ImageAnalysisFlutterApiImpl createImageAnalysisFlutterApiImpl( + @NonNull BinaryMessenger binaryMessenger) { + return new ImageAnalysisFlutterApiImpl(binaryMessenger); +} } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index 76c684a8c911..fe2285083c41 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -5,7 +5,6 @@ package io.flutter.plugins.camerax; import android.content.Context; -import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; @@ -92,7 +91,7 @@ public void analyze(@NonNull ImageProxy image) { imageInfoBuilder.setImagePlanesInformation(imagePlanesInformation); ImageAnalysisFlutterApiImpl imageAnalysisFlutterApiImpl = - new ImageAnalysisFlutterApiImpl(binaryMessenger); + cameraXProxy.createImageAnalysisFlutterApiImpl(binaryMessenger); imageAnalysisFlutterApiImpl.sendOnImageAnalyzedEvent(imageInfoBuilder.build(), reply -> {}); image.close(); } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java index 6ba1068d7af4..4cb200eade27 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java @@ -1,13 +1,49 @@ -import io.flutter.plugins.camerax.CameraXProxy; -import io.flutter.plugins.camerax.ImageAnalysisFlutterApiImpl; -import io.flutter.plugins.camerax.ImageAnalysisHostApiImpl; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageInformation; -import io.flutter.plugins.webviewflutter.InstanceManager; - // 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. +package io.flutter.plugins.camerax; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.util.Size; +import androidx.camera.core.ImageAnalysis; +import androidx.camera.core.ImageProxy; +import androidx.test.core.app.ApplicationProvider; +import io.flutter.plugins.camerax.CameraXProxy; +import io.flutter.plugins.camerax.ImageAnalysisFlutterApiImpl; +import io.flutter.plugins.camerax.ImageAnalysisHostApiImpl; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageInformation; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImagePlaneInformation; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ResolutionInfo; +import io.flutter.plugins.camerax.InstanceManager; +import io.flutter.plugin.common.BinaryMessenger; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.concurrent.Executor; +import java.util.List; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.robolectric.RobolectricTestRunner; + +@RunWith(RobolectricTestRunner.class) public class ImageAnalysisTest { @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @@ -17,12 +53,11 @@ public class ImageAnalysisTest { InstanceManager testInstanceManager; private Context context; - private MockedStatic mockedStaticFile; @Before public void setUp() throws Exception { testInstanceManager = spy(InstanceManager.open(identifier -> {})); - context = mock(Context.class); + context = ApplicationProvider.getApplicationContext(); } @After @@ -60,37 +95,66 @@ public void create_buildsExpectedImageAnalysisInstance() { } @Test - public void setAnalyzer_() { + public void setAnalyzer_setsAnalyzerThatSendsExpectedImageInformation() { final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); + final ImageAnalysisFlutterApiImpl mockImageAnalysisFlutterApiImpl = mock(ImageAnalysisFlutterApiImpl.class); final Long mockImageAnalysisIdentifier = 37L; final ImageProxy mockImageProxy = mock(ImageProxy.class); testInstanceManager.addDartCreatedInstance(mockImageAnalysis, mockImageAnalysisIdentifier); + imageAnalysisHostApiImpl.setContext(context); + imageAnalysisHostApiImpl.cameraXProxy = mockCameraXProxy; + when(mockCameraXProxy.createImageAnalysisFlutterApiImpl(mockBinaryMessenger)).thenReturn(mockImageAnalysisFlutterApiImpl); final ArgumentCaptor analyzerCaptor = ArgumentCaptor.forClass(ImageAnalysis.Analyzer.class); + // Test that analyzer is set: + imageAnalysisHostApiImpl.setAnalyzer(mockImageAnalysisIdentifier); - // todo: try verifying executor, may need real context verify(mockImageAnalysis).setAnalyzer(any(Executor.class), analyzerCaptor.capture()); ImageAnalysis.Analyzer analyzer = analyzerCaptor.getValue(); - when(mockImageProxy.getPlanes()).thenReturn(); - // mock at least one plane, give it values for everything. can use captor to verify - - // for the rest, give real/mock info and mock the flutter api. capture whatever it sends and check info with it - when(mockImageProxy.getWidth()).thenReturn(); - when(mockImageProxy.getHeight()).thenReturn(); - when(mockImageProxy.getFormat()).thenReturn(); - + // Test that the expected image information is sent: + + final ImageProxy.PlaneProxy mockPlaneProxy = mock(ImageProxy.PlaneProxy.class); + final ImageProxy.PlaneProxy[] mockPlanes = new ImageProxy.PlaneProxy[] { mockPlaneProxy }; + final ByteBuffer mockByteBuffer = mock(ByteBuffer.class); + final int remainingBytes = 1; + final int rowStride = 40; + final int pixelStride = 36; + final int width = 50; + final int height = 10; + final int format = 35; + + when(mockImageProxy.getPlanes()).thenReturn(mockPlanes); + when(mockPlaneProxy.getBuffer()).thenReturn(mockByteBuffer); + when(mockByteBuffer.remaining()).thenReturn(remainingBytes); + when(mockPlaneProxy.getRowStride()).thenReturn(rowStride); + when(mockPlaneProxy.getPixelStride()).thenReturn(pixelStride); + when(mockImageProxy.getWidth()).thenReturn(width); + when(mockImageProxy.getHeight()).thenReturn(height); + when(mockImageProxy.getFormat()).thenReturn(format); + + final ArgumentCaptor imageInformationCaptor = ArgumentCaptor.forClass(GeneratedCameraXLibrary.ImageInformation.class); analyzer.analyze(mockImageProxy); - verify(mockImageAnalysisFlutterApiImpl).sendOnImageAnalyzedEvent(..., any()); + verify(mockImageAnalysisFlutterApiImpl).sendOnImageAnalyzedEvent(imageInformationCaptor.capture(), any()); verify(mockImageProxy).close(); - + ImageInformation imageInformation = imageInformationCaptor.getValue(); + assertEquals(imageInformation.getWidth(), Long.valueOf(width)); + assertEquals(imageInformation.getHeight(), Long.valueOf(height)); + assertEquals(imageInformation.getFormat(), Long.valueOf(format)); + List imagePlanesInformation = imageInformation.getImagePlanesInformation(); + ImagePlaneInformation imagePlaneInformation = imagePlanesInformation.get(0); + assertEquals(imagePlaneInformation.getBytesPerRow(), Long.valueOf(rowStride)); + assertEquals(imagePlaneInformation.getBytesPerPixel(), Long.valueOf(pixelStride)); + // We expect one (remainingBytes) bye. This byte should equal the byte contained by the mock ByteBuffer. + assertEquals(imagePlaneInformation.getBytes().length, remainingBytes); + assertEquals(imagePlaneInformation.getBytes()[0], mockByteBuffer.get()); } @Test From fea7e981e36de288f7d051afe6fdb6f4e396b954 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 28 Mar 2023 15:09:32 -0700 Subject: [PATCH 33/62] Add tests --- .../flutter/plugins/camerax/CameraXProxy.java | 8 +- .../camerax/GeneratedCameraXLibrary.java | 352 ++++++++++++------ .../camerax/ImageAnalysisHostApiImpl.java | 8 +- .../plugins/camerax/ImageAnalysisTest.java | 291 +++++++-------- .../example/lib/main.dart | 9 +- .../lib/src/android_camera_camerax.dart | 22 +- .../lib/src/camerax_library.g.dart | 147 +++++--- .../lib/src/image_analysis.dart | 2 +- .../test/android_camera_camerax_test.dart | 79 +++- .../android_camera_camerax_test.mocks.dart | 273 +++++++++----- .../test/image_analysis_test.dart | 48 ++- .../test/test_camerax_library.g.dart | 143 ++++--- 12 files changed, 856 insertions(+), 526 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java index 605ae70de7dc..7094ad1ce294 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java @@ -74,13 +74,13 @@ public static Size sizeFromResolution(@NonNull ResolutionInfo resolutionInfo) { return new Size(resolutionInfo.getWidth().intValue(), resolutionInfo.getHeight().intValue()); } - /** + /** * Creates an instance of the {@code ImageAnalysisFlutterApiImpl}. * *

Included in this class for testing purposes. */ public ImageAnalysisFlutterApiImpl createImageAnalysisFlutterApiImpl( - @NonNull BinaryMessenger binaryMessenger) { - return new ImageAnalysisFlutterApiImpl(binaryMessenger); -} + @NonNull BinaryMessenger binaryMessenger) { + return new ImageAnalysisFlutterApiImpl(binaryMessenger); + } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 603f69f7edb1..425de0809949 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -18,9 +18,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) @@ -35,8 +33,7 @@ public static class FlutterError extends RuntimeException { /** The error details. Must be a datatype supported by the api codec. */ public final Object details; - public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) - { + public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { super(message); this.code = code; this.details = details; @@ -55,7 +52,7 @@ private static ArrayList wrapError(@NonNull Throwable exception) { errorList.add(exception.toString()); errorList.add(exception.getClass().getSimpleName()); errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); } return errorList; } @@ -126,9 +123,13 @@ ArrayList toList() { static @NonNull ResolutionInfo fromList(@NonNull ArrayList list) { ResolutionInfo pigeonResult = new ResolutionInfo(); Object width = list.get(0); - pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); + pigeonResult.setWidth( + (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); Object height = list.get(1); - pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer) height : (Long) height)); + pigeonResult.setHeight( + (height == null) + ? null + : ((height instanceof Integer) ? (Integer) height : (Long) height)); return pigeonResult; } } @@ -294,9 +295,17 @@ ArrayList toList() { static @NonNull ImagePlaneInformation fromList(@NonNull ArrayList list) { ImagePlaneInformation pigeonResult = new ImagePlaneInformation(); Object bytesPerRow = list.get(0); - pigeonResult.setBytesPerRow((bytesPerRow == null) ? null : ((bytesPerRow instanceof Integer) ? (Integer) bytesPerRow : (Long) bytesPerRow)); + pigeonResult.setBytesPerRow( + (bytesPerRow == null) + ? null + : ((bytesPerRow instanceof Integer) ? (Integer) bytesPerRow : (Long) bytesPerRow)); Object bytesPerPixel = list.get(1); - pigeonResult.setBytesPerPixel((bytesPerPixel == null) ? null : ((bytesPerPixel instanceof Integer) ? (Integer) bytesPerPixel : (Long) bytesPerPixel)); + pigeonResult.setBytesPerPixel( + (bytesPerPixel == null) + ? null + : ((bytesPerPixel instanceof Integer) + ? (Integer) bytesPerPixel + : (Long) bytesPerPixel)); Object bytes = list.get(2); pigeonResult.setBytes((byte[]) bytes); return pigeonResult; @@ -385,7 +394,8 @@ public static final class Builder { private @Nullable List imagePlanesInformation; - public @NonNull Builder setImagePlanesInformation(@NonNull List setterArg) { + public @NonNull Builder setImagePlanesInformation( + @NonNull List setterArg) { this.imagePlanesInformation = setterArg; return this; } @@ -413,11 +423,18 @@ ArrayList toList() { static @NonNull ImageInformation fromList(@NonNull ArrayList list) { ImageInformation pigeonResult = new ImageInformation(); Object width = list.get(0); - pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); + pigeonResult.setWidth( + (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); Object height = list.get(1); - pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer) height : (Long) height)); + pigeonResult.setHeight( + (height == null) + ? null + : ((height instanceof Integer) ? (Integer) height : (Long) height)); Object format = list.get(2); - pigeonResult.setFormat((format == null) ? null : ((format instanceof Integer) ? (Integer) format : (Long) format)); + pigeonResult.setFormat( + (format == null) + ? null + : ((format instanceof Integer) ? (Integer) format : (Long) format)); Object imagePlanesInformation = list.get(3); pigeonResult.setImagePlanesInformation((List) imagePlanesInformation); return pigeonResult; @@ -434,7 +451,7 @@ public interface InstanceManagerHostApi { /** * Clear the native `InstanceManager`. * - * This is typically only used after a hot restart. + *

This is typically only used after a hot restart. */ void clear(); @@ -442,7 +459,10 @@ public interface InstanceManagerHostApi { static MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `InstanceManagerHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `InstanceManagerHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, InstanceManagerHostApi api) { { BasicMessageChannel channel = @@ -455,8 +475,7 @@ static void setup(BinaryMessenger binaryMessenger, InstanceManagerHostApi api) { try { api.clear(); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -477,7 +496,9 @@ public interface JavaObjectHostApi { static MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, JavaObjectHostApi api) { { BasicMessageChannel channel = @@ -492,8 +513,7 @@ static void setup(BinaryMessenger binaryMessenger, JavaObjectHostApi api) { try { api.dispose((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -513,13 +533,15 @@ public JavaObjectFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + public interface Reply { void reply(T reply); } /** The codec used by JavaObjectFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } + public void dispose(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -532,19 +554,23 @@ public void dispose(@NonNull Long identifierArg, Reply callback) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraInfoHostApi { - @NonNull + @NonNull Long getSensorRotationDegrees(@NonNull Long identifier); /** The codec used by CameraInfoHostApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -552,10 +578,11 @@ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getSensorRotationDegrees((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getSensorRotationDegrees( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -575,13 +602,15 @@ public CameraInfoFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + public interface Reply { void reply(T reply); } /** The codec used by CameraInfoFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -596,14 +625,17 @@ public interface CameraSelectorHostApi { void create(@NonNull Long identifier, @Nullable Long lensFacing); - @NonNull + @NonNull List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); /** The codec used by CameraSelectorHostApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraSelectorHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `CameraSelectorHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { { BasicMessageChannel channel = @@ -617,10 +649,11 @@ static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { Number identifierArg = (Number) args.get(0); Number lensFacingArg = (Number) args.get(1); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), (lensFacingArg == null) ? null : lensFacingArg.longValue()); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (lensFacingArg == null) ? null : lensFacingArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -642,10 +675,12 @@ static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { Number identifierArg = (Number) args.get(0); List cameraInfoIdsArg = (List) args.get(1); try { - List output = api.filter((identifierArg == null) ? null : identifierArg.longValue(), cameraInfoIdsArg); + List output = + api.filter( + (identifierArg == null) ? null : identifierArg.longValue(), + cameraInfoIdsArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -665,14 +700,17 @@ public CameraSelectorFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + public interface Reply { void reply(T reply); } /** The codec used by CameraSelectorFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { + + public void create( + @NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); @@ -686,13 +724,16 @@ public interface ProcessCameraProviderHostApi { void getInstance(Result result); - @NonNull + @NonNull List getAvailableCameraInfos(@NonNull Long identifier); - @NonNull - Long bindToLifecycle(@NonNull Long identifier, @NonNull Long cameraSelectorIdentifier, @NonNull List useCaseIds); + @NonNull + Long bindToLifecycle( + @NonNull Long identifier, + @NonNull Long cameraSelectorIdentifier, + @NonNull List useCaseIds); - @NonNull + @NonNull Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); void unbind(@NonNull Long identifier, @NonNull List useCaseIds); @@ -703,12 +744,17 @@ public interface ProcessCameraProviderHostApi { static MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, ProcessCameraProviderHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -735,7 +781,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -743,10 +791,11 @@ public void error(Throwable error) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - List output = api.getAvailableCameraInfos((identifierArg == null) ? null : identifierArg.longValue()); + List output = + api.getAvailableCameraInfos( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -759,7 +808,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -769,10 +820,15 @@ public void error(Throwable error) { Number cameraSelectorIdentifierArg = (Number) args.get(1); List useCaseIdsArg = (List) args.get(2); try { - Long output = api.bindToLifecycle((identifierArg == null) ? null : identifierArg.longValue(), (cameraSelectorIdentifierArg == null) ? null : cameraSelectorIdentifierArg.longValue(), useCaseIdsArg); + Long output = + api.bindToLifecycle( + (identifierArg == null) ? null : identifierArg.longValue(), + (cameraSelectorIdentifierArg == null) + ? null + : cameraSelectorIdentifierArg.longValue(), + useCaseIdsArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -785,7 +841,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -794,10 +852,12 @@ public void error(Throwable error) { Number identifierArg = (Number) args.get(0); Number useCaseIdentifierArg = (Number) args.get(1); try { - Boolean output = api.isBound((identifierArg == null) ? null : identifierArg.longValue(), (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); + Boolean output = + api.isBound( + (identifierArg == null) ? null : identifierArg.longValue(), + (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -810,7 +870,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -819,10 +881,10 @@ public void error(Throwable error) { Number identifierArg = (Number) args.get(0); List useCaseIdsArg = (List) args.get(1); try { - api.unbind((identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); + api.unbind( + (identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -835,7 +897,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -845,8 +909,7 @@ public void error(Throwable error) { try { api.unbindAll((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -866,17 +929,21 @@ public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + public interface Reply { void reply(T reply); } /** The codec used by ProcessCameraProviderFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", + getCodec()); channel.send( new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); @@ -890,13 +957,15 @@ public CameraFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + public interface Reply { void reply(T reply); } /** The codec used by CameraFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -936,9 +1005,11 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface SystemServicesHostApi { - void requestCameraPermissions(@NonNull Boolean enableAudio, Result result); + void requestCameraPermissions( + @NonNull Boolean enableAudio, Result result); - void startListeningForDeviceOrientationChange(@NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); + void startListeningForDeviceOrientationChange( + @NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); void stopListeningForDeviceOrientationChange(); @@ -946,12 +1017,17 @@ public interface SystemServicesHostApi { static MessageCodec getCodec() { return SystemServicesHostApiCodec.INSTANCE; } - /**Sets up an instance of `SystemServicesHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `SystemServicesHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, SystemServicesHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -980,7 +1056,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -989,10 +1067,11 @@ public void error(Throwable error) { Boolean isFrontFacingArg = (Boolean) args.get(0); Number sensorOrientationArg = (Number) args.get(1); try { - api.startListeningForDeviceOrientationChange(isFrontFacingArg, (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); + api.startListeningForDeviceOrientationChange( + isFrontFacingArg, + (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1005,7 +1084,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1013,8 +1094,7 @@ public void error(Throwable error) { try { api.stopListeningForDeviceOrientationChange(); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1034,25 +1114,32 @@ public SystemServicesFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + public interface Reply { void reply(T reply); } /** The codec used by SystemServicesFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } + public void onDeviceOrientationChanged(@NonNull String orientationArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", + getCodec()); channel.send( new ArrayList(Collections.singletonList(orientationArg)), channelReply -> callback.reply(null)); } + public void onCameraError(@NonNull String errorDescriptionArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", + getCodec()); channel.send( new ArrayList(Collections.singletonList(errorDescriptionArg)), channelReply -> callback.reply(null)); @@ -1093,21 +1180,24 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface PreviewHostApi { - void create(@NonNull Long identifier, @Nullable Long rotation, @Nullable ResolutionInfo targetResolution); + void create( + @NonNull Long identifier, + @Nullable Long rotation, + @Nullable ResolutionInfo targetResolution); - @NonNull + @NonNull Long setSurfaceProvider(@NonNull Long identifier); void releaseFlutterSurfaceTexture(); - @NonNull + @NonNull ResolutionInfo getResolutionInfo(@NonNull Long identifier); /** The codec used by PreviewHostApi. */ static MessageCodec getCodec() { return PreviewHostApiCodec.INSTANCE; } - /**Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ + /** Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { { BasicMessageChannel channel = @@ -1122,10 +1212,12 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { Number rotationArg = (Number) args.get(1); ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), (rotationArg == null) ? null : rotationArg.longValue(), targetResolutionArg); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (rotationArg == null) ? null : rotationArg.longValue(), + targetResolutionArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1138,7 +1230,9 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1146,10 +1240,11 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.setSurfaceProvider((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.setSurfaceProvider( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1162,7 +1257,9 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1170,8 +1267,7 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { try { api.releaseFlutterSurfaceTexture(); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1192,10 +1288,11 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - ResolutionInfo output = api.getResolutionInfo((identifierArg == null) ? null : identifierArg.longValue()); + ResolutionInfo output = + api.getResolutionInfo( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1237,7 +1334,10 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ImageCaptureHostApi { - void create(@NonNull Long identifier, @Nullable Long flashMode, @Nullable ResolutionInfo targetResolution); + void create( + @NonNull Long identifier, + @Nullable Long flashMode, + @Nullable ResolutionInfo targetResolution); void setFlashMode(@NonNull Long identifier, @NonNull Long flashMode); @@ -1247,7 +1347,10 @@ public interface ImageCaptureHostApi { static MessageCodec getCodec() { return ImageCaptureHostApiCodec.INSTANCE; } - /**Sets up an instance of `ImageCaptureHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ImageCaptureHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { { BasicMessageChannel channel = @@ -1262,10 +1365,12 @@ static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { Number flashModeArg = (Number) args.get(1); ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue(), targetResolutionArg); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (flashModeArg == null) ? null : flashModeArg.longValue(), + targetResolutionArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1287,10 +1392,11 @@ static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { Number identifierArg = (Number) args.get(0); Number flashModeArg = (Number) args.get(1); try { - api.setFlashMode((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue()); + api.setFlashMode( + (identifierArg == null) ? null : identifierArg.longValue(), + (flashModeArg == null) ? null : flashModeArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1323,7 +1429,8 @@ public void error(Throwable error) { } }; - api.takePicture((identifierArg == null) ? null : identifierArg.longValue(), resultCallback); + api.takePicture( + (identifierArg == null) ? null : identifierArg.longValue(), resultCallback); }); } else { channel.setMessageHandler(null); @@ -1371,7 +1478,10 @@ public interface ImageAnalysisHostApi { static MessageCodec getCodec() { return ImageAnalysisHostApiCodec.INSTANCE; } - /**Sets up an instance of `ImageAnalysisHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ImageAnalysisHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { { BasicMessageChannel channel = @@ -1385,10 +1495,11 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { Number identifierArg = (Number) args.get(0); ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(1); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), targetResolutionArg); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + targetResolutionArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1411,8 +1522,7 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { try { api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1425,7 +1535,9 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1435,8 +1547,7 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { try { api.clearAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1488,17 +1599,22 @@ public ImageAnalysisFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + public interface Reply { void reply(T reply); } /** The codec used by ImageAnalysisFlutterApi. */ static MessageCodec getCodec() { return ImageAnalysisFlutterApiCodec.INSTANCE; } - public void onImageAnalyzed(@NonNull ImageInformation imageInformationArg, Reply callback) { + + public void onImageAnalyzed( + @NonNull ImageInformation imageInformationArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed", + getCodec()); channel.send( new ArrayList(Collections.singletonList(imageInformationArg)), channelReply -> callback.reply(null)); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index fe2285083c41..13699beda3b8 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -36,7 +36,6 @@ public ImageAnalysisHostApiImpl( public void setContext(Context context) { this.context = context; } - @Override public void create(@NonNull Long identifier, @Nullable ResolutionInfo targetResolution) { @@ -81,7 +80,7 @@ public void analyze(@NonNull ImageProxy image) { .build()); } - // TODO (camsim99): Retrieve and send the following when made available by b/274791178: + // TODO (camsim99): Retrieve and send the following when made available by b/274791178: // last lens aperture, last sensor exposure time, last sensor sensitivity. GeneratedCameraXLibrary.ImageInformation.Builder imageInfoBuilder = new GeneratedCameraXLibrary.ImageInformation.Builder(); @@ -91,7 +90,7 @@ public void analyze(@NonNull ImageProxy image) { imageInfoBuilder.setImagePlanesInformation(imagePlanesInformation); ImageAnalysisFlutterApiImpl imageAnalysisFlutterApiImpl = - cameraXProxy.createImageAnalysisFlutterApiImpl(binaryMessenger); + cameraXProxy.createImageAnalysisFlutterApiImpl(binaryMessenger); imageAnalysisFlutterApiImpl.sendOnImageAnalyzedEvent(imageInfoBuilder.build(), reply -> {}); image.close(); } @@ -101,8 +100,7 @@ public void analyze(@NonNull ImageProxy image) { @Override public void clearAnalyzer(@NonNull Long identifier) { ImageAnalysis imageAnalysis = - (ImageAnalysis) Objects.requireNonNull(instanceManager.getInstance(identifier)); + (ImageAnalysis) Objects.requireNonNull(instanceManager.getInstance(identifier)); imageAnalysis.clearAnalyzer(); } - } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java index 4cb200eade27..3ffc4d9a7bd0 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java @@ -8,9 +8,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -19,18 +17,12 @@ import androidx.camera.core.ImageAnalysis; import androidx.camera.core.ImageProxy; import androidx.test.core.app.ApplicationProvider; -import io.flutter.plugins.camerax.CameraXProxy; -import io.flutter.plugins.camerax.ImageAnalysisFlutterApiImpl; -import io.flutter.plugins.camerax.ImageAnalysisHostApiImpl; +import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageInformation; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImagePlaneInformation; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ResolutionInfo; -import io.flutter.plugins.camerax.InstanceManager; -import io.flutter.plugin.common.BinaryMessenger; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.concurrent.Executor; import java.util.List; +import java.util.concurrent.Executor; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -38,146 +30,151 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; -import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class ImageAnalysisTest { - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - - @Mock public ImageAnalysis mockImageAnalysis; - @Mock public BinaryMessenger mockBinaryMessenger; - @Mock public CameraXProxy mockCameraXProxy; - - InstanceManager testInstanceManager; - private Context context; - - @Before - public void setUp() throws Exception { - testInstanceManager = spy(InstanceManager.open(identifier -> {})); - context = ApplicationProvider.getApplicationContext(); - } - - @After - public void tearDown() { - testInstanceManager.close(); - } - - @Test - public void create_buildsExpectedImageAnalysisInstance() { - final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = - new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); - final Long imageAnalysisIdentifier = 83L; - final int targetResolutionWidth = 11; - final int targetResolutionHeight = 51; - final GeneratedCameraXLibrary.ResolutionInfo resolutionInfo = - new GeneratedCameraXLibrary.ResolutionInfo.Builder() - .setWidth(Long.valueOf(targetResolutionWidth)) - .setHeight(Long.valueOf(targetResolutionHeight)) - .build(); - final ImageAnalysis.Builder mockImageAnalysisBuilder = mock(ImageAnalysis.Builder.class); - - imageAnalysisHostApiImpl.cameraXProxy = mockCameraXProxy; - when(mockCameraXProxy.createImageAnalysisBuilder()).thenReturn(mockImageAnalysisBuilder); - when(mockImageAnalysisBuilder.build()).thenReturn(mockImageAnalysis); - - final ArgumentCaptor sizeCaptor = ArgumentCaptor.forClass(Size.class); - - imageAnalysisHostApiImpl.create(imageAnalysisIdentifier, resolutionInfo); - - verify(mockImageAnalysisBuilder).setTargetResolution(sizeCaptor.capture()); - assertEquals(sizeCaptor.getValue().getWidth(), targetResolutionWidth); - assertEquals(sizeCaptor.getValue().getHeight(), targetResolutionHeight); - verify(mockImageAnalysisBuilder).build(); - verify(testInstanceManager).addDartCreatedInstance(mockImageAnalysis, imageAnalysisIdentifier); - } - - @Test - public void setAnalyzer_setsAnalyzerThatSendsExpectedImageInformation() { - final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = - new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); - final ImageAnalysisFlutterApiImpl mockImageAnalysisFlutterApiImpl = mock(ImageAnalysisFlutterApiImpl.class); - final Long mockImageAnalysisIdentifier = 37L; - final ImageProxy mockImageProxy = mock(ImageProxy.class); - - testInstanceManager.addDartCreatedInstance(mockImageAnalysis, mockImageAnalysisIdentifier); - imageAnalysisHostApiImpl.setContext(context); - imageAnalysisHostApiImpl.cameraXProxy = mockCameraXProxy; - when(mockCameraXProxy.createImageAnalysisFlutterApiImpl(mockBinaryMessenger)).thenReturn(mockImageAnalysisFlutterApiImpl); - - final ArgumentCaptor analyzerCaptor = ArgumentCaptor.forClass(ImageAnalysis.Analyzer.class); - - // Test that analyzer is set: - - imageAnalysisHostApiImpl.setAnalyzer(mockImageAnalysisIdentifier); - - verify(mockImageAnalysis).setAnalyzer(any(Executor.class), analyzerCaptor.capture()); - ImageAnalysis.Analyzer analyzer = analyzerCaptor.getValue(); - - // Test that the expected image information is sent: - - final ImageProxy.PlaneProxy mockPlaneProxy = mock(ImageProxy.PlaneProxy.class); - final ImageProxy.PlaneProxy[] mockPlanes = new ImageProxy.PlaneProxy[] { mockPlaneProxy }; - final ByteBuffer mockByteBuffer = mock(ByteBuffer.class); - final int remainingBytes = 1; - final int rowStride = 40; - final int pixelStride = 36; - final int width = 50; - final int height = 10; - final int format = 35; - - when(mockImageProxy.getPlanes()).thenReturn(mockPlanes); - when(mockPlaneProxy.getBuffer()).thenReturn(mockByteBuffer); - when(mockByteBuffer.remaining()).thenReturn(remainingBytes); - when(mockPlaneProxy.getRowStride()).thenReturn(rowStride); - when(mockPlaneProxy.getPixelStride()).thenReturn(pixelStride); - when(mockImageProxy.getWidth()).thenReturn(width); - when(mockImageProxy.getHeight()).thenReturn(height); - when(mockImageProxy.getFormat()).thenReturn(format); - - final ArgumentCaptor imageInformationCaptor = ArgumentCaptor.forClass(GeneratedCameraXLibrary.ImageInformation.class); - - analyzer.analyze(mockImageProxy); - - verify(mockImageAnalysisFlutterApiImpl).sendOnImageAnalyzedEvent(imageInformationCaptor.capture(), any()); - verify(mockImageProxy).close(); - - ImageInformation imageInformation = imageInformationCaptor.getValue(); - assertEquals(imageInformation.getWidth(), Long.valueOf(width)); - assertEquals(imageInformation.getHeight(), Long.valueOf(height)); - assertEquals(imageInformation.getFormat(), Long.valueOf(format)); - List imagePlanesInformation = imageInformation.getImagePlanesInformation(); - ImagePlaneInformation imagePlaneInformation = imagePlanesInformation.get(0); - assertEquals(imagePlaneInformation.getBytesPerRow(), Long.valueOf(rowStride)); - assertEquals(imagePlaneInformation.getBytesPerPixel(), Long.valueOf(pixelStride)); - // We expect one (remainingBytes) bye. This byte should equal the byte contained by the mock ByteBuffer. - assertEquals(imagePlaneInformation.getBytes().length, remainingBytes); - assertEquals(imagePlaneInformation.getBytes()[0], mockByteBuffer.get()); - } - - @Test - public void clearAnalyzer_makesCallToClearAnalyzer() { - final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = - new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); - final Long mockImageAnalysisIdentifier = 12L; - - testInstanceManager.addDartCreatedInstance(mockImageAnalysis, mockImageAnalysisIdentifier); - - imageAnalysisHostApiImpl.clearAnalyzer(mockImageAnalysisIdentifier); - - verify(mockImageAnalysis).clearAnalyzer(); - } - - @Test - public void sendOnImageAnalyzedEvent_callsOnImageAnalyzed() { - final ImageAnalysisFlutterApiImpl spyFlutterApi = - spy(new ImageAnalysisFlutterApiImpl(mockBinaryMessenger)); - final ImageInformation mockImageInformation = mock(ImageInformation.class); - - spyFlutterApi.sendOnImageAnalyzedEvent(mockImageInformation, reply -> {}); - - verify(spyFlutterApi).onImageAnalyzed(eq(mockImageInformation), any()); - } - } + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public ImageAnalysis mockImageAnalysis; + @Mock public BinaryMessenger mockBinaryMessenger; + @Mock public CameraXProxy mockCameraXProxy; + + InstanceManager testInstanceManager; + private Context context; + + @Before + public void setUp() throws Exception { + testInstanceManager = spy(InstanceManager.open(identifier -> {})); + context = ApplicationProvider.getApplicationContext(); + } + + @After + public void tearDown() { + testInstanceManager.close(); + } + + @Test + public void create_buildsExpectedImageAnalysisInstance() { + final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); + final Long imageAnalysisIdentifier = 83L; + final int targetResolutionWidth = 11; + final int targetResolutionHeight = 51; + final GeneratedCameraXLibrary.ResolutionInfo resolutionInfo = + new GeneratedCameraXLibrary.ResolutionInfo.Builder() + .setWidth(Long.valueOf(targetResolutionWidth)) + .setHeight(Long.valueOf(targetResolutionHeight)) + .build(); + final ImageAnalysis.Builder mockImageAnalysisBuilder = mock(ImageAnalysis.Builder.class); + + imageAnalysisHostApiImpl.cameraXProxy = mockCameraXProxy; + when(mockCameraXProxy.createImageAnalysisBuilder()).thenReturn(mockImageAnalysisBuilder); + when(mockImageAnalysisBuilder.build()).thenReturn(mockImageAnalysis); + + final ArgumentCaptor sizeCaptor = ArgumentCaptor.forClass(Size.class); + + imageAnalysisHostApiImpl.create(imageAnalysisIdentifier, resolutionInfo); + + verify(mockImageAnalysisBuilder).setTargetResolution(sizeCaptor.capture()); + assertEquals(sizeCaptor.getValue().getWidth(), targetResolutionWidth); + assertEquals(sizeCaptor.getValue().getHeight(), targetResolutionHeight); + verify(mockImageAnalysisBuilder).build(); + verify(testInstanceManager).addDartCreatedInstance(mockImageAnalysis, imageAnalysisIdentifier); + } + + @Test + public void setAnalyzer_setsAnalyzerThatSendsExpectedImageInformation() { + final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); + final ImageAnalysisFlutterApiImpl mockImageAnalysisFlutterApiImpl = + mock(ImageAnalysisFlutterApiImpl.class); + final Long mockImageAnalysisIdentifier = 37L; + final ImageProxy mockImageProxy = mock(ImageProxy.class); + + testInstanceManager.addDartCreatedInstance(mockImageAnalysis, mockImageAnalysisIdentifier); + imageAnalysisHostApiImpl.setContext(context); + imageAnalysisHostApiImpl.cameraXProxy = mockCameraXProxy; + when(mockCameraXProxy.createImageAnalysisFlutterApiImpl(mockBinaryMessenger)) + .thenReturn(mockImageAnalysisFlutterApiImpl); + + final ArgumentCaptor analyzerCaptor = + ArgumentCaptor.forClass(ImageAnalysis.Analyzer.class); + + // Test that analyzer is set: + + imageAnalysisHostApiImpl.setAnalyzer(mockImageAnalysisIdentifier); + + verify(mockImageAnalysis).setAnalyzer(any(Executor.class), analyzerCaptor.capture()); + ImageAnalysis.Analyzer analyzer = analyzerCaptor.getValue(); + + // Test that the expected image information is sent: + + final ImageProxy.PlaneProxy mockPlaneProxy = mock(ImageProxy.PlaneProxy.class); + final ImageProxy.PlaneProxy[] mockPlanes = new ImageProxy.PlaneProxy[] {mockPlaneProxy}; + final ByteBuffer mockByteBuffer = mock(ByteBuffer.class); + final int remainingBytes = 1; + final int rowStride = 40; + final int pixelStride = 36; + final int width = 50; + final int height = 10; + final int format = 35; + + when(mockImageProxy.getPlanes()).thenReturn(mockPlanes); + when(mockPlaneProxy.getBuffer()).thenReturn(mockByteBuffer); + when(mockByteBuffer.remaining()).thenReturn(remainingBytes); + when(mockPlaneProxy.getRowStride()).thenReturn(rowStride); + when(mockPlaneProxy.getPixelStride()).thenReturn(pixelStride); + when(mockImageProxy.getWidth()).thenReturn(width); + when(mockImageProxy.getHeight()).thenReturn(height); + when(mockImageProxy.getFormat()).thenReturn(format); + + final ArgumentCaptor imageInformationCaptor = + ArgumentCaptor.forClass(GeneratedCameraXLibrary.ImageInformation.class); + + analyzer.analyze(mockImageProxy); + + verify(mockImageAnalysisFlutterApiImpl) + .sendOnImageAnalyzedEvent(imageInformationCaptor.capture(), any()); + verify(mockImageProxy).close(); + + ImageInformation imageInformation = imageInformationCaptor.getValue(); + assertEquals(imageInformation.getWidth(), Long.valueOf(width)); + assertEquals(imageInformation.getHeight(), Long.valueOf(height)); + assertEquals(imageInformation.getFormat(), Long.valueOf(format)); + List imagePlanesInformation = + imageInformation.getImagePlanesInformation(); + ImagePlaneInformation imagePlaneInformation = imagePlanesInformation.get(0); + assertEquals(imagePlaneInformation.getBytesPerRow(), Long.valueOf(rowStride)); + assertEquals(imagePlaneInformation.getBytesPerPixel(), Long.valueOf(pixelStride)); + // We expect one (remainingBytes) bye. This byte should equal the byte contained by the mock ByteBuffer. + assertEquals(imagePlaneInformation.getBytes().length, remainingBytes); + assertEquals(imagePlaneInformation.getBytes()[0], mockByteBuffer.get()); + } + + @Test + public void clearAnalyzer_makesCallToClearAnalyzer() { + final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); + final Long mockImageAnalysisIdentifier = 12L; + + testInstanceManager.addDartCreatedInstance(mockImageAnalysis, mockImageAnalysisIdentifier); + + imageAnalysisHostApiImpl.clearAnalyzer(mockImageAnalysisIdentifier); + + verify(mockImageAnalysis).clearAnalyzer(); + } + + @Test + public void sendOnImageAnalyzedEvent_callsOnImageAnalyzed() { + final ImageAnalysisFlutterApiImpl spyFlutterApi = + spy(new ImageAnalysisFlutterApiImpl(mockBinaryMessenger)); + final ImageInformation mockImageInformation = mock(ImageInformation.class); + + spyFlutterApi.sendOnImageAnalyzedEvent(mockImageInformation, reply -> {}); + + verify(spyFlutterApi).onImageAnalyzed(eq(mockImageInformation), any()); + } +} diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index 9d0e0fafce54..626f897ac6b2 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -277,7 +277,9 @@ class _CameraExampleHomeState extends State IconButton( icon: const Icon(Icons.flash_on), color: Colors.blue, - onPressed: () {controller?.startImageStream((CameraImage image) {}); }, // TODO(camsim99): Add functionality back here. + onPressed: () { + controller?.startImageStream((CameraImage image) {}); + }, // TODO(camsim99): Add functionality back here. ), // The exposure and focus mode are currently not supported on the web. ...!kIsWeb @@ -285,8 +287,9 @@ class _CameraExampleHomeState extends State IconButton( icon: const Icon(Icons.exposure), color: Colors.blue, - onPressed: - () {controller?.stopImageStream(); }, // TODO(camsim99): Add functionality back here. + onPressed: () { + controller?.stopImageStream(); + }, // TODO(camsim99): Add functionality back here. ), IconButton( icon: const Icon(Icons.filter_center_focus), diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index d00a108f6c8b..0f07bac6907e 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -315,8 +315,9 @@ class AndroidCameraCameraX extends CameraPlatform { @override Stream onStreamedFrameAvailable(int cameraId, {CameraImageStreamOptions? options}) { - final StreamController cameraImageDataStreamController = ImageAnalysis.onStreamedFrameAvailableStreamController; - _configureStreamController(cameraImageDataStreamController); + final StreamController cameraImageDataStreamController = + ImageAnalysis.onStreamedFrameAvailableStreamController; + _configureCameraImageDataStreamController(cameraImageDataStreamController); return cameraImageDataStreamController.stream; } @@ -348,10 +349,10 @@ class AndroidCameraCameraX extends CameraPlatform { // TODO(camsim99): Support resolution configuration. // Defaults to YUV_420_888 image format. - imageAnalysis = ImageAnalysis(); + imageAnalysis = createImageAnalysis(null); imageAnalysis!.setAnalyzer(); - // TODO(camsim99): Reset live camera state observers here when + // TODO(camsim99): Reset live camera state observers here when // https://github.com/flutter/packages/pull/3419 lands. camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [imageAnalysis!]); @@ -360,18 +361,20 @@ class AndroidCameraCameraX extends CameraPlatform { /// Unbinds [useCase] from camera lifecycle controlled by the /// [processCameraProvider]. Future _unbindUseCaseFromLifecycle(UseCase useCase) async { + assert(processCameraProvider != null); + final bool useCaseIsBound = await processCameraProvider!.isBound(useCase); if (!useCaseIsBound) { return; } - assert(processCameraProvider != null); processCameraProvider!.unbind([useCase]); } // Methods for configuring image streaming: - void _configureStreamController(StreamController controller) { + void _configureCameraImageDataStreamController( + StreamController controller) { controller.onListen = _onFrameStreamListen; controller.onCancel = _onFrameStreamCancel; } @@ -481,4 +484,11 @@ class AndroidCameraCameraX extends CameraPlatform { return ImageCapture( targetFlashMode: flashMode, targetResolution: targetResolution); } + + /// Returns an [ImageAnalysis] configured with specified flash mode and + /// target resolution. + @visibleForTesting + ImageAnalysis createImageAnalysis(ResolutionInfo? targetResolution) { + return ImageAnalysis(targetResolution: targetResolution); + } } diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index 69500bc59f46..13d297305d5f 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -125,7 +125,8 @@ class ImageInformation { width: result[0]! as int, height: result[1]! as int, format: result[2]! as int, - imagePlanesInformation: (result[3] as List?)!.cast(), + imagePlanesInformation: + (result[3] as List?)!.cast(), ); } } @@ -147,8 +148,7 @@ class InstanceManagerHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -204,7 +204,8 @@ abstract class JavaObjectFlutterApi { void dispose(int identifier); - static void setup(JavaObjectFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(JavaObjectFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectFlutterApi.dispose', codec, @@ -214,7 +215,7 @@ abstract class JavaObjectFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -270,7 +271,8 @@ abstract class CameraInfoFlutterApi { void create(int identifier); - static void setup(CameraInfoFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraInfoFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraInfoFlutterApi.create', codec, @@ -280,7 +282,7 @@ abstract class CameraInfoFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -307,8 +309,8 @@ class CameraSelectorHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_lensFacing]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_lensFacing]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -325,12 +327,13 @@ class CameraSelectorHostApi { } } - Future> filter(int arg_identifier, List arg_cameraInfoIds) async { + Future> filter( + int arg_identifier, List arg_cameraInfoIds) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_cameraInfoIds]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_cameraInfoIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -358,7 +361,8 @@ abstract class CameraSelectorFlutterApi { void create(int identifier, int? lensFacing); - static void setup(CameraSelectorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraSelectorFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, @@ -368,7 +372,7 @@ abstract class CameraSelectorFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -396,8 +400,7 @@ class ProcessCameraProviderHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -421,7 +424,8 @@ class ProcessCameraProviderHostApi { Future> getAvailableCameraInfos(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', + codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_identifier]) as List?; @@ -446,12 +450,17 @@ class ProcessCameraProviderHostApi { } } - Future bindToLifecycle(int arg_identifier, int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { + Future bindToLifecycle(int arg_identifier, + int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', + codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_cameraSelectorIdentifier, arg_useCaseIds]) as List?; + final List? replyList = await channel.send([ + arg_identifier, + arg_cameraSelectorIdentifier, + arg_useCaseIds + ]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -478,7 +487,8 @@ class ProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_useCaseIdentifier]) as List?; + await channel.send([arg_identifier, arg_useCaseIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -504,8 +514,8 @@ class ProcessCameraProviderHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_useCaseIds]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_useCaseIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -550,7 +560,8 @@ abstract class ProcessCameraProviderFlutterApi { void create(int identifier); - static void setup(ProcessCameraProviderFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ProcessCameraProviderFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, @@ -560,7 +571,7 @@ abstract class ProcessCameraProviderFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -588,7 +599,7 @@ abstract class CameraFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -616,7 +627,7 @@ class _SystemServicesHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -634,9 +645,11 @@ class SystemServicesHostApi { static const MessageCodec codec = _SystemServicesHostApiCodec(); - Future requestCameraPermissions(bool arg_enableAudio) async { + Future requestCameraPermissions( + bool arg_enableAudio) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', + codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_enableAudio]) as List?; @@ -656,12 +669,15 @@ class SystemServicesHostApi { } } - Future startListeningForDeviceOrientationChange(bool arg_isFrontFacing, int arg_sensorOrientation) async { + Future startListeningForDeviceOrientationChange( + bool arg_isFrontFacing, int arg_sensorOrientation) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', + codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_isFrontFacing, arg_sensorOrientation]) as List?; + await channel.send([arg_isFrontFacing, arg_sensorOrientation]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -680,10 +696,10 @@ class SystemServicesHostApi { Future stopListeningForDeviceOrientationChange() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', + codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -708,17 +724,19 @@ abstract class SystemServicesFlutterApi { void onCameraError(String errorDescription); - static void setup(SystemServicesFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(SystemServicesFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', codec, + 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', + codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); final List args = (message as List?)!; final String? arg_orientation = (args[0] as String?); assert(arg_orientation != null, @@ -737,7 +755,7 @@ abstract class SystemServicesFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); final List args = (message as List?)!; final String? arg_errorDescription = (args[0] as String?); assert(arg_errorDescription != null, @@ -768,9 +786,9 @@ class _PreviewHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - case 129: + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -788,12 +806,14 @@ class PreviewHostApi { static const MessageCodec codec = _PreviewHostApiCodec(); - Future create(int arg_identifier, int? arg_rotation, ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_rotation, + ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_rotation, arg_targetResolution]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_rotation, arg_targetResolution]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -841,8 +861,7 @@ class PreviewHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -902,7 +921,7 @@ class _ImageCaptureHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -920,12 +939,14 @@ class ImageCaptureHostApi { static const MessageCodec codec = _ImageCaptureHostApiCodec(); - Future create(int arg_identifier, int? arg_flashMode, ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_flashMode, + ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_flashMode, arg_targetResolution]) as List?; + final List? replyList = await channel.send( + [arg_identifier, arg_flashMode, arg_targetResolution]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -946,8 +967,8 @@ class ImageCaptureHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_flashMode]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_flashMode]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1007,7 +1028,7 @@ class _ImageAnalysisHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1025,12 +1046,14 @@ class ImageAnalysisHostApi { static const MessageCodec codec = _ImageAnalysisHostApiCodec(); - Future create(int arg_identifier, ResolutionInfo? arg_targetResolution) async { + Future create( + int arg_identifier, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_targetResolution]) as List?; + await channel.send([arg_identifier, arg_targetResolution]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1110,9 +1133,9 @@ class _ImageAnalysisFlutterApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ImageInformation.decode(readValue(buffer)!); - case 129: + case 129: return ImagePlaneInformation.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1125,7 +1148,8 @@ abstract class ImageAnalysisFlutterApi { void onImageAnalyzed(ImageInformation imageInformation); - static void setup(ImageAnalysisFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ImageAnalysisFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed', codec, @@ -1135,9 +1159,10 @@ abstract class ImageAnalysisFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null.'); final List args = (message as List?)!; - final ImageInformation? arg_imageInformation = (args[0] as ImageInformation?); + final ImageInformation? arg_imageInformation = + (args[0] as ImageInformation?); assert(arg_imageInformation != null, 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null, expected non-null ImageInformation.'); api.onImageAnalyzed(arg_imageInformation!); diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index 18f9b117efa5..46ca459c534c 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -111,7 +111,7 @@ class ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { assert(identifier != null, 'No ImageAnalysis instance in the instance manager has been found.'); - clearAnalyzer(identifier!); + clearAnalyzer(identifier!); } } diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index 640c1ed2d248..b60f6facc207 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart @@ -10,6 +10,7 @@ import 'package:camera_android_camerax/src/camera.dart'; import 'package:camera_android_camerax/src/camera_info.dart'; import 'package:camera_android_camerax/src/camera_selector.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; +import 'package:camera_android_camerax/src/image_analysis.dart'; import 'package:camera_android_camerax/src/image_capture.dart'; import 'package:camera_android_camerax/src/preview.dart'; import 'package:camera_android_camerax/src/process_camera_provider.dart'; @@ -27,7 +28,9 @@ import 'android_camera_camerax_test.mocks.dart'; @GenerateNiceMocks(>[ MockSpec(), MockSpec(), + MockSpec(), MockSpec(), + MockSpec(), MockSpec(), MockSpec(), MockSpec(), @@ -39,7 +42,7 @@ void main() { test('Should fetch CameraDescription instances for available cameras', () async { // Arrange - final MockAndroidCameraCamerax camera = MockAndroidCameraCamerax(); + final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); camera.processCameraProvider = MockProcessCameraProvider(); final List returnData = [ { @@ -99,7 +102,7 @@ void main() { test( 'createCamera requests permissions, starts listening for device orientation changes, and returns flutter surface texture ID', () async { - final MockAndroidCameraCamerax camera = MockAndroidCameraCamerax(); + final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); camera.processCameraProvider = MockProcessCameraProvider(); const CameraLensDirection testLensDirection = CameraLensDirection.back; const int testSensorOrientation = 90; @@ -139,7 +142,7 @@ void main() { test( 'createCamera binds Preview and ImageCapture use cases to ProcessCameraProvider instance', () async { - final MockAndroidCameraCamerax camera = MockAndroidCameraCamerax(); + final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); camera.processCameraProvider = MockProcessCameraProvider(); const CameraLensDirection testLensDirection = CameraLensDirection.back; const int testSensorOrientation = 90; @@ -165,7 +168,7 @@ void main() { }); test('initializeCamera sends expected CameraInitializedEvent', () async { - final MockAndroidCameraCamerax camera = MockAndroidCameraCamerax(); + final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); camera.processCameraProvider = MockProcessCameraProvider(); const int cameraId = 10; const CameraLensDirection testLensDirection = CameraLensDirection.back; @@ -405,17 +408,76 @@ void main() { expect(imageFile.path, equals(testPicturePath)); }); + + test( + 'onStreamedFrameAvailable emits CameraImageData when picked up from ImageAnalysis', + () async { + final AndroidCameraCameraX camera = AndroidCameraCameraX(); + camera.processCameraProvider = MockProcessCameraProvider(); + camera.cameraSelector = MockCameraSelector(); + + final CameraImageData mockCameraImageData = MockCameraImageData(); + final Stream imageStream = + camera.onStreamedFrameAvailable(22); + final StreamQueue streamQueue = + StreamQueue(imageStream); + + ImageAnalysis.onStreamedFrameAvailableStreamController + .add(mockCameraImageData); + + expect(await streamQueue.next, equals(mockCameraImageData)); + await streamQueue.cancel(); + }); + + test( + 'onStreamedFrameAvaiable returns stream that responds expectedly to being listened to and canceled', + () async { + final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + final ProcessCameraProvider mockProcessCameraProvider = + MockProcessCameraProvider(); + final CameraSelector mockCameraSelector = MockCameraSelector(); + + camera.processCameraProvider = mockProcessCameraProvider; + camera.cameraSelector = mockCameraSelector; + + // Test listening. + final Camera mockCamera = MockCamera(); + when(mockProcessCameraProvider.bindToLifecycle( + mockCameraSelector, [camera.mockImageAnalysis])) + .thenAnswer((_) async => mockCamera); + + final StreamSubscription imageStreamSubscription = + camera.onStreamedFrameAvailable(32).listen((CameraImageData data) {}); + + verify(camera.mockImageAnalysis.setAnalyzer()); + verify(mockProcessCameraProvider.bindToLifecycle( + mockCameraSelector, [camera.mockImageAnalysis])); + + // Test canceling. + when(mockProcessCameraProvider.isBound(camera.mockImageAnalysis)) + .thenAnswer((_) async => Future.value(true)); + + await imageStreamSubscription.cancel(); + + verify(camera.mockImageAnalysis.clearAnalyzer()); + verify( + mockProcessCameraProvider.unbind([camera.mockImageAnalysis])); + }); } +// TODO(camsim99): Refactor this to reduce redundancy. /// Mock of [AndroidCameraCameraX] that stubs behavior of some methods for -/// testing. -class MockAndroidCameraCamerax extends AndroidCameraCameraX { +/// testing the createCamera and initializeCamera methods. +class MockAndroidCameraCameraX extends AndroidCameraCameraX { bool cameraPermissionsRequested = false; bool startedListeningForDeviceOrientationChanges = false; + + // Mocks available for use throughout testing. final MockPreview testPreview = MockPreview(); final MockImageCapture testImageCapture = MockImageCapture(); final MockCameraSelector mockBackCameraSelector = MockCameraSelector(); final MockCameraSelector mockFrontCameraSelector = MockCameraSelector(); + final MockImageAnalysis mockImageAnalysis = MockImageAnalysis(); @override Future requestCameraPermissions(bool enableAudio) async { @@ -450,4 +512,9 @@ class MockAndroidCameraCamerax extends AndroidCameraCameraX { int? flashMode, ResolutionInfo? targetResolution) { return testImageCapture; } + + @override + ImageAnalysis createImageAnalysis(ResolutionInfo? targetResolution) { + return mockImageAnalysis; + } } diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart index 0f60e00c0717..1905ec06086f 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart @@ -3,20 +3,23 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i8; +import 'dart:async' as _i9; -import 'package:camera_android_camerax/src/camera.dart' as _i3; -import 'package:camera_android_camerax/src/camera_info.dart' as _i7; -import 'package:camera_android_camerax/src/camera_selector.dart' as _i9; -import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i2; -import 'package:camera_android_camerax/src/image_capture.dart' as _i10; -import 'package:camera_android_camerax/src/preview.dart' as _i11; +import 'package:camera_android_camerax/src/camera.dart' as _i4; +import 'package:camera_android_camerax/src/camera_info.dart' as _i8; +import 'package:camera_android_camerax/src/camera_selector.dart' as _i10; +import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i3; +import 'package:camera_android_camerax/src/image_analysis.dart' as _i11; +import 'package:camera_android_camerax/src/image_capture.dart' as _i12; +import 'package:camera_android_camerax/src/preview.dart' as _i13; import 'package:camera_android_camerax/src/process_camera_provider.dart' - as _i12; -import 'package:camera_android_camerax/src/use_case.dart' as _i13; -import 'package:flutter/foundation.dart' as _i6; -import 'package:flutter/services.dart' as _i5; -import 'package:flutter/widgets.dart' as _i4; + as _i14; +import 'package:camera_android_camerax/src/use_case.dart' as _i15; +import 'package:camera_platform_interface/camera_platform_interface.dart' + as _i2; +import 'package:flutter/foundation.dart' as _i7; +import 'package:flutter/services.dart' as _i6; +import 'package:flutter/widgets.dart' as _i5; import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: type=lint @@ -30,9 +33,9 @@ import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeResolutionInfo_0 extends _i1.SmartFake - implements _i2.ResolutionInfo { - _FakeResolutionInfo_0( +class _FakeCameraImageFormat_0 extends _i1.SmartFake + implements _i2.CameraImageFormat { + _FakeCameraImageFormat_0( Object parent, Invocation parentInvocation, ) : super( @@ -41,8 +44,9 @@ class _FakeResolutionInfo_0 extends _i1.SmartFake ); } -class _FakeCamera_1 extends _i1.SmartFake implements _i3.Camera { - _FakeCamera_1( +class _FakeResolutionInfo_1 extends _i1.SmartFake + implements _i3.ResolutionInfo { + _FakeResolutionInfo_1( Object parent, Invocation parentInvocation, ) : super( @@ -51,8 +55,18 @@ class _FakeCamera_1 extends _i1.SmartFake implements _i3.Camera { ); } -class _FakeWidget_2 extends _i1.SmartFake implements _i4.Widget { - _FakeWidget_2( +class _FakeCamera_2 extends _i1.SmartFake implements _i4.Camera { + _FakeCamera_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeWidget_3 extends _i1.SmartFake implements _i5.Widget { + _FakeWidget_3( Object parent, Invocation parentInvocation, ) : super( @@ -61,13 +75,13 @@ class _FakeWidget_2 extends _i1.SmartFake implements _i4.Widget { ); @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => + String toString({_i6.DiagnosticLevel? minLevel = _i6.DiagnosticLevel.info}) => super.toString(); } -class _FakeInheritedWidget_3 extends _i1.SmartFake - implements _i4.InheritedWidget { - _FakeInheritedWidget_3( +class _FakeInheritedWidget_4 extends _i1.SmartFake + implements _i5.InheritedWidget { + _FakeInheritedWidget_4( Object parent, Invocation parentInvocation, ) : super( @@ -76,13 +90,13 @@ class _FakeInheritedWidget_3 extends _i1.SmartFake ); @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => + String toString({_i6.DiagnosticLevel? minLevel = _i6.DiagnosticLevel.info}) => super.toString(); } -class _FakeDiagnosticsNode_4 extends _i1.SmartFake - implements _i6.DiagnosticsNode { - _FakeDiagnosticsNode_4( +class _FakeDiagnosticsNode_5 extends _i1.SmartFake + implements _i7.DiagnosticsNode { + _FakeDiagnosticsNode_5( Object parent, Invocation parentInvocation, ) : super( @@ -92,8 +106,8 @@ class _FakeDiagnosticsNode_4 extends _i1.SmartFake @override String toString({ - _i6.TextTreeConfiguration? parentConfiguration, - _i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info, + _i7.TextTreeConfiguration? parentConfiguration, + _i6.DiagnosticLevel? minLevel = _i6.DiagnosticLevel.info, }) => super.toString(); } @@ -101,77 +115,138 @@ class _FakeDiagnosticsNode_4 extends _i1.SmartFake /// A class which mocks [Camera]. /// /// See the documentation for Mockito's code generation for more information. -class MockCamera extends _i1.Mock implements _i3.Camera {} +class MockCamera extends _i1.Mock implements _i4.Camera {} /// A class which mocks [CameraInfo]. /// /// See the documentation for Mockito's code generation for more information. -class MockCameraInfo extends _i1.Mock implements _i7.CameraInfo { +class MockCameraInfo extends _i1.Mock implements _i8.CameraInfo { @override - _i8.Future getSensorRotationDegrees() => (super.noSuchMethod( + _i9.Future getSensorRotationDegrees() => (super.noSuchMethod( Invocation.method( #getSensorRotationDegrees, [], ), - returnValue: _i8.Future.value(0), - returnValueForMissingStub: _i8.Future.value(0), - ) as _i8.Future); + returnValue: _i9.Future.value(0), + returnValueForMissingStub: _i9.Future.value(0), + ) as _i9.Future); +} + +/// A class which mocks [CameraImageData]. +/// +/// See the documentation for Mockito's code generation for more information. +// ignore: must_be_immutable +class MockCameraImageData extends _i1.Mock implements _i2.CameraImageData { + @override + _i2.CameraImageFormat get format => (super.noSuchMethod( + Invocation.getter(#format), + returnValue: _FakeCameraImageFormat_0( + this, + Invocation.getter(#format), + ), + returnValueForMissingStub: _FakeCameraImageFormat_0( + this, + Invocation.getter(#format), + ), + ) as _i2.CameraImageFormat); + @override + int get height => (super.noSuchMethod( + Invocation.getter(#height), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + @override + int get width => (super.noSuchMethod( + Invocation.getter(#width), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + @override + List<_i2.CameraImagePlane> get planes => (super.noSuchMethod( + Invocation.getter(#planes), + returnValue: <_i2.CameraImagePlane>[], + returnValueForMissingStub: <_i2.CameraImagePlane>[], + ) as List<_i2.CameraImagePlane>); } /// A class which mocks [CameraSelector]. /// /// See the documentation for Mockito's code generation for more information. -class MockCameraSelector extends _i1.Mock implements _i9.CameraSelector { +class MockCameraSelector extends _i1.Mock implements _i10.CameraSelector { @override - _i8.Future> filter(List<_i7.CameraInfo>? cameraInfos) => + _i9.Future> filter(List<_i8.CameraInfo>? cameraInfos) => (super.noSuchMethod( Invocation.method( #filter, [cameraInfos], ), - returnValue: _i8.Future>.value(<_i7.CameraInfo>[]), + returnValue: _i9.Future>.value(<_i8.CameraInfo>[]), returnValueForMissingStub: - _i8.Future>.value(<_i7.CameraInfo>[]), - ) as _i8.Future>); + _i9.Future>.value(<_i8.CameraInfo>[]), + ) as _i9.Future>); +} + +/// A class which mocks [ImageAnalysis]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockImageAnalysis extends _i1.Mock implements _i11.ImageAnalysis { + @override + _i9.Future setAnalyzer() => (super.noSuchMethod( + Invocation.method( + #setAnalyzer, + [], + ), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) as _i9.Future); + @override + _i9.Future clearAnalyzer() => (super.noSuchMethod( + Invocation.method( + #clearAnalyzer, + [], + ), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) as _i9.Future); } /// A class which mocks [ImageCapture]. /// /// See the documentation for Mockito's code generation for more information. -class MockImageCapture extends _i1.Mock implements _i10.ImageCapture { +class MockImageCapture extends _i1.Mock implements _i12.ImageCapture { @override - _i8.Future setFlashMode(int? newFlashMode) => (super.noSuchMethod( + _i9.Future setFlashMode(int? newFlashMode) => (super.noSuchMethod( Invocation.method( #setFlashMode, [newFlashMode], ), - returnValue: _i8.Future.value(), - returnValueForMissingStub: _i8.Future.value(), - ) as _i8.Future); + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) as _i9.Future); @override - _i8.Future takePicture() => (super.noSuchMethod( + _i9.Future takePicture() => (super.noSuchMethod( Invocation.method( #takePicture, [], ), - returnValue: _i8.Future.value(''), - returnValueForMissingStub: _i8.Future.value(''), - ) as _i8.Future); + returnValue: _i9.Future.value(''), + returnValueForMissingStub: _i9.Future.value(''), + ) as _i9.Future); } /// A class which mocks [Preview]. /// /// See the documentation for Mockito's code generation for more information. -class MockPreview extends _i1.Mock implements _i11.Preview { +class MockPreview extends _i1.Mock implements _i13.Preview { @override - _i8.Future setSurfaceProvider() => (super.noSuchMethod( + _i9.Future setSurfaceProvider() => (super.noSuchMethod( Invocation.method( #setSurfaceProvider, [], ), - returnValue: _i8.Future.value(0), - returnValueForMissingStub: _i8.Future.value(0), - ) as _i8.Future); + returnValue: _i9.Future.value(0), + returnValueForMissingStub: _i9.Future.value(0), + ) as _i9.Future); @override void releaseFlutterSurfaceTexture() => super.noSuchMethod( Invocation.method( @@ -181,12 +256,12 @@ class MockPreview extends _i1.Mock implements _i11.Preview { returnValueForMissingStub: null, ); @override - _i8.Future<_i2.ResolutionInfo> getResolutionInfo() => (super.noSuchMethod( + _i9.Future<_i3.ResolutionInfo> getResolutionInfo() => (super.noSuchMethod( Invocation.method( #getResolutionInfo, [], ), - returnValue: _i8.Future<_i2.ResolutionInfo>.value(_FakeResolutionInfo_0( + returnValue: _i9.Future<_i3.ResolutionInfo>.value(_FakeResolutionInfo_1( this, Invocation.method( #getResolutionInfo, @@ -194,36 +269,36 @@ class MockPreview extends _i1.Mock implements _i11.Preview { ), )), returnValueForMissingStub: - _i8.Future<_i2.ResolutionInfo>.value(_FakeResolutionInfo_0( + _i9.Future<_i3.ResolutionInfo>.value(_FakeResolutionInfo_1( this, Invocation.method( #getResolutionInfo, [], ), )), - ) as _i8.Future<_i2.ResolutionInfo>); + ) as _i9.Future<_i3.ResolutionInfo>); } /// A class which mocks [ProcessCameraProvider]. /// /// See the documentation for Mockito's code generation for more information. class MockProcessCameraProvider extends _i1.Mock - implements _i12.ProcessCameraProvider { + implements _i14.ProcessCameraProvider { @override - _i8.Future> getAvailableCameraInfos() => + _i9.Future> getAvailableCameraInfos() => (super.noSuchMethod( Invocation.method( #getAvailableCameraInfos, [], ), - returnValue: _i8.Future>.value(<_i7.CameraInfo>[]), + returnValue: _i9.Future>.value(<_i8.CameraInfo>[]), returnValueForMissingStub: - _i8.Future>.value(<_i7.CameraInfo>[]), - ) as _i8.Future>); + _i9.Future>.value(<_i8.CameraInfo>[]), + ) as _i9.Future>); @override - _i8.Future<_i3.Camera> bindToLifecycle( - _i9.CameraSelector? cameraSelector, - List<_i13.UseCase>? useCases, + _i9.Future<_i4.Camera> bindToLifecycle( + _i10.CameraSelector? cameraSelector, + List<_i15.UseCase>? useCases, ) => (super.noSuchMethod( Invocation.method( @@ -233,7 +308,7 @@ class MockProcessCameraProvider extends _i1.Mock useCases, ], ), - returnValue: _i8.Future<_i3.Camera>.value(_FakeCamera_1( + returnValue: _i9.Future<_i4.Camera>.value(_FakeCamera_2( this, Invocation.method( #bindToLifecycle, @@ -243,7 +318,7 @@ class MockProcessCameraProvider extends _i1.Mock ], ), )), - returnValueForMissingStub: _i8.Future<_i3.Camera>.value(_FakeCamera_1( + returnValueForMissingStub: _i9.Future<_i4.Camera>.value(_FakeCamera_2( this, Invocation.method( #bindToLifecycle, @@ -253,18 +328,18 @@ class MockProcessCameraProvider extends _i1.Mock ], ), )), - ) as _i8.Future<_i3.Camera>); + ) as _i9.Future<_i4.Camera>); @override - _i8.Future isBound(_i13.UseCase? useCase) => (super.noSuchMethod( + _i9.Future isBound(_i15.UseCase? useCase) => (super.noSuchMethod( Invocation.method( #isBound, [useCase], ), - returnValue: _i8.Future.value(false), - returnValueForMissingStub: _i8.Future.value(false), - ) as _i8.Future); + returnValue: _i9.Future.value(false), + returnValueForMissingStub: _i9.Future.value(false), + ) as _i9.Future); @override - void unbind(List<_i13.UseCase>? useCases) => super.noSuchMethod( + void unbind(List<_i15.UseCase>? useCases) => super.noSuchMethod( Invocation.method( #unbind, [useCases], @@ -284,19 +359,19 @@ class MockProcessCameraProvider extends _i1.Mock /// A class which mocks [BuildContext]. /// /// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i4.BuildContext { +class MockBuildContext extends _i1.Mock implements _i5.BuildContext { MockBuildContext() { _i1.throwOnMissingStub(this); } @override - _i4.Widget get widget => (super.noSuchMethod( + _i5.Widget get widget => (super.noSuchMethod( Invocation.getter(#widget), - returnValue: _FakeWidget_2( + returnValue: _FakeWidget_3( this, Invocation.getter(#widget), ), - ) as _i4.Widget); + ) as _i5.Widget); @override bool get mounted => (super.noSuchMethod( Invocation.getter(#mounted), @@ -308,8 +383,8 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValue: false, ) as bool); @override - _i4.InheritedWidget dependOnInheritedElement( - _i4.InheritedElement? ancestor, { + _i5.InheritedWidget dependOnInheritedElement( + _i5.InheritedElement? ancestor, { Object? aspect, }) => (super.noSuchMethod( @@ -318,7 +393,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { [ancestor], {#aspect: aspect}, ), - returnValue: _FakeInheritedWidget_3( + returnValue: _FakeInheritedWidget_4( this, Invocation.method( #dependOnInheritedElement, @@ -326,9 +401,9 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { {#aspect: aspect}, ), ), - ) as _i4.InheritedWidget); + ) as _i5.InheritedWidget); @override - void visitAncestorElements(bool Function(_i4.Element)? visitor) => + void visitAncestorElements(bool Function(_i5.Element)? visitor) => super.noSuchMethod( Invocation.method( #visitAncestorElements, @@ -337,7 +412,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValueForMissingStub: null, ); @override - void visitChildElements(_i4.ElementVisitor? visitor) => super.noSuchMethod( + void visitChildElements(_i5.ElementVisitor? visitor) => super.noSuchMethod( Invocation.method( #visitChildElements, [visitor], @@ -345,7 +420,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValueForMissingStub: null, ); @override - void dispatchNotification(_i4.Notification? notification) => + void dispatchNotification(_i5.Notification? notification) => super.noSuchMethod( Invocation.method( #dispatchNotification, @@ -354,9 +429,9 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValueForMissingStub: null, ); @override - _i6.DiagnosticsNode describeElement( + _i7.DiagnosticsNode describeElement( String? name, { - _i6.DiagnosticsTreeStyle? style = _i6.DiagnosticsTreeStyle.errorProperty, + _i7.DiagnosticsTreeStyle? style = _i7.DiagnosticsTreeStyle.errorProperty, }) => (super.noSuchMethod( Invocation.method( @@ -364,7 +439,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { [name], {#style: style}, ), - returnValue: _FakeDiagnosticsNode_4( + returnValue: _FakeDiagnosticsNode_5( this, Invocation.method( #describeElement, @@ -372,11 +447,11 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { {#style: style}, ), ), - ) as _i6.DiagnosticsNode); + ) as _i7.DiagnosticsNode); @override - _i6.DiagnosticsNode describeWidget( + _i7.DiagnosticsNode describeWidget( String? name, { - _i6.DiagnosticsTreeStyle? style = _i6.DiagnosticsTreeStyle.errorProperty, + _i7.DiagnosticsTreeStyle? style = _i7.DiagnosticsTreeStyle.errorProperty, }) => (super.noSuchMethod( Invocation.method( @@ -384,7 +459,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { [name], {#style: style}, ), - returnValue: _FakeDiagnosticsNode_4( + returnValue: _FakeDiagnosticsNode_5( this, Invocation.method( #describeWidget, @@ -392,9 +467,9 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { {#style: style}, ), ), - ) as _i6.DiagnosticsNode); + ) as _i7.DiagnosticsNode); @override - List<_i6.DiagnosticsNode> describeMissingAncestor( + List<_i7.DiagnosticsNode> describeMissingAncestor( {required Type? expectedAncestorType}) => (super.noSuchMethod( Invocation.method( @@ -402,21 +477,21 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { [], {#expectedAncestorType: expectedAncestorType}, ), - returnValue: <_i6.DiagnosticsNode>[], - ) as List<_i6.DiagnosticsNode>); + returnValue: <_i7.DiagnosticsNode>[], + ) as List<_i7.DiagnosticsNode>); @override - _i6.DiagnosticsNode describeOwnershipChain(String? name) => + _i7.DiagnosticsNode describeOwnershipChain(String? name) => (super.noSuchMethod( Invocation.method( #describeOwnershipChain, [name], ), - returnValue: _FakeDiagnosticsNode_4( + returnValue: _FakeDiagnosticsNode_5( this, Invocation.method( #describeOwnershipChain, [name], ), ), - ) as _i6.DiagnosticsNode); + ) as _i7.DiagnosticsNode); } diff --git a/packages/camera/camera_android_camerax/test/image_analysis_test.dart b/packages/camera/camera_android_camerax/test/image_analysis_test.dart index 379750ecc5a6..26b62791765e 100644 --- a/packages/camera/camera_android_camerax/test/image_analysis_test.dart +++ b/packages/camera/camera_android_camerax/test/image_analysis_test.dart @@ -27,7 +27,8 @@ void main() { tearDown(() => TestImageAnalysisHostApi.setup(null)); test('detached create does not call create on the Java side', () async { - final MockTestImageAnalysisHostApi mockApi = MockTestImageAnalysisHostApi(); + final MockTestImageAnalysisHostApi mockApi = + MockTestImageAnalysisHostApi(); TestImageAnalysisHostApi.setup(mockApi); final InstanceManager instanceManager = InstanceManager( @@ -38,12 +39,13 @@ void main() { targetResolution: ResolutionInfo(width: 50, height: 10), ); - verifyNever(mockApi.create(argThat(isA()), - argThat(isA()))); + verifyNever( + mockApi.create(argThat(isA()), argThat(isA()))); }); test('create calls create on the Java side', () async { - final MockTestImageAnalysisHostApi mockApi = MockTestImageAnalysisHostApi(); + final MockTestImageAnalysisHostApi mockApi = + MockTestImageAnalysisHostApi(); TestImageAnalysisHostApi.setup(mockApi); final InstanceManager instanceManager = InstanceManager( @@ -57,8 +59,8 @@ void main() { width: targetResolutionWidth, height: targetResolutionHeight), ); - final VerificationResult createVerification = verify(mockApi.create( - argThat(isA()), captureAny)); + final VerificationResult createVerification = + verify(mockApi.create(argThat(isA()), captureAny)); final ResolutionInfo capturedResolutionInfo = createVerification.captured.single as ResolutionInfo; expect(capturedResolutionInfo.width, equals(targetResolutionWidth)); @@ -67,7 +69,8 @@ void main() { test('setAnalyzer makes call to set analyzer on ImageAnalysis instance', () async { - final MockTestImageAnalysisHostApi mockApi = MockTestImageAnalysisHostApi(); + final MockTestImageAnalysisHostApi mockApi = + MockTestImageAnalysisHostApi(); TestImageAnalysisHostApi.setup(mockApi); final InstanceManager instanceManager = InstanceManager( @@ -90,7 +93,8 @@ void main() { test('clearAnalyzer makes call to set analyzer on ImageAnalysis instance', () async { - final MockTestImageAnalysisHostApi mockApi = MockTestImageAnalysisHostApi(); + final MockTestImageAnalysisHostApi mockApi = + MockTestImageAnalysisHostApi(); TestImageAnalysisHostApi.setup(mockApi); final InstanceManager instanceManager = InstanceManager( @@ -111,30 +115,33 @@ void main() { verify(mockApi.clearAnalyzer(imageAnalysisIdentifier)); }); - test('flutterApi onImageAnalyzed adds event with image information to expected stream', () async { + test( + 'flutterApi onImageAnalyzed adds event with image information to expected stream', + () async { final ImageAnalysisFlutterApiImpl flutterApi = ImageAnalysisFlutterApiImpl(); - + // Fake image information for testing. const int bytesPerRow = 5; const int bytesPerPixel = 1; final Uint8List bytes = Uint8List(50); - final List imagePlanesInformation = [ + final List imagePlanesInformation = + [ ImagePlaneInformation( bytesPerRow: bytesPerRow, bytesPerPixel: bytesPerPixel, bytes: bytes, - )]; + ) + ]; const int width = 5; const int height = 10; const int format = 35; - final ImageInformation imageInformation = - ImageInformation( - width: width, - height: height, - format: format, - imagePlanesInformation: imagePlanesInformation, - ); + final ImageInformation imageInformation = ImageInformation( + width: width, + height: height, + format: format, + imagePlanesInformation: imagePlanesInformation, + ); ImageAnalysis.onStreamedFrameAvailableStreamController.stream .listen((CameraImageData cameraImageData) { @@ -142,7 +149,8 @@ void main() { expect(cameraImageData.planes.first, isNotNull); expect(cameraImageData.planes.first!.bytes, equals(bytes)); expect(cameraImageData.planes.first!.bytesPerRow, equals(bytesPerRow)); - expect(cameraImageData.planes.first!.bytesPerPixel, equals(bytesPerPixel)); + expect( + cameraImageData.planes.first!.bytesPerPixel, equals(bytesPerPixel)); expect(cameraImageData.format!.raw, equals(format)); expect(cameraImageData.height, equals(height)); expect(cameraImageData.width, equals(width)); diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index a6a76e7fcdf8..0915f61ab111 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -21,7 +21,8 @@ abstract class TestInstanceManagerHostApi { /// This is typically only used after a hot restart. void clear(); - static void setup(TestInstanceManagerHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestInstanceManagerHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, @@ -44,7 +45,8 @@ abstract class TestJavaObjectHostApi { void dispose(int identifier); - static void setup(TestJavaObjectHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestJavaObjectHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, @@ -54,7 +56,7 @@ abstract class TestJavaObjectHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -72,17 +74,19 @@ abstract class TestCameraInfoHostApi { int getSensorRotationDegrees(int identifier); - static void setup(TestCameraInfoHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraInfoHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', + codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -102,7 +106,8 @@ abstract class TestCameraSelectorHostApi { List filter(int identifier, List cameraInfoIds); - static void setup(TestCameraSelectorHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraSelectorHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, @@ -112,7 +117,7 @@ abstract class TestCameraSelectorHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -132,15 +137,17 @@ abstract class TestCameraSelectorHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); - final List? arg_cameraInfoIds = (args[1] as List?)?.cast(); + final List? arg_cameraInfoIds = + (args[1] as List?)?.cast(); assert(arg_cameraInfoIds != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); - final List output = api.filter(arg_identifier!, arg_cameraInfoIds!); + final List output = + api.filter(arg_identifier!, arg_cameraInfoIds!); return [output]; }); } @@ -155,7 +162,8 @@ abstract class TestProcessCameraProviderHostApi { List getAvailableCameraInfos(int identifier); - int bindToLifecycle(int identifier, int cameraSelectorIdentifier, List useCaseIds); + int bindToLifecycle( + int identifier, int cameraSelectorIdentifier, List useCaseIds); bool isBound(int identifier, int useCaseIdentifier); @@ -163,7 +171,8 @@ abstract class TestProcessCameraProviderHostApi { void unbindAll(int identifier); - static void setup(TestProcessCameraProviderHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestProcessCameraProviderHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, @@ -180,33 +189,36 @@ abstract class TestProcessCameraProviderHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', + codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); - final List output = api.getAvailableCameraInfos(arg_identifier!); + final List output = + api.getAvailableCameraInfos(arg_identifier!); return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', + codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -214,10 +226,12 @@ abstract class TestProcessCameraProviderHostApi { final int? arg_cameraSelectorIdentifier = (args[1] as int?); assert(arg_cameraSelectorIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); - final List? arg_useCaseIds = (args[2] as List?)?.cast(); + final List? arg_useCaseIds = + (args[2] as List?)?.cast(); assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null List.'); - final int output = api.bindToLifecycle(arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); + final int output = api.bindToLifecycle( + arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); return [output]; }); } @@ -231,7 +245,7 @@ abstract class TestProcessCameraProviderHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -239,7 +253,8 @@ abstract class TestProcessCameraProviderHostApi { final int? arg_useCaseIdentifier = (args[1] as int?); assert(arg_useCaseIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); - final bool output = api.isBound(arg_identifier!, arg_useCaseIdentifier!); + final bool output = + api.isBound(arg_identifier!, arg_useCaseIdentifier!); return [output]; }); } @@ -253,12 +268,13 @@ abstract class TestProcessCameraProviderHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null int.'); - final List? arg_useCaseIds = (args[1] as List?)?.cast(); + final List? arg_useCaseIds = + (args[1] as List?)?.cast(); assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null List.'); api.unbind(arg_identifier!, arg_useCaseIds!); @@ -275,7 +291,7 @@ abstract class TestProcessCameraProviderHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -303,7 +319,7 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -314,42 +330,48 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { abstract class TestSystemServicesHostApi { static const MessageCodec codec = _TestSystemServicesHostApiCodec(); - Future requestCameraPermissions(bool enableAudio); + Future requestCameraPermissions( + bool enableAudio); - void startListeningForDeviceOrientationChange(bool isFrontFacing, int sensorOrientation); + void startListeningForDeviceOrientationChange( + bool isFrontFacing, int sensorOrientation); void stopListeningForDeviceOrientationChange(); - static void setup(TestSystemServicesHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestSystemServicesHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', + codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); final List args = (message as List?)!; final bool? arg_enableAudio = (args[0] as bool?); assert(arg_enableAudio != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null, expected non-null bool.'); - final CameraPermissionsErrorData? output = await api.requestCameraPermissions(arg_enableAudio!); + final CameraPermissionsErrorData? output = + await api.requestCameraPermissions(arg_enableAudio!); return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', + codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); final List args = (message as List?)!; final bool? arg_isFrontFacing = (args[0] as bool?); assert(arg_isFrontFacing != null, @@ -357,14 +379,16 @@ abstract class TestSystemServicesHostApi { final int? arg_sensorOrientation = (args[1] as int?); assert(arg_sensorOrientation != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null int.'); - api.startListeningForDeviceOrientationChange(arg_isFrontFacing!, arg_sensorOrientation!); + api.startListeningForDeviceOrientationChange( + arg_isFrontFacing!, arg_sensorOrientation!); return []; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', + codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); @@ -397,9 +421,9 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - case 129: + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -418,7 +442,8 @@ abstract class TestPreviewHostApi { ResolutionInfo getResolutionInfo(int identifier); - static void setup(TestPreviewHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestPreviewHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.create', codec, @@ -428,13 +453,14 @@ abstract class TestPreviewHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null, expected non-null int.'); final int? arg_rotation = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = + (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_rotation, arg_targetResolution); return []; }); @@ -449,7 +475,7 @@ abstract class TestPreviewHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -461,7 +487,8 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, + 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', + codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); @@ -482,7 +509,7 @@ abstract class TestPreviewHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -510,7 +537,7 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -527,7 +554,8 @@ abstract class TestImageCaptureHostApi { Future takePicture(int identifier); - static void setup(TestImageCaptureHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageCaptureHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, @@ -537,13 +565,14 @@ abstract class TestImageCaptureHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); final int? arg_flashMode = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = + (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_flashMode, arg_targetResolution); return []; }); @@ -558,7 +587,7 @@ abstract class TestImageCaptureHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -580,7 +609,7 @@ abstract class TestImageCaptureHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -608,7 +637,7 @@ class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -625,7 +654,8 @@ abstract class TestImageAnalysisHostApi { void clearAnalyzer(int identifier); - static void setup(TestImageAnalysisHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageAnalysisHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, @@ -635,12 +665,13 @@ abstract class TestImageAnalysisHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); - final ResolutionInfo? arg_targetResolution = (args[1] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = + (args[1] as ResolutionInfo?); api.create(arg_identifier!, arg_targetResolution); return []; }); @@ -655,7 +686,7 @@ abstract class TestImageAnalysisHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -674,7 +705,7 @@ abstract class TestImageAnalysisHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, From 22f271b93ad788e3cee015fd2380b8d18e13a96a Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 28 Mar 2023 16:54:36 -0700 Subject: [PATCH 34/62] self review --- .../flutter/plugins/camerax/CameraXProxy.java | 14 +++++--- .../camerax/ImageAnalysisFlutterApiImpl.java | 2 +- .../camerax/ImageAnalysisHostApiImpl.java | 25 ++++++++++++-- .../plugins/camerax/ImageAnalysisTest.java | 6 ++-- .../example/lib/main.dart | 9 ++--- .../lib/src/android_camera_camerax.dart | 33 +++++++++++++------ .../lib/src/image_analysis.dart | 23 ++++++++++--- .../pigeons/camerax_library.dart | 12 +++---- .../test/android_camera_camerax_test.dart | 7 ++-- .../test/image_analysis_test.dart | 6 ++-- 10 files changed, 91 insertions(+), 46 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java index 7094ad1ce294..077010bf23fd 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java @@ -19,6 +19,14 @@ /** Utility class used to create CameraX-related objects primarily for testing purposes. */ public class CameraXProxy { + /** + * Converts a {@link ResolutionInfo} instance to a {@link Size} for setting the target resolution + * of {@link UseCase}s. + */ + public static Size sizeFromResolution(@NonNull ResolutionInfo resolutionInfo) { + return new Size(resolutionInfo.getWidth().intValue(), resolutionInfo.getHeight().intValue()); + } + public CameraSelector.Builder createCameraSelectorBuilder() { return new CameraSelector.Builder(); } @@ -65,15 +73,11 @@ public ImageCapture.OutputFileOptions createImageCaptureOutputFileOptions(@NonNu return new ImageCapture.OutputFileOptions.Builder(file).build(); } - /** */ + /** Creates an instance of {@link ImageAnalysis.Builder}. */ public ImageAnalysis.Builder createImageAnalysisBuilder() { return new ImageAnalysis.Builder(); } - public static Size sizeFromResolution(@NonNull ResolutionInfo resolutionInfo) { - return new Size(resolutionInfo.getWidth().intValue(), resolutionInfo.getHeight().intValue()); - } - /** * Creates an instance of the {@code ImageAnalysisFlutterApiImpl}. * diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java index b37c043a6e3f..d1254e35d19d 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java @@ -15,7 +15,7 @@ public ImageAnalysisFlutterApiImpl(@NonNull BinaryMessenger binaryMessenger) { } public void sendOnImageAnalyzedEvent( - @NonNull ImageInformation imageInformation, Reply callback) { + @NonNull ImageInformation imageInformation, @NonNull Reply callback) { onImageAnalyzed(imageInformation, callback); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index 13699beda3b8..df3824bd17a1 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -33,10 +33,14 @@ public ImageAnalysisHostApiImpl( this.instanceManager = instanceManager; } + /** + * Sets the context that will be used to run an {@link ImageAnalysis.Analyzer} on the main thread. + */ public void setContext(Context context) { this.context = context; } + /** Creates an {@link ImageAnalysis} instance with the target resolution if specified. */ @Override public void create(@NonNull Long identifier, @Nullable ResolutionInfo targetResolution) { ImageAnalysis.Builder imageAnalysisBuilder = cameraXProxy.createImageAnalysisBuilder(); @@ -49,6 +53,10 @@ public void create(@NonNull Long identifier, @Nullable ResolutionInfo targetReso instanceManager.addDartCreatedInstance(imageAnalysis, identifier); } + /** + * Sets an analyzer created by {@link ImageAnalysisHostApiImpl#createImageAnalysisAnalyzer()} on + * an {@link ImageAnalysis} instance to receive and analyze images. + */ @Override public void setAnalyzer(@NonNull Long identifier) { ImageAnalysis imageAnalysis = @@ -57,10 +65,18 @@ public void setAnalyzer(@NonNull Long identifier) { imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(context), analyzer); } + /** + * Creates an {@link ImageAnalysis.Analyzer} instance to send image information to the Dart side + * to support image streaming. + * + *

The image information collected and sent matches that of the (Dart) CameraImageData class, + * which is required for image streaming in this plugin. + */ private ImageAnalysis.Analyzer createImageAnalysisAnalyzer() { return new ImageAnalysis.Analyzer() { @Override public void analyze(@NonNull ImageProxy image) { + // Collect image plane information. ImageProxy.PlaneProxy[] planes = image.getPlanes(); List imagePlanesInformation = new ArrayList(); @@ -80,15 +96,17 @@ public void analyze(@NonNull ImageProxy image) { .build()); } - // TODO (camsim99): Retrieve and send the following when made available by b/274791178: + // Collect general image information. + // TODO(camsim99): Retrieve and send the following when made available by b/274791178: // last lens aperture, last sensor exposure time, last sensor sensitivity. GeneratedCameraXLibrary.ImageInformation.Builder imageInfoBuilder = new GeneratedCameraXLibrary.ImageInformation.Builder(); - imageInfoBuilder.setWidth(Long.valueOf(image.getWidth())); - imageInfoBuilder.setHeight(Long.valueOf(image.getHeight())); imageInfoBuilder.setFormat(Long.valueOf(image.getFormat())); imageInfoBuilder.setImagePlanesInformation(imagePlanesInformation); + imageInfoBuilder.setHeight(Long.valueOf(image.getHeight())); + imageInfoBuilder.setWidth(Long.valueOf(image.getWidth())); + // Send image frame to Dart side for image streaming and close ImageProxy, since we are done using it. ImageAnalysisFlutterApiImpl imageAnalysisFlutterApiImpl = cameraXProxy.createImageAnalysisFlutterApiImpl(binaryMessenger); imageAnalysisFlutterApiImpl.sendOnImageAnalyzedEvent(imageInfoBuilder.build(), reply -> {}); @@ -97,6 +115,7 @@ public void analyze(@NonNull ImageProxy image) { }; } + /** Clears any analyzer previously set on the specified {@link ImageAnalysis} instance. */ @Override public void clearAnalyzer(@NonNull Long identifier) { ImageAnalysis imageAnalysis = diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java index 3ffc4d9a7bd0..b7b7e041a21c 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java @@ -103,14 +103,14 @@ public void setAnalyzer_setsAnalyzerThatSendsExpectedImageInformation() { final ArgumentCaptor analyzerCaptor = ArgumentCaptor.forClass(ImageAnalysis.Analyzer.class); - // Test that analyzer is set: + // Test that an analyzer is set: imageAnalysisHostApiImpl.setAnalyzer(mockImageAnalysisIdentifier); verify(mockImageAnalysis).setAnalyzer(any(Executor.class), analyzerCaptor.capture()); ImageAnalysis.Analyzer analyzer = analyzerCaptor.getValue(); - // Test that the expected image information is sent: + // Test that the expected image information is sent when analyzer is called to analyze image data: final ImageProxy.PlaneProxy mockPlaneProxy = mock(ImageProxy.PlaneProxy.class); final ImageProxy.PlaneProxy[] mockPlanes = new ImageProxy.PlaneProxy[] {mockPlaneProxy}; @@ -149,7 +149,7 @@ public void setAnalyzer_setsAnalyzerThatSendsExpectedImageInformation() { ImagePlaneInformation imagePlaneInformation = imagePlanesInformation.get(0); assertEquals(imagePlaneInformation.getBytesPerRow(), Long.valueOf(rowStride)); assertEquals(imagePlaneInformation.getBytesPerPixel(), Long.valueOf(pixelStride)); - // We expect one (remainingBytes) bye. This byte should equal the byte contained by the mock ByteBuffer. + // We expect one (remainingBytes) bye. This byte should be equal to the byte contained by the mock ByteBuffer. assertEquals(imagePlaneInformation.getBytes().length, remainingBytes); assertEquals(imagePlaneInformation.getBytes()[0], mockByteBuffer.get()); } diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index 626f897ac6b2..ce20826a1caa 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -277,9 +277,7 @@ class _CameraExampleHomeState extends State IconButton( icon: const Icon(Icons.flash_on), color: Colors.blue, - onPressed: () { - controller?.startImageStream((CameraImage image) {}); - }, // TODO(camsim99): Add functionality back here. + onPressed: () {}, // TODO(camsim99): Add functionality back here. ), // The exposure and focus mode are currently not supported on the web. ...!kIsWeb @@ -287,9 +285,8 @@ class _CameraExampleHomeState extends State IconButton( icon: const Icon(Icons.exposure), color: Colors.blue, - onPressed: () { - controller?.stopImageStream(); - }, // TODO(camsim99): Add functionality back here. + onPressed: + () {}, // TODO(camsim99): Add functionality back here. ), IconButton( icon: const Icon(Icons.filter_center_focus), diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 0f07bac6907e..faf7f996f410 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -179,9 +179,9 @@ class AndroidCameraCameraX extends CameraPlatform { /// the CameraX library, this method just retrieves information about the /// camera and sends a [CameraInitializedEvent]. /// - /// [imageFormatGroup] is used to specify the image formatting used for image - /// streaming, but CameraX currently only supports YUV_420_888, supported by - /// Flutter, and RGBA, not supported by Flutter. CameraX uses YUV_420_888 + /// [imageFormatGroup] is used to specify the image format used for image + /// streaming, but CameraX currently only supports YUV_420_888 (supported by + /// Flutter) and RGBA (not supported by Flutter). CameraX uses YUV_420_888 /// by default, so [imageFormatGroup] is not used. @override Future initializeCamera( @@ -341,12 +341,18 @@ class AndroidCameraCameraX extends CameraPlatform { .bindToLifecycle(cameraSelector!, [preview!]); } - /// Binds [imageAnalysis] instance to camera lifecycle controlled by the - /// [processCameraProvider]. - Future _bindImageAnalysisToLifecycle() async { + /// Configures and binds [imageAnalysis] instance to camera lifecycle + /// controlled by the [processCameraProvider]. + Future _configureAndBindImageAnalysisToLifecycle() async { assert(processCameraProvider != null); assert(cameraSelector != null); + if (imageAnalysis != null && + await processCameraProvider!.isBound(imageAnalysis!)) { + // imageAnalysis already configured and bound to lifecycle. + return; + } + // TODO(camsim99): Support resolution configuration. // Defaults to YUV_420_888 image format. imageAnalysis = createImageAnalysis(null); @@ -373,20 +379,28 @@ class AndroidCameraCameraX extends CameraPlatform { // Methods for configuring image streaming: + /// Sets [onListen] and [onCancel] callbacks for the stream controller + /// used for image streaming. void _configureCameraImageDataStreamController( StreamController controller) { controller.onListen = _onFrameStreamListen; controller.onCancel = _onFrameStreamCancel; } + /// The [onListen] callback for the stream controller used for image + /// streaming. void _onFrameStreamListen() { - _bindImageAnalysisToLifecycle(); + _configureAndBindImageAnalysisToLifecycle(); } + /// The [onCancel] callback for the stream controller used for image + /// streaming. + /// + /// Removes the previously set analyzer on the [imageAnalysis] instance, since + /// image information should no longer be streamed. FutureOr _onFrameStreamCancel() async { assert(imageAnalysis != null); imageAnalysis!.clearAnalyzer(); - _unbindUseCaseFromLifecycle(imageAnalysis!); } // Methods for mapping Flutter camera constants to CameraX constants: @@ -485,8 +499,7 @@ class AndroidCameraCameraX extends CameraPlatform { targetFlashMode: flashMode, targetResolution: targetResolution); } - /// Returns an [ImageAnalysis] configured with specified flash mode and - /// target resolution. + /// Returns an [ImageAnalysis] configured with specified target resolution. @visibleForTesting ImageAnalysis createImageAnalysis(ResolutionInfo? targetResolution) { return ImageAnalysis(targetResolution: targetResolution); diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index 46ca459c534c..07168d7bbac0 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -15,8 +15,10 @@ import 'java_object.dart'; import 'use_case.dart'; /// Use case for providing CPU accessible images for performing image analysis. +/// +/// See https://developer.android.com/reference/androidx/camera/core/ImageAnalysis. class ImageAnalysis extends UseCase { - /// Creates a [ImageAnalysis]. + /// Creates an [ImageAnalysis]. ImageAnalysis( {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, @@ -30,7 +32,7 @@ class ImageAnalysis extends UseCase { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - /// Constructs a [ImageAnalysis] that is not automatically attached to a native object. + /// Constructs an [ImageAnalysis] that is not automatically attached to a native object. ImageAnalysis.detached( {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, @@ -43,7 +45,7 @@ class ImageAnalysis extends UseCase { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - /// Stream that emits an event whenever a frame is received for image streaming. + /// Stream that emits data whenever a frame is received for image streaming. static final StreamController onStreamedFrameAvailableStreamController = StreamController.broadcast(); @@ -55,7 +57,14 @@ class ImageAnalysis extends UseCase { /// Configures this instance for image streaming support. /// - /// This is an indirect wrapping of ... + /// This is a direct wrapping of the setAnalyzer method in CameraX, + /// but also handles the creation of the CameraX ImageAnalysis.Analyzer + /// that is used to collect the image information required for image + /// streaming. + /// + /// See [ImageAnalysisFlutterApiImpl.onImageAnalyzed] for the image + /// information that is analyzed by the created ImageAnalysis.Analyzer + /// instance. Future setAnalyzer() async { _api.setAnalyzerFromInstance(this); } @@ -134,6 +143,7 @@ class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { @override void onImageAnalyzed(ImageInformation imageInformation) { + // Parse image plane information. final List imagePlanes = imageInformation .imagePlanesInformation .map((ImagePlaneInformation? imagePlaneInformation) { @@ -144,6 +154,7 @@ class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { ); }).toList(); + // Parse general image information. final CameraImageData data = CameraImageData( format: CameraImageFormat( _imageFormatGroupFromFormatCode(imageInformation.format), @@ -153,9 +164,13 @@ class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { width: imageInformation.width, ); + // Add image information to stream for visibility by the plugin. ImageAnalysis.onStreamedFrameAvailableStreamController.add(data); } + /// Converts Flutter supported image format codes to [ImageFormatGroup]. + /// + /// Note that for image analysis, CameraX only currently supports YUV_420_888. ImageFormatGroup _imageFormatGroupFromFormatCode(int format) { switch (format) { case 35: // android.graphics.ImageFormat.YUV_420_888 diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 20e8aa476018..be46cb5d78b8 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -48,28 +48,28 @@ class CameraPermissionsErrorData { class ImagePlaneInformation { ImagePlaneInformation({ + required this.bytes, required this.bytesPerRow, required this.bytesPerPixel, - required this.bytes, }); + Uint8List bytes; int bytesPerRow; int bytesPerPixel; - Uint8List bytes; } class ImageInformation { ImageInformation({ - required this.width, - required this.height, required this.format, required this.imagePlanesInformation, + required this.height, + required this.width, }); - int width; - int height; int format; List imagePlanesInformation; + int height; + int width; } @HostApi(dartHostTestHandler: 'TestInstanceManagerHostApi') diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index b60f6facc207..5d55210bbcef 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart @@ -412,7 +412,7 @@ void main() { test( 'onStreamedFrameAvailable emits CameraImageData when picked up from ImageAnalysis', () async { - final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); camera.processCameraProvider = MockProcessCameraProvider(); camera.cameraSelector = MockCameraSelector(); @@ -460,14 +460,11 @@ void main() { await imageStreamSubscription.cancel(); verify(camera.mockImageAnalysis.clearAnalyzer()); - verify( - mockProcessCameraProvider.unbind([camera.mockImageAnalysis])); }); } -// TODO(camsim99): Refactor this to reduce redundancy. /// Mock of [AndroidCameraCameraX] that stubs behavior of some methods for -/// testing the createCamera and initializeCamera methods. +/// testing. class MockAndroidCameraCameraX extends AndroidCameraCameraX { bool cameraPermissionsRequested = false; bool startedListeningForDeviceOrientationChanges = false; diff --git a/packages/camera/camera_android_camerax/test/image_analysis_test.dart b/packages/camera/camera_android_camerax/test/image_analysis_test.dart index 26b62791765e..18539c025415 100644 --- a/packages/camera/camera_android_camerax/test/image_analysis_test.dart +++ b/packages/camera/camera_android_camerax/test/image_analysis_test.dart @@ -133,14 +133,14 @@ void main() { bytes: bytes, ) ]; - const int width = 5; const int height = 10; + const int width = 5; const int format = 35; final ImageInformation imageInformation = ImageInformation( - width: width, - height: height, format: format, imagePlanesInformation: imagePlanesInformation, + height: height, + width: width, ); ImageAnalysis.onStreamedFrameAvailableStreamController.stream From 3867ce02cd8a4537826ba365125c84e01fe73978 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 28 Mar 2023 17:01:44 -0700 Subject: [PATCH 35/62] Fix analyzer and formatting --- .../camerax/GeneratedCameraXLibrary.java | 154 +++++++++--------- .../example/lib/main.dart | 1 - .../lib/src/camerax_library.g.dart | 38 ++--- .../test/image_analysis_test.dart | 12 +- 4 files changed, 102 insertions(+), 103 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 425de0809949..c6d31d52f2e8 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -209,6 +209,19 @@ ArrayList toList() { /** Generated class from Pigeon that represents data sent in messages. */ public static final class ImagePlaneInformation { + private @NonNull byte[] bytes; + + public @NonNull byte[] getBytes() { + return bytes; + } + + public void setBytes(@NonNull byte[] setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"bytes\" is null."); + } + this.bytes = setterArg; + } + private @NonNull Long bytesPerRow; public @NonNull Long getBytesPerRow() { @@ -235,24 +248,18 @@ public void setBytesPerPixel(@NonNull Long setterArg) { this.bytesPerPixel = setterArg; } - private @NonNull byte[] bytes; - - public @NonNull byte[] getBytes() { - return bytes; - } - - public void setBytes(@NonNull byte[] setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"bytes\" is null."); - } - this.bytes = setterArg; - } - /** Constructor is private to enforce null safety; use Builder. */ private ImagePlaneInformation() {} public static final class Builder { + private @Nullable byte[] bytes; + + public @NonNull Builder setBytes(@NonNull byte[] setterArg) { + this.bytes = setterArg; + return this; + } + private @Nullable Long bytesPerRow; public @NonNull Builder setBytesPerRow(@NonNull Long setterArg) { @@ -267,18 +274,11 @@ public static final class Builder { return this; } - private @Nullable byte[] bytes; - - public @NonNull Builder setBytes(@NonNull byte[] setterArg) { - this.bytes = setterArg; - return this; - } - public @NonNull ImagePlaneInformation build() { ImagePlaneInformation pigeonReturn = new ImagePlaneInformation(); + pigeonReturn.setBytes(bytes); pigeonReturn.setBytesPerRow(bytesPerRow); pigeonReturn.setBytesPerPixel(bytesPerPixel); - pigeonReturn.setBytes(bytes); return pigeonReturn; } } @@ -286,84 +286,84 @@ public static final class Builder { @NonNull ArrayList toList() { ArrayList toListResult = new ArrayList(3); + toListResult.add(bytes); toListResult.add(bytesPerRow); toListResult.add(bytesPerPixel); - toListResult.add(bytes); return toListResult; } static @NonNull ImagePlaneInformation fromList(@NonNull ArrayList list) { ImagePlaneInformation pigeonResult = new ImagePlaneInformation(); - Object bytesPerRow = list.get(0); + Object bytes = list.get(0); + pigeonResult.setBytes((byte[]) bytes); + Object bytesPerRow = list.get(1); pigeonResult.setBytesPerRow( (bytesPerRow == null) ? null : ((bytesPerRow instanceof Integer) ? (Integer) bytesPerRow : (Long) bytesPerRow)); - Object bytesPerPixel = list.get(1); + Object bytesPerPixel = list.get(2); pigeonResult.setBytesPerPixel( (bytesPerPixel == null) ? null : ((bytesPerPixel instanceof Integer) ? (Integer) bytesPerPixel : (Long) bytesPerPixel)); - Object bytes = list.get(2); - pigeonResult.setBytes((byte[]) bytes); return pigeonResult; } } /** Generated class from Pigeon that represents data sent in messages. */ public static final class ImageInformation { - private @NonNull Long width; + private @NonNull Long format; - public @NonNull Long getWidth() { - return width; + public @NonNull Long getFormat() { + return format; } - public void setWidth(@NonNull Long setterArg) { + public void setFormat(@NonNull Long setterArg) { if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"width\" is null."); + throw new IllegalStateException("Nonnull field \"format\" is null."); } - this.width = setterArg; + this.format = setterArg; } - private @NonNull Long height; + private @NonNull List imagePlanesInformation; - public @NonNull Long getHeight() { - return height; + public @NonNull List getImagePlanesInformation() { + return imagePlanesInformation; } - public void setHeight(@NonNull Long setterArg) { + public void setImagePlanesInformation(@NonNull List setterArg) { if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"height\" is null."); + throw new IllegalStateException("Nonnull field \"imagePlanesInformation\" is null."); } - this.height = setterArg; + this.imagePlanesInformation = setterArg; } - private @NonNull Long format; + private @NonNull Long height; - public @NonNull Long getFormat() { - return format; + public @NonNull Long getHeight() { + return height; } - public void setFormat(@NonNull Long setterArg) { + public void setHeight(@NonNull Long setterArg) { if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"format\" is null."); + throw new IllegalStateException("Nonnull field \"height\" is null."); } - this.format = setterArg; + this.height = setterArg; } - private @NonNull List imagePlanesInformation; + private @NonNull Long width; - public @NonNull List getImagePlanesInformation() { - return imagePlanesInformation; + public @NonNull Long getWidth() { + return width; } - public void setImagePlanesInformation(@NonNull List setterArg) { + public void setWidth(@NonNull Long setterArg) { if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"imagePlanesInformation\" is null."); + throw new IllegalStateException("Nonnull field \"width\" is null."); } - this.imagePlanesInformation = setterArg; + this.width = setterArg; } /** Constructor is private to enforce null safety; use Builder. */ @@ -371,41 +371,41 @@ private ImageInformation() {} public static final class Builder { - private @Nullable Long width; + private @Nullable Long format; - public @NonNull Builder setWidth(@NonNull Long setterArg) { - this.width = setterArg; + public @NonNull Builder setFormat(@NonNull Long setterArg) { + this.format = setterArg; return this; } - private @Nullable Long height; + private @Nullable List imagePlanesInformation; - public @NonNull Builder setHeight(@NonNull Long setterArg) { - this.height = setterArg; + public @NonNull Builder setImagePlanesInformation( + @NonNull List setterArg) { + this.imagePlanesInformation = setterArg; return this; } - private @Nullable Long format; + private @Nullable Long height; - public @NonNull Builder setFormat(@NonNull Long setterArg) { - this.format = setterArg; + public @NonNull Builder setHeight(@NonNull Long setterArg) { + this.height = setterArg; return this; } - private @Nullable List imagePlanesInformation; + private @Nullable Long width; - public @NonNull Builder setImagePlanesInformation( - @NonNull List setterArg) { - this.imagePlanesInformation = setterArg; + public @NonNull Builder setWidth(@NonNull Long setterArg) { + this.width = setterArg; return this; } public @NonNull ImageInformation build() { ImageInformation pigeonReturn = new ImageInformation(); - pigeonReturn.setWidth(width); - pigeonReturn.setHeight(height); pigeonReturn.setFormat(format); pigeonReturn.setImagePlanesInformation(imagePlanesInformation); + pigeonReturn.setHeight(height); + pigeonReturn.setWidth(width); return pigeonReturn; } } @@ -413,30 +413,30 @@ public static final class Builder { @NonNull ArrayList toList() { ArrayList toListResult = new ArrayList(4); - toListResult.add(width); - toListResult.add(height); toListResult.add(format); toListResult.add(imagePlanesInformation); + toListResult.add(height); + toListResult.add(width); return toListResult; } static @NonNull ImageInformation fromList(@NonNull ArrayList list) { ImageInformation pigeonResult = new ImageInformation(); - Object width = list.get(0); - pigeonResult.setWidth( - (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); - Object height = list.get(1); - pigeonResult.setHeight( - (height == null) - ? null - : ((height instanceof Integer) ? (Integer) height : (Long) height)); - Object format = list.get(2); + Object format = list.get(0); pigeonResult.setFormat( (format == null) ? null : ((format instanceof Integer) ? (Integer) format : (Long) format)); - Object imagePlanesInformation = list.get(3); + Object imagePlanesInformation = list.get(1); pigeonResult.setImagePlanesInformation((List) imagePlanesInformation); + Object height = list.get(2); + pigeonResult.setHeight( + (height == null) + ? null + : ((height instanceof Integer) ? (Integer) height : (Long) height)); + Object width = list.get(3); + pigeonResult.setWidth( + (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); return pigeonResult; } } diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index ce20826a1caa..c668871b7a62 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -13,7 +13,6 @@ import 'package:video_player/video_player.dart'; import 'camera_controller.dart'; import 'camera_preview.dart'; -import 'camera_image.dart'; /// Camera example home widget. class CameraExampleHome extends StatefulWidget { diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index 13d297305d5f..b0092c87982c 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -65,68 +65,68 @@ class CameraPermissionsErrorData { class ImagePlaneInformation { ImagePlaneInformation({ + required this.bytes, required this.bytesPerRow, required this.bytesPerPixel, - required this.bytes, }); + Uint8List bytes; + int bytesPerRow; int bytesPerPixel; - Uint8List bytes; - Object encode() { return [ + bytes, bytesPerRow, bytesPerPixel, - bytes, ]; } static ImagePlaneInformation decode(Object result) { result as List; return ImagePlaneInformation( - bytesPerRow: result[0]! as int, - bytesPerPixel: result[1]! as int, - bytes: result[2]! as Uint8List, + bytes: result[0]! as Uint8List, + bytesPerRow: result[1]! as int, + bytesPerPixel: result[2]! as int, ); } } class ImageInformation { ImageInformation({ - required this.width, - required this.height, required this.format, required this.imagePlanesInformation, + required this.height, + required this.width, }); - int width; - - int height; - int format; List imagePlanesInformation; + int height; + + int width; + Object encode() { return [ - width, - height, format, imagePlanesInformation, + height, + width, ]; } static ImageInformation decode(Object result) { result as List; return ImageInformation( - width: result[0]! as int, - height: result[1]! as int, - format: result[2]! as int, + format: result[0]! as int, imagePlanesInformation: - (result[3] as List?)!.cast(), + (result[1] as List?)!.cast(), + height: result[2]! as int, + width: result[3]! as int, ); } } diff --git a/packages/camera/camera_android_camerax/test/image_analysis_test.dart b/packages/camera/camera_android_camerax/test/image_analysis_test.dart index 18539c025415..4043c3b2cb81 100644 --- a/packages/camera/camera_android_camerax/test/image_analysis_test.dart +++ b/packages/camera/camera_android_camerax/test/image_analysis_test.dart @@ -8,7 +8,7 @@ import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/image_analysis.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; import 'package:camera_platform_interface/camera_platform_interface.dart' - show CameraImageData, CameraImageFormat, CameraImagePlane, ImageFormatGroup; + show CameraImageData, ImageFormatGroup; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; @@ -145,13 +145,13 @@ void main() { ImageAnalysis.onStreamedFrameAvailableStreamController.stream .listen((CameraImageData cameraImageData) { - expect(cameraImageData.format!.group, equals(ImageFormatGroup.yuv420)); + expect(cameraImageData.format.group, equals(ImageFormatGroup.yuv420)); expect(cameraImageData.planes.first, isNotNull); - expect(cameraImageData.planes.first!.bytes, equals(bytes)); - expect(cameraImageData.planes.first!.bytesPerRow, equals(bytesPerRow)); + expect(cameraImageData.planes.first.bytes, equals(bytes)); + expect(cameraImageData.planes.first.bytesPerRow, equals(bytesPerRow)); expect( - cameraImageData.planes.first!.bytesPerPixel, equals(bytesPerPixel)); - expect(cameraImageData.format!.raw, equals(format)); + cameraImageData.planes.first.bytesPerPixel, equals(bytesPerPixel)); + expect(cameraImageData.format.raw, equals(format)); expect(cameraImageData.height, equals(height)); expect(cameraImageData.width, equals(width)); }); From 8d08cff4294554b371f405224e4b76b86066713d Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 11 Apr 2023 13:02:33 -0700 Subject: [PATCH 36/62] Wrapping with generator --- ...lsImageAnalysisAnalyzerFlutterApiImpl.java | 80 ++ ...ImplsImageAnalysisAnalyzerHostApiImpl.java | 121 +++ .../GenApiImplsImageProxyFlutterApiImpl.java | 67 ++ .../GenApiImplsImageProxyHostApiImpl.java | 77 ++ ...plsImageProxyPlaneProxyFlutterApiImpl.java | 67 ++ ...iImplsImageProxyPlaneProxyHostApiImpl.java | 73 ++ .../camerax/GeneratedCameraXLibrary.java | 975 +++++++++--------- .../camerax/ImageAnalysisFlutterApiImpl.java | 21 - .../camerax/ImageAnalysisHostApiImpl.java | 109 +- .../GenApiImplsImageAnalysisAnalyzerTest.java | 98 ++ .../camerax/GenApiImplsImageAnalysisTest.java | 143 +++ .../GenApiImplsImageProxyPlaneProxyTest.java | 124 +++ .../camerax/GenApiImplsImageProxyTest.java | 156 +++ .../lib/src/camerax_library.g.dart | 644 ++++++++---- .../lib/src/image_analysis.dart | 173 ++-- .../lib/src/image_analysis_analyzer.dart | 136 +++ .../lib/src/image_proxy.dart | 147 +++ .../lib/src/image_proxy_plane_proxy.dart | 129 +++ .../pigeons/camerax_library.dart | 158 ++- .../camera_android_camerax/pubspec.yaml | 21 +- .../android_camera_camerax_test.mocks.dart | 31 +- .../test/camera_info_test.mocks.dart | 2 +- .../test/camera_selector_test.mocks.dart | 2 +- ..._analysis_analyzer_test.gen_api_impls.dart | 114 ++ .../image_analysis_test.gen_api_impls.dart | 197 ++++ .../test/image_analysis_test.mocks.dart | 2 +- .../test/image_capture_test.mocks.dart | 2 +- ..._proxy_plane_proxy_test.gen_api_impls.dart | 182 ++++ .../test/image_proxy_test.gen_api_impls.dart | 223 ++++ .../test/preview_test.mocks.dart | 2 +- .../process_camera_provider_test.mocks.dart | 2 +- .../test/system_services_test.mocks.dart | 2 +- .../test/test_camerax_library.g.dart | 388 +++++-- 33 files changed, 3722 insertions(+), 946 deletions(-) create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerFlutterApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerHostApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyFlutterApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyHostApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyFlutterApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyHostApiImpl.java delete mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerTest.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisTest.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyTest.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyTest.java create mode 100644 packages/camera/camera_android_camerax/lib/src/image_analysis_analyzer.dart create mode 100644 packages/camera/camera_android_camerax/lib/src/image_proxy.dart create mode 100644 packages/camera/camera_android_camerax/lib/src/image_proxy_plane_proxy.dart create mode 100644 packages/camera/camera_android_camerax/test/image_analysis_analyzer_test.gen_api_impls.dart create mode 100644 packages/camera/camera_android_camerax/test/image_analysis_test.gen_api_impls.dart create mode 100644 packages/camera/camera_android_camerax/test/image_proxy_plane_proxy_test.gen_api_impls.dart create mode 100644 packages/camera/camera_android_camerax/test/image_proxy_test.gen_api_impls.dart diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerFlutterApiImpl.java new file mode 100644 index 000000000000..c6b38ee86e79 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerFlutterApiImpl.java @@ -0,0 +1,80 @@ + +// 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. + +// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation + +package io.flutter.plugins.camerax; + +// TODO(bparrishMines): Fix name of generated pigeon file +// TODO(bparrishMines): Import native classes +import GeneratedPigeonFilename.ImageAnalysisAnalyzerFlutterApi; +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; +import io.flutter.plugin.common.BinaryMessenger; +import java.util.Objects; + +/** + * Flutter API implementation for `ImageAnalysisAnalyzer`. + * + *

This class may handle adding native instances that are attached to a Dart instance or passing + * arguments of callbacks methods to a Dart instance. + */ +public class ImageAnalysisAnalyzerFlutterApiImpl { + + // To ease adding additional methods, this value is added prematurely. + @SuppressWarnings({"unused", "FieldCanBeLocal"}) + private final BinaryMessenger binaryMessenger; + + private final InstanceManager instanceManager; + private ImageAnalysisAnalyzerFlutterApi api; + + /** + * Constructs a {@link ImageAnalysisAnalyzerFlutterApiImpl}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public ImageAnalysisAnalyzerFlutterApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + api = new ImageAnalysisAnalyzerFlutterApi(binaryMessenger); + } + + /** + * Stores the `ImageAnalysisAnalyzer` instance and notifies Dart to create and store a new + * `ImageAnalysisAnalyzer` instance that is attached to this one. If `instance` has already been + * added, this method does nothing. + */ + public void create( + @NonNull ImageAnalysisAnalyzer instance, + @NonNull ImageAnalysisAnalyzerFlutterApi.Reply callback) { + if (!instanceManager.containsInstance(instance)) { + api.create(instanceManager.addHostCreatedInstance(instance), callback); + } + } + + /** + * Sends a message to Dart to call `ImageAnalysisAnalyzer.analyze` on the Dart object representing + * `instance`. + */ + public void analyze( + @NonNull ImageAnalysisAnalyzer instance, + @NonNull ImageAnalysisAnalyzerFlutterApi.Reply callback) { + api.analyze( + Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(instance)), + callback); + } + + /** + * Sets the Flutter API used to send messages to Dart. + * + *

This is only visible for testing. + */ + @VisibleForTesting + void setApi(@NonNull ImageAnalysisAnalyzerFlutterApi api) { + this.api = api; + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerHostApiImpl.java new file mode 100644 index 000000000000..fcafe5b98bed --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerHostApiImpl.java @@ -0,0 +1,121 @@ + +// 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. + +// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation + +package io.flutter.plugins.camerax; + +// TODO(bparrishMines): Fix name of generated pigeon file +// TODO(bparrishMines): Import native classes +import GeneratedPigeonFilename.ImageAnalysisAnalyzerHostApi; +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; +import io.flutter.plugin.common.BinaryMessenger; +import java.util.Objects; + +/** + * Host API implementation for `ImageAnalysisAnalyzer`. + * + *

This class may handle instantiating and adding native object instances that are attached to a + * Dart instance or handle method calls on the associated native class or an instance of the class. + */ +public class ImageAnalysisAnalyzerHostApiImpl implements ImageAnalysisAnalyzerHostApi { + + // To ease adding additional methods, this value is added prematurely. + @SuppressWarnings({"unused", "FieldCanBeLocal"}) + private final BinaryMessenger binaryMessenger; + + private final InstanceManager instanceManager; + + private final ImageAnalysisAnalyzerProxy proxy; + + /** Proxy for constructors and static method of `ImageAnalysisAnalyzer`. */ + @VisibleForTesting + public static class ImageAnalysisAnalyzerProxy { + + /** Creates an instance of `ImageAnalysisAnalyzer`. */ + public ImageAnalysisAnalyzerImpl create( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + // + // return new ImageAnalysisAnalyzerImpl( + // + // binaryMessenger, instanceManager); + } + } + + /** + * Implementation of `ImageAnalysisAnalyzer` that passes arguments of callback methods to Dart. + */ + public static class ImageAnalysisAnalyzerImpl extends ImageAnalysisAnalyzer { + private ImageAnalysisAnalyzerFlutterApiImpl api; + + /** + * Constructs an instance of `ImageAnalysisAnalyzer` that passes arguments of callbacks methods + * to Dart. + */ + public ImageAnalysisAnalyzerImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + super(); + api = new ImageAnalysisAnalyzerFlutterApiImpl(binaryMessenger, instanceManager); + } + + // TODO(bparrishMines): Need to handle inherited callback methods + + @Override + public void analyze() { + api.analyze(this, reply -> {}); + } + + /** + * Flutter API used to send messages back to Dart. + * + *

This is only visible for testing. + */ + @SuppressWarnings("unused") + @VisibleForTesting + void setApi(@NonNull ImageAnalysisAnalyzerFlutterApiImpl api) { + this.api = api; + } + } + + /** + * Constructs a {@link ImageAnalysisAnalyzerHostApiImpl}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public ImageAnalysisAnalyzerHostApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + + this(binaryMessenger, instanceManager, new ImageAnalysisAnalyzerProxy()); + } + + /** + * Constructs a {@link ImageAnalysisAnalyzerHostApiImpl}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + * @param proxy proxy for constructors and static method of `ImageAnalysisAnalyzer` + */ + @VisibleForTesting + ImageAnalysisAnalyzerHostApiImpl( + @NonNull BinaryMessenger binaryMessenger, + @NonNull InstanceManager instanceManager, + @NonNull ImageAnalysisAnalyzerProxy proxy) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + this.proxy = proxy; + } + + @Override + public void create(@NonNull Long identifier) { + instanceManager.addDartCreatedInstance( + proxy.create(binaryMessenger, instanceManager), identifier); + } + + private ImageAnalysisAnalyzer getImageAnalysisAnalyzerInstance(@NonNull Long identifier) { + return Objects.requireNonNull(instanceManager.getInstance(identifier)); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyFlutterApiImpl.java new file mode 100644 index 000000000000..b7f4a9ba9c69 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyFlutterApiImpl.java @@ -0,0 +1,67 @@ + +// 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. + +// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation + +package io.flutter.plugins.camerax; + +// TODO(bparrishMines): Fix name of generated pigeon file +// TODO(bparrishMines): Import native classes +import GeneratedPigeonFilename.ImageProxyFlutterApi; +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; +import io.flutter.plugin.common.BinaryMessenger; + +/** + * Flutter API implementation for `ImageProxy`. + * + *

This class may handle adding native instances that are attached to a Dart instance or passing + * arguments of callbacks methods to a Dart instance. + */ +public class ImageProxyFlutterApiImpl { + + // To ease adding additional methods, this value is added prematurely. + @SuppressWarnings({"unused", "FieldCanBeLocal"}) + private final BinaryMessenger binaryMessenger; + + private final InstanceManager instanceManager; + private ImageProxyFlutterApi api; + + /** + * Constructs a {@link ImageProxyFlutterApiImpl}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public ImageProxyFlutterApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + api = new ImageProxyFlutterApi(binaryMessenger); + } + + /** + * Stores the `ImageProxy` instance and notifies Dart to create and store a new `ImageProxy` + * instance that is attached to this one. If `instance` has already been added, this method does + * nothing. + */ + public void create( + @NonNull ImageProxy instance, @NonNull ImageProxyFlutterApi.Reply callback) { + + if (!instanceManager.containsInstance(instance)) { + api.create(instanceManager.addHostCreatedInstance(instance), callback); + } + } + + /** + * Sets the Flutter API used to send messages to Dart. + * + *

This is only visible for testing. + */ + @VisibleForTesting + void setApi(@NonNull ImageProxyFlutterApi api) { + this.api = api; + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyHostApiImpl.java new file mode 100644 index 000000000000..63a9ca4ce145 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyHostApiImpl.java @@ -0,0 +1,77 @@ + +// 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. + +// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation + +package io.flutter.plugins.camerax; + +// TODO(bparrishMines): Fix name of generated pigeon file +// TODO(bparrishMines): Import native classes +import GeneratedPigeonFilename.ImageProxyHostApi; +import androidx.annotation.NonNull; +import io.flutter.plugin.common.BinaryMessenger; +import java.util.Objects; + +/** + * Host API implementation for `ImageProxy`. + * + *

This class may handle instantiating and adding native object instances that are attached to a + * Dart instance or handle method calls on the associated native class or an instance of the class. + */ +public class ImageProxyHostApiImpl implements ImageProxyHostApi { + + // To ease adding additional methods, this value is added prematurely. + @SuppressWarnings({"unused", "FieldCanBeLocal"}) + private final BinaryMessenger binaryMessenger; + + private final InstanceManager instanceManager; + + /** + * Constructs a {@link ImageProxyHostApiImpl}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public ImageProxyHostApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + } + + @Override + public List getPlanes(@NonNull Long identifier) { + + return getImageProxyInstance(identifier).getPlanes(); + } + + @Override + public Long getFormat(@NonNull Long identifier) { + + return getImageProxyInstance(identifier).getFormat(); + } + + @Override + public Long getHeight(@NonNull Long identifier) { + + return getImageProxyInstance(identifier).getHeight(); + } + + @Override + public Long getWidth(@NonNull Long identifier) { + + return getImageProxyInstance(identifier).getWidth(); + } + + @Override + public void close(@NonNull Long identifier) { + + getImageProxyInstance(identifier).close(); + } + + private ImageProxy getImageProxyInstance(@NonNull Long identifier) { + return Objects.requireNonNull(instanceManager.getInstance(identifier)); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyFlutterApiImpl.java new file mode 100644 index 000000000000..99bae7e3c65a --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyFlutterApiImpl.java @@ -0,0 +1,67 @@ + +// 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. + +// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation + +package io.flutter.plugins.camerax; + +// TODO(bparrishMines): Fix name of generated pigeon file +// TODO(bparrishMines): Import native classes +import GeneratedPigeonFilename.ImageProxyPlaneProxyFlutterApi; +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; +import io.flutter.plugin.common.BinaryMessenger; + +/** + * Flutter API implementation for `ImageProxyPlaneProxy`. + * + *

This class may handle adding native instances that are attached to a Dart instance or passing + * arguments of callbacks methods to a Dart instance. + */ +public class ImageProxyPlaneProxyFlutterApiImpl { + + // To ease adding additional methods, this value is added prematurely. + @SuppressWarnings({"unused", "FieldCanBeLocal"}) + private final BinaryMessenger binaryMessenger; + + private final InstanceManager instanceManager; + private ImageProxyPlaneProxyFlutterApi api; + + /** + * Constructs a {@link ImageProxyPlaneProxyFlutterApiImpl}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public ImageProxyPlaneProxyFlutterApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + api = new ImageProxyPlaneProxyFlutterApi(binaryMessenger); + } + + /** + * Stores the `ImageProxyPlaneProxy` instance and notifies Dart to create and store a new + * `ImageProxyPlaneProxy` instance that is attached to this one. If `instance` has already been + * added, this method does nothing. + */ + public void create( + @NonNull ImageProxyPlaneProxy instance, + @NonNull ImageProxyPlaneProxyFlutterApi.Reply callback) { + if (!instanceManager.containsInstance(instance)) { + api.create(instanceManager.addHostCreatedInstance(instance), callback); + } + } + + /** + * Sets the Flutter API used to send messages to Dart. + * + *

This is only visible for testing. + */ + @VisibleForTesting + void setApi(@NonNull ImageProxyPlaneProxyFlutterApi api) { + this.api = api; + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyHostApiImpl.java new file mode 100644 index 000000000000..4173575b41f2 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyHostApiImpl.java @@ -0,0 +1,73 @@ + +// 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. + +// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation + +package io.flutter.plugins.camerax; + +// TODO(bparrishMines): Fix name of generated pigeon file +// TODO(bparrishMines): Import native classes +import GeneratedPigeonFilename.ImageProxyPlaneProxyHostApi; +import androidx.annotation.NonNull; +import io.flutter.plugin.common.BinaryMessenger; +import java.util.Objects; + +/** + * Host API implementation for `ImageProxyPlaneProxy`. + * + *

This class may handle instantiating and adding native object instances that are attached to a + * Dart instance or handle method calls on the associated native class or an instance of the class. + */ +public class ImageProxyPlaneProxyHostApiImpl implements ImageProxyPlaneProxyHostApi { + + // To ease adding additional methods, this value is added prematurely. + @SuppressWarnings({"unused", "FieldCanBeLocal"}) + private final BinaryMessenger binaryMessenger; + + private final InstanceManager instanceManager; + + /** + * Constructs a {@link ImageProxyPlaneProxyHostApiImpl}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public ImageProxyPlaneProxyHostApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + } + + @Override + public dynamic getRowStride(@NonNull Long identifier) { + + final dynamic result = getImageProxyPlaneProxyInstance(identifier).getRowStride(); + + if (result != null) { + final dynamicFlutterApiImpl flutterApi = + new dynamicFlutterApiImpl(binaryMessenger, instanceManager); + // TODO(bparrishMines): Fill in missing parameters + flutterApi.create(result, reply -> {}); + } + return instanceManager.getIdentifierForStrongReference(result); + } + + @Override + public Long getPixelStride(@NonNull Long identifier) { + + return getImageProxyPlaneProxyInstance(identifier).getPixelStride(); + } + + @Override + public Long getRowStride(@NonNull Long identifier) { + + return getImageProxyPlaneProxyInstance(identifier).getRowStride(); + } + + private ImageProxyPlaneProxy getImageProxyPlaneProxyInstance(@NonNull Long identifier) { + return Objects.requireNonNull(instanceManager.getInstance(identifier)); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index c6d31d52f2e8..16817eb4c2e5 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -18,7 +18,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) @@ -33,7 +35,8 @@ public static class FlutterError extends RuntimeException { /** The error details. Must be a datatype supported by the api codec. */ public final Object details; - public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { + public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) + { super(message); this.code = code; this.details = details; @@ -52,7 +55,7 @@ private static ArrayList wrapError(@NonNull Throwable exception) { errorList.add(exception.toString()); errorList.add(exception.getClass().getSimpleName()); errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); } return errorList; } @@ -123,13 +126,9 @@ ArrayList toList() { static @NonNull ResolutionInfo fromList(@NonNull ArrayList list) { ResolutionInfo pigeonResult = new ResolutionInfo(); Object width = list.get(0); - pigeonResult.setWidth( - (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); + pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); Object height = list.get(1); - pigeonResult.setHeight( - (height == null) - ? null - : ((height instanceof Integer) ? (Integer) height : (Long) height)); + pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer) height : (Long) height)); return pigeonResult; } } @@ -207,240 +206,6 @@ ArrayList toList() { } } - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class ImagePlaneInformation { - private @NonNull byte[] bytes; - - public @NonNull byte[] getBytes() { - return bytes; - } - - public void setBytes(@NonNull byte[] setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"bytes\" is null."); - } - this.bytes = setterArg; - } - - private @NonNull Long bytesPerRow; - - public @NonNull Long getBytesPerRow() { - return bytesPerRow; - } - - public void setBytesPerRow(@NonNull Long setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"bytesPerRow\" is null."); - } - this.bytesPerRow = setterArg; - } - - private @NonNull Long bytesPerPixel; - - public @NonNull Long getBytesPerPixel() { - return bytesPerPixel; - } - - public void setBytesPerPixel(@NonNull Long setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"bytesPerPixel\" is null."); - } - this.bytesPerPixel = setterArg; - } - - /** Constructor is private to enforce null safety; use Builder. */ - private ImagePlaneInformation() {} - - public static final class Builder { - - private @Nullable byte[] bytes; - - public @NonNull Builder setBytes(@NonNull byte[] setterArg) { - this.bytes = setterArg; - return this; - } - - private @Nullable Long bytesPerRow; - - public @NonNull Builder setBytesPerRow(@NonNull Long setterArg) { - this.bytesPerRow = setterArg; - return this; - } - - private @Nullable Long bytesPerPixel; - - public @NonNull Builder setBytesPerPixel(@NonNull Long setterArg) { - this.bytesPerPixel = setterArg; - return this; - } - - public @NonNull ImagePlaneInformation build() { - ImagePlaneInformation pigeonReturn = new ImagePlaneInformation(); - pigeonReturn.setBytes(bytes); - pigeonReturn.setBytesPerRow(bytesPerRow); - pigeonReturn.setBytesPerPixel(bytesPerPixel); - return pigeonReturn; - } - } - - @NonNull - ArrayList toList() { - ArrayList toListResult = new ArrayList(3); - toListResult.add(bytes); - toListResult.add(bytesPerRow); - toListResult.add(bytesPerPixel); - return toListResult; - } - - static @NonNull ImagePlaneInformation fromList(@NonNull ArrayList list) { - ImagePlaneInformation pigeonResult = new ImagePlaneInformation(); - Object bytes = list.get(0); - pigeonResult.setBytes((byte[]) bytes); - Object bytesPerRow = list.get(1); - pigeonResult.setBytesPerRow( - (bytesPerRow == null) - ? null - : ((bytesPerRow instanceof Integer) ? (Integer) bytesPerRow : (Long) bytesPerRow)); - Object bytesPerPixel = list.get(2); - pigeonResult.setBytesPerPixel( - (bytesPerPixel == null) - ? null - : ((bytesPerPixel instanceof Integer) - ? (Integer) bytesPerPixel - : (Long) bytesPerPixel)); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class ImageInformation { - private @NonNull Long format; - - public @NonNull Long getFormat() { - return format; - } - - public void setFormat(@NonNull Long setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"format\" is null."); - } - this.format = setterArg; - } - - private @NonNull List imagePlanesInformation; - - public @NonNull List getImagePlanesInformation() { - return imagePlanesInformation; - } - - public void setImagePlanesInformation(@NonNull List setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"imagePlanesInformation\" is null."); - } - this.imagePlanesInformation = setterArg; - } - - private @NonNull Long height; - - public @NonNull Long getHeight() { - return height; - } - - public void setHeight(@NonNull Long setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"height\" is null."); - } - this.height = setterArg; - } - - private @NonNull Long width; - - public @NonNull Long getWidth() { - return width; - } - - public void setWidth(@NonNull Long setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"width\" is null."); - } - this.width = setterArg; - } - - /** Constructor is private to enforce null safety; use Builder. */ - private ImageInformation() {} - - public static final class Builder { - - private @Nullable Long format; - - public @NonNull Builder setFormat(@NonNull Long setterArg) { - this.format = setterArg; - return this; - } - - private @Nullable List imagePlanesInformation; - - public @NonNull Builder setImagePlanesInformation( - @NonNull List setterArg) { - this.imagePlanesInformation = setterArg; - return this; - } - - private @Nullable Long height; - - public @NonNull Builder setHeight(@NonNull Long setterArg) { - this.height = setterArg; - return this; - } - - private @Nullable Long width; - - public @NonNull Builder setWidth(@NonNull Long setterArg) { - this.width = setterArg; - return this; - } - - public @NonNull ImageInformation build() { - ImageInformation pigeonReturn = new ImageInformation(); - pigeonReturn.setFormat(format); - pigeonReturn.setImagePlanesInformation(imagePlanesInformation); - pigeonReturn.setHeight(height); - pigeonReturn.setWidth(width); - return pigeonReturn; - } - } - - @NonNull - ArrayList toList() { - ArrayList toListResult = new ArrayList(4); - toListResult.add(format); - toListResult.add(imagePlanesInformation); - toListResult.add(height); - toListResult.add(width); - return toListResult; - } - - static @NonNull ImageInformation fromList(@NonNull ArrayList list) { - ImageInformation pigeonResult = new ImageInformation(); - Object format = list.get(0); - pigeonResult.setFormat( - (format == null) - ? null - : ((format instanceof Integer) ? (Integer) format : (Long) format)); - Object imagePlanesInformation = list.get(1); - pigeonResult.setImagePlanesInformation((List) imagePlanesInformation); - Object height = list.get(2); - pigeonResult.setHeight( - (height == null) - ? null - : ((height instanceof Integer) ? (Integer) height : (Long) height)); - Object width = list.get(3); - pigeonResult.setWidth( - (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); - return pigeonResult; - } - } - public interface Result { void success(T result); @@ -451,7 +216,7 @@ public interface InstanceManagerHostApi { /** * Clear the native `InstanceManager`. * - *

This is typically only used after a hot restart. + * This is typically only used after a hot restart. */ void clear(); @@ -459,10 +224,7 @@ public interface InstanceManagerHostApi { static MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `InstanceManagerHostApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `InstanceManagerHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, InstanceManagerHostApi api) { { BasicMessageChannel channel = @@ -475,7 +237,8 @@ static void setup(BinaryMessenger binaryMessenger, InstanceManagerHostApi api) { try { api.clear(); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -496,9 +259,7 @@ public interface JavaObjectHostApi { static MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. - */ + /**Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, JavaObjectHostApi api) { { BasicMessageChannel channel = @@ -513,7 +274,8 @@ static void setup(BinaryMessenger binaryMessenger, JavaObjectHostApi api) { try { api.dispose((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -533,15 +295,13 @@ public JavaObjectFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } /** The codec used by JavaObjectFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - public void dispose(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -554,23 +314,19 @@ public void dispose(@NonNull Long identifierArg, Reply callback) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraInfoHostApi { - @NonNull + @NonNull Long getSensorRotationDegrees(@NonNull Long identifier); /** The codec used by CameraInfoHostApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. - */ + /**Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -578,11 +334,10 @@ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = - api.getSensorRotationDegrees( - (identifierArg == null) ? null : identifierArg.longValue()); + Long output = api.getSensorRotationDegrees((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -602,15 +357,13 @@ public CameraInfoFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } /** The codec used by CameraInfoFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -625,17 +378,14 @@ public interface CameraSelectorHostApi { void create(@NonNull Long identifier, @Nullable Long lensFacing); - @NonNull + @NonNull List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); /** The codec used by CameraSelectorHostApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `CameraSelectorHostApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `CameraSelectorHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { { BasicMessageChannel channel = @@ -649,11 +399,10 @@ static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { Number identifierArg = (Number) args.get(0); Number lensFacingArg = (Number) args.get(1); try { - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - (lensFacingArg == null) ? null : lensFacingArg.longValue()); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (lensFacingArg == null) ? null : lensFacingArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -675,12 +424,10 @@ static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { Number identifierArg = (Number) args.get(0); List cameraInfoIdsArg = (List) args.get(1); try { - List output = - api.filter( - (identifierArg == null) ? null : identifierArg.longValue(), - cameraInfoIdsArg); + List output = api.filter((identifierArg == null) ? null : identifierArg.longValue(), cameraInfoIdsArg); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -700,17 +447,14 @@ public CameraSelectorFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } /** The codec used by CameraSelectorFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - - public void create( - @NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { + public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); @@ -724,16 +468,13 @@ public interface ProcessCameraProviderHostApi { void getInstance(Result result); - @NonNull + @NonNull List getAvailableCameraInfos(@NonNull Long identifier); - @NonNull - Long bindToLifecycle( - @NonNull Long identifier, - @NonNull Long cameraSelectorIdentifier, - @NonNull List useCaseIds); + @NonNull + Long bindToLifecycle(@NonNull Long identifier, @NonNull Long cameraSelectorIdentifier, @NonNull List useCaseIds); - @NonNull + @NonNull Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); void unbind(@NonNull Long identifier, @NonNull List useCaseIds); @@ -744,17 +485,12 @@ Long bindToLifecycle( static MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, ProcessCameraProviderHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -781,9 +517,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -791,11 +525,10 @@ public void error(Throwable error) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - List output = - api.getAvailableCameraInfos( - (identifierArg == null) ? null : identifierArg.longValue()); + List output = api.getAvailableCameraInfos((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -808,9 +541,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -820,15 +551,10 @@ public void error(Throwable error) { Number cameraSelectorIdentifierArg = (Number) args.get(1); List useCaseIdsArg = (List) args.get(2); try { - Long output = - api.bindToLifecycle( - (identifierArg == null) ? null : identifierArg.longValue(), - (cameraSelectorIdentifierArg == null) - ? null - : cameraSelectorIdentifierArg.longValue(), - useCaseIdsArg); + Long output = api.bindToLifecycle((identifierArg == null) ? null : identifierArg.longValue(), (cameraSelectorIdentifierArg == null) ? null : cameraSelectorIdentifierArg.longValue(), useCaseIdsArg); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -841,9 +567,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -852,12 +576,10 @@ public void error(Throwable error) { Number identifierArg = (Number) args.get(0); Number useCaseIdentifierArg = (Number) args.get(1); try { - Boolean output = - api.isBound( - (identifierArg == null) ? null : identifierArg.longValue(), - (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); + Boolean output = api.isBound((identifierArg == null) ? null : identifierArg.longValue(), (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -870,9 +592,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -881,10 +601,10 @@ public void error(Throwable error) { Number identifierArg = (Number) args.get(0); List useCaseIdsArg = (List) args.get(1); try { - api.unbind( - (identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); + api.unbind((identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -897,9 +617,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -909,7 +627,8 @@ public void error(Throwable error) { try { api.unbindAll((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -929,21 +648,17 @@ public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } /** The codec used by ProcessCameraProviderFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", getCodec()); channel.send( new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); @@ -957,15 +672,13 @@ public CameraFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } /** The codec used by CameraFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1005,11 +718,9 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface SystemServicesHostApi { - void requestCameraPermissions( - @NonNull Boolean enableAudio, Result result); + void requestCameraPermissions(@NonNull Boolean enableAudio, Result result); - void startListeningForDeviceOrientationChange( - @NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); + void startListeningForDeviceOrientationChange(@NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); void stopListeningForDeviceOrientationChange(); @@ -1017,17 +728,12 @@ void startListeningForDeviceOrientationChange( static MessageCodec getCodec() { return SystemServicesHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `SystemServicesHostApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `SystemServicesHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, SystemServicesHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1056,9 +762,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1067,11 +771,10 @@ public void error(Throwable error) { Boolean isFrontFacingArg = (Boolean) args.get(0); Number sensorOrientationArg = (Number) args.get(1); try { - api.startListeningForDeviceOrientationChange( - isFrontFacingArg, - (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); + api.startListeningForDeviceOrientationChange(isFrontFacingArg, (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1084,9 +787,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1094,7 +795,8 @@ public void error(Throwable error) { try { api.stopListeningForDeviceOrientationChange(); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1114,32 +816,25 @@ public SystemServicesFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } /** The codec used by SystemServicesFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - public void onDeviceOrientationChanged(@NonNull String orientationArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", getCodec()); channel.send( new ArrayList(Collections.singletonList(orientationArg)), channelReply -> callback.reply(null)); } - public void onCameraError(@NonNull String errorDescriptionArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", getCodec()); channel.send( new ArrayList(Collections.singletonList(errorDescriptionArg)), channelReply -> callback.reply(null)); @@ -1180,24 +875,21 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface PreviewHostApi { - void create( - @NonNull Long identifier, - @Nullable Long rotation, - @Nullable ResolutionInfo targetResolution); + void create(@NonNull Long identifier, @Nullable Long rotation, @Nullable ResolutionInfo targetResolution); - @NonNull + @NonNull Long setSurfaceProvider(@NonNull Long identifier); void releaseFlutterSurfaceTexture(); - @NonNull + @NonNull ResolutionInfo getResolutionInfo(@NonNull Long identifier); /** The codec used by PreviewHostApi. */ static MessageCodec getCodec() { return PreviewHostApiCodec.INSTANCE; } - /** Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ + /**Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { { BasicMessageChannel channel = @@ -1212,12 +904,10 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { Number rotationArg = (Number) args.get(1); ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); try { - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - (rotationArg == null) ? null : rotationArg.longValue(), - targetResolutionArg); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (rotationArg == null) ? null : rotationArg.longValue(), targetResolutionArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1230,9 +920,7 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1240,11 +928,10 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = - api.setSurfaceProvider( - (identifierArg == null) ? null : identifierArg.longValue()); + Long output = api.setSurfaceProvider((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1257,9 +944,7 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1267,7 +952,8 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { try { api.releaseFlutterSurfaceTexture(); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1288,11 +974,10 @@ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - ResolutionInfo output = - api.getResolutionInfo( - (identifierArg == null) ? null : identifierArg.longValue()); + ResolutionInfo output = api.getResolutionInfo((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1334,10 +1019,7 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ImageCaptureHostApi { - void create( - @NonNull Long identifier, - @Nullable Long flashMode, - @Nullable ResolutionInfo targetResolution); + void create(@NonNull Long identifier, @Nullable Long flashMode, @Nullable ResolutionInfo targetResolution); void setFlashMode(@NonNull Long identifier, @NonNull Long flashMode); @@ -1347,10 +1029,7 @@ void create( static MessageCodec getCodec() { return ImageCaptureHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `ImageCaptureHostApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `ImageCaptureHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { { BasicMessageChannel channel = @@ -1365,12 +1044,10 @@ static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { Number flashModeArg = (Number) args.get(1); ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); try { - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - (flashModeArg == null) ? null : flashModeArg.longValue(), - targetResolutionArg); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue(), targetResolutionArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1392,11 +1069,10 @@ static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { Number identifierArg = (Number) args.get(0); Number flashModeArg = (Number) args.get(1); try { - api.setFlashMode( - (identifierArg == null) ? null : identifierArg.longValue(), - (flashModeArg == null) ? null : flashModeArg.longValue()); + api.setFlashMode((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1429,8 +1105,7 @@ public void error(Throwable error) { } }; - api.takePicture( - (identifierArg == null) ? null : identifierArg.longValue(), resultCallback); + api.takePicture((identifierArg == null) ? null : identifierArg.longValue(), resultCallback); }); } else { channel.setMessageHandler(null); @@ -1438,16 +1113,89 @@ public void error(Throwable error) { } } } + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface ImageAnalysisAnalyzerHostApi { - private static class ImageAnalysisHostApiCodec extends StandardMessageCodec { - public static final ImageAnalysisHostApiCodec INSTANCE = new ImageAnalysisHostApiCodec(); + void create(@NonNull Long identifier); - private ImageAnalysisHostApiCodec() {} + /** The codec used by ImageAnalysisAnalyzerHostApi. */ + static MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /**Sets up an instance of `ImageAnalysisAnalyzerHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(BinaryMessenger binaryMessenger, ImageAnalysisAnalyzerHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageAnalysisAnalyzerHostApi.create", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + api.create((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, null); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + public static class ImageAnalysisAnalyzerFlutterApi { + private final BinaryMessenger binaryMessenger; + + public ImageAnalysisAnalyzerFlutterApi(BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + + /** Public interface for sending reply. */ public interface Reply { + void reply(T reply); + } + /** The codec used by ImageAnalysisAnalyzerFlutterApi. */ + static MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /** Create a new Dart instance and add it to the `InstanceManager`. */ + public void create(@NonNull Long identifierArg, Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Collections.singletonList(identifierArg)), + channelReply -> callback.reply(null)); + } + /** Callback to Dart function `ImageAnalysisAnalyzer.analyze`. */ + public void analyze(@NonNull Long identifierArg, @NonNull Long imageProxyIdentifierArg, Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.analyze", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg, imageProxyIdentifierArg)), + channelReply -> callback.reply(null)); + } + } + + private static class ImageProxyHostApiCodec extends StandardMessageCodec { + public static final ImageProxyHostApiCodec INSTANCE = new ImageProxyHostApiCodec(); + + private ImageProxyHostApiCodec() {} @Override protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { switch (type) { case (byte) 128: + return CameraPermissionsErrorData.fromList((ArrayList) readValue(buffer)); + case (byte) 129: return ResolutionInfo.fromList((ArrayList) readValue(buffer)); default: return super.readValueOfType(type, buffer); @@ -1456,8 +1204,11 @@ protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { @Override protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { - if (value instanceof ResolutionInfo) { + if (value instanceof CameraPermissionsErrorData) { stream.write(128); + writeValue(stream, ((CameraPermissionsErrorData) value).toList()); + } else if (value instanceof ResolutionInfo) { + stream.write(129); writeValue(stream, ((ResolutionInfo) value).toList()); } else { super.writeValue(stream, value); @@ -1466,22 +1217,189 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { } /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface ImageAnalysisHostApi { - - void create(@NonNull Long identifier, @Nullable ResolutionInfo targetResolution); + public interface ImageProxyHostApi { + /** Handles Dart method `ImageProxy.getPlanes`. */ + @NonNull + List getPlanes(@NonNull Long identifier); + /** Handles Dart method `ImageProxy.getFormat`. */ + @NonNull + Long getFormat(@NonNull Long identifier); + /** Handles Dart method `ImageProxy.getHeight`. */ + @NonNull + Long getHeight(@NonNull Long identifier); + /** Handles Dart method `ImageProxy.getWidth`. */ + @NonNull + Long getWidth(@NonNull Long identifier); + /** Handles Dart method `ImageProxy.close`. */ + void close(@NonNull Long identifier); + + /** The codec used by ImageProxyHostApi. */ + static MessageCodec getCodec() { + return ImageProxyHostApiCodec.INSTANCE; + } + /**Sets up an instance of `ImageProxyHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(BinaryMessenger binaryMessenger, ImageProxyHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getPlanes", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + List output = api.getPlanes((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getFormat", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + Long output = api.getFormat((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getHeight", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + Long output = api.getHeight((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getWidth", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + Long output = api.getWidth((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.close", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + api.close((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, null); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + public static class ImageProxyFlutterApi { + private final BinaryMessenger binaryMessenger; - void setAnalyzer(@NonNull Long identifier); + public ImageProxyFlutterApi(BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + /** Public interface for sending reply. */ public interface Reply { + void reply(T reply); + } + /** The codec used by ImageProxyFlutterApi. */ + static MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /** Create a new Dart instance and add it to the `InstanceManager`. */ + public void create(@NonNull Long identifierArg, Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageProxyFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Collections.singletonList(identifierArg)), + channelReply -> callback.reply(null)); + } + } + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface ImageAnalysisHostApi { + /** Create a new native instance and add it to the `InstanceManager`. */ + void create(@NonNull Long identifier, @Nullable Long targetResolutionIdentifier); + /** Handles Dart method `ImageAnalysis.setAnalyzer`. */ + void setAnalyzer(@NonNull Long identifier, @NonNull Long analyzerIdentifier); + /** Handles Dart method `ImageAnalysis.clearAnalyzer`. */ void clearAnalyzer(@NonNull Long identifier); /** The codec used by ImageAnalysisHostApi. */ static MessageCodec getCodec() { - return ImageAnalysisHostApiCodec.INSTANCE; + return new StandardMessageCodec(); } - /** - * Sets up an instance of `ImageAnalysisHostApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `ImageAnalysisHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { { BasicMessageChannel channel = @@ -1493,13 +1411,12 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { ArrayList wrapped = new ArrayList(); ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); - ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(1); + Number targetResolutionIdentifierArg = (Number) args.get(1); try { - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - targetResolutionArg); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (targetResolutionIdentifierArg == null) ? null : targetResolutionIdentifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1519,10 +1436,12 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { ArrayList wrapped = new ArrayList(); ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); + Number analyzerIdentifierArg = (Number) args.get(1); try { - api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); + api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue(), (analyzerIdentifierArg == null) ? null : analyzerIdentifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1535,9 +1454,7 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1547,7 +1464,8 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { try { api.clearAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1559,64 +1477,145 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { } } } + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + public static class ImageAnalysisFlutterApi { + private final BinaryMessenger binaryMessenger; - private static class ImageAnalysisFlutterApiCodec extends StandardMessageCodec { - public static final ImageAnalysisFlutterApiCodec INSTANCE = new ImageAnalysisFlutterApiCodec(); - - private ImageAnalysisFlutterApiCodec() {} - - @Override - protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { - switch (type) { - case (byte) 128: - return ImageInformation.fromList((ArrayList) readValue(buffer)); - case (byte) 129: - return ImagePlaneInformation.fromList((ArrayList) readValue(buffer)); - default: - return super.readValueOfType(type, buffer); - } + public ImageAnalysisFlutterApi(BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; } - @Override - protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { - if (value instanceof ImageInformation) { - stream.write(128); - writeValue(stream, ((ImageInformation) value).toList()); - } else if (value instanceof ImagePlaneInformation) { - stream.write(129); - writeValue(stream, ((ImagePlaneInformation) value).toList()); - } else { - super.writeValue(stream, value); + /** Public interface for sending reply. */ public interface Reply { + void reply(T reply); + } + /** The codec used by ImageAnalysisFlutterApi. */ + static MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /** Create a new Dart instance and add it to the `InstanceManager`. */ + public void create(@NonNull Long identifierArg, @NonNull Long targetResolutionIdentifierArg, Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageAnalysisFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg, targetResolutionIdentifierArg)), + channelReply -> callback.reply(null)); + } + } + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface ImageProxyPlaneProxyHostApi { + /** Handles Dart method `ImageProxyPlaneProxy.getPixelStride`. */ + @NonNull + Long getPixelStride(@NonNull Long identifier); + /** Handles Dart method `ImageProxyPlaneProxy.getRowStride`. */ + @NonNull + byte[] getBuffer(@NonNull Long identifier); + /** Handles Dart method `ImageProxyPlaneProxy.getRowStride`. */ + @NonNull + Long getRowStride(@NonNull Long identifier); + + /** The codec used by ImageProxyPlaneProxyHostApi. */ + static MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /**Sets up an instance of `ImageProxyPlaneProxyHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(BinaryMessenger binaryMessenger, ImageProxyPlaneProxyHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getPixelStride", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + Long output = api.getPixelStride((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getBuffer", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + byte[] output = api.getBuffer((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getRowStride", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + Long output = api.getRowStride((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } } } } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ - public static class ImageAnalysisFlutterApi { + public static class ImageProxyPlaneProxyFlutterApi { private final BinaryMessenger binaryMessenger; - public ImageAnalysisFlutterApi(BinaryMessenger argBinaryMessenger) { + public ImageProxyPlaneProxyFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } - /** The codec used by ImageAnalysisFlutterApi. */ + /** The codec used by ImageProxyPlaneProxyFlutterApi. */ static MessageCodec getCodec() { - return ImageAnalysisFlutterApiCodec.INSTANCE; + return new StandardMessageCodec(); } - - public void onImageAnalyzed( - @NonNull ImageInformation imageInformationArg, Reply callback) { + /** Create a new Dart instance and add it to the `InstanceManager`. */ + public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ImageProxyPlaneProxyFlutterApi.create", getCodec()); channel.send( - new ArrayList(Collections.singletonList(imageInformationArg)), + new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java deleted file mode 100644 index d1254e35d19d..000000000000 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisFlutterApiImpl.java +++ /dev/null @@ -1,21 +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. - -package io.flutter.plugins.camerax; - -import androidx.annotation.NonNull; -import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageAnalysisFlutterApi; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageInformation; - -public class ImageAnalysisFlutterApiImpl extends ImageAnalysisFlutterApi { - public ImageAnalysisFlutterApiImpl(@NonNull BinaryMessenger binaryMessenger) { - super(binaryMessenger); - } - - public void sendOnImageAnalyzedEvent( - @NonNull ImageInformation imageInformation, @NonNull Reply callback) { - onImageAnalyzed(imageInformation, callback); - } -} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index df3824bd17a1..0d76e7c71b55 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -57,13 +57,13 @@ public void create(@NonNull Long identifier, @Nullable ResolutionInfo targetReso * Sets an analyzer created by {@link ImageAnalysisHostApiImpl#createImageAnalysisAnalyzer()} on * an {@link ImageAnalysis} instance to receive and analyze images. */ - @Override - public void setAnalyzer(@NonNull Long identifier) { - ImageAnalysis imageAnalysis = - (ImageAnalysis) Objects.requireNonNull(instanceManager.getInstance(identifier)); - ImageAnalysis.Analyzer analyzer = createImageAnalysisAnalyzer(); - imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(context), analyzer); - } + // @Override + // public void setAnalyzer(@NonNull Long identifier) { + // ImageAnalysis imageAnalysis = + // (ImageAnalysis) Objects.requireNonNull(instanceManager.getInstance(identifier)); + // ImageAnalysis.Analyzer analyzer = createImageAnalysisAnalyzer(); + // imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(context), analyzer); + // } /** * Creates an {@link ImageAnalysis.Analyzer} instance to send image information to the Dart side @@ -72,48 +72,55 @@ public void setAnalyzer(@NonNull Long identifier) { *

The image information collected and sent matches that of the (Dart) CameraImageData class, * which is required for image streaming in this plugin. */ - private ImageAnalysis.Analyzer createImageAnalysisAnalyzer() { - return new ImageAnalysis.Analyzer() { - @Override - public void analyze(@NonNull ImageProxy image) { - // Collect image plane information. - ImageProxy.PlaneProxy[] planes = image.getPlanes(); - List imagePlanesInformation = - new ArrayList(); - - for (ImageProxy.PlaneProxy plane : planes) { - ByteBuffer byteBuffer = plane.getBuffer(); - byte[] bytes = new byte[byteBuffer.remaining()]; - byteBuffer.get(bytes, 0, bytes.length); - GeneratedCameraXLibrary.ImagePlaneInformation.Builder imagePlaneInfoBuilder = - new GeneratedCameraXLibrary.ImagePlaneInformation.Builder(); - - imagePlanesInformation.add( - imagePlaneInfoBuilder - .setBytesPerRow(Long.valueOf(plane.getRowStride())) - .setBytesPerPixel(Long.valueOf(plane.getPixelStride())) - .setBytes(bytes) - .build()); - } - - // Collect general image information. - // TODO(camsim99): Retrieve and send the following when made available by b/274791178: - // last lens aperture, last sensor exposure time, last sensor sensitivity. - GeneratedCameraXLibrary.ImageInformation.Builder imageInfoBuilder = - new GeneratedCameraXLibrary.ImageInformation.Builder(); - imageInfoBuilder.setFormat(Long.valueOf(image.getFormat())); - imageInfoBuilder.setImagePlanesInformation(imagePlanesInformation); - imageInfoBuilder.setHeight(Long.valueOf(image.getHeight())); - imageInfoBuilder.setWidth(Long.valueOf(image.getWidth())); - - // Send image frame to Dart side for image streaming and close ImageProxy, since we are done using it. - ImageAnalysisFlutterApiImpl imageAnalysisFlutterApiImpl = - cameraXProxy.createImageAnalysisFlutterApiImpl(binaryMessenger); - imageAnalysisFlutterApiImpl.sendOnImageAnalyzedEvent(imageInfoBuilder.build(), reply -> {}); - image.close(); - } - }; - } +// private ImageAnalysis.Analyzer createImageAnalysisAnalyzer() { +// return new ImageAnalysis.Analyzer() { +// @Override +// public void analyze(@NonNull ImageProxy image) { +// // Collect image plane information. +// ImageProxy.PlaneProxy[] planes = image.getPlanes(); +// List imagePlanesInformation = +// new ArrayList(); + +// for (ImageProxy.PlaneProxy plane : planes) { +// ByteBuffer byteBuffer = plane.getBuffer(); +// byte[] bytes = new byte[byteBuffer.remaining()]; +// byteBuffer.get(bytes, 0, bytes.length); +// GeneratedCameraXLibrary.ImagePlaneInformation.Builder imagePlaneInfoBuilder = +// new GeneratedCameraXLibrary.ImagePlaneInformation.Builder(); + +// imagePlanesInformation.add( +// imagePlaneInfoBuilder +// .setBytesPerRow(Long.valueOf(plane.getRowStride())) +// .setBytesPerPixel(Long.valueOf(plane.getPixelStride())) +// .setBytes(bytes) +// .build()); +// } + +// // Collect general image information. +// // TODO(camsim99): Retrieve and send the following when made available by b/274791178: +// // last lens aperture, last sensor exposure time, last sensor sensitivity. +// GeneratedCameraXLibrary.ImageInformation.Builder imageInfoBuilder = +// new GeneratedCameraXLibrary.ImageInformation.Builder(); +// imageInfoBuilder.setFormat(Long.valueOf(image.getFormat())); +// imageInfoBuilder.setImagePlanesInformation(imagePlanesInformation); +// imageInfoBuilder.setHeight(Long.valueOf(image.getHeight())); +// imageInfoBuilder.setWidth(Long.valueOf(image.getWidth())); + +// // Send image frame to Dart side for image streaming and close ImageProxy, since we are done using it. +// ImageAnalysisFlutterApiImpl imageAnalysisFlutterApiImpl = +// cameraXProxy.createImageAnalysisFlutterApiImpl(binaryMessenger); +// imageAnalysisFlutterApiImpl.sendOnImageAnalyzedEvent(imageInfoBuilder.build(), reply -> {}); +// image.close(); +// } +// }; +// } + +@Override +public void setAnalyzer(@NonNull Long identifier, @NonNull Long analyzerIdentifier) { + + getImageAnalysisInstance(identifier) + .setAnalyzer(Objects.requireNonNull(instanceManager.getInstance(analyzerIdentifier))); +} /** Clears any analyzer previously set on the specified {@link ImageAnalysis} instance. */ @Override @@ -122,4 +129,8 @@ public void clearAnalyzer(@NonNull Long identifier) { (ImageAnalysis) Objects.requireNonNull(instanceManager.getInstance(identifier)); imageAnalysis.clearAnalyzer(); } + + private ImageAnalysis getImageAnalysisInstance(@NonNull Long identifier) { + return Objects.requireNonNull(instanceManager.getInstance(identifier)); + } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerTest.java new file mode 100644 index 000000000000..858cf8266583 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerTest.java @@ -0,0 +1,98 @@ + +// 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. + +// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation + +package io.flutter.plugins.camerax; + +// TODO(bparrishMines): Import native classes +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import io.flutter.plugin.common.BinaryMessenger; +import java.util.Objects; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class ImageAnalysisAnalyzerTest { + + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public ImageAnalysisAnalyzerHostApiImpl.ImageAnalysisAnalyzerImpl mockImageAnalysisAnalyzer; + + @Mock public BinaryMessenger mockBinaryMessenger; + + // TODO(bparrishMines): Fix name of generated pigeon file + @Mock public GeneratedPigeonFilename.ImageAnalysisAnalyzerFlutterApi mockFlutterApi; + + @Mock public ImageAnalysisAnalyzerHostApiImpl.ImageAnalysisAnalyzerProxy mockProxy; + + InstanceManager instanceManager; + + @Before + public void setUp() { + instanceManager = InstanceManager.open(identifier -> {}); + } + + @After + public void tearDown() { + instanceManager.close(); + } + + @Test + public void hostApiCreate() { + + when(mockProxy.create(mockBinaryMessenger, instanceManager)) + .thenReturn(mockImageAnalysisAnalyzer); + final ImageAnalysisAnalyzerHostApiImpl hostApi = + new ImageAnalysisAnalyzerHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); + + final long instanceIdentifier = 0; + hostApi.create(instanceIdentifier); + + assertEquals(instanceManager.getInstance(instanceIdentifier), mockImageAnalysisAnalyzer); + } + + @Test + public void flutterApiCreate() { + final ImageAnalysisAnalyzerFlutterApiImpl flutterApi = + new ImageAnalysisAnalyzerFlutterApiImpl(mockBinaryMessenger, instanceManager); + flutterApi.setApi(mockFlutterApi); + + flutterApi.create(mockImageAnalysisAnalyzer, reply -> {}); + + final long instanceIdentifier = + Objects.requireNonNull( + instanceManager.getIdentifierForStrongReference(mockImageAnalysisAnalyzer)); + verify(mockFlutterApi).create(eq(instanceIdentifier), any()); + } + + @Test + public void analyze() { + final ImageAnalysisAnalyzerFlutterApiImpl flutterApi = + new ImageAnalysisAnalyzerFlutterApiImpl(mockBinaryMessenger, instanceManager); + flutterApi.setApi(mockFlutterApi); + + final ImageAnalysisAnalyzerHostApiImpl.ImageAnalysisAnalyzerImpl instance = + new ImageAnalysisAnalyzerHostApiImpl.ImageAnalysisAnalyzerImpl( + mockBinaryMessenger, instanceManager); + instance.setApi(flutterApi); + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(instance, instanceIdentifier); + + instance.analyze(); + + verify(mockFlutterApi).analyze(eq(instanceIdentifier), any()); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisTest.java new file mode 100644 index 000000000000..21ad94598e0c --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisTest.java @@ -0,0 +1,143 @@ + +// 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. + +// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation + +package io.flutter.plugins.camerax; + +// TODO(bparrishMines): Import native classes +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import io.flutter.plugin.common.BinaryMessenger; +import java.util.Objects; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class ImageAnalysisTest { + + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public ImageAnalysis mockImageAnalysis; + + @Mock public BinaryMessenger mockBinaryMessenger; + + // TODO(bparrishMines): Fix name of generated pigeon file + @Mock public GeneratedPigeonFilename.ImageAnalysisFlutterApi mockFlutterApi; + + @Mock public ImageAnalysisHostApiImpl.ImageAnalysisProxy mockProxy; + + InstanceManager instanceManager; + + @Before + public void setUp() { + instanceManager = InstanceManager.open(identifier -> {}); + } + + @After + public void tearDown() { + instanceManager.close(); + } + + @Test + public void hostApiCreate() { + + final ResolutionInfo mockTargetResolution = mock(ResolutionInfo.class); + final long targetResolutionIdentifier = 11; + instanceManager.addDartCreatedInstance(mockTargetResolution, targetResolutionIdentifier); + + when(mockProxy.create(mockTargetResolution)).thenReturn(mockImageAnalysis); + + final ImageAnalysisHostApiImpl hostApi = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); + + final long instanceIdentifier = 0; + hostApi.create(instanceIdentifier, targetResolutionIdentifier); + + assertEquals(instanceManager.getInstance(instanceIdentifier), mockImageAnalysis); + } + + @Test + public void getOnStreamedFrameAvailableStreamController() { + final StreamController mockStreamController = mock(StreamController.class); + final long onStreamedFrameAvailableStreamControllerIdentifier = 1; + + when(mockProxy.getOnStreamedFrameAvailableStreamController()).thenReturn(mockStreamController); + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockImageAnalysis, instanceIdentifier); + + final ImageAnalysisHostApiImpl hostApi = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); + hostApi.attachOnStreamedFrameAvailableStreamController( + onStreamedFrameAvailableStreamControllerIdentifier); + + assertEquals( + instanceManager.getInstance(onStreamedFrameAvailableStreamControllerIdentifier), + mockStreamController); + } + + @Test + public void setAnalyzer() { + + final ImageAnalysisAnalyzer mockAnalyzer = mock(ImageAnalysisAnalyzer.class); + final long analyzerIdentifier = 10; + instanceManager.addDartCreatedInstance(mockAnalyzer, analyzerIdentifier); + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockImageAnalysis, instanceIdentifier); + + final ImageAnalysisHostApiImpl hostApi = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager); + + hostApi.setAnalyzer(instanceIdentifier, analyzerIdentifier); + + verify(mockImageAnalysis).setAnalyzer(mockAnalyzer); + } + + @Test + public void clearAnalyzer() { + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockImageAnalysis, instanceIdentifier); + + final ImageAnalysisHostApiImpl hostApi = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager); + + hostApi.clearAnalyzer(instanceIdentifier); + + verify(mockImageAnalysis).clearAnalyzer(); + } + + @Test + public void flutterApiCreate() { + final ImageAnalysisFlutterApiImpl flutterApi = + new ImageAnalysisFlutterApiImpl(mockBinaryMessenger, instanceManager); + flutterApi.setApi(mockFlutterApi); + + final ResolutionInfo mockTargetResolution = mock(ResolutionInfo.class); + + flutterApi.create(mockImageAnalysis, mockTargetResolution, reply -> {}); + + final long instanceIdentifier = + Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockImageAnalysis)); + verify(mockFlutterApi) + .create( + eq(instanceIdentifier), + eq( + Objects.requireNonNull( + instanceManager.getIdentifierForStrongReference(mockTargetResolution))), + any()); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyTest.java new file mode 100644 index 000000000000..cfdc925720d2 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyTest.java @@ -0,0 +1,124 @@ + +// 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. + +// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation + +package io.flutter.plugins.camerax; + +// TODO(bparrishMines): Import native classes +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import io.flutter.plugin.common.BinaryMessenger; +import java.util.Objects; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class ImageProxyPlaneProxyTest { + + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public ImageProxyPlaneProxy mockImageProxyPlaneProxy; + + @Mock public BinaryMessenger mockBinaryMessenger; + + // TODO(bparrishMines): Fix name of generated pigeon file + @Mock public GeneratedPigeonFilename.ImageProxyPlaneProxyFlutterApi mockFlutterApi; + + InstanceManager instanceManager; + + @Before + public void setUp() { + instanceManager = InstanceManager.open(identifier -> {}); + } + + @After + public void tearDown() { + instanceManager.close(); + } + + @Test + public void getRowStride() { + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockImageProxyPlaneProxy, instanceIdentifier); + + final dynamic returnValue = mock(dynamic.class); + + when(mockImageProxyPlaneProxy.getRowStride(instanceIdentifier)).thenReturn(returnValue); + + final ImageProxyPlaneProxyHostApiImpl hostApi = + new ImageProxyPlaneProxyHostApiImpl(mockBinaryMessenger, instanceManager); + + final Long result = hostApi.getRowStride(instanceIdentifier); + + verify(mockImageProxyPlaneProxy).getRowStride(); + + assertEquals(result, instanceManager.getIdentifierForStrongReference(returnValue)); + } + + @Test + public void getPixelStride() { + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockImageProxyPlaneProxy, instanceIdentifier); + + final Long returnValue = 0; + + when(mockImageProxyPlaneProxy.getPixelStride(instanceIdentifier)).thenReturn(returnValue); + + final ImageProxyPlaneProxyHostApiImpl hostApi = + new ImageProxyPlaneProxyHostApiImpl(mockBinaryMessenger, instanceManager); + + final Long result = hostApi.getPixelStride(instanceIdentifier); + + verify(mockImageProxyPlaneProxy).getPixelStride(); + + assertEquals(result, returnValue); + } + + @Test + public void getRowStride() { + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockImageProxyPlaneProxy, instanceIdentifier); + + final Long returnValue = 0; + + when(mockImageProxyPlaneProxy.getRowStride(instanceIdentifier)).thenReturn(returnValue); + + final ImageProxyPlaneProxyHostApiImpl hostApi = + new ImageProxyPlaneProxyHostApiImpl(mockBinaryMessenger, instanceManager); + + final Long result = hostApi.getRowStride(instanceIdentifier); + + verify(mockImageProxyPlaneProxy).getRowStride(); + + assertEquals(result, returnValue); + } + + @Test + public void flutterApiCreate() { + final ImageProxyPlaneProxyFlutterApiImpl flutterApi = + new ImageProxyPlaneProxyFlutterApiImpl(mockBinaryMessenger, instanceManager); + flutterApi.setApi(mockFlutterApi); + + flutterApi.create(mockImageProxyPlaneProxy, reply -> {}); + + final long instanceIdentifier = + Objects.requireNonNull( + instanceManager.getIdentifierForStrongReference(mockImageProxyPlaneProxy)); + verify(mockFlutterApi).create(eq(instanceIdentifier), any()); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyTest.java new file mode 100644 index 000000000000..b3906e68f174 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyTest.java @@ -0,0 +1,156 @@ + +// 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. + +// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation + +package io.flutter.plugins.camerax; + +// TODO(bparrishMines): Import native classes +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import io.flutter.plugin.common.BinaryMessenger; +import java.util.Objects; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class ImageProxyTest { + + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public ImageProxy mockImageProxy; + + @Mock public BinaryMessenger mockBinaryMessenger; + + // TODO(bparrishMines): Fix name of generated pigeon file + @Mock public GeneratedPigeonFilename.ImageProxyFlutterApi mockFlutterApi; + + InstanceManager instanceManager; + + @Before + public void setUp() { + instanceManager = InstanceManager.open(identifier -> {}); + } + + @After + public void tearDown() { + instanceManager.close(); + } + + @Test + public void getPlanes() { + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); + + final List returnValue = new ArrayList(); + + when(mockImageProxy.getPlanes(instanceIdentifier)).thenReturn(returnValue); + + final ImageProxyHostApiImpl hostApi = + new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); + + final List result = hostApi.getPlanes(instanceIdentifier); + + verify(mockImageProxy).getPlanes(); + + assertEquals(result, returnValue); + } + + @Test + public void getFormat() { + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); + + final Long returnValue = 0; + + when(mockImageProxy.getFormat(instanceIdentifier)).thenReturn(returnValue); + + final ImageProxyHostApiImpl hostApi = + new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); + + final Long result = hostApi.getFormat(instanceIdentifier); + + verify(mockImageProxy).getFormat(); + + assertEquals(result, returnValue); + } + + @Test + public void getHeight() { + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); + + final Long returnValue = 0; + + when(mockImageProxy.getHeight(instanceIdentifier)).thenReturn(returnValue); + + final ImageProxyHostApiImpl hostApi = + new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); + + final Long result = hostApi.getHeight(instanceIdentifier); + + verify(mockImageProxy).getHeight(); + + assertEquals(result, returnValue); + } + + @Test + public void getWidth() { + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); + + final Long returnValue = 0; + + when(mockImageProxy.getWidth(instanceIdentifier)).thenReturn(returnValue); + + final ImageProxyHostApiImpl hostApi = + new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); + + final Long result = hostApi.getWidth(instanceIdentifier); + + verify(mockImageProxy).getWidth(); + + assertEquals(result, returnValue); + } + + @Test + public void close() { + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); + + final ImageProxyHostApiImpl hostApi = + new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); + + hostApi.close(instanceIdentifier); + + verify(mockImageProxy).close(); + } + + @Test + public void flutterApiCreate() { + final ImageProxyFlutterApiImpl flutterApi = + new ImageProxyFlutterApiImpl(mockBinaryMessenger, instanceManager); + flutterApi.setApi(mockFlutterApi); + + flutterApi.create(mockImageProxy, reply -> {}); + + final long instanceIdentifier = + Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockImageProxy)); + verify(mockFlutterApi).create(eq(instanceIdentifier), any()); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index b0092c87982c..a18dcff2a35c 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -63,74 +63,6 @@ class CameraPermissionsErrorData { } } -class ImagePlaneInformation { - ImagePlaneInformation({ - required this.bytes, - required this.bytesPerRow, - required this.bytesPerPixel, - }); - - Uint8List bytes; - - int bytesPerRow; - - int bytesPerPixel; - - Object encode() { - return [ - bytes, - bytesPerRow, - bytesPerPixel, - ]; - } - - static ImagePlaneInformation decode(Object result) { - result as List; - return ImagePlaneInformation( - bytes: result[0]! as Uint8List, - bytesPerRow: result[1]! as int, - bytesPerPixel: result[2]! as int, - ); - } -} - -class ImageInformation { - ImageInformation({ - required this.format, - required this.imagePlanesInformation, - required this.height, - required this.width, - }); - - int format; - - List imagePlanesInformation; - - int height; - - int width; - - Object encode() { - return [ - format, - imagePlanesInformation, - height, - width, - ]; - } - - static ImageInformation decode(Object result) { - result as List; - return ImageInformation( - format: result[0]! as int, - imagePlanesInformation: - (result[1] as List?)!.cast(), - height: result[2]! as int, - width: result[3]! as int, - ); - } -} - class InstanceManagerHostApi { /// Constructor for [InstanceManagerHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -148,7 +80,8 @@ class InstanceManagerHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; + final List? replyList = + await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -204,8 +137,7 @@ abstract class JavaObjectFlutterApi { void dispose(int identifier); - static void setup(JavaObjectFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(JavaObjectFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectFlutterApi.dispose', codec, @@ -215,7 +147,7 @@ abstract class JavaObjectFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -271,8 +203,7 @@ abstract class CameraInfoFlutterApi { void create(int identifier); - static void setup(CameraInfoFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(CameraInfoFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraInfoFlutterApi.create', codec, @@ -282,7 +213,7 @@ abstract class CameraInfoFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -309,8 +240,8 @@ class CameraSelectorHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_lensFacing]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_lensFacing]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -327,13 +258,12 @@ class CameraSelectorHostApi { } } - Future> filter( - int arg_identifier, List arg_cameraInfoIds) async { + Future> filter(int arg_identifier, List arg_cameraInfoIds) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_cameraInfoIds]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_cameraInfoIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -361,8 +291,7 @@ abstract class CameraSelectorFlutterApi { void create(int identifier, int? lensFacing); - static void setup(CameraSelectorFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(CameraSelectorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, @@ -372,7 +301,7 @@ abstract class CameraSelectorFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -400,7 +329,8 @@ class ProcessCameraProviderHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; + final List? replyList = + await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -424,8 +354,7 @@ class ProcessCameraProviderHostApi { Future> getAvailableCameraInfos(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', - codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_identifier]) as List?; @@ -450,17 +379,12 @@ class ProcessCameraProviderHostApi { } } - Future bindToLifecycle(int arg_identifier, - int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { + Future bindToLifecycle(int arg_identifier, int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', - codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send([ - arg_identifier, - arg_cameraSelectorIdentifier, - arg_useCaseIds - ]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_cameraSelectorIdentifier, arg_useCaseIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -487,8 +411,7 @@ class ProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_useCaseIdentifier]) - as List?; + await channel.send([arg_identifier, arg_useCaseIdentifier]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -514,8 +437,8 @@ class ProcessCameraProviderHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_useCaseIds]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_useCaseIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -560,8 +483,7 @@ abstract class ProcessCameraProviderFlutterApi { void create(int identifier); - static void setup(ProcessCameraProviderFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(ProcessCameraProviderFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, @@ -571,7 +493,7 @@ abstract class ProcessCameraProviderFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -599,7 +521,7 @@ abstract class CameraFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -627,7 +549,7 @@ class _SystemServicesHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -645,11 +567,9 @@ class SystemServicesHostApi { static const MessageCodec codec = _SystemServicesHostApiCodec(); - Future requestCameraPermissions( - bool arg_enableAudio) async { + Future requestCameraPermissions(bool arg_enableAudio) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_enableAudio]) as List?; @@ -669,15 +589,12 @@ class SystemServicesHostApi { } } - Future startListeningForDeviceOrientationChange( - bool arg_isFrontFacing, int arg_sensorOrientation) async { + Future startListeningForDeviceOrientationChange(bool arg_isFrontFacing, int arg_sensorOrientation) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_isFrontFacing, arg_sensorOrientation]) - as List?; + await channel.send([arg_isFrontFacing, arg_sensorOrientation]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -696,10 +613,10 @@ class SystemServicesHostApi { Future stopListeningForDeviceOrientationChange() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; + final List? replyList = + await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -724,19 +641,17 @@ abstract class SystemServicesFlutterApi { void onCameraError(String errorDescription); - static void setup(SystemServicesFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(SystemServicesFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', - codec, + 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); final List args = (message as List?)!; final String? arg_orientation = (args[0] as String?); assert(arg_orientation != null, @@ -755,7 +670,7 @@ abstract class SystemServicesFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); final List args = (message as List?)!; final String? arg_errorDescription = (args[0] as String?); assert(arg_errorDescription != null, @@ -786,9 +701,9 @@ class _PreviewHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - case 129: + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -806,14 +721,12 @@ class PreviewHostApi { static const MessageCodec codec = _PreviewHostApiCodec(); - Future create(int arg_identifier, int? arg_rotation, - ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_rotation, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_rotation, arg_targetResolution]) - as List?; + final List? replyList = + await channel.send([arg_identifier, arg_rotation, arg_targetResolution]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -861,7 +774,8 @@ class PreviewHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; + final List? replyList = + await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -921,7 +835,7 @@ class _ImageCaptureHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -939,14 +853,12 @@ class ImageCaptureHostApi { static const MessageCodec codec = _ImageCaptureHostApiCodec(); - Future create(int arg_identifier, int? arg_flashMode, - ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_flashMode, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send( - [arg_identifier, arg_flashMode, arg_targetResolution]) - as List?; + final List? replyList = + await channel.send([arg_identifier, arg_flashMode, arg_targetResolution]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -967,8 +879,8 @@ class ImageCaptureHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_flashMode]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_flashMode]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1013,13 +925,103 @@ class ImageCaptureHostApi { } } -class _ImageAnalysisHostApiCodec extends StandardMessageCodec { - const _ImageAnalysisHostApiCodec(); +class ImageAnalysisAnalyzerHostApi { + /// Constructor for [ImageAnalysisAnalyzerHostApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + ImageAnalysisAnalyzerHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = StandardMessageCodec(); + + Future create(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisAnalyzerHostApi.create', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else { + return; + } + } +} + +abstract class ImageAnalysisAnalyzerFlutterApi { + static const MessageCodec codec = StandardMessageCodec(); + + /// Create a new Dart instance and add it to the `InstanceManager`. + void create(int identifier); + + /// Callback to Dart function `ImageAnalysisAnalyzer.analyze`. + void analyze(int identifier, int imageProxyIdentifier); + + static void setup(ImageAnalysisAnalyzerFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!); + return; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.analyze', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.analyze was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.analyze was null, expected non-null int.'); + final int? arg_imageProxyIdentifier = (args[1] as int?); + assert(arg_imageProxyIdentifier != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.analyze was null, expected non-null int.'); + api.analyze(arg_identifier!, arg_imageProxyIdentifier!); + return; + }); + } + } + } +} + +class _ImageProxyHostApiCodec extends StandardMessageCodec { + const _ImageProxyHostApiCodec(); @override void writeValue(WriteBuffer buffer, Object? value) { - if (value is ResolutionInfo) { + if (value is CameraPermissionsErrorData) { buffer.putUint8(128); writeValue(buffer, value.encode()); + } else if (value is ResolutionInfo) { + buffer.putUint8(129); + writeValue(buffer, value.encode()); } else { super.writeValue(buffer, value); } @@ -1028,7 +1030,9 @@ class _ImageAnalysisHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: + return CameraPermissionsErrorData.decode(readValue(buffer)!); + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1036,6 +1040,181 @@ class _ImageAnalysisHostApiCodec extends StandardMessageCodec { } } +class ImageProxyHostApi { + /// Constructor for [ImageProxyHostApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + ImageProxyHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = _ImageProxyHostApiCodec(); + + /// Handles Dart method `ImageProxy.getPlanes`. + Future> getPlanes(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyHostApi.getPlanes', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as List?)!; + } + } + + /// Handles Dart method `ImageProxy.getFormat`. + Future getFormat(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyHostApi.getFormat', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as int?)!; + } + } + + /// Handles Dart method `ImageProxy.getHeight`. + Future getHeight(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyHostApi.getHeight', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as int?)!; + } + } + + /// Handles Dart method `ImageProxy.getWidth`. + Future getWidth(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyHostApi.getWidth', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as int?)!; + } + } + + /// Handles Dart method `ImageProxy.close`. + Future close(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyHostApi.close', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else { + return; + } + } +} + +abstract class ImageProxyFlutterApi { + static const MessageCodec codec = StandardMessageCodec(); + + /// Create a new Dart instance and add it to the `InstanceManager`. + void create(int identifier); + + static void setup(ImageProxyFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageProxyFlutterApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageProxyFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!); + return; + }); + } + } + } +} + class ImageAnalysisHostApi { /// Constructor for [ImageAnalysisHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -1044,16 +1223,15 @@ class ImageAnalysisHostApi { : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - static const MessageCodec codec = _ImageAnalysisHostApiCodec(); + static const MessageCodec codec = StandardMessageCodec(); - Future create( - int arg_identifier, ResolutionInfo? arg_targetResolution) async { + /// Create a new native instance and add it to the `InstanceManager`. + Future create(int arg_identifier, int? arg_targetResolutionIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_targetResolution]) - as List?; + await channel.send([arg_identifier, arg_targetResolutionIdentifier]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1070,12 +1248,13 @@ class ImageAnalysisHostApi { } } - Future setAnalyzer(int arg_identifier) async { + /// Handles Dart method `ImageAnalysis.setAnalyzer`. + Future setAnalyzer(int arg_identifier, int arg_analyzerIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier]) as List?; + await channel.send([arg_identifier, arg_analyzerIdentifier]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1092,6 +1271,7 @@ class ImageAnalysisHostApi { } } + /// Handles Dart method `ImageAnalysis.clearAnalyzer`. Future clearAnalyzer(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer', codec, @@ -1115,57 +1295,155 @@ class ImageAnalysisHostApi { } } -class _ImageAnalysisFlutterApiCodec extends StandardMessageCodec { - const _ImageAnalysisFlutterApiCodec(); - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is ImageInformation) { - buffer.putUint8(128); - writeValue(buffer, value.encode()); - } else if (value is ImagePlaneInformation) { - buffer.putUint8(129); - writeValue(buffer, value.encode()); +abstract class ImageAnalysisFlutterApi { + static const MessageCodec codec = StandardMessageCodec(); + + /// Create a new Dart instance and add it to the `InstanceManager`. + void create(int identifier, int targetResolutionIdentifier); + + static void setup(ImageAnalysisFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.create was null, expected non-null int.'); + final int? arg_targetResolutionIdentifier = (args[1] as int?); + assert(arg_targetResolutionIdentifier != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!, arg_targetResolutionIdentifier!); + return; + }); + } + } + } +} + +class ImageProxyPlaneProxyHostApi { + /// Constructor for [ImageProxyPlaneProxyHostApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + ImageProxyPlaneProxyHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = StandardMessageCodec(); + + /// Handles Dart method `ImageProxyPlaneProxy.getPixelStride`. + Future getPixelStride(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getPixelStride', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); } else { - super.writeValue(buffer, value); + return (replyList[0] as int?)!; } } - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 128: - return ImageInformation.decode(readValue(buffer)!); - case 129: - return ImagePlaneInformation.decode(readValue(buffer)!); - default: - return super.readValueOfType(type, buffer); + /// Handles Dart method `ImageProxyPlaneProxy.getRowStride`. + Future getBuffer(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getBuffer', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as Uint8List?)!; + } + } + + /// Handles Dart method `ImageProxyPlaneProxy.getRowStride`. + Future getRowStride(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getRowStride', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as int?)!; } } } -abstract class ImageAnalysisFlutterApi { - static const MessageCodec codec = _ImageAnalysisFlutterApiCodec(); +abstract class ImageProxyPlaneProxyFlutterApi { + static const MessageCodec codec = StandardMessageCodec(); - void onImageAnalyzed(ImageInformation imageInformation); + /// Create a new Dart instance and add it to the `InstanceManager`. + void create(int identifier); - static void setup(ImageAnalysisFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(ImageProxyPlaneProxyFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed', codec, + 'dev.flutter.pigeon.ImageProxyPlaneProxyFlutterApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyFlutterApi.create was null.'); final List args = (message as List?)!; - final ImageInformation? arg_imageInformation = - (args[0] as ImageInformation?); - assert(arg_imageInformation != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.onImageAnalyzed was null, expected non-null ImageInformation.'); - api.onImageAnalyzed(arg_imageInformation!); + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!); return; }); } diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index 07168d7bbac0..a30329a3dba6 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -7,9 +7,12 @@ import 'dart:async'; import 'package:camera_platform_interface/camera_platform_interface.dart' show CameraImageData, CameraImageFormat, CameraImagePlane, ImageFormatGroup; import 'package:flutter/services.dart' show BinaryMessenger; +import 'package:meta/meta.dart' show protected; +import 'package:simple_ast/annotations.dart'; import 'android_camera_camerax_flutter_api_impls.dart'; import 'camerax_library.g.dart'; +import 'image_analysis_analyzer.dart'; import 'instance_manager.dart'; import 'java_object.dart'; import 'use_case.dart'; @@ -17,6 +20,7 @@ import 'use_case.dart'; /// Use case for providing CPU accessible images for performing image analysis. /// /// See https://developer.android.com/reference/androidx/camera/core/ImageAnalysis. +@SimpleClassAnnotation() class ImageAnalysis extends UseCase { /// Creates an [ImageAnalysis]. ImageAnalysis( @@ -26,7 +30,7 @@ class ImageAnalysis extends UseCase { : super.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager) { - _api = ImageAnalysisHostApiImpl( + _api = _ImageAnalysisHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); _api.createFromInstance(this, targetResolution); AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); @@ -40,17 +44,17 @@ class ImageAnalysis extends UseCase { : super.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager) { - _api = ImageAnalysisHostApiImpl( + _api = _ImageAnalysisHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - /// Stream that emits data whenever a frame is received for image streaming. - static final StreamController - onStreamedFrameAvailableStreamController = - StreamController.broadcast(); + // /// Stream that emits data whenever a frame is received for image streaming. + // static final StreamController + // onStreamedFrameAvailableStreamController = + // StreamController.broadcast(); - late final ImageAnalysisHostApiImpl _api; + late final _ImageAnalysisHostApiImpl _api; /// Target resolution of the camera preview stream. final ResolutionInfo? targetResolution; @@ -65,8 +69,8 @@ class ImageAnalysis extends UseCase { /// See [ImageAnalysisFlutterApiImpl.onImageAnalyzed] for the image /// information that is analyzed by the created ImageAnalysis.Analyzer /// instance. - Future setAnalyzer() async { - _api.setAnalyzerFromInstance(this); + Future setAnalyzer(ImageAnalysisAnalyzer analyzer) async { + _api.setAnalyzerFromInstance(this, analyzer); } /// Clears previously set analyzer for image streaming support. @@ -75,58 +79,79 @@ class ImageAnalysis extends UseCase { } } -/// Host API implementation of [ImageAnalysis]. -class ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { - /// Constructs a [ImageAnalysisHostApiImpl]. - ImageAnalysisHostApiImpl( - {this.binaryMessenger, InstanceManager? instanceManager}) { - this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; - } +class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { + _ImageAnalysisHostApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager, + super(binaryMessenger: binaryMessenger); - /// Receives binary data across the Flutter platform barrier. - /// - /// If it is null, the default BinaryMessenger will be used which routes to - /// the host platform. final BinaryMessenger? binaryMessenger; - /// Maintains instances stored to communicate with native language objects. - late final InstanceManager instanceManager; + final InstanceManager instanceManager; - /// Creates an [ImageAnalysis] instance with the specified target resolution. Future createFromInstance( - ImageAnalysis instance, ResolutionInfo? targetResolution) async { - final int identifier = instanceManager.addDartCreatedInstance(instance, - onCopy: (ImageAnalysis original) { - return ImageAnalysis.detached( + ImageAnalysis instance, + ResolutionInfo? targetResolution, + ) { + return create( + instanceManager.addDartCreatedInstance( + instance, + onCopy: (ImageAnalysis original) => ImageAnalysis.detached( + targetResolution: original.targetResolution, binaryMessenger: binaryMessenger, instanceManager: instanceManager, - targetResolution: original.targetResolution); - }); - create(identifier, targetResolution); + ), + ), + targetResolution == null + ? null + : instanceManager.getIdentifier(targetResolution)!, + ); } - /// Sets analyzer for the provided instance to support image streaming. - Future setAnalyzerFromInstance(ImageAnalysis instance) async { - final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No ImageAnalysis instance in the instance manager has been found.'); - - setAnalyzer(identifier!); + // StreamController attachOnStreamedFrameAvailableStreamControllerFromInstances( + // StreamController onStreamedFrameAvailableStreamController, + // ) { + // attachOnStreamedFrameAvailableStreamController( + // instanceManager.addDartCreatedInstance( + // onStreamedFrameAvailableStreamController, + // onCopy: (StreamController original) => StreamController.detached( + // // TODO(bparrishMines): This should include the missing params. + // binaryMessenger: binaryMessenger, + // instanceManager: instanceManager, + // ), + // ), + // ); + // return onStreamedFrameAvailableStreamController; + // } + + Future setAnalyzerFromInstance( + ImageAnalysis instance, + ImageAnalysisAnalyzer analyzer, + ) { + return setAnalyzer( + instanceManager.getIdentifier(instance)!, + instanceManager.getIdentifier(analyzer)!, + ); } - /// Clears analyzer of provide instance for image streaming support. - Future clearAnalyzerFromInstance(ImageAnalysis instance) async { - final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No ImageAnalysis instance in the instance manager has been found.'); - - clearAnalyzer(identifier!); + Future clearAnalyzerFromInstance( + ImageAnalysis instance, + ) { + return clearAnalyzer( + instanceManager.getIdentifier(instance)!, + ); } } -/// Flutter API implementation of [ImageAnalysis]. +/// Flutter API implementation for [ImageAnalysis]. +/// +/// This class may handle instantiating and adding Dart instances that are +/// attached to a native instance or receiving callback methods from an +/// overridden native class. +@protected class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { - /// Constructs a [ImageAnalysislutterApiImpl]. + /// Constructs a [ImageAnalysisFlutterApiImpl]. ImageAnalysisFlutterApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, @@ -142,42 +167,26 @@ class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { final InstanceManager instanceManager; @override - void onImageAnalyzed(ImageInformation imageInformation) { - // Parse image plane information. - final List imagePlanes = imageInformation - .imagePlanesInformation - .map((ImagePlaneInformation? imagePlaneInformation) { - return CameraImagePlane( - bytes: imagePlaneInformation!.bytes, - bytesPerRow: imagePlaneInformation.bytesPerRow, - bytesPerPixel: imagePlaneInformation.bytesPerPixel, - ); - }).toList(); - - // Parse general image information. - final CameraImageData data = CameraImageData( - format: CameraImageFormat( - _imageFormatGroupFromFormatCode(imageInformation.format), - raw: imageInformation.format), - planes: imagePlanes, - height: imageInformation.height, - width: imageInformation.width, + void create( + int identifier, + int? targetResolutionIdentifier, + ) { + instanceManager.addHostCreatedInstance( + ImageAnalysis.detached( + targetResolution: targetResolutionIdentifier == null + ? null + : instanceManager.getInstanceWithWeakReference( + targetResolutionIdentifier, + ), + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + identifier, + onCopy: (ImageAnalysis original) => ImageAnalysis.detached( + targetResolution: original.targetResolution, + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), ); - - // Add image information to stream for visibility by the plugin. - ImageAnalysis.onStreamedFrameAvailableStreamController.add(data); - } - - /// Converts Flutter supported image format codes to [ImageFormatGroup]. - /// - /// Note that for image analysis, CameraX only currently supports YUV_420_888. - ImageFormatGroup _imageFormatGroupFromFormatCode(int format) { - switch (format) { - case 35: // android.graphics.ImageFormat.YUV_420_888 - return ImageFormatGroup.yuv420; - case 256: // android.graphics.ImageFormat.JPEG - return ImageFormatGroup.jpeg; - } - return ImageFormatGroup.unknown; } } diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis_analyzer.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis_analyzer.dart new file mode 100644 index 000000000000..df01199176f6 --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis_analyzer.dart @@ -0,0 +1,136 @@ +// 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 'dart:async'; + +import 'package:camera_platform_interface/camera_platform_interface.dart' + show CameraImageData, CameraImageFormat, CameraImagePlane, ImageFormatGroup; +import 'package:flutter/services.dart' show BinaryMessenger; +import 'package:meta/meta.dart' show protected; +import 'package:simple_ast/annotations.dart'; + +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camerax_library.g.dart'; +import 'image_proxy.dart'; +import 'instance_manager.dart'; +import 'java_object.dart'; +import 'use_case.dart'; + +@SimpleClassAnnotation() +class ImageAnalysisAnalyzer extends JavaObject { + ImageAnalysisAnalyzer( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + required this.analyze}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = _ImageAnalysisAnalyzerHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + _api.createFromInstance(this); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + } + + ImageAnalysisAnalyzer.detached( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + required this.analyze}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = _ImageAnalysisAnalyzerHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + } + + late final _ImageAnalysisAnalyzerHostApiImpl _api; + + final void Function(ImageProxy imageProxy) analyze; +} + +class _ImageAnalysisAnalyzerHostApiImpl extends ImageAnalysisAnalyzerHostApi { + _ImageAnalysisAnalyzerHostApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager, + super(binaryMessenger: binaryMessenger); + + final BinaryMessenger? binaryMessenger; + + final InstanceManager instanceManager; + + Future createFromInstance( + ImageAnalysisAnalyzer instance, + ) { + return create( + instanceManager.addDartCreatedInstance( + instance, + onCopy: (ImageAnalysisAnalyzer original) => + ImageAnalysisAnalyzer.detached( + analyze: original.analyze, + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + ), + ); + } +} + +/// Flutter API implementation for [ImageAnalysisAnalyzer]. +/// +/// This class may handle instantiating and adding Dart instances that are +/// attached to a native instance or receiving callback methods from an +/// overridden native class. +@protected +class ImageAnalysisAnalyzerFlutterApiImpl + implements ImageAnalysisAnalyzerFlutterApi { + /// Constructs a [ImageAnalysisAnalyzerFlutterApiImpl]. + ImageAnalysisAnalyzerFlutterApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + + /// Receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used which routes to + /// the host platform. + final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + final InstanceManager instanceManager; + + @override + void create( + int identifier, + ) { + instanceManager.addHostCreatedInstance( + ImageAnalysisAnalyzer.detached( + analyze: (ImageProxy imageProxy) {}, + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + identifier, + onCopy: (ImageAnalysisAnalyzer original) => + ImageAnalysisAnalyzer.detached( + analyze: original.analyze, + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + ); + } + + @override + void analyze( + int identifier, + int imageProxyIdentifier, + ) { + final ImageAnalysisAnalyzer instance = + instanceManager.getInstanceWithWeakReference(identifier)!; + final ImageProxy imageProxy = instanceManager.getInstanceWithWeakReference(imageProxyIdentifier)!; + return instance.analyze( + imageProxy, + + ); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart new file mode 100644 index 000000000000..7f9655e09b77 --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart @@ -0,0 +1,147 @@ +// 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 'dart:async'; + +import 'package:camera_platform_interface/camera_platform_interface.dart' + show CameraImageData, CameraImageFormat, CameraImagePlane, ImageFormatGroup; +import 'package:flutter/services.dart' show BinaryMessenger; +import 'package:meta/meta.dart' show protected; +import 'package:simple_ast/annotations.dart'; + +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camerax_library.g.dart'; +import 'image_proxy_plane_proxy.dart'; +import 'instance_manager.dart'; +import 'java_object.dart'; +import 'use_case.dart'; + +@SimpleClassAnnotation() +class ImageProxy extends JavaObject { +// ImageProxyPlaneProxy( +// {BinaryMessenger? binaryMessenger, +// InstanceManager? instanceManager}) +// : super.detached( +// binaryMessenger: binaryMessenger, +// instanceManager: instanceManager) { +// _api = ImageProxyPlaneProxyHostApiImpl( +// binaryMessenger: binaryMessenger, instanceManager: instanceManager); +// _api.createFromInstance(this); +// AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); +// } + + ImageProxy.detached( + {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = _ImageProxyHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + } + + late final _ImageProxyHostApiImpl _api; + + Future> getPlanes() {} + + Future getFormat() {} + + Future getHeight() {} + + Future getWidth() {} + + Future close() {} +} + +class _ImageProxyHostApiImpl extends ImageProxyHostApi { + _ImageProxyHostApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager, + super(binaryMessenger: binaryMessenger); + + final BinaryMessenger? binaryMessenger; + + final InstanceManager instanceManager; + + Future> getPlanesFromInstances( + ImageProxy instance, + ) { + return getPlanes( + instanceManager.getIdentifier(instance)!, + ); + } + + Future getFormatFromInstances( + ImageProxy instance, + ) { + return getFormat( + instanceManager.getIdentifier(instance)!, + ); + } + + Future getHeightFromInstances( + ImageProxy instance, + ) { + return getHeight( + instanceManager.getIdentifier(instance)!, + ); + } + + Future getWidthFromInstances( + ImageProxy instance, + ) { + return getWidth( + instanceManager.getIdentifier(instance)!, + ); + } + + Future closeFromInstances( + ImageProxy instance, + ) { + return close( + instanceManager.getIdentifier(instance)!, + ); + } +} + +/// Flutter API implementation for [ImageProxy]. +/// +/// This class may handle instantiating and adding Dart instances that are +/// attached to a native instance or receiving callback methods from an +/// overridden native class. +@protected +class ImageProxyFlutterApiImpl implements ImageProxyFlutterApi { + /// Constructs a [ImageProxyFlutterApiImpl]. + ImageProxyFlutterApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + + /// Receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used which routes to + /// the host platform. + final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + final InstanceManager instanceManager; + + @override + void create( + int identifier, + ) { + instanceManager.addHostCreatedInstance( + ImageProxy.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + identifier, + onCopy: (ImageProxy original) => ImageProxy.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + ); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/image_proxy_plane_proxy.dart b/packages/camera/camera_android_camerax/lib/src/image_proxy_plane_proxy.dart new file mode 100644 index 000000000000..b7f277877bc3 --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/image_proxy_plane_proxy.dart @@ -0,0 +1,129 @@ +// 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 'dart:async'; +import 'dart:typed_data'; + +import 'package:camera_platform_interface/camera_platform_interface.dart' + show CameraImageData, CameraImageFormat, CameraImagePlane, ImageFormatGroup; +import 'package:flutter/services.dart' show BinaryMessenger; +import 'package:meta/meta.dart' show protected; +import 'package:simple_ast/annotations.dart'; + +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camerax_library.g.dart'; +import 'instance_manager.dart'; +import 'java_object.dart'; +import 'use_case.dart'; + +@SimpleClassAnnotation() +class ImageProxyPlaneProxy extends JavaObject { +// ImageProxyPlaneProxy( +// {BinaryMessenger? binaryMessenger, +// InstanceManager? instanceManager}) +// : super.detached( +// binaryMessenger: binaryMessenger, +// instanceManager: instanceManager) { +// _api = ImageProxyPlaneProxyHostApiImpl( +// binaryMessenger: binaryMessenger, instanceManager: instanceManager); +// _api.createFromInstance(this); +// AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); +// } + + ImageProxyPlaneProxy.detached( + {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = _ImageProxyPlaneProxyHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + } + + late final _ImageProxyPlaneProxyHostApiImpl _api; + + Future getBuffer() {} + + Future getPixelStride() {} + + Future getRowStride() {} +} + +class _ImageProxyPlaneProxyHostApiImpl extends ImageProxyPlaneProxyHostApi { + _ImageProxyPlaneProxyHostApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager, + super(binaryMessenger: binaryMessenger); + + final BinaryMessenger? binaryMessenger; + + final InstanceManager instanceManager; + + Future getPixelStrideFromInstance( + ImageProxyPlaneProxy instance, + ) { + return getPixelStride( + instanceManager.getIdentifier(instance)!, + ); + } + + Future getBufferFromInstance( + ImageProxyPlaneProxy instance, + ) { + return getBuffer( + instanceManager.getIdentifier(instance)!, + ); + } + + Future getRowStrideFromInstance( + ImageProxyPlaneProxy instance, + ) async { + return getRowStride( + instanceManager.getIdentifier(instance)!, + ); + } + +} + +/// Flutter API implementation for [ImageProxyPlaneProxy]. +/// +/// This class may handle instantiating and adding Dart instances that are +/// attached to a native instance or receiving callback methods from an +/// overridden native class. +@protected +class ImageProxyPlaneProxyFlutterApiImpl + implements ImageProxyPlaneProxyFlutterApi { + /// Constructs a [ImageProxyPlaneProxyFlutterApiImpl]. + ImageProxyPlaneProxyFlutterApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + + /// Receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used which routes to + /// the host platform. + final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + final InstanceManager instanceManager; + + @override + void create( + int identifier, + ) { + instanceManager.addHostCreatedInstance( + ImageProxyPlaneProxy.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + identifier, + onCopy: (ImageProxyPlaneProxy original) => ImageProxyPlaneProxy.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + ); + } +} diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index be46cb5d78b8..48fdeabc3daf 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -178,16 +178,164 @@ abstract class ImageCaptureHostApi { String takePicture(int identifier); } +// @HostApi(dartHostTestHandler: 'TestImageAnalysisHostApi') +// abstract class ImageAnalysisHostApi { +// void create(int identifier, ResolutionInfo? targetResolution); + +// void setAnalyzer(int identifier); + +// void clearAnalyzer(int identifier); +// } + +// @FlutterApi() +// abstract class ImageAnalysisFlutterApi { +// void onImageAnalyzed(ImageInformation imageInformation); +// } + +@HostApi(dartHostTestHandler: 'TestImageAnalysisAnalyzerHostApi') +abstract class ImageAnalysisAnalyzerHostApi { + void create(int identifier); + +} + +@FlutterApi() +abstract class ImageAnalysisAnalyzerFlutterApi { + /// Create a new Dart instance and add it to the `InstanceManager`. + + void create( + int identifier, + + ); + + /// Callback to Dart function `ImageAnalysisAnalyzer.analyze`. + + void analyze( + int identifier, + int imageProxyIdentifier, + + ); +} + +@HostApi(dartHostTestHandler: 'TestImageProxyHostApi') +abstract class ImageProxyHostApi { + + /// Handles Dart method `ImageProxy.getPlanes`. + + List getPlanes( + int identifier, + + ); + + /// Handles Dart method `ImageProxy.getFormat`. + + int getFormat( + int identifier, + + ); + + /// Handles Dart method `ImageProxy.getHeight`. + + int getHeight( + int identifier, + + ); + + /// Handles Dart method `ImageProxy.getWidth`. + + int getWidth( + int identifier, + + ); + + /// Handles Dart method `ImageProxy.close`. + + void close( + int identifier, + + ); + +} + +@FlutterApi() +abstract class ImageProxyFlutterApi { + /// Create a new Dart instance and add it to the `InstanceManager`. + + void create( + int identifier, + + ); + +} + @HostApi(dartHostTestHandler: 'TestImageAnalysisHostApi') abstract class ImageAnalysisHostApi { - void create(int identifier, ResolutionInfo? targetResolution); - void setAnalyzer(int identifier); + /// Create a new native instance and add it to the `InstanceManager`. + + void create( + int identifier, + + int? targetResolutionIdentifier, + + ); + + // /// Handles attaching `ImageAnalysis.onStreamedFrameAvailableStreamController` to a native instance. + + // void attachOnStreamedFrameAvailableStreamController( + + // int onStreamedFrameAvailableStreamControllerIdentifier, + // ); + + /// Handles Dart method `ImageAnalysis.setAnalyzer`. + + void setAnalyzer( + int identifier, + + int analyzerIdentifier, + + ); + + /// Handles Dart method `ImageAnalysis.clearAnalyzer`. - void clearAnalyzer(int identifier); + void clearAnalyzer( + int identifier, + + ); + +} + +@HostApi(dartHostTestHandler: 'TestImageProxyPlaneProxyHostApi') +abstract class ImageProxyPlaneProxyHostApi { + + /// Handles Dart method `ImageProxyPlaneProxy.getPixelStride`. + + int getPixelStride( + int identifier, + + ); + + /// Handles Dart method `ImageProxyPlaneProxy.getRowStride`. + + Uint8List getBuffer( + int identifier, + + ); + + /// Handles Dart method `ImageProxyPlaneProxy.getRowStride`. + + int getRowStride( + int identifier, + + ); } @FlutterApi() -abstract class ImageAnalysisFlutterApi { - void onImageAnalyzed(ImageInformation imageInformation); +abstract class ImageProxyPlaneProxyFlutterApi { + /// Create a new Dart instance and add it to the `InstanceManager`. + + void create( + int identifier, + + ); + } diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index 764b057f03d9..7d09053727dc 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -23,12 +23,29 @@ dependencies: sdk: flutter integration_test: sdk: flutter + simple_ast: + git: + url: git@github.com:bparrishMines/penguin.git + path: packages/simple_ast stream_transform: ^2.1.0 dev_dependencies: async: ^2.5.0 - build_runner: ^2.1.4 + build_runner: ^2.2.0 + code_template_processor: + git: + url: git@github.com:bparrishMines/penguin.git + path: packages/code_template_processor flutter_test: sdk: flutter - mockito: 5.3.2 + gen_api_impls: + git: + url: git@github.com:bparrishMines/penguin.git + path: packages/gen_api_impls + mockito: ^5.3.2 + pedantic: ^1.10.0 pigeon: ^9.1.0 + simple_ast_generator: + git: + url: git@github.com:bparrishMines/penguin.git + path: packages/simple_ast_generator diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart index 1905ec06086f..99e73c35c177 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.3.2 from annotations +// Mocks generated by Mockito 5.4.0 from annotations // in camera_android_camerax/test/android_camera_camerax_test.dart. // Do not manually edit this file. @@ -10,11 +10,13 @@ import 'package:camera_android_camerax/src/camera_info.dart' as _i8; import 'package:camera_android_camerax/src/camera_selector.dart' as _i10; import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i3; import 'package:camera_android_camerax/src/image_analysis.dart' as _i11; -import 'package:camera_android_camerax/src/image_capture.dart' as _i12; -import 'package:camera_android_camerax/src/preview.dart' as _i13; +import 'package:camera_android_camerax/src/image_analysis_analyzer.dart' + as _i12; +import 'package:camera_android_camerax/src/image_capture.dart' as _i13; +import 'package:camera_android_camerax/src/preview.dart' as _i14; import 'package:camera_android_camerax/src/process_camera_provider.dart' - as _i14; -import 'package:camera_android_camerax/src/use_case.dart' as _i15; + as _i15; +import 'package:camera_android_camerax/src/use_case.dart' as _i16; import 'package:camera_platform_interface/camera_platform_interface.dart' as _i2; import 'package:flutter/foundation.dart' as _i7; @@ -191,10 +193,11 @@ class MockCameraSelector extends _i1.Mock implements _i10.CameraSelector { /// See the documentation for Mockito's code generation for more information. class MockImageAnalysis extends _i1.Mock implements _i11.ImageAnalysis { @override - _i9.Future setAnalyzer() => (super.noSuchMethod( + _i9.Future setAnalyzer(_i12.ImageAnalysisAnalyzer? analyzer) => + (super.noSuchMethod( Invocation.method( #setAnalyzer, - [], + [analyzer], ), returnValue: _i9.Future.value(), returnValueForMissingStub: _i9.Future.value(), @@ -213,7 +216,7 @@ class MockImageAnalysis extends _i1.Mock implements _i11.ImageAnalysis { /// A class which mocks [ImageCapture]. /// /// See the documentation for Mockito's code generation for more information. -class MockImageCapture extends _i1.Mock implements _i12.ImageCapture { +class MockImageCapture extends _i1.Mock implements _i13.ImageCapture { @override _i9.Future setFlashMode(int? newFlashMode) => (super.noSuchMethod( Invocation.method( @@ -237,7 +240,7 @@ class MockImageCapture extends _i1.Mock implements _i12.ImageCapture { /// A class which mocks [Preview]. /// /// See the documentation for Mockito's code generation for more information. -class MockPreview extends _i1.Mock implements _i13.Preview { +class MockPreview extends _i1.Mock implements _i14.Preview { @override _i9.Future setSurfaceProvider() => (super.noSuchMethod( Invocation.method( @@ -283,7 +286,7 @@ class MockPreview extends _i1.Mock implements _i13.Preview { /// /// See the documentation for Mockito's code generation for more information. class MockProcessCameraProvider extends _i1.Mock - implements _i14.ProcessCameraProvider { + implements _i15.ProcessCameraProvider { @override _i9.Future> getAvailableCameraInfos() => (super.noSuchMethod( @@ -298,7 +301,7 @@ class MockProcessCameraProvider extends _i1.Mock @override _i9.Future<_i4.Camera> bindToLifecycle( _i10.CameraSelector? cameraSelector, - List<_i15.UseCase>? useCases, + List<_i16.UseCase>? useCases, ) => (super.noSuchMethod( Invocation.method( @@ -330,7 +333,7 @@ class MockProcessCameraProvider extends _i1.Mock )), ) as _i9.Future<_i4.Camera>); @override - _i9.Future isBound(_i15.UseCase? useCase) => (super.noSuchMethod( + _i9.Future isBound(_i16.UseCase? useCase) => (super.noSuchMethod( Invocation.method( #isBound, [useCase], @@ -339,7 +342,7 @@ class MockProcessCameraProvider extends _i1.Mock returnValueForMissingStub: _i9.Future.value(false), ) as _i9.Future); @override - void unbind(List<_i15.UseCase>? useCases) => super.noSuchMethod( + void unbind(List<_i16.UseCase>? useCases) => super.noSuchMethod( Invocation.method( #unbind, [useCases], @@ -403,7 +406,7 @@ class MockBuildContext extends _i1.Mock implements _i5.BuildContext { ), ) as _i5.InheritedWidget); @override - void visitAncestorElements(bool Function(_i5.Element)? visitor) => + void visitAncestorElements(_i5.ConditionalElementVisitor? visitor) => super.noSuchMethod( Invocation.method( #visitAncestorElements, diff --git a/packages/camera/camera_android_camerax/test/camera_info_test.mocks.dart b/packages/camera/camera_android_camerax/test/camera_info_test.mocks.dart index 896bbc4a209a..3c153337bfa6 100644 --- a/packages/camera/camera_android_camerax/test/camera_info_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/camera_info_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.3.2 from annotations +// Mocks generated by Mockito 5.4.0 from annotations // in camera_android_camerax/test/camera_info_test.dart. // Do not manually edit this file. diff --git a/packages/camera/camera_android_camerax/test/camera_selector_test.mocks.dart b/packages/camera/camera_android_camerax/test/camera_selector_test.mocks.dart index 627aba8c55f2..3b8bc4ad0b06 100644 --- a/packages/camera/camera_android_camerax/test/camera_selector_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/camera_selector_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.3.2 from annotations +// Mocks generated by Mockito 5.4.0 from annotations // in camera_android_camerax/test/camera_selector_test.dart. // Do not manually edit this file. diff --git a/packages/camera/camera_android_camerax/test/image_analysis_analyzer_test.gen_api_impls.dart b/packages/camera/camera_android_camerax/test/image_analysis_analyzer_test.gen_api_impls.dart new file mode 100644 index 000000000000..4bc9d0ac70d3 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/image_analysis_analyzer_test.gen_api_impls.dart @@ -0,0 +1,114 @@ +// 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 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; + +import 'image_analysis_analyzer_test.mocks.dart'; + +// TODO(bparrishMines): Move desired test implementations to test file or +// remove .gen_api_impls from filename and follow todos below +// TODO(bparrishMines): Import generated pigeon files (the one in lib and test) +// TODO(bparrishMines): Run build runner + +@GenerateMocks( + [TestImageAnalysisAnalyzerHostApi, TestInstanceManagerHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ImageAnalysisAnalyzer', () { + setUp(() {}); + + tearDown(() { + TestImageAnalysisAnalyzerHostApi.setup(null); + TestInstanceManagerHostApi.setup(null); + }); + + test('HostApi create', () { + final MockTestImageAnalysisAnalyzerHostApi mockApi = + MockTestImageAnalysisAnalyzerHostApi(); + TestImageAnalysisAnalyzerHostApi.setup(mockApi); + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageAnalysisAnalyzer instance = ImageAnalysisAnalyzer( + instanceManager: instanceManager, + ); + + verify(mockApi.create( + instanceManager.getIdentifier(instance), + )); + }); + + test('FlutterAPI create', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageAnalysisAnalyzerFlutterApiImpl api = + ImageAnalysisAnalyzerFlutterApiImpl( + instanceManager: instanceManager, + ); + + const int instanceIdentifier = 0; + + api.create( + instanceIdentifier, + ); + + expect( + instanceManager.getInstanceWithWeakReference(instanceIdentifier), + isA(), + ); + }); + + test('analyze', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + const int instanceIdentifier = 0; + late final List callbackParameters; + final ImageAnalysisAnalyzer instance = ImageAnalysisAnalyzer.detached( + analyze: ( + ImageAnalysisAnalyzer instance, + ) { + callbackParameters = [ + instance, + ]; + }, + binaryMessenger: null, + instanceManager: instanceManager, + ); + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (ImageAnalysisAnalyzer original) => + ImageAnalysisAnalyzer.detached( + analyze: original.analyze, + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + final ImageAnalysisAnalyzerFlutterApiImpl flutterApi = + ImageAnalysisAnalyzerFlutterApiImpl( + instanceManager: instanceManager, + ); + + flutterApi.analyze( + instanceIdentifier, + ); + + expect(callbackParameters, [ + instance, + ]); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/image_analysis_test.gen_api_impls.dart b/packages/camera/camera_android_camerax/test/image_analysis_test.gen_api_impls.dart new file mode 100644 index 000000000000..d92e045b858f --- /dev/null +++ b/packages/camera/camera_android_camerax/test/image_analysis_test.gen_api_impls.dart @@ -0,0 +1,197 @@ +// 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 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; + +import 'image_analysis_test.mocks.dart'; + +// TODO(bparrishMines): Move desired test implementations to test file or +// remove .gen_api_impls from filename and follow todos below +// TODO(bparrishMines): Import generated pigeon files (the one in lib and test) +// TODO(bparrishMines): Run build runner + +@GenerateMocks([TestImageAnalysisHostApi, TestInstanceManagerHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ImageAnalysis', () { + setUp(() {}); + + tearDown(() { + TestImageAnalysisHostApi.setup(null); + TestInstanceManagerHostApi.setup(null); + }); + + test('HostApi create', () { + final MockTestImageAnalysisHostApi mockApi = + MockTestImageAnalysisHostApi(); + TestImageAnalysisHostApi.setup(mockApi); + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ResolutionInfo targetResolution = ResolutionInfo.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int targetResolutionIdentifier = 11; + instanceManager.addHostCreatedInstance( + targetResolution, + targetResolutionIdentifier, + onCopy: (_) => ResolutionInfo.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + final ImageAnalysis instance = ImageAnalysis( + targetResolution: targetResolution, + instanceManager: instanceManager, + ); + + verify(mockApi.create( + instanceManager.getIdentifier(instance), + targetResolutionIdentifier, + )); + }); + + test('onStreamedFrameAvailableStreamController', () { + final MockTestImageAnalysisHostApi mockApi = + MockTestImageAnalysisHostApi(); + TestImageAnalysisHostApi.setup(mockApi); + + final StreamController onStreamedFrameAvailableStreamController = + ImageAnalysis.onStreamedFrameAvailableStreamController; + + verify(mockApi.attachOnStreamedFrameAvailableStreamController( + JavaObject.globalInstanceManager + .getIdentifier(onStreamedFrameAvailableStreamController), + )); + }); + + test('setAnalyzer', () async { + final MockTestImageAnalysisHostApi mockApi = + MockTestImageAnalysisHostApi(); + TestImageAnalysisHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageAnalysis instance = ImageAnalysis.detached( + targetResolution: ResolutionInfo.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + ), + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (ImageAnalysis original) => ImageAnalysis.detached( + targetResolution: original.targetResolution, + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + final ImageAnalysisAnalyzer analyzer = ImageAnalysisAnalyzer.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int analyzerIdentifier = 10; + instanceManager.addHostCreatedInstance( + analyzer, + analyzerIdentifier, + onCopy: (_) => ImageAnalysisAnalyzer.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + await instance.setAnalyzer( + analyzer, + ); + + verify(mockApi.setAnalyzer( + instanceIdentifier, + analyzerIdentifier, + )); + }); + + test('clearAnalyzer', () async { + final MockTestImageAnalysisHostApi mockApi = + MockTestImageAnalysisHostApi(); + TestImageAnalysisHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageAnalysis instance = ImageAnalysis.detached( + targetResolution: ResolutionInfo.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + ), + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (ImageAnalysis original) => ImageAnalysis.detached( + targetResolution: original.targetResolution, + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + await instance.clearAnalyzer(); + + verify(mockApi.clearAnalyzer( + instanceIdentifier, + )); + }); + + test('FlutterAPI create', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageAnalysisFlutterApiImpl api = ImageAnalysisFlutterApiImpl( + instanceManager: instanceManager, + ); + + const int instanceIdentifier = 0; + + api.create( + instanceIdentifier, + targetResolution: ResolutionInfo.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + expect( + instanceManager.getInstanceWithWeakReference(instanceIdentifier), + isA(), + ); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/image_analysis_test.mocks.dart b/packages/camera/camera_android_camerax/test/image_analysis_test.mocks.dart index 46aabdffabf3..e570aabdcb74 100644 --- a/packages/camera/camera_android_camerax/test/image_analysis_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/image_analysis_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.3.2 from annotations +// Mocks generated by Mockito 5.4.0 from annotations // in camera_android_camerax/test/image_analysis_test.dart. // Do not manually edit this file. diff --git a/packages/camera/camera_android_camerax/test/image_capture_test.mocks.dart b/packages/camera/camera_android_camerax/test/image_capture_test.mocks.dart index 1dc8a28ecde8..63761d80b88f 100644 --- a/packages/camera/camera_android_camerax/test/image_capture_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/image_capture_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.3.2 from annotations +// Mocks generated by Mockito 5.4.0 from annotations // in camera_android_camerax/test/image_capture_test.dart. // Do not manually edit this file. diff --git a/packages/camera/camera_android_camerax/test/image_proxy_plane_proxy_test.gen_api_impls.dart b/packages/camera/camera_android_camerax/test/image_proxy_plane_proxy_test.gen_api_impls.dart new file mode 100644 index 000000000000..8d19cc123c4b --- /dev/null +++ b/packages/camera/camera_android_camerax/test/image_proxy_plane_proxy_test.gen_api_impls.dart @@ -0,0 +1,182 @@ +// 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 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; + +import 'image_proxy_plane_proxy_test.mocks.dart'; + +// TODO(bparrishMines): Move desired test implementations to test file or +// remove .gen_api_impls from filename and follow todos below +// TODO(bparrishMines): Import generated pigeon files (the one in lib and test) +// TODO(bparrishMines): Run build runner + +@GenerateMocks( + [TestImageProxyPlaneProxyHostApi, TestInstanceManagerHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ImageProxyPlaneProxy', () { + setUp(() {}); + + tearDown(() { + TestImageProxyPlaneProxyHostApi.setup(null); + TestInstanceManagerHostApi.setup(null); + }); + + test('getRowStride', () async { + final MockTestImageProxyPlaneProxyHostApi mockApi = + MockTestImageProxyPlaneProxyHostApi(); + TestImageProxyPlaneProxyHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageProxyPlaneProxy instance = ImageProxyPlaneProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (ImageProxyPlaneProxy original) => + ImageProxyPlaneProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + final dynamic result = dynamic.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int resultIdentifier = 1; + instanceManager.addHostCreatedInstance( + result, + resultIdentifier, + onCopy: (dynamic original) { + return dynamic.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + ); + }, + ); + when(mockApi.getRowStride( + instanceIdentifier, + )).thenAnswer((_) { + return Future.value(resultIdentifier); + }); + + expect(await instance.getRowStride(), result); + + verify(mockApi.getRowStride( + instanceIdentifier, + )); + }); + + test('getPixelStride', () async { + final MockTestImageProxyPlaneProxyHostApi mockApi = + MockTestImageProxyPlaneProxyHostApi(); + TestImageProxyPlaneProxyHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageProxyPlaneProxy instance = ImageProxyPlaneProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (ImageProxyPlaneProxy original) => + ImageProxyPlaneProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + final int result = 0; + when(mockApi.getPixelStride( + instanceIdentifier, + )).thenAnswer((_) { + return Future.value(result); + }); + + expect(await instance.getPixelStride(), result); + + verify(mockApi.getPixelStride( + instanceIdentifier, + )); + }); + + test('getRowStride', () async { + final MockTestImageProxyPlaneProxyHostApi mockApi = + MockTestImageProxyPlaneProxyHostApi(); + TestImageProxyPlaneProxyHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageProxyPlaneProxy instance = ImageProxyPlaneProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (ImageProxyPlaneProxy original) => + ImageProxyPlaneProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + final int result = 0; + when(mockApi.getRowStride( + instanceIdentifier, + )).thenAnswer((_) { + return Future.value(result); + }); + + expect(await instance.getRowStride(), result); + + verify(mockApi.getRowStride( + instanceIdentifier, + )); + }); + + test('FlutterAPI create', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageProxyPlaneProxyFlutterApiImpl api = + ImageProxyPlaneProxyFlutterApiImpl( + instanceManager: instanceManager, + ); + + const int instanceIdentifier = 0; + + api.create( + instanceIdentifier, + ); + + expect( + instanceManager.getInstanceWithWeakReference(instanceIdentifier), + isA(), + ); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/image_proxy_test.gen_api_impls.dart b/packages/camera/camera_android_camerax/test/image_proxy_test.gen_api_impls.dart new file mode 100644 index 000000000000..8b48a9eb9d27 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/image_proxy_test.gen_api_impls.dart @@ -0,0 +1,223 @@ +// 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 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; + +import 'image_proxy_test.mocks.dart'; + +// TODO(bparrishMines): Move desired test implementations to test file or +// remove .gen_api_impls from filename and follow todos below +// TODO(bparrishMines): Import generated pigeon files (the one in lib and test) +// TODO(bparrishMines): Run build runner + +@GenerateMocks([TestImageProxyHostApi, TestInstanceManagerHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ImageProxy', () { + setUp(() {}); + + tearDown(() { + TestImageProxyHostApi.setup(null); + TestInstanceManagerHostApi.setup(null); + }); + + test('getPlanes', () async { + final MockTestImageProxyHostApi mockApi = MockTestImageProxyHostApi(); + TestImageProxyHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageProxy instance = ImageProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (ImageProxy original) => ImageProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + final List result = []; + when(mockApi.getPlanes( + instanceIdentifier, + )).thenAnswer((_) { + return Future.value(result); + }); + + expect(await instance.getPlanes(), result); + + verify(mockApi.getPlanes( + instanceIdentifier, + )); + }); + + test('getFormat', () async { + final MockTestImageProxyHostApi mockApi = MockTestImageProxyHostApi(); + TestImageProxyHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageProxy instance = ImageProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (ImageProxy original) => ImageProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + final int result = 0; + when(mockApi.getFormat( + instanceIdentifier, + )).thenAnswer((_) { + return Future.value(result); + }); + + expect(await instance.getFormat(), result); + + verify(mockApi.getFormat( + instanceIdentifier, + )); + }); + + test('getHeight', () async { + final MockTestImageProxyHostApi mockApi = MockTestImageProxyHostApi(); + TestImageProxyHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageProxy instance = ImageProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (ImageProxy original) => ImageProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + final int result = 0; + when(mockApi.getHeight( + instanceIdentifier, + )).thenAnswer((_) { + return Future.value(result); + }); + + expect(await instance.getHeight(), result); + + verify(mockApi.getHeight( + instanceIdentifier, + )); + }); + + test('getWidth', () async { + final MockTestImageProxyHostApi mockApi = MockTestImageProxyHostApi(); + TestImageProxyHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageProxy instance = ImageProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (ImageProxy original) => ImageProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + final int result = 0; + when(mockApi.getWidth( + instanceIdentifier, + )).thenAnswer((_) { + return Future.value(result); + }); + + expect(await instance.getWidth(), result); + + verify(mockApi.getWidth( + instanceIdentifier, + )); + }); + + test('close', () async { + final MockTestImageProxyHostApi mockApi = MockTestImageProxyHostApi(); + TestImageProxyHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageProxy instance = ImageProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (ImageProxy original) => ImageProxy.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + await instance.close(); + + verify(mockApi.close( + instanceIdentifier, + )); + }); + + test('FlutterAPI create', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final ImageProxyFlutterApiImpl api = ImageProxyFlutterApiImpl( + instanceManager: instanceManager, + ); + + const int instanceIdentifier = 0; + + api.create( + instanceIdentifier, + ); + + expect( + instanceManager.getInstanceWithWeakReference(instanceIdentifier), + isA(), + ); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/preview_test.mocks.dart b/packages/camera/camera_android_camerax/test/preview_test.mocks.dart index fe3bdb89addd..467f4dc2978d 100644 --- a/packages/camera/camera_android_camerax/test/preview_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/preview_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.3.2 from annotations +// Mocks generated by Mockito 5.4.0 from annotations // in camera_android_camerax/test/preview_test.dart. // Do not manually edit this file. diff --git a/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart b/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart index 68b0c0a9f450..62d3de7cbfd2 100644 --- a/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.3.2 from annotations +// Mocks generated by Mockito 5.4.0 from annotations // in camera_android_camerax/test/process_camera_provider_test.dart. // Do not manually edit this file. diff --git a/packages/camera/camera_android_camerax/test/system_services_test.mocks.dart b/packages/camera/camera_android_camerax/test/system_services_test.mocks.dart index 27d5b016c94b..cb0acdaba0ba 100644 --- a/packages/camera/camera_android_camerax/test/system_services_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/system_services_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.3.2 from annotations +// Mocks generated by Mockito 5.4.0 from annotations // in camera_android_camerax/test/system_services_test.dart. // Do not manually edit this file. diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index 0915f61ab111..029616560eb7 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -21,8 +21,7 @@ abstract class TestInstanceManagerHostApi { /// This is typically only used after a hot restart. void clear(); - static void setup(TestInstanceManagerHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestInstanceManagerHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, @@ -45,8 +44,7 @@ abstract class TestJavaObjectHostApi { void dispose(int identifier); - static void setup(TestJavaObjectHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestJavaObjectHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, @@ -56,7 +54,7 @@ abstract class TestJavaObjectHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -74,19 +72,17 @@ abstract class TestCameraInfoHostApi { int getSensorRotationDegrees(int identifier); - static void setup(TestCameraInfoHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraInfoHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', - codec, + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -106,8 +102,7 @@ abstract class TestCameraSelectorHostApi { List filter(int identifier, List cameraInfoIds); - static void setup(TestCameraSelectorHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraSelectorHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, @@ -117,7 +112,7 @@ abstract class TestCameraSelectorHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -137,17 +132,15 @@ abstract class TestCameraSelectorHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); - final List? arg_cameraInfoIds = - (args[1] as List?)?.cast(); + final List? arg_cameraInfoIds = (args[1] as List?)?.cast(); assert(arg_cameraInfoIds != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); - final List output = - api.filter(arg_identifier!, arg_cameraInfoIds!); + final List output = api.filter(arg_identifier!, arg_cameraInfoIds!); return [output]; }); } @@ -162,8 +155,7 @@ abstract class TestProcessCameraProviderHostApi { List getAvailableCameraInfos(int identifier); - int bindToLifecycle( - int identifier, int cameraSelectorIdentifier, List useCaseIds); + int bindToLifecycle(int identifier, int cameraSelectorIdentifier, List useCaseIds); bool isBound(int identifier, int useCaseIdentifier); @@ -171,8 +163,7 @@ abstract class TestProcessCameraProviderHostApi { void unbindAll(int identifier); - static void setup(TestProcessCameraProviderHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestProcessCameraProviderHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, @@ -189,36 +180,33 @@ abstract class TestProcessCameraProviderHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', - codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); - final List output = - api.getAvailableCameraInfos(arg_identifier!); + final List output = api.getAvailableCameraInfos(arg_identifier!); return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', - codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -226,12 +214,10 @@ abstract class TestProcessCameraProviderHostApi { final int? arg_cameraSelectorIdentifier = (args[1] as int?); assert(arg_cameraSelectorIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); - final List? arg_useCaseIds = - (args[2] as List?)?.cast(); + final List? arg_useCaseIds = (args[2] as List?)?.cast(); assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null List.'); - final int output = api.bindToLifecycle( - arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); + final int output = api.bindToLifecycle(arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); return [output]; }); } @@ -245,7 +231,7 @@ abstract class TestProcessCameraProviderHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -253,8 +239,7 @@ abstract class TestProcessCameraProviderHostApi { final int? arg_useCaseIdentifier = (args[1] as int?); assert(arg_useCaseIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); - final bool output = - api.isBound(arg_identifier!, arg_useCaseIdentifier!); + final bool output = api.isBound(arg_identifier!, arg_useCaseIdentifier!); return [output]; }); } @@ -268,13 +253,12 @@ abstract class TestProcessCameraProviderHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null int.'); - final List? arg_useCaseIds = - (args[1] as List?)?.cast(); + final List? arg_useCaseIds = (args[1] as List?)?.cast(); assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null List.'); api.unbind(arg_identifier!, arg_useCaseIds!); @@ -291,7 +275,7 @@ abstract class TestProcessCameraProviderHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -319,7 +303,7 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -330,48 +314,42 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { abstract class TestSystemServicesHostApi { static const MessageCodec codec = _TestSystemServicesHostApiCodec(); - Future requestCameraPermissions( - bool enableAudio); + Future requestCameraPermissions(bool enableAudio); - void startListeningForDeviceOrientationChange( - bool isFrontFacing, int sensorOrientation); + void startListeningForDeviceOrientationChange(bool isFrontFacing, int sensorOrientation); void stopListeningForDeviceOrientationChange(); - static void setup(TestSystemServicesHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestSystemServicesHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); final List args = (message as List?)!; final bool? arg_enableAudio = (args[0] as bool?); assert(arg_enableAudio != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null, expected non-null bool.'); - final CameraPermissionsErrorData? output = - await api.requestCameraPermissions(arg_enableAudio!); + final CameraPermissionsErrorData? output = await api.requestCameraPermissions(arg_enableAudio!); return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); final List args = (message as List?)!; final bool? arg_isFrontFacing = (args[0] as bool?); assert(arg_isFrontFacing != null, @@ -379,16 +357,14 @@ abstract class TestSystemServicesHostApi { final int? arg_sensorOrientation = (args[1] as int?); assert(arg_sensorOrientation != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null int.'); - api.startListeningForDeviceOrientationChange( - arg_isFrontFacing!, arg_sensorOrientation!); + api.startListeningForDeviceOrientationChange(arg_isFrontFacing!, arg_sensorOrientation!); return []; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); @@ -421,9 +397,9 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - case 129: + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -442,8 +418,7 @@ abstract class TestPreviewHostApi { ResolutionInfo getResolutionInfo(int identifier); - static void setup(TestPreviewHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestPreviewHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.create', codec, @@ -453,14 +428,13 @@ abstract class TestPreviewHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null, expected non-null int.'); final int? arg_rotation = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = - (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_rotation, arg_targetResolution); return []; }); @@ -475,7 +449,7 @@ abstract class TestPreviewHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -487,8 +461,7 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', - codec, + 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); @@ -509,7 +482,7 @@ abstract class TestPreviewHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -537,7 +510,7 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -554,8 +527,7 @@ abstract class TestImageCaptureHostApi { Future takePicture(int identifier); - static void setup(TestImageCaptureHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageCaptureHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, @@ -565,14 +537,13 @@ abstract class TestImageCaptureHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); final int? arg_flashMode = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = - (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_flashMode, arg_targetResolution); return []; }); @@ -587,7 +558,7 @@ abstract class TestImageCaptureHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -609,7 +580,7 @@ abstract class TestImageCaptureHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -622,13 +593,44 @@ abstract class TestImageCaptureHostApi { } } -class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { - const _TestImageAnalysisHostApiCodec(); +abstract class TestImageAnalysisAnalyzerHostApi { + static const MessageCodec codec = StandardMessageCodec(); + + void create(int identifier); + + static void setup(TestImageAnalysisAnalyzerHostApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisAnalyzerHostApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerHostApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerHostApi.create was null, expected non-null int.'); + api.create(arg_identifier!); + return []; + }); + } + } + } +} + +class _TestImageProxyHostApiCodec extends StandardMessageCodec { + const _TestImageProxyHostApiCodec(); @override void writeValue(WriteBuffer buffer, Object? value) { - if (value is ResolutionInfo) { + if (value is CameraPermissionsErrorData) { buffer.putUint8(128); writeValue(buffer, value.encode()); + } else if (value is ResolutionInfo) { + buffer.putUint8(129); + writeValue(buffer, value.encode()); } else { super.writeValue(buffer, value); } @@ -637,7 +639,9 @@ class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: + return CameraPermissionsErrorData.decode(readValue(buffer)!); + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -645,17 +649,136 @@ class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { } } +abstract class TestImageProxyHostApi { + static const MessageCodec codec = _TestImageProxyHostApiCodec(); + + /// Handles Dart method `ImageProxy.getPlanes`. + List getPlanes(int identifier); + + /// Handles Dart method `ImageProxy.getFormat`. + int getFormat(int identifier); + + /// Handles Dart method `ImageProxy.getHeight`. + int getHeight(int identifier); + + /// Handles Dart method `ImageProxy.getWidth`. + int getWidth(int identifier); + + /// Handles Dart method `ImageProxy.close`. + void close(int identifier); + + static void setup(TestImageProxyHostApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyHostApi.getPlanes', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getPlanes was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getPlanes was null, expected non-null int.'); + final List output = api.getPlanes(arg_identifier!); + return [output]; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyHostApi.getFormat', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getFormat was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getFormat was null, expected non-null int.'); + final int output = api.getFormat(arg_identifier!); + return [output]; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyHostApi.getHeight', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getHeight was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getHeight was null, expected non-null int.'); + final int output = api.getHeight(arg_identifier!); + return [output]; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyHostApi.getWidth', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getWidth was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getWidth was null, expected non-null int.'); + final int output = api.getWidth(arg_identifier!); + return [output]; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyHostApi.close', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.close was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.close was null, expected non-null int.'); + api.close(arg_identifier!); + return []; + }); + } + } + } +} + abstract class TestImageAnalysisHostApi { - static const MessageCodec codec = _TestImageAnalysisHostApiCodec(); + static const MessageCodec codec = StandardMessageCodec(); - void create(int identifier, ResolutionInfo? targetResolution); + /// Create a new native instance and add it to the `InstanceManager`. + void create(int identifier, int? targetResolutionIdentifier); - void setAnalyzer(int identifier); + /// Handles Dart method `ImageAnalysis.setAnalyzer`. + void setAnalyzer(int identifier, int analyzerIdentifier); + /// Handles Dart method `ImageAnalysis.clearAnalyzer`. void clearAnalyzer(int identifier); - static void setup(TestImageAnalysisHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageAnalysisHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, @@ -665,14 +788,13 @@ abstract class TestImageAnalysisHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); - final ResolutionInfo? arg_targetResolution = - (args[1] as ResolutionInfo?); - api.create(arg_identifier!, arg_targetResolution); + final int? arg_targetResolutionIdentifier = (args[1] as int?); + api.create(arg_identifier!, arg_targetResolutionIdentifier); return []; }); } @@ -686,12 +808,15 @@ abstract class TestImageAnalysisHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null, expected non-null int.'); - api.setAnalyzer(arg_identifier!); + final int? arg_analyzerIdentifier = (args[1] as int?); + assert(arg_analyzerIdentifier != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null, expected non-null int.'); + api.setAnalyzer(arg_identifier!, arg_analyzerIdentifier!); return []; }); } @@ -705,7 +830,7 @@ abstract class TestImageAnalysisHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -717,3 +842,76 @@ abstract class TestImageAnalysisHostApi { } } } + +abstract class TestImageProxyPlaneProxyHostApi { + static const MessageCodec codec = StandardMessageCodec(); + + /// Handles Dart method `ImageProxyPlaneProxy.getPixelStride`. + int getPixelStride(int identifier); + + /// Handles Dart method `ImageProxyPlaneProxy.getRowStride`. + Uint8List getBuffer(int identifier); + + /// Handles Dart method `ImageProxyPlaneProxy.getRowStride`. + int getRowStride(int identifier); + + static void setup(TestImageProxyPlaneProxyHostApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getPixelStride', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getPixelStride was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getPixelStride was null, expected non-null int.'); + final int output = api.getPixelStride(arg_identifier!); + return [output]; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getBuffer', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getBuffer was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getBuffer was null, expected non-null int.'); + final Uint8List output = api.getBuffer(arg_identifier!); + return [output]; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getRowStride', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getRowStride was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getRowStride was null, expected non-null int.'); + final int output = api.getRowStride(arg_identifier!); + return [output]; + }); + } + } + } +} From c7c2e2f50d8c47bb5584d3acf1b821ef20828ecd Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 14 Apr 2023 10:23:26 -0700 Subject: [PATCH 37/62] Add more implementation --- .../lib/src/image_analysis.dart | 14 ++++----- .../lib/src/image_analysis_analyzer.dart | 8 ++--- .../lib/src/image_proxy.dart | 30 ++++++++++++++----- .../lib/src/image_proxy_plane_proxy.dart | 23 ++++++++------ 4 files changed, 47 insertions(+), 28 deletions(-) diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index a30329a3dba6..8d2bb79bdc9e 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -32,7 +32,7 @@ class ImageAnalysis extends UseCase { instanceManager: instanceManager) { _api = _ImageAnalysisHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); - _api.createFromInstance(this, targetResolution); + _api.createfromInstances(this, targetResolution); AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } @@ -70,12 +70,12 @@ class ImageAnalysis extends UseCase { /// information that is analyzed by the created ImageAnalysis.Analyzer /// instance. Future setAnalyzer(ImageAnalysisAnalyzer analyzer) async { - _api.setAnalyzerFromInstance(this, analyzer); + _api.setAnalyzerfromInstances(this, analyzer); } /// Clears previously set analyzer for image streaming support. Future clearAnalyzer() async { - _api.clearAnalyzerFromInstance(this); + _api.clearAnalyzerfromInstances(this); } } @@ -90,7 +90,7 @@ class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { final InstanceManager instanceManager; - Future createFromInstance( + Future createfromInstances( ImageAnalysis instance, ResolutionInfo? targetResolution, ) { @@ -109,7 +109,7 @@ class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { ); } - // StreamController attachOnStreamedFrameAvailableStreamControllerFromInstances( + // StreamController attachOnStreamedFrameAvailableStreamControllerfromInstancess( // StreamController onStreamedFrameAvailableStreamController, // ) { // attachOnStreamedFrameAvailableStreamController( @@ -125,7 +125,7 @@ class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { // return onStreamedFrameAvailableStreamController; // } - Future setAnalyzerFromInstance( + Future setAnalyzerfromInstances( ImageAnalysis instance, ImageAnalysisAnalyzer analyzer, ) { @@ -135,7 +135,7 @@ class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { ); } - Future clearAnalyzerFromInstance( + Future clearAnalyzerfromInstances( ImageAnalysis instance, ) { return clearAnalyzer( diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis_analyzer.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis_analyzer.dart index df01199176f6..2a1d605415d7 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis_analyzer.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis_analyzer.dart @@ -28,7 +28,7 @@ class ImageAnalysisAnalyzer extends JavaObject { instanceManager: instanceManager) { _api = _ImageAnalysisAnalyzerHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); - _api.createFromInstance(this); + _api.createfromInstances(this); AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } @@ -60,7 +60,7 @@ class _ImageAnalysisAnalyzerHostApiImpl extends ImageAnalysisAnalyzerHostApi { final InstanceManager instanceManager; - Future createFromInstance( + Future createfromInstances( ImageAnalysisAnalyzer instance, ) { return create( @@ -127,10 +127,10 @@ class ImageAnalysisAnalyzerFlutterApiImpl ) { final ImageAnalysisAnalyzer instance = instanceManager.getInstanceWithWeakReference(identifier)!; - final ImageProxy imageProxy = instanceManager.getInstanceWithWeakReference(imageProxyIdentifier)!; + final ImageProxy imageProxy = + instanceManager.getInstanceWithWeakReference(imageProxyIdentifier)!; return instance.analyze( imageProxy, - ); } } diff --git a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart index 7f9655e09b77..dbad362f1ba6 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart @@ -43,15 +43,25 @@ class ImageProxy extends JavaObject { late final _ImageProxyHostApiImpl _api; - Future> getPlanes() {} + Future> getPlanes() { + return _api.getPlanesFromInstances(this); + } - Future getFormat() {} + Future getFormat() { + return _api.getFormatFromInstances(this); + } - Future getHeight() {} + Future getHeight() { + return _api.getHeightFromInstances(this); + } - Future getWidth() {} + Future getWidth() { + return _api.getWidthFromInstances(this); + } - Future close() {} + Future close() { + return _api.closeFromInstances(this); + } } class _ImageProxyHostApiImpl extends ImageProxyHostApi { @@ -65,12 +75,16 @@ class _ImageProxyHostApiImpl extends ImageProxyHostApi { final InstanceManager instanceManager; - Future> getPlanesFromInstances( + Future> getPlanesFromInstances( ImageProxy instance, - ) { - return getPlanes( + ) async { + List planesAsObjects = await getPlanes( instanceManager.getIdentifier(instance)!, ); + + return planesAsObjects.map((Object? obj) { + return obj! as ImageProxyPlaneProxy; + }) as List; } Future getFormatFromInstances( diff --git a/packages/camera/camera_android_camerax/lib/src/image_proxy_plane_proxy.dart b/packages/camera/camera_android_camerax/lib/src/image_proxy_plane_proxy.dart index b7f277877bc3..a0748d097fad 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_proxy_plane_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_proxy_plane_proxy.dart @@ -27,7 +27,7 @@ class ImageProxyPlaneProxy extends JavaObject { // instanceManager: instanceManager) { // _api = ImageProxyPlaneProxyHostApiImpl( // binaryMessenger: binaryMessenger, instanceManager: instanceManager); -// _api.createFromInstance(this); +// _api.createfromInstances(this); // AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); // } @@ -43,11 +43,17 @@ class ImageProxyPlaneProxy extends JavaObject { late final _ImageProxyPlaneProxyHostApiImpl _api; - Future getBuffer() {} + Future getBuffer() { + return _api.getBufferfromInstances(this); + } - Future getPixelStride() {} + Future getPixelStride() { + return _api.getPixelStridefromInstances(this); + } - Future getRowStride() {} + Future getRowStride() { + return _api.getRowStridefromInstances(this); + } } class _ImageProxyPlaneProxyHostApiImpl extends ImageProxyPlaneProxyHostApi { @@ -61,7 +67,7 @@ class _ImageProxyPlaneProxyHostApiImpl extends ImageProxyPlaneProxyHostApi { final InstanceManager instanceManager; - Future getPixelStrideFromInstance( + Future getPixelStridefromInstances( ImageProxyPlaneProxy instance, ) { return getPixelStride( @@ -69,7 +75,7 @@ class _ImageProxyPlaneProxyHostApiImpl extends ImageProxyPlaneProxyHostApi { ); } - Future getBufferFromInstance( + Future getBufferfromInstances( ImageProxyPlaneProxy instance, ) { return getBuffer( @@ -77,14 +83,13 @@ class _ImageProxyPlaneProxyHostApiImpl extends ImageProxyPlaneProxyHostApi { ); } - Future getRowStrideFromInstance( + Future getRowStridefromInstances( ImageProxyPlaneProxy instance, - ) async { + ) async { return getRowStride( instanceManager.getIdentifier(instance)!, ); } - } /// Flutter API implementation for [ImageProxyPlaneProxy]. From f478e316aa1e8aa48c9604a709c7c27403d994ac Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 18 Apr 2023 15:23:14 -0700 Subject: [PATCH 38/62] Correct autogenerator on dart classes --- .../camerax/GeneratedCameraXLibrary.java | 462 ++++++++---------- ...e_analysis_analyzer.dart => analyzer.dart} | 50 +- ...roid_camera_camerax_flutter_api_impls.dart | 14 +- .../lib/src/camerax_library.g.dart | 285 ++++------- .../lib/src/image_analysis.dart | 102 +--- .../lib/src/image_proxy.dart | 66 ++- ...roxy_plane_proxy.dart => plane_proxy.dart} | 63 ++- .../pigeons/camerax_library.dart | 183 +------ .../camera_android_camerax/pubspec.yaml | 14 +- .../test/test_camerax_library.g.dart | 353 ++++++------- 10 files changed, 604 insertions(+), 988 deletions(-) rename packages/camera/camera_android_camerax/lib/src/{image_analysis_analyzer.dart => analyzer.dart} (73%) rename packages/camera/camera_android_camerax/lib/src/{image_proxy_plane_proxy.dart => plane_proxy.dart} (64%) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 16817eb4c2e5..f9fa77f2b54a 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -1,7 +1,7 @@ // 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. -// Autogenerated from Pigeon (v9.1.1), do not edit directly. +// Autogenerated from Pigeon (v9.2.4), do not edit directly. // See also: https://pub.dev/packages/pigeon package io.flutter.plugins.camerax; @@ -44,7 +44,7 @@ public FlutterError(@NonNull String code, @Nullable String message, @Nullable Ob } @NonNull - private static ArrayList wrapError(@NonNull Throwable exception) { + protected static ArrayList wrapError(@NonNull Throwable exception) { ArrayList errorList = new ArrayList(3); if (exception instanceof FlutterError) { FlutterError error = (FlutterError) exception; @@ -88,8 +88,8 @@ public void setHeight(@NonNull Long setterArg) { this.height = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private ResolutionInfo() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + ResolutionInfo() {} public static final class Builder { @@ -161,8 +161,8 @@ public void setDescription(@NonNull String setterArg) { this.description = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private CameraPermissionsErrorData() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + CameraPermissionsErrorData() {} public static final class Builder { @@ -207,9 +207,10 @@ ArrayList toList() { } public interface Result { + @SuppressWarnings("UnknownNullness") void success(T result); - void error(Throwable error); + void error(@NonNull Throwable error); } /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface InstanceManagerHostApi { @@ -221,11 +222,11 @@ public interface InstanceManagerHostApi { void clear(); /** The codec used by InstanceManagerHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } /**Sets up an instance of `InstanceManagerHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, InstanceManagerHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable InstanceManagerHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -256,11 +257,11 @@ public interface JavaObjectHostApi { void dispose(@NonNull Long identifier); /** The codec used by JavaObjectHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } /**Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, JavaObjectHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable JavaObjectHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -289,20 +290,22 @@ static void setup(BinaryMessenger binaryMessenger, JavaObjectHostApi api) { } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class JavaObjectFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public JavaObjectFlutterApi(BinaryMessenger argBinaryMessenger) { + public JavaObjectFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } /** The codec used by JavaObjectFlutterApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void dispose(@NonNull Long identifierArg, Reply callback) { + public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.JavaObjectFlutterApi.dispose", getCodec()); @@ -318,11 +321,11 @@ public interface CameraInfoHostApi { Long getSensorRotationDegrees(@NonNull Long identifier); /** The codec used by CameraInfoHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } /**Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfoHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -351,20 +354,22 @@ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class CameraInfoFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public CameraInfoFlutterApi(BinaryMessenger argBinaryMessenger) { + public CameraInfoFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } /** The codec used by CameraInfoFlutterApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraInfoFlutterApi.create", getCodec()); @@ -382,11 +387,11 @@ public interface CameraSelectorHostApi { List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); /** The codec used by CameraSelectorHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } /**Sets up an instance of `CameraSelectorHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraSelectorHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -441,20 +446,22 @@ static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class CameraSelectorFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public CameraSelectorFlutterApi(BinaryMessenger argBinaryMessenger) { + public CameraSelectorFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } /** The codec used by CameraSelectorFlutterApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { + public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); @@ -466,7 +473,7 @@ public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, Re /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ProcessCameraProviderHostApi { - void getInstance(Result result); + void getInstance(@NonNull Result result); @NonNull List getAvailableCameraInfos(@NonNull Long identifier); @@ -482,11 +489,11 @@ public interface ProcessCameraProviderHostApi { void unbindAll(@NonNull Long identifier); /** The codec used by ProcessCameraProviderHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } /**Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, ProcessCameraProviderHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ProcessCameraProviderHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -642,20 +649,22 @@ public void error(Throwable error) { } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class ProcessCameraProviderFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger) { + public ProcessCameraProviderFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } /** The codec used by ProcessCameraProviderFlutterApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", getCodec()); @@ -666,20 +675,22 @@ public void create(@NonNull Long identifierArg, Reply callback) { } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class CameraFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public CameraFlutterApi(BinaryMessenger argBinaryMessenger) { + public CameraFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } /** The codec used by CameraFlutterApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraFlutterApi.create", getCodec()); @@ -718,18 +729,18 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface SystemServicesHostApi { - void requestCameraPermissions(@NonNull Boolean enableAudio, Result result); + void requestCameraPermissions(@NonNull Boolean enableAudio, @NonNull Result result); void startListeningForDeviceOrientationChange(@NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); void stopListeningForDeviceOrientationChange(); /** The codec used by SystemServicesHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return SystemServicesHostApiCodec.INSTANCE; } /**Sets up an instance of `SystemServicesHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, SystemServicesHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable SystemServicesHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -810,20 +821,22 @@ public void error(Throwable error) { } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class SystemServicesFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public SystemServicesFlutterApi(BinaryMessenger argBinaryMessenger) { + public SystemServicesFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } /** The codec used by SystemServicesFlutterApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void onDeviceOrientationChanged(@NonNull String orientationArg, Reply callback) { + public void onDeviceOrientationChanged(@NonNull String orientationArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", getCodec()); @@ -831,7 +844,7 @@ public void onDeviceOrientationChanged(@NonNull String orientationArg, Reply(Collections.singletonList(orientationArg)), channelReply -> callback.reply(null)); } - public void onCameraError(@NonNull String errorDescriptionArg, Reply callback) { + public void onCameraError(@NonNull String errorDescriptionArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", getCodec()); @@ -886,11 +899,11 @@ public interface PreviewHostApi { ResolutionInfo getResolutionInfo(@NonNull Long identifier); /** The codec used by PreviewHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return PreviewHostApiCodec.INSTANCE; } /**Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1023,14 +1036,14 @@ public interface ImageCaptureHostApi { void setFlashMode(@NonNull Long identifier, @NonNull Long flashMode); - void takePicture(@NonNull Long identifier, Result result); + void takePicture(@NonNull Long identifier, @NonNull Result result); /** The codec used by ImageCaptureHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return ImageCaptureHostApiCodec.INSTANCE; } /**Sets up an instance of `ImageCaptureHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageCaptureHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1114,28 +1127,33 @@ public void error(Throwable error) { } } /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface ImageAnalysisAnalyzerHostApi { + public interface ImageAnalysisHostApi { - void create(@NonNull Long identifier); + void create(@NonNull Long identifier, @Nullable Long targetResolutionIdentifier); + + void setAnalyzer(@NonNull Long identifier, @NonNull Long analyzerIdentifier); + + void clearAnalyzer(@NonNull Long identifier); - /** The codec used by ImageAnalysisAnalyzerHostApi. */ - static MessageCodec getCodec() { + /** The codec used by ImageAnalysisHostApi. */ + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `ImageAnalysisAnalyzerHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, ImageAnalysisAnalyzerHostApi api) { + /**Sets up an instance of `ImageAnalysisHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnalysisHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisAnalyzerHostApi.create", getCodec()); + binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.create", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { ArrayList wrapped = new ArrayList(); ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); + Number targetResolutionIdentifierArg = (Number) args.get(1); try { - api.create((identifierArg == null) ? null : identifierArg.longValue()); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (targetResolutionIdentifierArg == null) ? null : targetResolutionIdentifierArg.longValue()); wrapped.add(0, null); } catch (Throwable exception) { @@ -1148,110 +1166,20 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisAnalyzerHostApi channel.setMessageHandler(null); } } - } - } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ - public static class ImageAnalysisAnalyzerFlutterApi { - private final BinaryMessenger binaryMessenger; - - public ImageAnalysisAnalyzerFlutterApi(BinaryMessenger argBinaryMessenger) { - this.binaryMessenger = argBinaryMessenger; - } - - /** Public interface for sending reply. */ public interface Reply { - void reply(T reply); - } - /** The codec used by ImageAnalysisAnalyzerFlutterApi. */ - static MessageCodec getCodec() { - return new StandardMessageCodec(); - } - /** Create a new Dart instance and add it to the `InstanceManager`. */ - public void create(@NonNull Long identifierArg, Reply callback) { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.create", getCodec()); - channel.send( - new ArrayList(Collections.singletonList(identifierArg)), - channelReply -> callback.reply(null)); - } - /** Callback to Dart function `ImageAnalysisAnalyzer.analyze`. */ - public void analyze(@NonNull Long identifierArg, @NonNull Long imageProxyIdentifierArg, Reply callback) { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.analyze", getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg, imageProxyIdentifierArg)), - channelReply -> callback.reply(null)); - } - } - - private static class ImageProxyHostApiCodec extends StandardMessageCodec { - public static final ImageProxyHostApiCodec INSTANCE = new ImageProxyHostApiCodec(); - - private ImageProxyHostApiCodec() {} - - @Override - protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { - switch (type) { - case (byte) 128: - return CameraPermissionsErrorData.fromList((ArrayList) readValue(buffer)); - case (byte) 129: - return ResolutionInfo.fromList((ArrayList) readValue(buffer)); - default: - return super.readValueOfType(type, buffer); - } - } - - @Override - protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { - if (value instanceof CameraPermissionsErrorData) { - stream.write(128); - writeValue(stream, ((CameraPermissionsErrorData) value).toList()); - } else if (value instanceof ResolutionInfo) { - stream.write(129); - writeValue(stream, ((ResolutionInfo) value).toList()); - } else { - super.writeValue(stream, value); - } - } - } - - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface ImageProxyHostApi { - /** Handles Dart method `ImageProxy.getPlanes`. */ - @NonNull - List getPlanes(@NonNull Long identifier); - /** Handles Dart method `ImageProxy.getFormat`. */ - @NonNull - Long getFormat(@NonNull Long identifier); - /** Handles Dart method `ImageProxy.getHeight`. */ - @NonNull - Long getHeight(@NonNull Long identifier); - /** Handles Dart method `ImageProxy.getWidth`. */ - @NonNull - Long getWidth(@NonNull Long identifier); - /** Handles Dart method `ImageProxy.close`. */ - void close(@NonNull Long identifier); - - /** The codec used by ImageProxyHostApi. */ - static MessageCodec getCodec() { - return ImageProxyHostApiCodec.INSTANCE; - } - /**Sets up an instance of `ImageProxyHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, ImageProxyHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getPlanes", getCodec()); + binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { ArrayList wrapped = new ArrayList(); ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); + Number analyzerIdentifierArg = (Number) args.get(1); try { - List output = api.getPlanes((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); + api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue(), (analyzerIdentifierArg == null) ? null : analyzerIdentifierArg.longValue()); + wrapped.add(0, null); } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); @@ -1266,7 +1194,7 @@ static void setup(BinaryMessenger binaryMessenger, ImageProxyHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getFormat", getCodec()); + binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1274,8 +1202,8 @@ static void setup(BinaryMessenger binaryMessenger, ImageProxyHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getFormat((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); + api.clearAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, null); } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); @@ -1287,10 +1215,23 @@ static void setup(BinaryMessenger binaryMessenger, ImageProxyHostApi api) { channel.setMessageHandler(null); } } + } + } + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface AnalyzerHostApi { + + void create(@NonNull Long identifier); + + /** The codec used by AnalyzerHostApi. */ + static @NonNull MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /**Sets up an instance of `AnalyzerHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable AnalyzerHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getHeight", getCodec()); + binaryMessenger, "dev.flutter.pigeon.AnalyzerHostApi.create", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1298,8 +1239,8 @@ static void setup(BinaryMessenger binaryMessenger, ImageProxyHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getHeight((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); + api.create((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, null); } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); @@ -1311,10 +1252,69 @@ static void setup(BinaryMessenger binaryMessenger, ImageProxyHostApi api) { channel.setMessageHandler(null); } } + } + } + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + public static class AnalyzerFlutterApi { + private final @NonNull BinaryMessenger binaryMessenger; + + public AnalyzerFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { + void reply(T reply); + } + /** The codec used by AnalyzerFlutterApi. */ + static @NonNull MessageCodec getCodec() { + return new StandardMessageCodec(); + } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.AnalyzerFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Collections.singletonList(identifierArg)), + channelReply -> callback.reply(null)); + } + public void analyze(@NonNull Long identifierArg, @NonNull Long imageProxyIdentifierArg, @NonNull Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.AnalyzerFlutterApi.analyze", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg, imageProxyIdentifierArg)), + channelReply -> callback.reply(null)); + } + } + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface ImageProxyHostApi { + + @NonNull + List getPlanes(@NonNull Long identifier); + + @NonNull + Long getFormat(@NonNull Long identifier); + + @NonNull + Long getHeight(@NonNull Long identifier); + + @NonNull + Long getWidth(@NonNull Long identifier); + + void close(@NonNull Long identifier); + + /** The codec used by ImageProxyHostApi. */ + static @NonNull MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /**Sets up an instance of `ImageProxyHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxyHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getWidth", getCodec()); + binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getPlanes", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1322,7 +1322,7 @@ static void setup(BinaryMessenger binaryMessenger, ImageProxyHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getWidth((identifierArg == null) ? null : identifierArg.longValue()); + List output = api.getPlanes((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); } catch (Throwable exception) { @@ -1338,7 +1338,7 @@ static void setup(BinaryMessenger binaryMessenger, ImageProxyHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.close", getCodec()); + binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getFormat", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1346,8 +1346,8 @@ static void setup(BinaryMessenger binaryMessenger, ImageProxyHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - api.close((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, null); + Long output = api.getFormat((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); @@ -1359,62 +1359,19 @@ static void setup(BinaryMessenger binaryMessenger, ImageProxyHostApi api) { channel.setMessageHandler(null); } } - } - } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ - public static class ImageProxyFlutterApi { - private final BinaryMessenger binaryMessenger; - - public ImageProxyFlutterApi(BinaryMessenger argBinaryMessenger) { - this.binaryMessenger = argBinaryMessenger; - } - - /** Public interface for sending reply. */ public interface Reply { - void reply(T reply); - } - /** The codec used by ImageProxyFlutterApi. */ - static MessageCodec getCodec() { - return new StandardMessageCodec(); - } - /** Create a new Dart instance and add it to the `InstanceManager`. */ - public void create(@NonNull Long identifierArg, Reply callback) { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyFlutterApi.create", getCodec()); - channel.send( - new ArrayList(Collections.singletonList(identifierArg)), - channelReply -> callback.reply(null)); - } - } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface ImageAnalysisHostApi { - /** Create a new native instance and add it to the `InstanceManager`. */ - void create(@NonNull Long identifier, @Nullable Long targetResolutionIdentifier); - /** Handles Dart method `ImageAnalysis.setAnalyzer`. */ - void setAnalyzer(@NonNull Long identifier, @NonNull Long analyzerIdentifier); - /** Handles Dart method `ImageAnalysis.clearAnalyzer`. */ - void clearAnalyzer(@NonNull Long identifier); - - /** The codec used by ImageAnalysisHostApi. */ - static MessageCodec getCodec() { - return new StandardMessageCodec(); - } - /**Sets up an instance of `ImageAnalysisHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.create", getCodec()); + binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getHeight", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { ArrayList wrapped = new ArrayList(); ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); - Number targetResolutionIdentifierArg = (Number) args.get(1); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), (targetResolutionIdentifierArg == null) ? null : targetResolutionIdentifierArg.longValue()); - wrapped.add(0, null); + Long output = api.getHeight((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); @@ -1429,17 +1386,16 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer", getCodec()); + binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getWidth", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { ArrayList wrapped = new ArrayList(); ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); - Number analyzerIdentifierArg = (Number) args.get(1); try { - api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue(), (analyzerIdentifierArg == null) ? null : analyzerIdentifierArg.longValue()); - wrapped.add(0, null); + Long output = api.getWidth((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); @@ -1454,7 +1410,7 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", getCodec()); + binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.close", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1462,7 +1418,7 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - api.clearAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); + api.close((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); } catch (Throwable exception) { @@ -1478,52 +1434,53 @@ static void setup(BinaryMessenger binaryMessenger, ImageAnalysisHostApi api) { } } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ - public static class ImageAnalysisFlutterApi { - private final BinaryMessenger binaryMessenger; + public static class ImageProxyFlutterApi { + private final @NonNull BinaryMessenger binaryMessenger; - public ImageAnalysisFlutterApi(BinaryMessenger argBinaryMessenger) { + public ImageProxyFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } - /** The codec used by ImageAnalysisFlutterApi. */ - static MessageCodec getCodec() { + /** The codec used by ImageProxyFlutterApi. */ + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** Create a new Dart instance and add it to the `InstanceManager`. */ - public void create(@NonNull Long identifierArg, @NonNull Long targetResolutionIdentifierArg, Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisFlutterApi.create", getCodec()); + binaryMessenger, "dev.flutter.pigeon.ImageProxyFlutterApi.create", getCodec()); channel.send( - new ArrayList(Arrays.asList(identifierArg, targetResolutionIdentifierArg)), + new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); } } /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface ImageProxyPlaneProxyHostApi { - /** Handles Dart method `ImageProxyPlaneProxy.getPixelStride`. */ + public interface PlaneProxyHostApi { + @NonNull Long getPixelStride(@NonNull Long identifier); - /** Handles Dart method `ImageProxyPlaneProxy.getRowStride`. */ + @NonNull byte[] getBuffer(@NonNull Long identifier); - /** Handles Dart method `ImageProxyPlaneProxy.getRowStride`. */ + @NonNull Long getRowStride(@NonNull Long identifier); - /** The codec used by ImageProxyPlaneProxyHostApi. */ - static MessageCodec getCodec() { + /** The codec used by PlaneProxyHostApi. */ + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `ImageProxyPlaneProxyHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, ImageProxyPlaneProxyHostApi api) { + /**Sets up an instance of `PlaneProxyHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PlaneProxyHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getPixelStride", getCodec()); + binaryMessenger, "dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1547,7 +1504,7 @@ static void setup(BinaryMessenger binaryMessenger, ImageProxyPlaneProxyHostApi a { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getBuffer", getCodec()); + binaryMessenger, "dev.flutter.pigeon.PlaneProxyHostApi.getBuffer", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1571,7 +1528,7 @@ static void setup(BinaryMessenger binaryMessenger, ImageProxyPlaneProxyHostApi a { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getRowStride", getCodec()); + binaryMessenger, "dev.flutter.pigeon.PlaneProxyHostApi.getRowStride", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1595,25 +1552,26 @@ static void setup(BinaryMessenger binaryMessenger, ImageProxyPlaneProxyHostApi a } } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ - public static class ImageProxyPlaneProxyFlutterApi { - private final BinaryMessenger binaryMessenger; + public static class PlaneProxyFlutterApi { + private final @NonNull BinaryMessenger binaryMessenger; - public ImageProxyPlaneProxyFlutterApi(BinaryMessenger argBinaryMessenger) { + public PlaneProxyFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } - /** The codec used by ImageProxyPlaneProxyFlutterApi. */ - static MessageCodec getCodec() { + /** The codec used by PlaneProxyFlutterApi. */ + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** Create a new Dart instance and add it to the `InstanceManager`. */ - public void create(@NonNull Long identifierArg, Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyPlaneProxyFlutterApi.create", getCodec()); + binaryMessenger, "dev.flutter.pigeon.PlaneProxyFlutterApi.create", getCodec()); channel.send( new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis_analyzer.dart b/packages/camera/camera_android_camerax/lib/src/analyzer.dart similarity index 73% rename from packages/camera/camera_android_camerax/lib/src/image_analysis_analyzer.dart rename to packages/camera/camera_android_camerax/lib/src/analyzer.dart index 2a1d605415d7..fa0de1da5ed9 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis_analyzer.dart +++ b/packages/camera/camera_android_camerax/lib/src/analyzer.dart @@ -4,53 +4,55 @@ import 'dart:async'; -import 'package:camera_platform_interface/camera_platform_interface.dart' - show CameraImageData, CameraImageFormat, CameraImagePlane, ImageFormatGroup; import 'package:flutter/services.dart' show BinaryMessenger; import 'package:meta/meta.dart' show protected; -import 'package:simple_ast/annotations.dart'; import 'android_camera_camerax_flutter_api_impls.dart'; import 'camerax_library.g.dart'; import 'image_proxy.dart'; import 'instance_manager.dart'; import 'java_object.dart'; -import 'use_case.dart'; -@SimpleClassAnnotation() -class ImageAnalysisAnalyzer extends JavaObject { - ImageAnalysisAnalyzer( +/// Wrapper of callback for analyzing images. +/// +/// See https://developer.android.com/reference/androidx/camera/core/ImageAnalysis.Analyzer. +class Analyzer extends JavaObject { + /// Creates an [Analyzer]. + Analyzer( {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, required this.analyze}) : super.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager) { - _api = _ImageAnalysisAnalyzerHostApiImpl( + _api = _AnalyzerHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); _api.createfromInstances(this); AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - ImageAnalysisAnalyzer.detached( + /// Constructs a [Analyzer] that is not automatically attached to a native object. + Analyzer.detached( {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, required this.analyze}) : super.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager) { - _api = _ImageAnalysisAnalyzerHostApiImpl( + _api = _AnalyzerHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - late final _ImageAnalysisAnalyzerHostApiImpl _api; + late final _AnalyzerHostApiImpl _api; + /// Analyzes an image to produce a result. final void Function(ImageProxy imageProxy) analyze; } -class _ImageAnalysisAnalyzerHostApiImpl extends ImageAnalysisAnalyzerHostApi { - _ImageAnalysisAnalyzerHostApiImpl({ +/// Host API implementation of [Analyzer]. +class _AnalyzerHostApiImpl extends AnalyzerHostApi { + _AnalyzerHostApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager, @@ -60,14 +62,14 @@ class _ImageAnalysisAnalyzerHostApiImpl extends ImageAnalysisAnalyzerHostApi { final InstanceManager instanceManager; + /// Creates an [Analyzer] instance on the native side. Future createfromInstances( - ImageAnalysisAnalyzer instance, + Analyzer instance, ) { return create( instanceManager.addDartCreatedInstance( instance, - onCopy: (ImageAnalysisAnalyzer original) => - ImageAnalysisAnalyzer.detached( + onCopy: (Analyzer original) => Analyzer.detached( analyze: original.analyze, binaryMessenger: binaryMessenger, instanceManager: instanceManager, @@ -77,16 +79,15 @@ class _ImageAnalysisAnalyzerHostApiImpl extends ImageAnalysisAnalyzerHostApi { } } -/// Flutter API implementation for [ImageAnalysisAnalyzer]. +/// Flutter API implementation for [Analyzer]. /// /// This class may handle instantiating and adding Dart instances that are /// attached to a native instance or receiving callback methods from an /// overridden native class. @protected -class ImageAnalysisAnalyzerFlutterApiImpl - implements ImageAnalysisAnalyzerFlutterApi { - /// Constructs a [ImageAnalysisAnalyzerFlutterApiImpl]. - ImageAnalysisAnalyzerFlutterApiImpl({ +class AnalyzerFlutterApiImpl implements AnalyzerFlutterApi { + /// Constructs a [AnalyzerFlutterApiImpl]. + AnalyzerFlutterApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; @@ -105,14 +106,13 @@ class ImageAnalysisAnalyzerFlutterApiImpl int identifier, ) { instanceManager.addHostCreatedInstance( - ImageAnalysisAnalyzer.detached( + Analyzer.detached( analyze: (ImageProxy imageProxy) {}, binaryMessenger: binaryMessenger, instanceManager: instanceManager, ), identifier, - onCopy: (ImageAnalysisAnalyzer original) => - ImageAnalysisAnalyzer.detached( + onCopy: (Analyzer original) => Analyzer.detached( analyze: original.analyze, binaryMessenger: binaryMessenger, instanceManager: instanceManager, @@ -125,7 +125,7 @@ class ImageAnalysisAnalyzerFlutterApiImpl int identifier, int imageProxyIdentifier, ) { - final ImageAnalysisAnalyzer instance = + final Analyzer instance = instanceManager.getInstanceWithWeakReference(identifier)!; final ImageProxy imageProxy = instanceManager.getInstanceWithWeakReference(imageProxyIdentifier)!; diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart index ab5a92a8495c..5cd8b2e5c55c 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart @@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'analyzer.dart'; import 'camera.dart'; import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.g.dart'; -import 'image_analysis.dart'; import 'java_object.dart'; import 'process_camera_provider.dart'; import 'system_services.dart'; @@ -21,7 +21,7 @@ class AndroidCameraXCameraFlutterApis { CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi, ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi, SystemServicesFlutterApiImpl? systemServicesFlutterApi, - ImageAnalysisFlutterApiImpl? imageAnalysisFlutterApiImpl, + AnalyzerFlutterApiImpl? analyzerFlutterApiImpl, }) { this.javaObjectFlutterApi = javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); @@ -34,8 +34,8 @@ class AndroidCameraXCameraFlutterApis { this.cameraFlutterApi = cameraFlutterApi ?? CameraFlutterApiImpl(); this.systemServicesFlutterApi = systemServicesFlutterApi ?? SystemServicesFlutterApiImpl(); - this.imageAnalysisFlutterApiImpl = - imageAnalysisFlutterApiImpl ?? ImageAnalysisFlutterApiImpl(); + this.analyzerFlutterApiImpl = + analyzerFlutterApiImpl ?? AnalyzerFlutterApiImpl(); } static bool _haveBeenSetUp = false; @@ -65,8 +65,8 @@ class AndroidCameraXCameraFlutterApis { /// Flutter Api for [SystemServices]. late final SystemServicesFlutterApiImpl systemServicesFlutterApi; - /// Flutter Api for [ImageAnalysis]. - late final ImageAnalysisFlutterApiImpl imageAnalysisFlutterApiImpl; + /// Flutter Api implementation for [Analyzer]. + late final AnalyzerFlutterApiImpl analyzerFlutterApiImpl; /// Ensures all the Flutter APIs have been setup to receive calls from native code. void ensureSetUp() { @@ -77,7 +77,7 @@ class AndroidCameraXCameraFlutterApis { ProcessCameraProviderFlutterApi.setup(processCameraProviderFlutterApi); CameraFlutterApi.setup(cameraFlutterApi); SystemServicesFlutterApi.setup(systemServicesFlutterApi); - ImageAnalysisFlutterApi.setup(imageAnalysisFlutterApiImpl); + AnalyzerFlutterApi.setup(analyzerFlutterApiImpl); _haveBeenSetUp = true; } } diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index a18dcff2a35c..124ad36b4aca 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -1,7 +1,7 @@ // 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. -// Autogenerated from Pigeon (v9.1.1), do not edit directly. +// Autogenerated from Pigeon (v9.2.4), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import @@ -925,11 +925,88 @@ class ImageCaptureHostApi { } } -class ImageAnalysisAnalyzerHostApi { - /// Constructor for [ImageAnalysisAnalyzerHostApi]. The [binaryMessenger] named argument is +class ImageAnalysisHostApi { + /// Constructor for [ImageAnalysisHostApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + ImageAnalysisHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = StandardMessageCodec(); + + Future create(int arg_identifier, int? arg_targetResolutionIdentifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier, arg_targetResolutionIdentifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else { + return; + } + } + + Future setAnalyzer(int arg_identifier, int arg_analyzerIdentifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier, arg_analyzerIdentifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else { + return; + } + } + + Future clearAnalyzer(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else { + return; + } + } +} + +class AnalyzerHostApi { + /// Constructor for [AnalyzerHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - ImageAnalysisAnalyzerHostApi({BinaryMessenger? binaryMessenger}) + AnalyzerHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -937,7 +1014,7 @@ class ImageAnalysisAnalyzerHostApi { Future create(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisAnalyzerHostApi.create', codec, + 'dev.flutter.pigeon.AnalyzerHostApi.create', codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_identifier]) as List?; @@ -958,30 +1035,28 @@ class ImageAnalysisAnalyzerHostApi { } } -abstract class ImageAnalysisAnalyzerFlutterApi { +abstract class AnalyzerFlutterApi { static const MessageCodec codec = StandardMessageCodec(); - /// Create a new Dart instance and add it to the `InstanceManager`. void create(int identifier); - /// Callback to Dart function `ImageAnalysisAnalyzer.analyze`. void analyze(int identifier, int imageProxyIdentifier); - static void setup(ImageAnalysisAnalyzerFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(AnalyzerFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.create', codec, + 'dev.flutter.pigeon.AnalyzerFlutterApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.create was null, expected non-null int.'); + 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); @@ -989,21 +1064,21 @@ abstract class ImageAnalysisAnalyzerFlutterApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.analyze', codec, + 'dev.flutter.pigeon.AnalyzerFlutterApi.analyze', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.analyze was null.'); + 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.analyze was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.analyze was null, expected non-null int.'); + 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.analyze was null, expected non-null int.'); final int? arg_imageProxyIdentifier = (args[1] as int?); assert(arg_imageProxyIdentifier != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerFlutterApi.analyze was null, expected non-null int.'); + 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.analyze was null, expected non-null int.'); api.analyze(arg_identifier!, arg_imageProxyIdentifier!); return; }); @@ -1012,34 +1087,6 @@ abstract class ImageAnalysisAnalyzerFlutterApi { } } -class _ImageProxyHostApiCodec extends StandardMessageCodec { - const _ImageProxyHostApiCodec(); - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is CameraPermissionsErrorData) { - buffer.putUint8(128); - writeValue(buffer, value.encode()); - } else if (value is ResolutionInfo) { - buffer.putUint8(129); - writeValue(buffer, value.encode()); - } else { - super.writeValue(buffer, value); - } - } - - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 128: - return CameraPermissionsErrorData.decode(readValue(buffer)!); - case 129: - return ResolutionInfo.decode(readValue(buffer)!); - default: - return super.readValueOfType(type, buffer); - } - } -} - class ImageProxyHostApi { /// Constructor for [ImageProxyHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -1048,10 +1095,9 @@ class ImageProxyHostApi { : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - static const MessageCodec codec = _ImageProxyHostApiCodec(); + static const MessageCodec codec = StandardMessageCodec(); - /// Handles Dart method `ImageProxy.getPlanes`. - Future> getPlanes(int arg_identifier) async { + Future> getPlanes(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyHostApi.getPlanes', codec, binaryMessenger: _binaryMessenger); @@ -1074,11 +1120,10 @@ class ImageProxyHostApi { message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyList[0] as List?)!; + return (replyList[0] as List?)!.cast(); } } - /// Handles Dart method `ImageProxy.getFormat`. Future getFormat(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyHostApi.getFormat', codec, @@ -1106,7 +1151,6 @@ class ImageProxyHostApi { } } - /// Handles Dart method `ImageProxy.getHeight`. Future getHeight(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyHostApi.getHeight', codec, @@ -1134,7 +1178,6 @@ class ImageProxyHostApi { } } - /// Handles Dart method `ImageProxy.getWidth`. Future getWidth(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyHostApi.getWidth', codec, @@ -1162,7 +1205,6 @@ class ImageProxyHostApi { } } - /// Handles Dart method `ImageProxy.close`. Future close(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyHostApi.close', codec, @@ -1189,7 +1231,6 @@ class ImageProxyHostApi { abstract class ImageProxyFlutterApi { static const MessageCodec codec = StandardMessageCodec(); - /// Create a new Dart instance and add it to the `InstanceManager`. void create(int identifier); static void setup(ImageProxyFlutterApi? api, {BinaryMessenger? binaryMessenger}) { @@ -1215,132 +1256,19 @@ abstract class ImageProxyFlutterApi { } } -class ImageAnalysisHostApi { - /// Constructor for [ImageAnalysisHostApi]. The [binaryMessenger] named argument is - /// available for dependency injection. If it is left null, the default - /// BinaryMessenger will be used which routes to the host platform. - ImageAnalysisHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = StandardMessageCodec(); - - /// Create a new native instance and add it to the `InstanceManager`. - Future create(int arg_identifier, int? arg_targetResolutionIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_targetResolutionIdentifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else { - return; - } - } - - /// Handles Dart method `ImageAnalysis.setAnalyzer`. - Future setAnalyzer(int arg_identifier, int arg_analyzerIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_analyzerIdentifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else { - return; - } - } - - /// Handles Dart method `ImageAnalysis.clearAnalyzer`. - Future clearAnalyzer(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else { - return; - } - } -} - -abstract class ImageAnalysisFlutterApi { - static const MessageCodec codec = StandardMessageCodec(); - - /// Create a new Dart instance and add it to the `InstanceManager`. - void create(int identifier, int targetResolutionIdentifier); - - static void setup(ImageAnalysisFlutterApi? api, {BinaryMessenger? binaryMessenger}) { - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisFlutterApi.create', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMessageHandler(null); - } else { - channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.create was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.create was null, expected non-null int.'); - final int? arg_targetResolutionIdentifier = (args[1] as int?); - assert(arg_targetResolutionIdentifier != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisFlutterApi.create was null, expected non-null int.'); - api.create(arg_identifier!, arg_targetResolutionIdentifier!); - return; - }); - } - } - } -} - -class ImageProxyPlaneProxyHostApi { - /// Constructor for [ImageProxyPlaneProxyHostApi]. The [binaryMessenger] named argument is +class PlaneProxyHostApi { + /// Constructor for [PlaneProxyHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - ImageProxyPlaneProxyHostApi({BinaryMessenger? binaryMessenger}) + PlaneProxyHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = StandardMessageCodec(); - /// Handles Dart method `ImageProxyPlaneProxy.getPixelStride`. Future getPixelStride(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getPixelStride', codec, + 'dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride', codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_identifier]) as List?; @@ -1365,10 +1293,9 @@ class ImageProxyPlaneProxyHostApi { } } - /// Handles Dart method `ImageProxyPlaneProxy.getRowStride`. Future getBuffer(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getBuffer', codec, + 'dev.flutter.pigeon.PlaneProxyHostApi.getBuffer', codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_identifier]) as List?; @@ -1393,10 +1320,9 @@ class ImageProxyPlaneProxyHostApi { } } - /// Handles Dart method `ImageProxyPlaneProxy.getRowStride`. Future getRowStride(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getRowStride', codec, + 'dev.flutter.pigeon.PlaneProxyHostApi.getRowStride', codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_identifier]) as List?; @@ -1422,27 +1348,26 @@ class ImageProxyPlaneProxyHostApi { } } -abstract class ImageProxyPlaneProxyFlutterApi { +abstract class PlaneProxyFlutterApi { static const MessageCodec codec = StandardMessageCodec(); - /// Create a new Dart instance and add it to the `InstanceManager`. void create(int identifier); - static void setup(ImageProxyPlaneProxyFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(PlaneProxyFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyPlaneProxyFlutterApi.create', codec, + 'dev.flutter.pigeon.PlaneProxyFlutterApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyFlutterApi.create was null, expected non-null int.'); + 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index 8d2bb79bdc9e..fc02f80df1a4 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -4,15 +4,12 @@ import 'dart:async'; -import 'package:camera_platform_interface/camera_platform_interface.dart' - show CameraImageData, CameraImageFormat, CameraImagePlane, ImageFormatGroup; import 'package:flutter/services.dart' show BinaryMessenger; -import 'package:meta/meta.dart' show protected; import 'package:simple_ast/annotations.dart'; +import 'analyzer.dart'; import 'android_camera_camerax_flutter_api_impls.dart'; import 'camerax_library.g.dart'; -import 'image_analysis_analyzer.dart'; import 'instance_manager.dart'; import 'java_object.dart'; import 'use_case.dart'; @@ -49,36 +46,20 @@ class ImageAnalysis extends UseCase { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - // /// Stream that emits data whenever a frame is received for image streaming. - // static final StreamController - // onStreamedFrameAvailableStreamController = - // StreamController.broadcast(); - late final _ImageAnalysisHostApiImpl _api; /// Target resolution of the camera preview stream. final ResolutionInfo? targetResolution; - /// Configures this instance for image streaming support. - /// - /// This is a direct wrapping of the setAnalyzer method in CameraX, - /// but also handles the creation of the CameraX ImageAnalysis.Analyzer - /// that is used to collect the image information required for image - /// streaming. - /// - /// See [ImageAnalysisFlutterApiImpl.onImageAnalyzed] for the image - /// information that is analyzed by the created ImageAnalysis.Analyzer - /// instance. - Future setAnalyzer(ImageAnalysisAnalyzer analyzer) async { - _api.setAnalyzerfromInstances(this, analyzer); - } + /// Sets an [Analyzer] to receive and analyze images. + Future setAnalyzer(Analyzer analyzer) => + _api.setAnalyzerfromInstances(this, analyzer); - /// Clears previously set analyzer for image streaming support. - Future clearAnalyzer() async { - _api.clearAnalyzerfromInstances(this); - } + /// Removes a previously set [Analyzer]. + Future clearAnalyzer() => _api.clearAnalyzerfromInstances(this); } +/// Host API implementation of [ImageAnalysis]. class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { _ImageAnalysisHostApiImpl({ this.binaryMessenger, @@ -90,6 +71,8 @@ class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { final InstanceManager instanceManager; + /// Creates an [ImageAnalysis] instance with the specified target resolution + /// on the native side. Future createfromInstances( ImageAnalysis instance, ResolutionInfo? targetResolution, @@ -109,25 +92,10 @@ class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { ); } - // StreamController attachOnStreamedFrameAvailableStreamControllerfromInstancess( - // StreamController onStreamedFrameAvailableStreamController, - // ) { - // attachOnStreamedFrameAvailableStreamController( - // instanceManager.addDartCreatedInstance( - // onStreamedFrameAvailableStreamController, - // onCopy: (StreamController original) => StreamController.detached( - // // TODO(bparrishMines): This should include the missing params. - // binaryMessenger: binaryMessenger, - // instanceManager: instanceManager, - // ), - // ), - // ); - // return onStreamedFrameAvailableStreamController; - // } - + /// Sets the [analyzer] to receive and analyze images on the [instance]. Future setAnalyzerfromInstances( ImageAnalysis instance, - ImageAnalysisAnalyzer analyzer, + Analyzer analyzer, ) { return setAnalyzer( instanceManager.getIdentifier(instance)!, @@ -135,6 +103,7 @@ class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { ); } + /// Removes a previously set analyzer from the [instance]. Future clearAnalyzerfromInstances( ImageAnalysis instance, ) { @@ -143,50 +112,3 @@ class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { ); } } - -/// Flutter API implementation for [ImageAnalysis]. -/// -/// This class may handle instantiating and adding Dart instances that are -/// attached to a native instance or receiving callback methods from an -/// overridden native class. -@protected -class ImageAnalysisFlutterApiImpl implements ImageAnalysisFlutterApi { - /// Constructs a [ImageAnalysisFlutterApiImpl]. - ImageAnalysisFlutterApiImpl({ - this.binaryMessenger, - InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; - - /// Receives binary data across the Flutter platform barrier. - /// - /// If it is null, the default BinaryMessenger will be used which routes to - /// the host platform. - final BinaryMessenger? binaryMessenger; - - /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; - - @override - void create( - int identifier, - int? targetResolutionIdentifier, - ) { - instanceManager.addHostCreatedInstance( - ImageAnalysis.detached( - targetResolution: targetResolutionIdentifier == null - ? null - : instanceManager.getInstanceWithWeakReference( - targetResolutionIdentifier, - ), - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, - ), - identifier, - onCopy: (ImageAnalysis original) => ImageAnalysis.detached( - targetResolution: original.targetResolution, - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, - ), - ); - } -} diff --git a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart index dbad362f1ba6..d07c1392de2b 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart @@ -4,33 +4,20 @@ import 'dart:async'; -import 'package:camera_platform_interface/camera_platform_interface.dart' - show CameraImageData, CameraImageFormat, CameraImagePlane, ImageFormatGroup; import 'package:flutter/services.dart' show BinaryMessenger; import 'package:meta/meta.dart' show protected; -import 'package:simple_ast/annotations.dart'; import 'android_camera_camerax_flutter_api_impls.dart'; import 'camerax_library.g.dart'; -import 'image_proxy_plane_proxy.dart'; import 'instance_manager.dart'; import 'java_object.dart'; -import 'use_case.dart'; +import 'plane_proxy.dart'; -@SimpleClassAnnotation() +/// Representation of a single complete image buffer. +/// +/// See https://developer.android.com/reference/androidx/camera/core/ImageProxy. class ImageProxy extends JavaObject { -// ImageProxyPlaneProxy( -// {BinaryMessenger? binaryMessenger, -// InstanceManager? instanceManager}) -// : super.detached( -// binaryMessenger: binaryMessenger, -// instanceManager: instanceManager) { -// _api = ImageProxyPlaneProxyHostApiImpl( -// binaryMessenger: binaryMessenger, instanceManager: instanceManager); -// _api.createFromInstance(this); -// AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); -// } - + /// Constructs a [ImageProxy] that is not automatically attached to a native object. ImageProxy.detached( {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) : super.detached( @@ -43,27 +30,23 @@ class ImageProxy extends JavaObject { late final _ImageProxyHostApiImpl _api; - Future> getPlanes() { - return _api.getPlanesFromInstances(this); - } + /// Returns the list of color planes of image data. + Future> getPlanes() => _api.getPlanesFromInstances(this); - Future getFormat() { - return _api.getFormatFromInstances(this); - } + /// Returns the image format. + Future getFormat() => _api.getFormatFromInstances(this); - Future getHeight() { - return _api.getHeightFromInstances(this); - } + /// Returns the image height. + Future getHeight() => _api.getHeightFromInstances(this); - Future getWidth() { - return _api.getWidthFromInstances(this); - } + /// Returns the image width. + Future getWidth() => _api.getWidthFromInstances(this); - Future close() { - return _api.closeFromInstances(this); - } + /// Closes the underlying image. + Future close() => _api.closeFromInstances(this); } +/// Host API implementation of [ImageProxy]. class _ImageProxyHostApiImpl extends ImageProxyHostApi { _ImageProxyHostApiImpl({ this.binaryMessenger, @@ -75,18 +58,22 @@ class _ImageProxyHostApiImpl extends ImageProxyHostApi { final InstanceManager instanceManager; - Future> getPlanesFromInstances( + /// Returns the list of color planes of the image data represnted by the + /// [instance]. + Future> getPlanesFromInstances( ImageProxy instance, ) async { - List planesAsObjects = await getPlanes( + final List planesAsObjects = await getPlanes( instanceManager.getIdentifier(instance)!, ); - return planesAsObjects.map((Object? obj) { - return obj! as ImageProxyPlaneProxy; - }) as List; + return planesAsObjects.map((int? planeIdentifier) { + return instanceManager + .getInstanceWithWeakReference(planeIdentifier!)!; + }) as List; } + /// Returns the format of the image represented by the [instance]. Future getFormatFromInstances( ImageProxy instance, ) { @@ -95,6 +82,7 @@ class _ImageProxyHostApiImpl extends ImageProxyHostApi { ); } + /// Returns the height of the image represented by the [instance]. Future getHeightFromInstances( ImageProxy instance, ) { @@ -103,6 +91,7 @@ class _ImageProxyHostApiImpl extends ImageProxyHostApi { ); } + /// Returns the width of the image represented by the [instance]. Future getWidthFromInstances( ImageProxy instance, ) { @@ -111,6 +100,7 @@ class _ImageProxyHostApiImpl extends ImageProxyHostApi { ); } + /// Closes the underlying image of the [instance]. Future closeFromInstances( ImageProxy instance, ) { diff --git a/packages/camera/camera_android_camerax/lib/src/image_proxy_plane_proxy.dart b/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart similarity index 64% rename from packages/camera/camera_android_camerax/lib/src/image_proxy_plane_proxy.dart rename to packages/camera/camera_android_camerax/lib/src/plane_proxy.dart index a0748d097fad..bc398f652f2a 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_proxy_plane_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart @@ -5,59 +5,52 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:camera_platform_interface/camera_platform_interface.dart' - show CameraImageData, CameraImageFormat, CameraImagePlane, ImageFormatGroup; import 'package:flutter/services.dart' show BinaryMessenger; import 'package:meta/meta.dart' show protected; -import 'package:simple_ast/annotations.dart'; import 'android_camera_camerax_flutter_api_impls.dart'; import 'camerax_library.g.dart'; import 'instance_manager.dart'; import 'java_object.dart'; -import 'use_case.dart'; - -@SimpleClassAnnotation() -class ImageProxyPlaneProxy extends JavaObject { -// ImageProxyPlaneProxy( -// {BinaryMessenger? binaryMessenger, -// InstanceManager? instanceManager}) -// : super.detached( -// binaryMessenger: binaryMessenger, -// instanceManager: instanceManager) { -// _api = ImageProxyPlaneProxyHostApiImpl( -// binaryMessenger: binaryMessenger, instanceManager: instanceManager); -// _api.createfromInstances(this); -// AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); -// } - - ImageProxyPlaneProxy.detached( + +/// A single color plane of image data. +/// +/// See https://developer.android.com/reference/androidx/camera/core/ImageProxy.PlaneProxy. +class PlaneProxy extends JavaObject { + /// Constructs a [PlaneProxy] that is not automatically attached to a native object. + PlaneProxy.detached( {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) : super.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager) { - _api = _ImageProxyPlaneProxyHostApiImpl( + _api = _PlaneProxyHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - late final _ImageProxyPlaneProxyHostApiImpl _api; + late final _PlaneProxyHostApiImpl _api; + /// Returns the pixels buffer containing frame data. Future getBuffer() { return _api.getBufferfromInstances(this); } + /// Returns the pixel stride, the distance between adjacent pixel samples, in + /// bytes. Future getPixelStride() { return _api.getPixelStridefromInstances(this); } + /// Returns the row stride, the distance between the start of two consecutive + /// rows of pixels in the image, in bytes. Future getRowStride() { return _api.getRowStridefromInstances(this); } } -class _ImageProxyPlaneProxyHostApiImpl extends ImageProxyPlaneProxyHostApi { - _ImageProxyPlaneProxyHostApiImpl({ +/// Host API implementation of [PlaneProxy]. +class _PlaneProxyHostApiImpl extends PlaneProxyHostApi { + _PlaneProxyHostApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager, @@ -67,24 +60,27 @@ class _ImageProxyPlaneProxyHostApiImpl extends ImageProxyPlaneProxyHostApi { final InstanceManager instanceManager; + /// Returns the pixel stride of the [instance]. Future getPixelStridefromInstances( - ImageProxyPlaneProxy instance, + PlaneProxy instance, ) { return getPixelStride( instanceManager.getIdentifier(instance)!, ); } + /// Returns the pixels buffer of the [instance]. Future getBufferfromInstances( - ImageProxyPlaneProxy instance, + PlaneProxy instance, ) { return getBuffer( instanceManager.getIdentifier(instance)!, ); } + /// Returns the row stride of the [instance]. Future getRowStridefromInstances( - ImageProxyPlaneProxy instance, + PlaneProxy instance, ) async { return getRowStride( instanceManager.getIdentifier(instance)!, @@ -92,16 +88,15 @@ class _ImageProxyPlaneProxyHostApiImpl extends ImageProxyPlaneProxyHostApi { } } -/// Flutter API implementation for [ImageProxyPlaneProxy]. +/// Flutter API implementation for [PlaneProxy]. /// /// This class may handle instantiating and adding Dart instances that are /// attached to a native instance or receiving callback methods from an /// overridden native class. @protected -class ImageProxyPlaneProxyFlutterApiImpl - implements ImageProxyPlaneProxyFlutterApi { - /// Constructs a [ImageProxyPlaneProxyFlutterApiImpl]. - ImageProxyPlaneProxyFlutterApiImpl({ +class PlaneProxyFlutterApiImpl implements PlaneProxyFlutterApi { + /// Constructs a [PlaneProxyFlutterApiImpl]. + PlaneProxyFlutterApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; @@ -120,12 +115,12 @@ class ImageProxyPlaneProxyFlutterApiImpl int identifier, ) { instanceManager.addHostCreatedInstance( - ImageProxyPlaneProxy.detached( + PlaneProxy.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager, ), identifier, - onCopy: (ImageProxyPlaneProxy original) => ImageProxyPlaneProxy.detached( + onCopy: (PlaneProxy original) => PlaneProxy.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager, ), diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 48fdeabc3daf..b9f15ec6d543 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -46,32 +46,6 @@ class CameraPermissionsErrorData { String description; } -class ImagePlaneInformation { - ImagePlaneInformation({ - required this.bytes, - required this.bytesPerRow, - required this.bytesPerPixel, - }); - - Uint8List bytes; - int bytesPerRow; - int bytesPerPixel; -} - -class ImageInformation { - ImageInformation({ - required this.format, - required this.imagePlanesInformation, - required this.height, - required this.width, - }); - - int format; - List imagePlanesInformation; - int height; - int width; -} - @HostApi(dartHostTestHandler: 'TestInstanceManagerHostApi') abstract class InstanceManagerHostApi { /// Clear the native `InstanceManager`. @@ -178,164 +152,55 @@ abstract class ImageCaptureHostApi { String takePicture(int identifier); } -// @HostApi(dartHostTestHandler: 'TestImageAnalysisHostApi') -// abstract class ImageAnalysisHostApi { -// void create(int identifier, ResolutionInfo? targetResolution); - -// void setAnalyzer(int identifier); +@HostApi(dartHostTestHandler: 'TestImageAnalysisHostApi') +abstract class ImageAnalysisHostApi { + void create(int identifier, int? targetResolutionIdentifier); -// void clearAnalyzer(int identifier); -// } + void setAnalyzer(int identifier, int analyzerIdentifier); -// @FlutterApi() -// abstract class ImageAnalysisFlutterApi { -// void onImageAnalyzed(ImageInformation imageInformation); -// } + void clearAnalyzer(int identifier); +} -@HostApi(dartHostTestHandler: 'TestImageAnalysisAnalyzerHostApi') -abstract class ImageAnalysisAnalyzerHostApi { +@HostApi(dartHostTestHandler: 'TestAnalyzerHostApi') +abstract class AnalyzerHostApi { void create(int identifier); - } @FlutterApi() -abstract class ImageAnalysisAnalyzerFlutterApi { - /// Create a new Dart instance and add it to the `InstanceManager`. - - void create( - int identifier, - - ); - - /// Callback to Dart function `ImageAnalysisAnalyzer.analyze`. - - void analyze( - int identifier, - int imageProxyIdentifier, +abstract class AnalyzerFlutterApi { + void create(int identifier); - ); + void analyze(int identifier, int imageProxyIdentifier); } @HostApi(dartHostTestHandler: 'TestImageProxyHostApi') abstract class ImageProxyHostApi { + List getPlanes(int identifier); - /// Handles Dart method `ImageProxy.getPlanes`. - - List getPlanes( - int identifier, - - ); - - /// Handles Dart method `ImageProxy.getFormat`. - - int getFormat( - int identifier, - - ); - - /// Handles Dart method `ImageProxy.getHeight`. - - int getHeight( - int identifier, - - ); - - /// Handles Dart method `ImageProxy.getWidth`. - - int getWidth( - int identifier, - - ); - - /// Handles Dart method `ImageProxy.close`. + int getFormat(int identifier); - void close( - int identifier, + int getHeight(int identifier); - ); + int getWidth(int identifier); + void close(int identifier); } @FlutterApi() abstract class ImageProxyFlutterApi { - /// Create a new Dart instance and add it to the `InstanceManager`. - - void create( - int identifier, - - ); - -} - -@HostApi(dartHostTestHandler: 'TestImageAnalysisHostApi') -abstract class ImageAnalysisHostApi { - - /// Create a new native instance and add it to the `InstanceManager`. - - void create( - int identifier, - - int? targetResolutionIdentifier, - - ); - - // /// Handles attaching `ImageAnalysis.onStreamedFrameAvailableStreamController` to a native instance. - - // void attachOnStreamedFrameAvailableStreamController( - - // int onStreamedFrameAvailableStreamControllerIdentifier, - // ); - - /// Handles Dart method `ImageAnalysis.setAnalyzer`. - - void setAnalyzer( - int identifier, - - int analyzerIdentifier, - - ); - - /// Handles Dart method `ImageAnalysis.clearAnalyzer`. - - void clearAnalyzer( - int identifier, - - ); - + void create(int identifier); } -@HostApi(dartHostTestHandler: 'TestImageProxyPlaneProxyHostApi') -abstract class ImageProxyPlaneProxyHostApi { - - /// Handles Dart method `ImageProxyPlaneProxy.getPixelStride`. - - int getPixelStride( - int identifier, - - ); +@HostApi(dartHostTestHandler: 'TestPlaneProxyHostApi') +abstract class PlaneProxyHostApi { + int getPixelStride(int identifier); - /// Handles Dart method `ImageProxyPlaneProxy.getRowStride`. + Uint8List getBuffer(int identifier); - Uint8List getBuffer( - int identifier, - - ); - - /// Handles Dart method `ImageProxyPlaneProxy.getRowStride`. - - int getRowStride( - int identifier, - - ); + int getRowStride(int identifier); } @FlutterApi() -abstract class ImageProxyPlaneProxyFlutterApi { - /// Create a new Dart instance and add it to the `InstanceManager`. - - void create( - int identifier, - - ); - +abstract class PlaneProxyFlutterApi { + void create(int identifier); } diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index 7d09053727dc..d075d491161d 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -23,6 +23,7 @@ dependencies: sdk: flutter integration_test: sdk: flutter + meta: ^1.7.0 simple_ast: git: url: git@github.com:bparrishMines/penguin.git @@ -32,20 +33,7 @@ dependencies: dev_dependencies: async: ^2.5.0 build_runner: ^2.2.0 - code_template_processor: - git: - url: git@github.com:bparrishMines/penguin.git - path: packages/code_template_processor flutter_test: sdk: flutter - gen_api_impls: - git: - url: git@github.com:bparrishMines/penguin.git - path: packages/gen_api_impls mockito: ^5.3.2 - pedantic: ^1.10.0 pigeon: ^9.1.0 - simple_ast_generator: - git: - url: git@github.com:bparrishMines/penguin.git - path: packages/simple_ast_generator diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index 029616560eb7..5832700ecf3e 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -1,7 +1,7 @@ // 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. -// Autogenerated from Pigeon (v9.1.1), do not edit directly. +// Autogenerated from Pigeon (v9.2.4), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import // ignore_for_file: avoid_relative_lib_imports @@ -14,6 +14,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; abstract class TestInstanceManagerHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); /// Clear the native `InstanceManager`. @@ -27,9 +28,9 @@ abstract class TestInstanceManagerHostApi { 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { // ignore message api.clear(); return []; @@ -40,6 +41,7 @@ abstract class TestInstanceManagerHostApi { } abstract class TestJavaObjectHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void dispose(int identifier); @@ -50,9 +52,9 @@ abstract class TestJavaObjectHostApi { 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; @@ -68,6 +70,7 @@ abstract class TestJavaObjectHostApi { } abstract class TestCameraInfoHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getSensorRotationDegrees(int identifier); @@ -78,9 +81,9 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); final List args = (message as List?)!; @@ -96,6 +99,7 @@ abstract class TestCameraInfoHostApi { } abstract class TestCameraSelectorHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void create(int identifier, int? lensFacing); @@ -108,9 +112,9 @@ abstract class TestCameraSelectorHostApi { 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); final List args = (message as List?)!; @@ -128,9 +132,9 @@ abstract class TestCameraSelectorHostApi { 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); final List args = (message as List?)!; @@ -149,6 +153,7 @@ abstract class TestCameraSelectorHostApi { } abstract class TestProcessCameraProviderHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); Future getInstance(); @@ -169,9 +174,9 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { // ignore message final int output = await api.getInstance(); return [output]; @@ -183,9 +188,9 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); final List args = (message as List?)!; @@ -202,9 +207,9 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); final List args = (message as List?)!; @@ -227,9 +232,9 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); final List args = (message as List?)!; @@ -249,9 +254,9 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); final List args = (message as List?)!; @@ -271,9 +276,9 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); final List args = (message as List?)!; @@ -312,6 +317,7 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { } abstract class TestSystemServicesHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestSystemServicesHostApiCodec(); Future requestCameraPermissions(bool enableAudio); @@ -326,9 +332,9 @@ abstract class TestSystemServicesHostApi { 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); final List args = (message as List?)!; @@ -345,9 +351,9 @@ abstract class TestSystemServicesHostApi { 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); final List args = (message as List?)!; @@ -367,9 +373,9 @@ abstract class TestSystemServicesHostApi { 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { // ignore message api.stopListeningForDeviceOrientationChange(); return []; @@ -408,6 +414,7 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { } abstract class TestPreviewHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestPreviewHostApiCodec(); void create(int identifier, int? rotation, ResolutionInfo? targetResolution); @@ -424,9 +431,9 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); final List args = (message as List?)!; @@ -445,9 +452,9 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); final List args = (message as List?)!; @@ -464,9 +471,9 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { // ignore message api.releaseFlutterSurfaceTexture(); return []; @@ -478,9 +485,9 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); final List args = (message as List?)!; @@ -519,6 +526,7 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { } abstract class TestImageCaptureHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestImageCaptureHostApiCodec(); void create(int identifier, int? flashMode, ResolutionInfo? targetResolution); @@ -533,9 +541,9 @@ abstract class TestImageCaptureHostApi { 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); final List args = (message as List?)!; @@ -554,9 +562,9 @@ abstract class TestImageCaptureHostApi { 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); final List args = (message as List?)!; @@ -576,9 +584,9 @@ abstract class TestImageCaptureHostApi { 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); final List args = (message as List?)!; @@ -593,27 +601,74 @@ abstract class TestImageCaptureHostApi { } } -abstract class TestImageAnalysisAnalyzerHostApi { +abstract class TestImageAnalysisHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); - void create(int identifier); + void create(int identifier, int? targetResolutionIdentifier); + + void setAnalyzer(int identifier, int analyzerIdentifier); - static void setup(TestImageAnalysisAnalyzerHostApi? api, {BinaryMessenger? binaryMessenger}) { + void clearAnalyzer(int identifier); + + static void setup(TestImageAnalysisHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisAnalyzerHostApi.create', codec, + 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisAnalyzerHostApi.create was null, expected non-null int.'); - api.create(arg_identifier!); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); + final int? arg_targetResolutionIdentifier = (args[1] as int?); + api.create(arg_identifier!, arg_targetResolutionIdentifier); + return []; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null, expected non-null int.'); + final int? arg_analyzerIdentifier = (args[1] as int?); + assert(arg_analyzerIdentifier != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null, expected non-null int.'); + api.setAnalyzer(arg_identifier!, arg_analyzerIdentifier!); + return []; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null, expected non-null int.'); + api.clearAnalyzer(arg_identifier!); return []; }); } @@ -621,50 +676,47 @@ abstract class TestImageAnalysisAnalyzerHostApi { } } -class _TestImageProxyHostApiCodec extends StandardMessageCodec { - const _TestImageProxyHostApiCodec(); - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is CameraPermissionsErrorData) { - buffer.putUint8(128); - writeValue(buffer, value.encode()); - } else if (value is ResolutionInfo) { - buffer.putUint8(129); - writeValue(buffer, value.encode()); - } else { - super.writeValue(buffer, value); - } - } +abstract class TestAnalyzerHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static const MessageCodec codec = StandardMessageCodec(); - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 128: - return CameraPermissionsErrorData.decode(readValue(buffer)!); - case 129: - return ResolutionInfo.decode(readValue(buffer)!); - default: - return super.readValueOfType(type, buffer); + void create(int identifier); + + static void setup(TestAnalyzerHostApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.AnalyzerHostApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.AnalyzerHostApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.AnalyzerHostApi.create was null, expected non-null int.'); + api.create(arg_identifier!); + return []; + }); + } } } } abstract class TestImageProxyHostApi { - static const MessageCodec codec = _TestImageProxyHostApiCodec(); + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static const MessageCodec codec = StandardMessageCodec(); - /// Handles Dart method `ImageProxy.getPlanes`. - List getPlanes(int identifier); + List getPlanes(int identifier); - /// Handles Dart method `ImageProxy.getFormat`. int getFormat(int identifier); - /// Handles Dart method `ImageProxy.getHeight`. int getHeight(int identifier); - /// Handles Dart method `ImageProxy.getWidth`. int getWidth(int identifier); - /// Handles Dart method `ImageProxy.close`. void close(int identifier); static void setup(TestImageProxyHostApi? api, {BinaryMessenger? binaryMessenger}) { @@ -673,16 +725,16 @@ abstract class TestImageProxyHostApi { 'dev.flutter.pigeon.ImageProxyHostApi.getPlanes', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getPlanes was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getPlanes was null, expected non-null int.'); - final List output = api.getPlanes(arg_identifier!); + final List output = api.getPlanes(arg_identifier!); return [output]; }); } @@ -692,9 +744,9 @@ abstract class TestImageProxyHostApi { 'dev.flutter.pigeon.ImageProxyHostApi.getFormat', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getFormat was null.'); final List args = (message as List?)!; @@ -711,9 +763,9 @@ abstract class TestImageProxyHostApi { 'dev.flutter.pigeon.ImageProxyHostApi.getHeight', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getHeight was null.'); final List args = (message as List?)!; @@ -730,9 +782,9 @@ abstract class TestImageProxyHostApi { 'dev.flutter.pigeon.ImageProxyHostApi.getWidth', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getWidth was null.'); final List args = (message as List?)!; @@ -749,9 +801,9 @@ abstract class TestImageProxyHostApi { 'dev.flutter.pigeon.ImageProxyHostApi.close', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImageProxyHostApi.close was null.'); final List args = (message as List?)!; @@ -766,110 +818,31 @@ abstract class TestImageProxyHostApi { } } -abstract class TestImageAnalysisHostApi { - static const MessageCodec codec = StandardMessageCodec(); - - /// Create a new native instance and add it to the `InstanceManager`. - void create(int identifier, int? targetResolutionIdentifier); - - /// Handles Dart method `ImageAnalysis.setAnalyzer`. - void setAnalyzer(int identifier, int analyzerIdentifier); - - /// Handles Dart method `ImageAnalysis.clearAnalyzer`. - void clearAnalyzer(int identifier); - - static void setup(TestImageAnalysisHostApi? api, {BinaryMessenger? binaryMessenger}) { - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); - final int? arg_targetResolutionIdentifier = (args[1] as int?); - api.create(arg_identifier!, arg_targetResolutionIdentifier); - return []; - }); - } - } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null, expected non-null int.'); - final int? arg_analyzerIdentifier = (args[1] as int?); - assert(arg_analyzerIdentifier != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null, expected non-null int.'); - api.setAnalyzer(arg_identifier!, arg_analyzerIdentifier!); - return []; - }); - } - } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null, expected non-null int.'); - api.clearAnalyzer(arg_identifier!); - return []; - }); - } - } - } -} - -abstract class TestImageProxyPlaneProxyHostApi { +abstract class TestPlaneProxyHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); - /// Handles Dart method `ImageProxyPlaneProxy.getPixelStride`. int getPixelStride(int identifier); - /// Handles Dart method `ImageProxyPlaneProxy.getRowStride`. Uint8List getBuffer(int identifier); - /// Handles Dart method `ImageProxyPlaneProxy.getRowStride`. int getRowStride(int identifier); - static void setup(TestImageProxyPlaneProxyHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestPlaneProxyHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getPixelStride', codec, + 'dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getPixelStride was null.'); + 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getPixelStride was null, expected non-null int.'); + 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride was null, expected non-null int.'); final int output = api.getPixelStride(arg_identifier!); return [output]; }); @@ -877,18 +850,18 @@ abstract class TestImageProxyPlaneProxyHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getBuffer', codec, + 'dev.flutter.pigeon.PlaneProxyHostApi.getBuffer', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getBuffer was null.'); + 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getBuffer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getBuffer was null, expected non-null int.'); + 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getBuffer was null, expected non-null int.'); final Uint8List output = api.getBuffer(arg_identifier!); return [output]; }); @@ -896,18 +869,18 @@ abstract class TestImageProxyPlaneProxyHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getRowStride', codec, + 'dev.flutter.pigeon.PlaneProxyHostApi.getRowStride', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getRowStride was null.'); + 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getRowStride was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageProxyPlaneProxyHostApi.getRowStride was null, expected non-null int.'); + 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getRowStride was null, expected non-null int.'); final int output = api.getRowStride(arg_identifier!); return [output]; }); From 98776010736e2215878fb676798992ce670c85d8 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 18 Apr 2023 16:16:22 -0700 Subject: [PATCH 39/62] Correct generator on java files --- ...iImpl.java => AnalyzerFlutterApiImpl.java} | 40 ++++------ ...tApiImpl.java => AnalyzerHostApiImpl.java} | 68 +++++++---------- .../camerax/CameraAndroidCameraxPlugin.java | 6 ++ ...iImplsImageProxyPlaneProxyHostApiImpl.java | 73 ------------------ .../camerax/ImageAnalysisHostApiImpl.java | 74 ++----------------- ...mpl.java => ImageProxyFlutterApiImpl.java} | 19 ++--- ...piImpl.java => ImageProxyHostApiImpl.java} | 35 ++++----- ...mpl.java => PlaneProxyFlutterApiImpl.java} | 34 ++++----- .../camerax/PlaneProxyHostApiImpl.java | 57 ++++++++++++++ 9 files changed, 145 insertions(+), 261 deletions(-) rename packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/{GenApiImplsImageAnalysisAnalyzerFlutterApiImpl.java => AnalyzerFlutterApiImpl.java} (54%) rename packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/{GenApiImplsImageAnalysisAnalyzerHostApiImpl.java => AnalyzerHostApiImpl.java} (53%) delete mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyHostApiImpl.java rename packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/{GenApiImplsImageProxyFlutterApiImpl.java => ImageProxyFlutterApiImpl.java} (72%) rename packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/{GenApiImplsImageProxyHostApiImpl.java => ImageProxyHostApiImpl.java} (64%) rename packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/{GenApiImplsImageProxyPlaneProxyFlutterApiImpl.java => PlaneProxyFlutterApiImpl.java} (55%) create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerFlutterApiImpl.java similarity index 54% rename from packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerFlutterApiImpl.java rename to packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerFlutterApiImpl.java index c6b38ee86e79..5a0a4040c871 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerFlutterApiImpl.java @@ -1,68 +1,60 @@ - // 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. -// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation - package io.flutter.plugins.camerax; -// TODO(bparrishMines): Fix name of generated pigeon file -// TODO(bparrishMines): Import native classes -import GeneratedPigeonFilename.ImageAnalysisAnalyzerFlutterApi; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; +import androidx.camera.core.ImageAnalysis; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerFlutterApi; import io.flutter.plugin.common.BinaryMessenger; import java.util.Objects; /** - * Flutter API implementation for `ImageAnalysisAnalyzer`. + * Flutter API implementation for {@link ImageAnalysis.Analyzer}. * *

This class may handle adding native instances that are attached to a Dart instance or passing * arguments of callbacks methods to a Dart instance. */ -public class ImageAnalysisAnalyzerFlutterApiImpl { - - // To ease adding additional methods, this value is added prematurely. - @SuppressWarnings({"unused", "FieldCanBeLocal"}) +public class AnalyzerFlutterApiImpl { private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; - private ImageAnalysisAnalyzerFlutterApi api; + private AnalyzerFlutterApi api; /** - * Constructs a {@link ImageAnalysisAnalyzerFlutterApiImpl}. + * Constructs a {@link AnalyzerFlutterApiImpl}. * * @param binaryMessenger used to communicate with Dart over asynchronous messages * @param instanceManager maintains instances stored to communicate with attached Dart objects */ - public ImageAnalysisAnalyzerFlutterApiImpl( + public AnalyzerFlutterApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; - api = new ImageAnalysisAnalyzerFlutterApi(binaryMessenger); + api = new AnalyzerFlutterApi(binaryMessenger); } /** - * Stores the `ImageAnalysisAnalyzer` instance and notifies Dart to create and store a new - * `ImageAnalysisAnalyzer` instance that is attached to this one. If `instance` has already been + * Stores the {@link ImageAnalysis.Analyzer} instance and notifies Dart to create and store a new + * {@code Analyzer} instance that is attached to this one. If {@code instance} has already been * added, this method does nothing. */ public void create( - @NonNull ImageAnalysisAnalyzer instance, - @NonNull ImageAnalysisAnalyzerFlutterApi.Reply callback) { + @NonNull ImageAnalysis.Analyzer instance, + @NonNull AnalyzerFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { api.create(instanceManager.addHostCreatedInstance(instance), callback); } } /** - * Sends a message to Dart to call `ImageAnalysisAnalyzer.analyze` on the Dart object representing + * Sends a message to Dart to call {@code Analyzer.analyze} on the Dart object representing * `instance`. */ public void analyze( - @NonNull ImageAnalysisAnalyzer instance, - @NonNull ImageAnalysisAnalyzerFlutterApi.Reply callback) { + @NonNull ImageAnalysis.Analyzer instance, + @NonNull AnalyzerFlutterApi.Reply callback) { api.analyze( Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(instance)), callback); @@ -74,7 +66,7 @@ public void analyze( *

This is only visible for testing. */ @VisibleForTesting - void setApi(@NonNull ImageAnalysisAnalyzerFlutterApi api) { + void setApi(@NonNull AnalyzerFlutterApi api) { this.api = api; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java similarity index 53% rename from packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerHostApiImpl.java rename to packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java index fcafe5b98bed..85fa86292f39 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java @@ -1,68 +1,55 @@ - // 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. -// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation - package io.flutter.plugins.camerax; -// TODO(bparrishMines): Fix name of generated pigeon file -// TODO(bparrishMines): Import native classes -import GeneratedPigeonFilename.ImageAnalysisAnalyzerHostApi; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; +import androidx.camera.core.ImageAnalysis; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerHostApi; import io.flutter.plugin.common.BinaryMessenger; import java.util.Objects; /** - * Host API implementation for `ImageAnalysisAnalyzer`. + * Host API implementation for {@link ImageAnalysis.Analyzer}. * *

This class may handle instantiating and adding native object instances that are attached to a * Dart instance or handle method calls on the associated native class or an instance of the class. */ -public class ImageAnalysisAnalyzerHostApiImpl implements ImageAnalysisAnalyzerHostApi { - - // To ease adding additional methods, this value is added prematurely. - @SuppressWarnings({"unused", "FieldCanBeLocal"}) +public class AnalyzerHostApiImpl implements AnalyzerHostApi { private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; + private final AnalyzerProxy proxy; - private final ImageAnalysisAnalyzerProxy proxy; - - /** Proxy for constructors and static method of `ImageAnalysisAnalyzer`. */ + /** Proxy for constructors and static method of {@link ImageAnalysis.Analyzer}. */ @VisibleForTesting - public static class ImageAnalysisAnalyzerProxy { + public static class AnalyzerProxy { - /** Creates an instance of `ImageAnalysisAnalyzer`. */ - public ImageAnalysisAnalyzerImpl create( + /** Creates an instance of {@link AnalyzerImpl}. */ + public AnalyzerImpl create( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { - // - // return new ImageAnalysisAnalyzerImpl( - // - // binaryMessenger, instanceManager); + return new AnalyzerImpl( + binaryMessenger, instanceManager); } } /** - * Implementation of `ImageAnalysisAnalyzer` that passes arguments of callback methods to Dart. + * Implementation of {@link ImageAnalysis.Analyzer} that passes arguments of callback methods to Dart. */ - public static class ImageAnalysisAnalyzerImpl extends ImageAnalysisAnalyzer { + public static class AnalyzerImpl extends ImageAnalysis.Analyzer { private ImageAnalysisAnalyzerFlutterApiImpl api; /** - * Constructs an instance of `ImageAnalysisAnalyzer` that passes arguments of callbacks methods + * Constructs an instance of {@link ImageAnalysis.Analyzer} that passes arguments of callbacks methods * to Dart. */ - public ImageAnalysisAnalyzerImpl( + public AnalyzerImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { super(); - api = new ImageAnalysisAnalyzerFlutterApiImpl(binaryMessenger, instanceManager); + api = new AnalyzerFlutterApiImpl(binaryMessenger, instanceManager); } - // TODO(bparrishMines): Need to handle inherited callback methods - @Override public void analyze() { api.analyze(this, reply -> {}); @@ -81,41 +68,40 @@ void setApi(@NonNull ImageAnalysisAnalyzerFlutterApiImpl api) { } /** - * Constructs a {@link ImageAnalysisAnalyzerHostApiImpl}. + * Constructs a {@link AnalyzerHostApiImpl}. * * @param binaryMessenger used to communicate with Dart over asynchronous messages * @param instanceManager maintains instances stored to communicate with attached Dart objects */ - public ImageAnalysisAnalyzerHostApiImpl( + public AnalyzerHostApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { - - this(binaryMessenger, instanceManager, new ImageAnalysisAnalyzerProxy()); + this(binaryMessenger, instanceManager, new AnalyzerProxy()); } /** - * Constructs a {@link ImageAnalysisAnalyzerHostApiImpl}. + * Constructs a {@link AnalyzerHostApiImpl}. * * @param binaryMessenger used to communicate with Dart over asynchronous messages * @param instanceManager maintains instances stored to communicate with attached Dart objects - * @param proxy proxy for constructors and static method of `ImageAnalysisAnalyzer` + * @param proxy proxy for constructors and static method of {@link ImageAnalysis.Analyzer} */ @VisibleForTesting - ImageAnalysisAnalyzerHostApiImpl( + AnalyzerHostApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager, - @NonNull ImageAnalysisAnalyzerProxy proxy) { + @NonNull AnalyzerProxy proxy) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; this.proxy = proxy; } + /** + * Creates an {@link AnalyzerProxy} that represents an {@link ImageAnalysis.Analyzer} + * instance with the specified identifier. + */ @Override public void create(@NonNull Long identifier) { instanceManager.addDartCreatedInstance( proxy.create(binaryMessenger, instanceManager), identifier); } - - private ImageAnalysisAnalyzer getImageAnalysisAnalyzerInstance(@NonNull Long identifier) { - return Objects.requireNonNull(instanceManager.getInstance(identifier)); - } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java index d65c80ce9216..9e501e470436 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java @@ -59,6 +59,12 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex GeneratedCameraXLibrary.ImageCaptureHostApi.setup(binaryMessenger, imageCaptureHostApi); imageAnalysisHostApiImpl = new ImageAnalysisHostApiImpl(binaryMessenger, instanceManager); GeneratedCameraXLibrary.ImageAnalysisHostApi.setup(binaryMessenger, imageAnalysisHostApiImpl); + GeneratedCameraXLibrary.AnalyzerHostApi.setup( + binaryMessenger, new AnalyzerHostApiImpl(binaryMessenger, instanceManager)); + GeneratedCameraXLibrary.ImageProxyHostApi.setup( + binaryMessenger, new ImageProxyHostApiImpl(instanceManager)); + GeneratedCameraXLibrary.PlaneProxyHostApi.setup( + binaryMessenger, new PlaneProxyHostApiImpl(instanceManager)); } @Override diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyHostApiImpl.java deleted file mode 100644 index 4173575b41f2..000000000000 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyHostApiImpl.java +++ /dev/null @@ -1,73 +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. - -// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation - -package io.flutter.plugins.camerax; - -// TODO(bparrishMines): Fix name of generated pigeon file -// TODO(bparrishMines): Import native classes -import GeneratedPigeonFilename.ImageProxyPlaneProxyHostApi; -import androidx.annotation.NonNull; -import io.flutter.plugin.common.BinaryMessenger; -import java.util.Objects; - -/** - * Host API implementation for `ImageProxyPlaneProxy`. - * - *

This class may handle instantiating and adding native object instances that are attached to a - * Dart instance or handle method calls on the associated native class or an instance of the class. - */ -public class ImageProxyPlaneProxyHostApiImpl implements ImageProxyPlaneProxyHostApi { - - // To ease adding additional methods, this value is added prematurely. - @SuppressWarnings({"unused", "FieldCanBeLocal"}) - private final BinaryMessenger binaryMessenger; - - private final InstanceManager instanceManager; - - /** - * Constructs a {@link ImageProxyPlaneProxyHostApiImpl}. - * - * @param binaryMessenger used to communicate with Dart over asynchronous messages - * @param instanceManager maintains instances stored to communicate with attached Dart objects - */ - public ImageProxyPlaneProxyHostApiImpl( - @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { - - this.binaryMessenger = binaryMessenger; - this.instanceManager = instanceManager; - } - - @Override - public dynamic getRowStride(@NonNull Long identifier) { - - final dynamic result = getImageProxyPlaneProxyInstance(identifier).getRowStride(); - - if (result != null) { - final dynamicFlutterApiImpl flutterApi = - new dynamicFlutterApiImpl(binaryMessenger, instanceManager); - // TODO(bparrishMines): Fill in missing parameters - flutterApi.create(result, reply -> {}); - } - return instanceManager.getIdentifierForStrongReference(result); - } - - @Override - public Long getPixelStride(@NonNull Long identifier) { - - return getImageProxyPlaneProxyInstance(identifier).getPixelStride(); - } - - @Override - public Long getRowStride(@NonNull Long identifier) { - - return getImageProxyPlaneProxyInstance(identifier).getRowStride(); - } - - private ImageProxyPlaneProxy getImageProxyPlaneProxyInstance(@NonNull Long identifier) { - return Objects.requireNonNull(instanceManager.getInstance(identifier)); - } -} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index 0d76e7c71b55..181486cf768d 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -54,73 +54,14 @@ public void create(@NonNull Long identifier, @Nullable ResolutionInfo targetReso } /** - * Sets an analyzer created by {@link ImageAnalysisHostApiImpl#createImageAnalysisAnalyzer()} on - * an {@link ImageAnalysis} instance to receive and analyze images. + * Sets {@link ImageAnalysis.Analyzer} instance with specified {@code analyzerIdentifier} on the + * {@link ImageAnalysis} instance with the specified {@code identifier} to receive and analyze images. */ - // @Override - // public void setAnalyzer(@NonNull Long identifier) { - // ImageAnalysis imageAnalysis = - // (ImageAnalysis) Objects.requireNonNull(instanceManager.getInstance(identifier)); - // ImageAnalysis.Analyzer analyzer = createImageAnalysisAnalyzer(); - // imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(context), analyzer); - // } - - /** - * Creates an {@link ImageAnalysis.Analyzer} instance to send image information to the Dart side - * to support image streaming. - * - *

The image information collected and sent matches that of the (Dart) CameraImageData class, - * which is required for image streaming in this plugin. - */ -// private ImageAnalysis.Analyzer createImageAnalysisAnalyzer() { -// return new ImageAnalysis.Analyzer() { -// @Override -// public void analyze(@NonNull ImageProxy image) { -// // Collect image plane information. -// ImageProxy.PlaneProxy[] planes = image.getPlanes(); -// List imagePlanesInformation = -// new ArrayList(); - -// for (ImageProxy.PlaneProxy plane : planes) { -// ByteBuffer byteBuffer = plane.getBuffer(); -// byte[] bytes = new byte[byteBuffer.remaining()]; -// byteBuffer.get(bytes, 0, bytes.length); -// GeneratedCameraXLibrary.ImagePlaneInformation.Builder imagePlaneInfoBuilder = -// new GeneratedCameraXLibrary.ImagePlaneInformation.Builder(); - -// imagePlanesInformation.add( -// imagePlaneInfoBuilder -// .setBytesPerRow(Long.valueOf(plane.getRowStride())) -// .setBytesPerPixel(Long.valueOf(plane.getPixelStride())) -// .setBytes(bytes) -// .build()); -// } - -// // Collect general image information. -// // TODO(camsim99): Retrieve and send the following when made available by b/274791178: -// // last lens aperture, last sensor exposure time, last sensor sensitivity. -// GeneratedCameraXLibrary.ImageInformation.Builder imageInfoBuilder = -// new GeneratedCameraXLibrary.ImageInformation.Builder(); -// imageInfoBuilder.setFormat(Long.valueOf(image.getFormat())); -// imageInfoBuilder.setImagePlanesInformation(imagePlanesInformation); -// imageInfoBuilder.setHeight(Long.valueOf(image.getHeight())); -// imageInfoBuilder.setWidth(Long.valueOf(image.getWidth())); - -// // Send image frame to Dart side for image streaming and close ImageProxy, since we are done using it. -// ImageAnalysisFlutterApiImpl imageAnalysisFlutterApiImpl = -// cameraXProxy.createImageAnalysisFlutterApiImpl(binaryMessenger); -// imageAnalysisFlutterApiImpl.sendOnImageAnalyzedEvent(imageInfoBuilder.build(), reply -> {}); -// image.close(); -// } -// }; -// } - -@Override -public void setAnalyzer(@NonNull Long identifier, @NonNull Long analyzerIdentifier) { - - getImageAnalysisInstance(identifier) - .setAnalyzer(Objects.requireNonNull(instanceManager.getInstance(analyzerIdentifier))); -} + @Override + public void setAnalyzer(@NonNull Long identifier, @NonNull Long analyzerIdentifier) { + getImageAnalysisInstance(identifier) + .setAnalyzer(ContextCompat.getMainExecutor(context), Objects.requireNonNull(instanceManager.getInstance(analyzerIdentifier))); + } /** Clears any analyzer previously set on the specified {@link ImageAnalysis} instance. */ @Override @@ -130,6 +71,7 @@ public void clearAnalyzer(@NonNull Long identifier) { imageAnalysis.clearAnalyzer(); } + /** Retrieives the {@link ImageAnalysis} instance associated with the specified {@code identifier}. */ private ImageAnalysis getImageAnalysisInstance(@NonNull Long identifier) { return Objects.requireNonNull(instanceManager.getInstance(identifier)); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java similarity index 72% rename from packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyFlutterApiImpl.java rename to packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java index b7f4a9ba9c69..4440ec299e87 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java @@ -1,31 +1,23 @@ - // 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. -// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation - package io.flutter.plugins.camerax; -// TODO(bparrishMines): Fix name of generated pigeon file -// TODO(bparrishMines): Import native classes -import GeneratedPigeonFilename.ImageProxyFlutterApi; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; +import androidx.camera.core.ImageProxy; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageProxyFlutterApi; import io.flutter.plugin.common.BinaryMessenger; /** - * Flutter API implementation for `ImageProxy`. + * Flutter API implementation for {@link ImageProxy}. * *

This class may handle adding native instances that are attached to a Dart instance or passing * arguments of callbacks methods to a Dart instance. */ public class ImageProxyFlutterApiImpl { - - // To ease adding additional methods, this value is added prematurely. - @SuppressWarnings({"unused", "FieldCanBeLocal"}) private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; private ImageProxyFlutterApi api; @@ -43,13 +35,12 @@ public ImageProxyFlutterApiImpl( } /** - * Stores the `ImageProxy` instance and notifies Dart to create and store a new `ImageProxy` - * instance that is attached to this one. If `instance` has already been added, this method does + * Stores the {@link ImageProxy} instance and notifies Dart to create and store a new {@link ImageProxy} + * instance that is attached to this one. If {@code instance} has already been added, this method does * nothing. */ public void create( @NonNull ImageProxy instance, @NonNull ImageProxyFlutterApi.Reply callback) { - if (!instanceManager.containsInstance(instance)) { api.create(instanceManager.addHostCreatedInstance(instance), callback); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java similarity index 64% rename from packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyHostApiImpl.java rename to packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java index 63a9ca4ce145..337ffa9a2e42 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java @@ -1,76 +1,67 @@ - // 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. -// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation - package io.flutter.plugins.camerax; -// TODO(bparrishMines): Fix name of generated pigeon file -// TODO(bparrishMines): Import native classes -import GeneratedPigeonFilename.ImageProxyHostApi; import androidx.annotation.NonNull; -import io.flutter.plugin.common.BinaryMessenger; +import androidx.camera.core.ImageProxy; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageProxyHostApi; import java.util.Objects; /** - * Host API implementation for `ImageProxy`. + * Host API implementation for {@link ImageProxy}. * *

This class may handle instantiating and adding native object instances that are attached to a * Dart instance or handle method calls on the associated native class or an instance of the class. */ public class ImageProxyHostApiImpl implements ImageProxyHostApi { - - // To ease adding additional methods, this value is added prematurely. - @SuppressWarnings({"unused", "FieldCanBeLocal"}) - private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; /** * Constructs a {@link ImageProxyHostApiImpl}. * - * @param binaryMessenger used to communicate with Dart over asynchronous messages * @param instanceManager maintains instances stored to communicate with attached Dart objects */ public ImageProxyHostApiImpl( - @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { - - this.binaryMessenger = binaryMessenger; + @NonNull InstanceManager instanceManager) { this.instanceManager = instanceManager; } + /** Returns the array of planes of the {@link ImageProxy} instance with the specified identifier. */ @Override public List getPlanes(@NonNull Long identifier) { - return getImageProxyInstance(identifier).getPlanes(); } + /** Returns the image format of the {@link ImageProxy} instance with the specified identifier. */ @Override public Long getFormat(@NonNull Long identifier) { - return getImageProxyInstance(identifier).getFormat(); } + /** Returns the image height of the {@link ImageProxy} instance with the specified identifier. */ @Override public Long getHeight(@NonNull Long identifier) { - return getImageProxyInstance(identifier).getHeight(); } + /** Returns the image width of the {@link ImageProxy} instance with the specified identifier. */ @Override public Long getWidth(@NonNull Long identifier) { - return getImageProxyInstance(identifier).getWidth(); } + /** + * Closes the {@link androidx.camera.core.Image} instance associated with the + * {@link ImageProxy} instance with the specified identifier. + */ @Override public void close(@NonNull Long identifier) { - getImageProxyInstance(identifier).close(); } + /** Retrieives the {@link ImageProxy} instance associated with the specified {@code identifier}. */ private ImageProxy getImageProxyInstance(@NonNull Long identifier) { return Objects.requireNonNull(instanceManager.getInstance(identifier)); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java similarity index 55% rename from packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyFlutterApiImpl.java rename to packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java index 99bae7e3c65a..e32ba0fa22ee 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java @@ -1,55 +1,47 @@ - // 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. -// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation - package io.flutter.plugins.camerax; -// TODO(bparrishMines): Fix name of generated pigeon file -// TODO(bparrishMines): Import native classes -import GeneratedPigeonFilename.ImageProxyPlaneProxyFlutterApi; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; +import androidx.camera.core.ImageProxy; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.PlaneProxyFlutterApi; import io.flutter.plugin.common.BinaryMessenger; /** - * Flutter API implementation for `ImageProxyPlaneProxy`. + * Flutter API implementation for {@link ImageProxy.PlaneProxy}. * *

This class may handle adding native instances that are attached to a Dart instance or passing * arguments of callbacks methods to a Dart instance. */ -public class ImageProxyPlaneProxyFlutterApiImpl { - - // To ease adding additional methods, this value is added prematurely. - @SuppressWarnings({"unused", "FieldCanBeLocal"}) +public class PlaneProxyFlutterApiImpl { private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; - private ImageProxyPlaneProxyFlutterApi api; + private PlaneProxyFlutterApi api; /** - * Constructs a {@link ImageProxyPlaneProxyFlutterApiImpl}. + * Constructs a {@link PlaneProxyFlutterApiImpl}. * * @param binaryMessenger used to communicate with Dart over asynchronous messages * @param instanceManager maintains instances stored to communicate with attached Dart objects */ - public ImageProxyPlaneProxyFlutterApiImpl( + public PlaneProxyFlutterApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; - api = new ImageProxyPlaneProxyFlutterApi(binaryMessenger); + api = new PlaneProxyFlutterApi(binaryMessenger); } /** - * Stores the `ImageProxyPlaneProxy` instance and notifies Dart to create and store a new - * `ImageProxyPlaneProxy` instance that is attached to this one. If `instance` has already been + * Stores the {@link ImageProxy.PlaneProxy} instance and notifies Dart to create and store a new + * {@link ImageProxy.PlaneProxy} instance that is attached to this one. If {@code instance} has already been * added, this method does nothing. */ public void create( - @NonNull ImageProxyPlaneProxy instance, - @NonNull ImageProxyPlaneProxyFlutterApi.Reply callback) { + @NonNull ImageProxy.PlaneProxy instance, + @NonNull PlaneProxyFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { api.create(instanceManager.addHostCreatedInstance(instance), callback); } @@ -61,7 +53,7 @@ public void create( *

This is only visible for testing. */ @VisibleForTesting - void setApi(@NonNull ImageProxyPlaneProxyFlutterApi api) { + void setApi(@NonNull PlaneProxyFlutterApi api) { this.api = api; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java new file mode 100644 index 000000000000..95ecc2571676 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java @@ -0,0 +1,57 @@ +// 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. + +package io.flutter.plugins.camerax; + +import androidx.annotation.NonNull; +import androidx.camera.core.ImageProxy; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.PlaneProxyHostApi; +import java.util.Objects; + +/** + * Host API implementation for {@link ImageProxy.PlaneProxy}. + * + *

This class may handle instantiating and adding native object instances that are attached to a + * Dart instance or handle method calls on the associated native class or an instance of the class. + */ +public class PlaneProxyHostApiImpl implements PlaneProxyHostApi { + private final InstanceManager instanceManager; + + /** + * Constructs a {@link PlaneProxyHostApiImpl}. + * + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public PlaneProxyHostApiImpl( + @NonNull InstanceManager instanceManager) { + this.instanceManager = instanceManager; + } + + /** Returns the pixel stride. */ + @Override + public Long getPixelStride(@NonNull Long identifier) { + return getPlaneProxyInstance(identifier).getPixelStride(); + } + + /** Returns the pixels buffer. */ + @Override + public byte[] getBuffer(@NonNull Long identifier) { + ByteBuffer byteBuffer = getPlaneProxyInstance(identifier).getBuffer(); + byte[] bytes = new byte[byteBuffer.remaining()]; + byteBuffer.get(bytes, 0, bytes.length); + + return bytes; + } + + /** Returns the row stride. */ + @Override + public Long getRowStride(@NonNull Long identifier) { + return getPlaneProxyInstance(identifier).getRowStride(); + } + + /** Retrieives the {@link ImageProxy.PlaneProxy} instance associated with the specified {@code identifier}. */ + private ImageProxy.PlaneProxy getPlaneProxyInstance(@NonNull Long identifier) { + return Objects.requireNonNull(instanceManager.getInstance(identifier)); + } +} From f334259c163981088cb202b49c41c9d5d21108e3 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 18 Apr 2023 17:12:23 -0700 Subject: [PATCH 40/62] Fix plugin code minus todos --- .../lib/src/android_camera_camerax.dart | 65 ++++++++++++++----- 1 file changed, 50 insertions(+), 15 deletions(-) diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index faf7f996f410..883713ec56fb 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -8,12 +8,15 @@ import 'package:camera_platform_interface/camera_platform_interface.dart'; import 'package:flutter/widgets.dart'; import 'package:stream_transform/stream_transform.dart'; +import 'analyzer.dart'; import 'camera.dart'; import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.g.dart'; import 'image_analysis.dart'; import 'image_capture.dart'; +import 'image_proxy.dart'; +import 'plane_proxy.dart'; import 'preview.dart'; import 'process_camera_provider.dart'; import 'surface.dart'; @@ -74,6 +77,9 @@ class AndroidCameraCameraX extends CameraPlatform { cameraEventStreamController.stream .where((CameraEvent event) => event.cameraId == cameraId); + /// TODO(camsim99) + StreamController? _cameraImageDataStreamController; + /// Returns list of all available cameras and their descriptions. @override Future> availableCameras() async { @@ -315,10 +321,11 @@ class AndroidCameraCameraX extends CameraPlatform { @override Stream onStreamedFrameAvailable(int cameraId, {CameraImageStreamOptions? options}) { - final StreamController cameraImageDataStreamController = - ImageAnalysis.onStreamedFrameAvailableStreamController; - _configureCameraImageDataStreamController(cameraImageDataStreamController); - return cameraImageDataStreamController.stream; + _cameraImageDataStreamController = StreamController( + onListen: _onFrameStreamListen, + onCancel: _onFrameStreamCancel, + ); + return _cameraImageDataStreamController!.stream; } // Methods for binding UseCases to the lifecycle of the camera controlled @@ -341,8 +348,8 @@ class AndroidCameraCameraX extends CameraPlatform { .bindToLifecycle(cameraSelector!, [preview!]); } - /// Configures and binds [imageAnalysis] instance to camera lifecycle - /// controlled by the [processCameraProvider]. + /// Configures the [imageAnalysis] instance for image streaming and binds it + /// to camera lifecycle controlled by the [processCameraProvider]. Future _configureAndBindImageAnalysisToLifecycle() async { assert(processCameraProvider != null); assert(cameraSelector != null); @@ -353,10 +360,34 @@ class AndroidCameraCameraX extends CameraPlatform { return; } + // Create Analyzer that can read image data for image streaming. + final Analyzer analyzer = Analyzer(analyze: (ImageProxy imageProxy) async { + final List planes = await imageProxy.getPlanes(); + final List cameraImagePlanes = []; + for (final PlaneProxy plane in planes) { + cameraImagePlanes.add(CameraImagePlane( + bytes: await plane.getBuffer(), + bytesPerRow: await plane.getRowStride(), + bytesPerPixel: await plane.getPixelStride())); + } + + final int format = await imageProxy.getFormat(); + final CameraImageFormat cameraImageFormat = CameraImageFormat( + _imageFormatGroupFromPlatformData(format), + raw: format); + + final CameraImageData cameraImageData = CameraImageData( + format: cameraImageFormat, + planes: cameraImagePlanes, + height: await imageProxy.getHeight(), + width: await imageProxy.getWidth()); + _cameraImageDataStreamController?.add(cameraImageData); + }); + // TODO(camsim99): Support resolution configuration. // Defaults to YUV_420_888 image format. imageAnalysis = createImageAnalysis(null); - imageAnalysis!.setAnalyzer(); + imageAnalysis!.setAnalyzer(analyzer); // TODO(camsim99): Reset live camera state observers here when // https://github.com/flutter/packages/pull/3419 lands. @@ -379,14 +410,6 @@ class AndroidCameraCameraX extends CameraPlatform { // Methods for configuring image streaming: - /// Sets [onListen] and [onCancel] callbacks for the stream controller - /// used for image streaming. - void _configureCameraImageDataStreamController( - StreamController controller) { - controller.onListen = _onFrameStreamListen; - controller.onCancel = _onFrameStreamCancel; - } - /// The [onListen] callback for the stream controller used for image /// streaming. void _onFrameStreamListen() { @@ -403,6 +426,18 @@ class AndroidCameraCameraX extends CameraPlatform { imageAnalysis!.clearAnalyzer(); } + // TODO(camsim99) + ImageFormatGroup _imageFormatGroupFromPlatformData(dynamic data) { + switch (data) { + case 35: // android.graphics.ImageFormat.YUV_420_888 + return ImageFormatGroup.yuv420; + case 256: // android.graphics.ImageFormat.JPEG + return ImageFormatGroup.jpeg; + } + + return ImageFormatGroup.unknown; + } + // Methods for mapping Flutter camera constants to CameraX constants: /// Returns [CameraSelector] lens direction that maps to specified From 752c8baa4c471bb1eabda3ac9d674604a976c67e Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 19 Apr 2023 09:27:39 -0700 Subject: [PATCH 41/62] Make fixes required to build apk --- .../camerax/AnalyzerFlutterApiImpl.java | 7 ++-- .../plugins/camerax/AnalyzerHostApiImpl.java | 12 +++---- .../camerax/CameraAndroidCameraxPlugin.java | 2 +- .../flutter/plugins/camerax/CameraXProxy.java | 10 ------ .../camerax/GeneratedCameraXLibrary.java | 35 ++++++++++++++++--- .../camerax/ImageProxyHostApiImpl.java | 27 ++++++++++---- .../camerax/PlaneProxyHostApiImpl.java | 5 +-- .../example/lib/main.dart | 5 ++- .../lib/src/android_camera_camerax.dart | 6 ++-- .../lib/src/camerax_library.g.dart | 27 ++++++++++++-- .../lib/src/image_analysis.dart | 4 +-- .../pigeons/camerax_library.dart | 2 +- .../test/test_camerax_library.g.dart | 29 +++++++++++++-- 13 files changed, 128 insertions(+), 43 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerFlutterApiImpl.java index 5a0a4040c871..9ab5d648e5b1 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerFlutterApiImpl.java @@ -7,6 +7,7 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.camera.core.ImageAnalysis; +import androidx.camera.core.ImageProxy; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerFlutterApi; import io.flutter.plugin.common.BinaryMessenger; import java.util.Objects; @@ -53,10 +54,12 @@ public void create( * `instance`. */ public void analyze( - @NonNull ImageAnalysis.Analyzer instance, + @NonNull ImageAnalysis.Analyzer analyzerInstance, + @NonNull ImageProxy imageProxyInstance, @NonNull AnalyzerFlutterApi.Reply callback) { api.analyze( - Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(instance)), + Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(analyzerInstance)), + Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(imageProxyInstance)), callback); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java index 85fa86292f39..b185ba788c37 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java @@ -7,6 +7,7 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.camera.core.ImageAnalysis; +import androidx.camera.core.ImageProxy; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerHostApi; import io.flutter.plugin.common.BinaryMessenger; import java.util.Objects; @@ -37,8 +38,8 @@ public AnalyzerImpl create( /** * Implementation of {@link ImageAnalysis.Analyzer} that passes arguments of callback methods to Dart. */ - public static class AnalyzerImpl extends ImageAnalysis.Analyzer { - private ImageAnalysisAnalyzerFlutterApiImpl api; + public static class AnalyzerImpl implements ImageAnalysis.Analyzer { + private AnalyzerFlutterApiImpl api; /** * Constructs an instance of {@link ImageAnalysis.Analyzer} that passes arguments of callbacks methods @@ -51,8 +52,8 @@ public AnalyzerImpl( } @Override - public void analyze() { - api.analyze(this, reply -> {}); + public void analyze(ImageProxy imageProxy) { + api.analyze(this, imageProxy, reply -> {}); } /** @@ -60,9 +61,8 @@ public void analyze() { * *

This is only visible for testing. */ - @SuppressWarnings("unused") @VisibleForTesting - void setApi(@NonNull ImageAnalysisAnalyzerFlutterApiImpl api) { + void setApi(@NonNull AnalyzerFlutterApiImpl api) { this.api = api; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java index 9e501e470436..c8960c9f4643 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java @@ -62,7 +62,7 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex GeneratedCameraXLibrary.AnalyzerHostApi.setup( binaryMessenger, new AnalyzerHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.ImageProxyHostApi.setup( - binaryMessenger, new ImageProxyHostApiImpl(instanceManager)); + binaryMessenger, new ImageProxyHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.PlaneProxyHostApi.setup( binaryMessenger, new PlaneProxyHostApiImpl(instanceManager)); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java index 077010bf23fd..ce8008fd9cc8 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java @@ -77,14 +77,4 @@ public ImageCapture.OutputFileOptions createImageCaptureOutputFileOptions(@NonNu public ImageAnalysis.Builder createImageAnalysisBuilder() { return new ImageAnalysis.Builder(); } - - /** - * Creates an instance of the {@code ImageAnalysisFlutterApiImpl}. - * - *

Included in this class for testing purposes. - */ - public ImageAnalysisFlutterApiImpl createImageAnalysisFlutterApiImpl( - @NonNull BinaryMessenger binaryMessenger) { - return new ImageAnalysisFlutterApiImpl(binaryMessenger); - } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index f9fa77f2b54a..66576211c381 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -1126,10 +1126,37 @@ public void error(Throwable error) { } } } + + private static class ImageAnalysisHostApiCodec extends StandardMessageCodec { + public static final ImageAnalysisHostApiCodec INSTANCE = new ImageAnalysisHostApiCodec(); + + private ImageAnalysisHostApiCodec() {} + + @Override + protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { + switch (type) { + case (byte) 128: + return ResolutionInfo.fromList((ArrayList) readValue(buffer)); + default: + return super.readValueOfType(type, buffer); + } + } + + @Override + protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { + if (value instanceof ResolutionInfo) { + stream.write(128); + writeValue(stream, ((ResolutionInfo) value).toList()); + } else { + super.writeValue(stream, value); + } + } + } + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ImageAnalysisHostApi { - void create(@NonNull Long identifier, @Nullable Long targetResolutionIdentifier); + void create(@NonNull Long identifier, @Nullable ResolutionInfo targetResolutionIdentifier); void setAnalyzer(@NonNull Long identifier, @NonNull Long analyzerIdentifier); @@ -1137,7 +1164,7 @@ public interface ImageAnalysisHostApi { /** The codec used by ImageAnalysisHostApi. */ static @NonNull MessageCodec getCodec() { - return new StandardMessageCodec(); + return ImageAnalysisHostApiCodec.INSTANCE; } /**Sets up an instance of `ImageAnalysisHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnalysisHostApi api) { @@ -1151,9 +1178,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnaly ArrayList wrapped = new ArrayList(); ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); - Number targetResolutionIdentifierArg = (Number) args.get(1); + ResolutionInfo targetResolutionIdentifierArg = (ResolutionInfo) args.get(1); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), (targetResolutionIdentifierArg == null) ? null : targetResolutionIdentifierArg.longValue()); + api.create((identifierArg == null) ? null : identifierArg.longValue(), targetResolutionIdentifierArg); wrapped.add(0, null); } catch (Throwable exception) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java index 337ffa9a2e42..b5757fd8d6f4 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java @@ -7,6 +7,9 @@ import androidx.annotation.NonNull; import androidx.camera.core.ImageProxy; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageProxyHostApi; +import io.flutter.plugin.common.BinaryMessenger; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -16,6 +19,7 @@ * Dart instance or handle method calls on the associated native class or an instance of the class. */ public class ImageProxyHostApiImpl implements ImageProxyHostApi { + private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; /** @@ -24,32 +28,43 @@ public class ImageProxyHostApiImpl implements ImageProxyHostApi { * @param instanceManager maintains instances stored to communicate with attached Dart objects */ public ImageProxyHostApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; } - /** Returns the array of planes of the {@link ImageProxy} instance with the specified identifier. */ + /** Returns the array of identifiers for planes of the {@link ImageProxy} instance with the specified identifier. */ @Override - public List getPlanes(@NonNull Long identifier) { - return getImageProxyInstance(identifier).getPlanes(); + public List getPlanes(@NonNull Long identifier) { + ImageProxy.PlaneProxy[] planes = getImageProxyInstance(identifier).getPlanes(); + PlaneProxyFlutterApiImpl planeProxyFlutterApiImpl = new PlaneProxyFlutterApiImpl(binaryMessenger, instanceManager); + List planeIdentifiers = new ArrayList(); + + for(ImageProxy.PlaneProxy plane : planes) { + planeProxyFlutterApiImpl.create(plane, reply -> {}); + planeIdentifiers.add(instanceManager.getIdentifierForStrongReference(plane)); + } + + return planeIdentifiers; } /** Returns the image format of the {@link ImageProxy} instance with the specified identifier. */ @Override public Long getFormat(@NonNull Long identifier) { - return getImageProxyInstance(identifier).getFormat(); + return Long.valueOf(getImageProxyInstance(identifier).getFormat()); } /** Returns the image height of the {@link ImageProxy} instance with the specified identifier. */ @Override public Long getHeight(@NonNull Long identifier) { - return getImageProxyInstance(identifier).getHeight(); + return Long.valueOf(getImageProxyInstance(identifier).getHeight()); } /** Returns the image width of the {@link ImageProxy} instance with the specified identifier. */ @Override public Long getWidth(@NonNull Long identifier) { - return getImageProxyInstance(identifier).getWidth(); + return Long.valueOf(getImageProxyInstance(identifier).getWidth()); } /** diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java index 95ecc2571676..b5129df7e0d1 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java @@ -7,6 +7,7 @@ import androidx.annotation.NonNull; import androidx.camera.core.ImageProxy; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.PlaneProxyHostApi; +import java.nio.ByteBuffer; import java.util.Objects; /** @@ -31,7 +32,7 @@ public PlaneProxyHostApiImpl( /** Returns the pixel stride. */ @Override public Long getPixelStride(@NonNull Long identifier) { - return getPlaneProxyInstance(identifier).getPixelStride(); + return Long.valueOf(getPlaneProxyInstance(identifier).getPixelStride()); } /** Returns the pixels buffer. */ @@ -47,7 +48,7 @@ public byte[] getBuffer(@NonNull Long identifier) { /** Returns the row stride. */ @Override public Long getRowStride(@NonNull Long identifier) { - return getPlaneProxyInstance(identifier).getRowStride(); + return Long.valueOf(getPlaneProxyInstance(identifier).getRowStride()); } /** Retrieives the {@link ImageProxy.PlaneProxy} instance associated with the specified {@code identifier}. */ diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index c668871b7a62..782e112eaa55 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -276,7 +276,10 @@ class _CameraExampleHomeState extends State IconButton( icon: const Icon(Icons.flash_on), color: Colors.blue, - onPressed: () {}, // TODO(camsim99): Add functionality back here. + // TODO(camsim99): Remove this test to land this PR. + onPressed: () { + controller!.startImageStream((image) => print(image)); + }, // TODO(camsim99): Add functionality back here. ), // The exposure and focus mode are currently not supported on the web. ...!kIsWeb diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 883713ec56fb..2d6f48d56260 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -77,7 +77,7 @@ class AndroidCameraCameraX extends CameraPlatform { cameraEventStreamController.stream .where((CameraEvent event) => event.cameraId == cameraId); - /// TODO(camsim99) + /// The controller we need to stream image data. StreamController? _cameraImageDataStreamController; /// Returns list of all available cameras and their descriptions. @@ -426,7 +426,9 @@ class AndroidCameraCameraX extends CameraPlatform { imageAnalysis!.clearAnalyzer(); } - // TODO(camsim99) + /// Converts between Android ImageFormat constants and [ImageFormatGroup]s. + /// + /// See https://developer.android.com/reference/android/graphics/ImageFormat. ImageFormatGroup _imageFormatGroupFromPlatformData(dynamic data) { switch (data) { case 35: // android.graphics.ImageFormat.YUV_420_888 diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index 124ad36b4aca..8bd147b9d231 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -925,6 +925,29 @@ class ImageCaptureHostApi { } } +class _ImageAnalysisHostApiCodec extends StandardMessageCodec { + const _ImageAnalysisHostApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is ResolutionInfo) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return ResolutionInfo.decode(readValue(buffer)!); + default: + return super.readValueOfType(type, buffer); + } + } +} + class ImageAnalysisHostApi { /// Constructor for [ImageAnalysisHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -933,9 +956,9 @@ class ImageAnalysisHostApi { : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec codec = _ImageAnalysisHostApiCodec(); - Future create(int arg_identifier, int? arg_targetResolutionIdentifier) async { + Future create(int arg_identifier, ResolutionInfo? arg_targetResolutionIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: _binaryMessenger); diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index fc02f80df1a4..568cf7ec6428 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -86,9 +86,7 @@ class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { instanceManager: instanceManager, ), ), - targetResolution == null - ? null - : instanceManager.getIdentifier(targetResolution)!, + targetResolution, ); } diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index b9f15ec6d543..1e259ac39991 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -154,7 +154,7 @@ abstract class ImageCaptureHostApi { @HostApi(dartHostTestHandler: 'TestImageAnalysisHostApi') abstract class ImageAnalysisHostApi { - void create(int identifier, int? targetResolutionIdentifier); + void create(int identifier, ResolutionInfo? targetResolutionIdentifier); void setAnalyzer(int identifier, int analyzerIdentifier); diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index 5832700ecf3e..155486f44cf5 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -601,11 +601,34 @@ abstract class TestImageCaptureHostApi { } } +class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { + const _TestImageAnalysisHostApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is ResolutionInfo) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return ResolutionInfo.decode(readValue(buffer)!); + default: + return super.readValueOfType(type, buffer); + } + } +} + abstract class TestImageAnalysisHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec codec = _TestImageAnalysisHostApiCodec(); - void create(int identifier, int? targetResolutionIdentifier); + void create(int identifier, ResolutionInfo? targetResolutionIdentifier); void setAnalyzer(int identifier, int analyzerIdentifier); @@ -626,7 +649,7 @@ abstract class TestImageAnalysisHostApi { final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); - final int? arg_targetResolutionIdentifier = (args[1] as int?); + final ResolutionInfo? arg_targetResolutionIdentifier = (args[1] as ResolutionInfo?); api.create(arg_identifier!, arg_targetResolutionIdentifier); return []; }); From 62b1925ce9c34b0060440517d7553932aa2510e4 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 19 Apr 2023 12:13:12 -0700 Subject: [PATCH 42/62] Fix java tests --- .../flutter/plugins/camerax/CameraXProxy.java | 5 + .../camerax/PlaneProxyHostApiImpl.java | 6 +- ...sisAnalyzerTest.java => AnalyzerTest.java} | 60 ++++--- .../camerax/GenApiImplsImageAnalysisTest.java | 143 ----------------- .../GenApiImplsImageProxyPlaneProxyTest.java | 124 --------------- .../plugins/camerax/ImageAnalysisTest.java | 150 +++++------------- ...mageProxyTest.java => ImageProxyTest.java} | 93 +++++------ .../plugins/camerax/PlaneProxyTest.java | 120 ++++++++++++++ .../cameraxexample/InstanceManagerTest.java | 2 - 9 files changed, 243 insertions(+), 460 deletions(-) rename packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/{GenApiImplsImageAnalysisAnalyzerTest.java => AnalyzerTest.java} (57%) delete mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisTest.java delete mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyTest.java rename packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/{GenApiImplsImageProxyTest.java => ImageProxyTest.java} (70%) create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java index ce8008fd9cc8..9974671bc33b 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java @@ -77,4 +77,9 @@ public ImageCapture.OutputFileOptions createImageCaptureOutputFileOptions(@NonNu public ImageAnalysis.Builder createImageAnalysisBuilder() { return new ImageAnalysis.Builder(); } + + /** Creates an array of {@code byte}s with the size provided. */ + public byte[] getBytesFromBuffer(int size) { + return new byte[size]; + } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java index b5129df7e0d1..12166adfeb40 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java @@ -5,6 +5,7 @@ package io.flutter.plugins.camerax; import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import androidx.camera.core.ImageProxy; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.PlaneProxyHostApi; import java.nio.ByteBuffer; @@ -19,6 +20,8 @@ public class PlaneProxyHostApiImpl implements PlaneProxyHostApi { private final InstanceManager instanceManager; + @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); + /** * Constructs a {@link PlaneProxyHostApiImpl}. * @@ -39,7 +42,7 @@ public Long getPixelStride(@NonNull Long identifier) { @Override public byte[] getBuffer(@NonNull Long identifier) { ByteBuffer byteBuffer = getPlaneProxyInstance(identifier).getBuffer(); - byte[] bytes = new byte[byteBuffer.remaining()]; + byte[] bytes = cameraXProxy.getBytesFromBuffer(byteBuffer.remaining()); byteBuffer.get(bytes, 0, bytes.length); return bytes; @@ -55,4 +58,5 @@ public Long getRowStride(@NonNull Long identifier) { private ImageProxy.PlaneProxy getPlaneProxyInstance(@NonNull Long identifier) { return Objects.requireNonNull(instanceManager.getInstance(identifier)); } + } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java similarity index 57% rename from packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerTest.java rename to packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java index 858cf8266583..f665d673dfa9 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisAnalyzerTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java @@ -1,19 +1,19 @@ - // 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. -// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation - package io.flutter.plugins.camerax; -// TODO(bparrishMines): Import native classes import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import androidx.camera.core.ImageAnalysis.Analyzer; +import androidx.camera.core.ImageProxy; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerFlutterApi; import io.flutter.plugin.common.BinaryMessenger; import java.util.Objects; import org.junit.After; @@ -24,40 +24,34 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; -public class ImageAnalysisAnalyzerTest { - +public class AnalyzerTest { @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - - @Mock public ImageAnalysisAnalyzerHostApiImpl.ImageAnalysisAnalyzerImpl mockImageAnalysisAnalyzer; - + @Mock public AnalyzerHostApiImpl.AnalyzerImpl mockImageAnalysisAnalyzer; @Mock public BinaryMessenger mockBinaryMessenger; - - // TODO(bparrishMines): Fix name of generated pigeon file - @Mock public GeneratedPigeonFilename.ImageAnalysisAnalyzerFlutterApi mockFlutterApi; - - @Mock public ImageAnalysisAnalyzerHostApiImpl.ImageAnalysisAnalyzerProxy mockProxy; + @Mock public AnalyzerFlutterApi mockFlutterApi; + @Mock public AnalyzerHostApiImpl.AnalyzerProxy mockProxy; InstanceManager instanceManager; @Before public void setUp() { - instanceManager = InstanceManager.open(identifier -> {}); + instanceManager = InstanceManager.create(identifier -> {}); } @After public void tearDown() { - instanceManager.close(); + instanceManager.stopFinalizationListener(); } @Test public void hostApiCreate() { + final AnalyzerHostApiImpl hostApi = + new AnalyzerHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); + final long instanceIdentifier = 0; when(mockProxy.create(mockBinaryMessenger, instanceManager)) .thenReturn(mockImageAnalysisAnalyzer); - final ImageAnalysisAnalyzerHostApiImpl hostApi = - new ImageAnalysisAnalyzerHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); - final long instanceIdentifier = 0; hostApi.create(instanceIdentifier); assertEquals(instanceManager.getInstance(instanceIdentifier), mockImageAnalysisAnalyzer); @@ -65,34 +59,38 @@ public void hostApiCreate() { @Test public void flutterApiCreate() { - final ImageAnalysisAnalyzerFlutterApiImpl flutterApi = - new ImageAnalysisAnalyzerFlutterApiImpl(mockBinaryMessenger, instanceManager); + final AnalyzerFlutterApiImpl flutterApi = + new AnalyzerFlutterApiImpl(mockBinaryMessenger, instanceManager); + flutterApi.setApi(mockFlutterApi); flutterApi.create(mockImageAnalysisAnalyzer, reply -> {}); - final long instanceIdentifier = Objects.requireNonNull( instanceManager.getIdentifierForStrongReference(mockImageAnalysisAnalyzer)); + verify(mockFlutterApi).create(eq(instanceIdentifier), any()); } @Test public void analyze() { - final ImageAnalysisAnalyzerFlutterApiImpl flutterApi = - new ImageAnalysisAnalyzerFlutterApiImpl(mockBinaryMessenger, instanceManager); - flutterApi.setApi(mockFlutterApi); - - final ImageAnalysisAnalyzerHostApiImpl.ImageAnalysisAnalyzerImpl instance = - new ImageAnalysisAnalyzerHostApiImpl.ImageAnalysisAnalyzerImpl( + final AnalyzerFlutterApiImpl flutterApi = + new AnalyzerFlutterApiImpl(mockBinaryMessenger, instanceManager); + final ImageProxy mockImageProxy = mock(ImageProxy.class); + final long mockImageProxyIdentifier = 97; + final AnalyzerHostApiImpl.AnalyzerImpl instance = + new AnalyzerHostApiImpl.AnalyzerImpl( mockBinaryMessenger, instanceManager); + final long instanceIdentifier = 0; + + flutterApi.setApi(mockFlutterApi); instance.setApi(flutterApi); - final long instanceIdentifier = 0; instanceManager.addDartCreatedInstance(instance, instanceIdentifier); + instanceManager.addDartCreatedInstance(mockImageProxy, mockImageProxyIdentifier); - instance.analyze(); + instance.analyze(mockImageProxy); - verify(mockFlutterApi).analyze(eq(instanceIdentifier), any()); + verify(mockFlutterApi).analyze(eq(instanceIdentifier), eq(mockImageProxyIdentifier), any()); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisTest.java deleted file mode 100644 index 21ad94598e0c..000000000000 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageAnalysisTest.java +++ /dev/null @@ -1,143 +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. - -// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation - -package io.flutter.plugins.camerax; - -// TODO(bparrishMines): Import native classes -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import io.flutter.plugin.common.BinaryMessenger; -import java.util.Objects; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - -public class ImageAnalysisTest { - - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - - @Mock public ImageAnalysis mockImageAnalysis; - - @Mock public BinaryMessenger mockBinaryMessenger; - - // TODO(bparrishMines): Fix name of generated pigeon file - @Mock public GeneratedPigeonFilename.ImageAnalysisFlutterApi mockFlutterApi; - - @Mock public ImageAnalysisHostApiImpl.ImageAnalysisProxy mockProxy; - - InstanceManager instanceManager; - - @Before - public void setUp() { - instanceManager = InstanceManager.open(identifier -> {}); - } - - @After - public void tearDown() { - instanceManager.close(); - } - - @Test - public void hostApiCreate() { - - final ResolutionInfo mockTargetResolution = mock(ResolutionInfo.class); - final long targetResolutionIdentifier = 11; - instanceManager.addDartCreatedInstance(mockTargetResolution, targetResolutionIdentifier); - - when(mockProxy.create(mockTargetResolution)).thenReturn(mockImageAnalysis); - - final ImageAnalysisHostApiImpl hostApi = - new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); - - final long instanceIdentifier = 0; - hostApi.create(instanceIdentifier, targetResolutionIdentifier); - - assertEquals(instanceManager.getInstance(instanceIdentifier), mockImageAnalysis); - } - - @Test - public void getOnStreamedFrameAvailableStreamController() { - final StreamController mockStreamController = mock(StreamController.class); - final long onStreamedFrameAvailableStreamControllerIdentifier = 1; - - when(mockProxy.getOnStreamedFrameAvailableStreamController()).thenReturn(mockStreamController); - - final long instanceIdentifier = 0; - instanceManager.addDartCreatedInstance(mockImageAnalysis, instanceIdentifier); - - final ImageAnalysisHostApiImpl hostApi = - new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); - hostApi.attachOnStreamedFrameAvailableStreamController( - onStreamedFrameAvailableStreamControllerIdentifier); - - assertEquals( - instanceManager.getInstance(onStreamedFrameAvailableStreamControllerIdentifier), - mockStreamController); - } - - @Test - public void setAnalyzer() { - - final ImageAnalysisAnalyzer mockAnalyzer = mock(ImageAnalysisAnalyzer.class); - final long analyzerIdentifier = 10; - instanceManager.addDartCreatedInstance(mockAnalyzer, analyzerIdentifier); - - final long instanceIdentifier = 0; - instanceManager.addDartCreatedInstance(mockImageAnalysis, instanceIdentifier); - - final ImageAnalysisHostApiImpl hostApi = - new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager); - - hostApi.setAnalyzer(instanceIdentifier, analyzerIdentifier); - - verify(mockImageAnalysis).setAnalyzer(mockAnalyzer); - } - - @Test - public void clearAnalyzer() { - - final long instanceIdentifier = 0; - instanceManager.addDartCreatedInstance(mockImageAnalysis, instanceIdentifier); - - final ImageAnalysisHostApiImpl hostApi = - new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager); - - hostApi.clearAnalyzer(instanceIdentifier); - - verify(mockImageAnalysis).clearAnalyzer(); - } - - @Test - public void flutterApiCreate() { - final ImageAnalysisFlutterApiImpl flutterApi = - new ImageAnalysisFlutterApiImpl(mockBinaryMessenger, instanceManager); - flutterApi.setApi(mockFlutterApi); - - final ResolutionInfo mockTargetResolution = mock(ResolutionInfo.class); - - flutterApi.create(mockImageAnalysis, mockTargetResolution, reply -> {}); - - final long instanceIdentifier = - Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockImageAnalysis)); - verify(mockFlutterApi) - .create( - eq(instanceIdentifier), - eq( - Objects.requireNonNull( - instanceManager.getIdentifierForStrongReference(mockTargetResolution))), - any()); - } -} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyTest.java deleted file mode 100644 index cfdc925720d2..000000000000 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyPlaneProxyTest.java +++ /dev/null @@ -1,124 +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. - -// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation - -package io.flutter.plugins.camerax; - -// TODO(bparrishMines): Import native classes -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import io.flutter.plugin.common.BinaryMessenger; -import java.util.Objects; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - -public class ImageProxyPlaneProxyTest { - - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - - @Mock public ImageProxyPlaneProxy mockImageProxyPlaneProxy; - - @Mock public BinaryMessenger mockBinaryMessenger; - - // TODO(bparrishMines): Fix name of generated pigeon file - @Mock public GeneratedPigeonFilename.ImageProxyPlaneProxyFlutterApi mockFlutterApi; - - InstanceManager instanceManager; - - @Before - public void setUp() { - instanceManager = InstanceManager.open(identifier -> {}); - } - - @After - public void tearDown() { - instanceManager.close(); - } - - @Test - public void getRowStride() { - - final long instanceIdentifier = 0; - instanceManager.addDartCreatedInstance(mockImageProxyPlaneProxy, instanceIdentifier); - - final dynamic returnValue = mock(dynamic.class); - - when(mockImageProxyPlaneProxy.getRowStride(instanceIdentifier)).thenReturn(returnValue); - - final ImageProxyPlaneProxyHostApiImpl hostApi = - new ImageProxyPlaneProxyHostApiImpl(mockBinaryMessenger, instanceManager); - - final Long result = hostApi.getRowStride(instanceIdentifier); - - verify(mockImageProxyPlaneProxy).getRowStride(); - - assertEquals(result, instanceManager.getIdentifierForStrongReference(returnValue)); - } - - @Test - public void getPixelStride() { - - final long instanceIdentifier = 0; - instanceManager.addDartCreatedInstance(mockImageProxyPlaneProxy, instanceIdentifier); - - final Long returnValue = 0; - - when(mockImageProxyPlaneProxy.getPixelStride(instanceIdentifier)).thenReturn(returnValue); - - final ImageProxyPlaneProxyHostApiImpl hostApi = - new ImageProxyPlaneProxyHostApiImpl(mockBinaryMessenger, instanceManager); - - final Long result = hostApi.getPixelStride(instanceIdentifier); - - verify(mockImageProxyPlaneProxy).getPixelStride(); - - assertEquals(result, returnValue); - } - - @Test - public void getRowStride() { - - final long instanceIdentifier = 0; - instanceManager.addDartCreatedInstance(mockImageProxyPlaneProxy, instanceIdentifier); - - final Long returnValue = 0; - - when(mockImageProxyPlaneProxy.getRowStride(instanceIdentifier)).thenReturn(returnValue); - - final ImageProxyPlaneProxyHostApiImpl hostApi = - new ImageProxyPlaneProxyHostApiImpl(mockBinaryMessenger, instanceManager); - - final Long result = hostApi.getRowStride(instanceIdentifier); - - verify(mockImageProxyPlaneProxy).getRowStride(); - - assertEquals(result, returnValue); - } - - @Test - public void flutterApiCreate() { - final ImageProxyPlaneProxyFlutterApiImpl flutterApi = - new ImageProxyPlaneProxyFlutterApiImpl(mockBinaryMessenger, instanceManager); - flutterApi.setApi(mockFlutterApi); - - flutterApi.create(mockImageProxyPlaneProxy, reply -> {}); - - final long instanceIdentifier = - Objects.requireNonNull( - instanceManager.getIdentifierForStrongReference(mockImageProxyPlaneProxy)); - verify(mockFlutterApi).create(eq(instanceIdentifier), any()); - } -} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java index b7b7e041a21c..6876eb4a71f9 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java @@ -8,20 +8,17 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.util.Size; import androidx.camera.core.ImageAnalysis; -import androidx.camera.core.ImageProxy; import androidx.test.core.app.ApplicationProvider; +import io.flutter.plugins.camerax.CameraXProxy; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ResolutionInfo; import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageInformation; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImagePlaneInformation; -import java.nio.ByteBuffer; -import java.util.List; +import java.util.Objects; import java.util.concurrent.Executor; import org.junit.After; import org.junit.Before; @@ -37,144 +34,81 @@ @RunWith(RobolectricTestRunner.class) public class ImageAnalysisTest { @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - @Mock public ImageAnalysis mockImageAnalysis; @Mock public BinaryMessenger mockBinaryMessenger; - @Mock public CameraXProxy mockCameraXProxy; - InstanceManager testInstanceManager; + InstanceManager instanceManager; private Context context; @Before - public void setUp() throws Exception { - testInstanceManager = spy(InstanceManager.open(identifier -> {})); + public void setUp() { + instanceManager = InstanceManager.create(identifier -> {}); context = ApplicationProvider.getApplicationContext(); } @After public void tearDown() { - testInstanceManager.close(); + instanceManager.stopFinalizationListener(); } @Test - public void create_buildsExpectedImageAnalysisInstance() { - final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = - new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); - final Long imageAnalysisIdentifier = 83L; - final int targetResolutionWidth = 11; - final int targetResolutionHeight = 51; - final GeneratedCameraXLibrary.ResolutionInfo resolutionInfo = - new GeneratedCameraXLibrary.ResolutionInfo.Builder() + public void hostApiCreate() { + final ImageAnalysisHostApiImpl hostApi = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager); + final CameraXProxy mockCameraXProxy = mock(CameraXProxy.class); + final ImageAnalysis.Builder mockImageAnalysisBuilder = mock(ImageAnalysis.Builder.class); + final int targetResolutionWidth = 10; + final int targetResolutionHeight = 50; + final ResolutionInfo resolutionInfo = + new ResolutionInfo.Builder() .setWidth(Long.valueOf(targetResolutionWidth)) .setHeight(Long.valueOf(targetResolutionHeight)) .build(); - final ImageAnalysis.Builder mockImageAnalysisBuilder = mock(ImageAnalysis.Builder.class); + final long instanceIdentifier = 0; - imageAnalysisHostApiImpl.cameraXProxy = mockCameraXProxy; - when(mockCameraXProxy.createImageAnalysisBuilder()).thenReturn(mockImageAnalysisBuilder); - when(mockImageAnalysisBuilder.build()).thenReturn(mockImageAnalysis); + hostApi.cameraXProxy = mockCameraXProxy; final ArgumentCaptor sizeCaptor = ArgumentCaptor.forClass(Size.class); - imageAnalysisHostApiImpl.create(imageAnalysisIdentifier, resolutionInfo); + when(mockCameraXProxy.createImageAnalysisBuilder()).thenReturn(mockImageAnalysisBuilder); + when(mockImageAnalysisBuilder.build()).thenReturn(mockImageAnalysis); + + hostApi.create(instanceIdentifier, resolutionInfo); verify(mockImageAnalysisBuilder).setTargetResolution(sizeCaptor.capture()); assertEquals(sizeCaptor.getValue().getWidth(), targetResolutionWidth); assertEquals(sizeCaptor.getValue().getHeight(), targetResolutionHeight); - verify(mockImageAnalysisBuilder).build(); - verify(testInstanceManager).addDartCreatedInstance(mockImageAnalysis, imageAnalysisIdentifier); + assertEquals(instanceManager.getInstance(instanceIdentifier), mockImageAnalysis); } @Test - public void setAnalyzer_setsAnalyzerThatSendsExpectedImageInformation() { - final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = - new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); - final ImageAnalysisFlutterApiImpl mockImageAnalysisFlutterApiImpl = - mock(ImageAnalysisFlutterApiImpl.class); - final Long mockImageAnalysisIdentifier = 37L; - final ImageProxy mockImageProxy = mock(ImageProxy.class); - - testInstanceManager.addDartCreatedInstance(mockImageAnalysis, mockImageAnalysisIdentifier); - imageAnalysisHostApiImpl.setContext(context); - imageAnalysisHostApiImpl.cameraXProxy = mockCameraXProxy; - when(mockCameraXProxy.createImageAnalysisFlutterApiImpl(mockBinaryMessenger)) - .thenReturn(mockImageAnalysisFlutterApiImpl); - - final ArgumentCaptor analyzerCaptor = - ArgumentCaptor.forClass(ImageAnalysis.Analyzer.class); - - // Test that an analyzer is set: - - imageAnalysisHostApiImpl.setAnalyzer(mockImageAnalysisIdentifier); - - verify(mockImageAnalysis).setAnalyzer(any(Executor.class), analyzerCaptor.capture()); - ImageAnalysis.Analyzer analyzer = analyzerCaptor.getValue(); - - // Test that the expected image information is sent when analyzer is called to analyze image data: - - final ImageProxy.PlaneProxy mockPlaneProxy = mock(ImageProxy.PlaneProxy.class); - final ImageProxy.PlaneProxy[] mockPlanes = new ImageProxy.PlaneProxy[] {mockPlaneProxy}; - final ByteBuffer mockByteBuffer = mock(ByteBuffer.class); - final int remainingBytes = 1; - final int rowStride = 40; - final int pixelStride = 36; - final int width = 50; - final int height = 10; - final int format = 35; - - when(mockImageProxy.getPlanes()).thenReturn(mockPlanes); - when(mockPlaneProxy.getBuffer()).thenReturn(mockByteBuffer); - when(mockByteBuffer.remaining()).thenReturn(remainingBytes); - when(mockPlaneProxy.getRowStride()).thenReturn(rowStride); - when(mockPlaneProxy.getPixelStride()).thenReturn(pixelStride); - when(mockImageProxy.getWidth()).thenReturn(width); - when(mockImageProxy.getHeight()).thenReturn(height); - when(mockImageProxy.getFormat()).thenReturn(format); - - final ArgumentCaptor imageInformationCaptor = - ArgumentCaptor.forClass(GeneratedCameraXLibrary.ImageInformation.class); - - analyzer.analyze(mockImageProxy); - - verify(mockImageAnalysisFlutterApiImpl) - .sendOnImageAnalyzedEvent(imageInformationCaptor.capture(), any()); - verify(mockImageProxy).close(); - - ImageInformation imageInformation = imageInformationCaptor.getValue(); - assertEquals(imageInformation.getWidth(), Long.valueOf(width)); - assertEquals(imageInformation.getHeight(), Long.valueOf(height)); - assertEquals(imageInformation.getFormat(), Long.valueOf(format)); - List imagePlanesInformation = - imageInformation.getImagePlanesInformation(); - ImagePlaneInformation imagePlaneInformation = imagePlanesInformation.get(0); - assertEquals(imagePlaneInformation.getBytesPerRow(), Long.valueOf(rowStride)); - assertEquals(imagePlaneInformation.getBytesPerPixel(), Long.valueOf(pixelStride)); - // We expect one (remainingBytes) bye. This byte should be equal to the byte contained by the mock ByteBuffer. - assertEquals(imagePlaneInformation.getBytes().length, remainingBytes); - assertEquals(imagePlaneInformation.getBytes()[0], mockByteBuffer.get()); - } + public void setAnalyzer() { + final ImageAnalysisHostApiImpl hostApi = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager); + hostApi.setContext(context); - @Test - public void clearAnalyzer_makesCallToClearAnalyzer() { - final ImageAnalysisHostApiImpl imageAnalysisHostApiImpl = - new ImageAnalysisHostApiImpl(mockBinaryMessenger, testInstanceManager); - final Long mockImageAnalysisIdentifier = 12L; + final ImageAnalysis.Analyzer mockAnalyzer = mock(ImageAnalysis.Analyzer.class); + final long analyzerIdentifier = 10; + final long instanceIdentifier = 0; - testInstanceManager.addDartCreatedInstance(mockImageAnalysis, mockImageAnalysisIdentifier); + instanceManager.addDartCreatedInstance(mockAnalyzer, analyzerIdentifier); + instanceManager.addDartCreatedInstance(mockImageAnalysis, instanceIdentifier); - imageAnalysisHostApiImpl.clearAnalyzer(mockImageAnalysisIdentifier); + hostApi.setAnalyzer(instanceIdentifier, analyzerIdentifier); - verify(mockImageAnalysis).clearAnalyzer(); + verify(mockImageAnalysis).setAnalyzer(any(Executor.class), eq(mockAnalyzer)); } @Test - public void sendOnImageAnalyzedEvent_callsOnImageAnalyzed() { - final ImageAnalysisFlutterApiImpl spyFlutterApi = - spy(new ImageAnalysisFlutterApiImpl(mockBinaryMessenger)); - final ImageInformation mockImageInformation = mock(ImageInformation.class); + public void clearAnalyzer() { + final ImageAnalysisHostApiImpl hostApi = + new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager); + final long instanceIdentifier = 0; + + instanceManager.addDartCreatedInstance(mockImageAnalysis, instanceIdentifier); - spyFlutterApi.sendOnImageAnalyzedEvent(mockImageInformation, reply -> {}); + hostApi.clearAnalyzer(instanceIdentifier); - verify(spyFlutterApi).onImageAnalyzed(eq(mockImageInformation), any()); + verify(mockImageAnalysis).clearAnalyzer(); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java similarity index 70% rename from packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyTest.java rename to packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java index b3906e68f174..5b1936cbbe9c 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/GenApiImplsImageProxyTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java @@ -1,20 +1,21 @@ - // 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. -// TODO(bparrishMines): Remove GenApiImpls from filename or copy classes/methods to your own implementation - package io.flutter.plugins.camerax; -// TODO(bparrishMines): Import native classes import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import androidx.camera.core.ImageProxy; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageProxyFlutterApi; import io.flutter.plugin.common.BinaryMessenger; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; import org.junit.After; import org.junit.Before; @@ -25,116 +26,105 @@ import org.mockito.junit.MockitoRule; public class ImageProxyTest { - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - @Mock public ImageProxy mockImageProxy; - @Mock public BinaryMessenger mockBinaryMessenger; - - // TODO(bparrishMines): Fix name of generated pigeon file - @Mock public GeneratedPigeonFilename.ImageProxyFlutterApi mockFlutterApi; + @Mock public ImageProxyFlutterApi mockFlutterApi; InstanceManager instanceManager; @Before public void setUp() { - instanceManager = InstanceManager.open(identifier -> {}); + instanceManager = InstanceManager.create(identifier -> {}); } @After public void tearDown() { - instanceManager.close(); + instanceManager.stopFinalizationListener(); } @Test public void getPlanes() { - + final ImageProxyHostApiImpl hostApi = + new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); final long instanceIdentifier = 0; - instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); + final long mockPlaneProxyIdentifier = 45; + final ImageProxy.PlaneProxy mockPlaneProxy = mock(ImageProxy.PlaneProxy.class); + final ImageProxy.PlaneProxy[] returnValue = new ImageProxy.PlaneProxy[]{ mockPlaneProxy }; - final List returnValue = new ArrayList(); + instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); + instanceManager.addDartCreatedInstance(mockPlaneProxy, mockPlaneProxyIdentifier); - when(mockImageProxy.getPlanes(instanceIdentifier)).thenReturn(returnValue); + when(mockImageProxy.getPlanes()).thenReturn(returnValue); - final ImageProxyHostApiImpl hostApi = - new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); - - final List result = hostApi.getPlanes(instanceIdentifier); + final List result = hostApi.getPlanes(instanceIdentifier); verify(mockImageProxy).getPlanes(); - - assertEquals(result, returnValue); + assertEquals(result.size(), 1); + assertEquals(result.get(0), Long.valueOf(mockPlaneProxyIdentifier)); } @Test public void getFormat() { - + final ImageProxyHostApiImpl hostApi = + new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); final long instanceIdentifier = 0; - instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); + final int returnValue = 0; - final Long returnValue = 0; - - when(mockImageProxy.getFormat(instanceIdentifier)).thenReturn(returnValue); + instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); - final ImageProxyHostApiImpl hostApi = - new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); + when(mockImageProxy.getFormat()).thenReturn(returnValue); final Long result = hostApi.getFormat(instanceIdentifier); verify(mockImageProxy).getFormat(); - assertEquals(result, returnValue); + assertEquals(result, Long.valueOf(returnValue)); } @Test public void getHeight() { - + final ImageProxyHostApiImpl hostApi = + new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); final long instanceIdentifier = 0; - instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); - - final Long returnValue = 0; + final int returnValue = 0; - when(mockImageProxy.getHeight(instanceIdentifier)).thenReturn(returnValue); + instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); - final ImageProxyHostApiImpl hostApi = - new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); + when(mockImageProxy.getHeight()).thenReturn(returnValue); final Long result = hostApi.getHeight(instanceIdentifier); verify(mockImageProxy).getHeight(); - assertEquals(result, returnValue); + assertEquals(result, Long.valueOf(returnValue)); } @Test public void getWidth() { - + final ImageProxyHostApiImpl hostApi = + new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); final long instanceIdentifier = 0; - instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); - - final Long returnValue = 0; + final int returnValue = 0; - when(mockImageProxy.getWidth(instanceIdentifier)).thenReturn(returnValue); + instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); - final ImageProxyHostApiImpl hostApi = - new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); + when(mockImageProxy.getWidth()).thenReturn(returnValue); final Long result = hostApi.getWidth(instanceIdentifier); verify(mockImageProxy).getWidth(); - assertEquals(result, returnValue); + assertEquals(result, Long.valueOf(returnValue)); } @Test public void close() { - - final long instanceIdentifier = 0; - instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); - final ImageProxyHostApiImpl hostApi = new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); + final long instanceIdentifier = 0; + + instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); hostApi.close(instanceIdentifier); @@ -145,12 +135,13 @@ public void close() { public void flutterApiCreate() { final ImageProxyFlutterApiImpl flutterApi = new ImageProxyFlutterApiImpl(mockBinaryMessenger, instanceManager); + flutterApi.setApi(mockFlutterApi); flutterApi.create(mockImageProxy, reply -> {}); - final long instanceIdentifier = Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockImageProxy)); + verify(mockFlutterApi).create(eq(instanceIdentifier), any()); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java new file mode 100644 index 000000000000..34dca86951df --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java @@ -0,0 +1,120 @@ +// 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. + +package io.flutter.plugins.camerax; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import androidx.camera.core.ImageProxy; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.PlaneProxyFlutterApi; +import io.flutter.plugin.common.BinaryMessenger; + +import java.nio.ByteBuffer; +import java.util.Objects; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class PlaneProxyTest { + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + @Mock public ImageProxy.PlaneProxy mockPlaneProxy; + @Mock public BinaryMessenger mockBinaryMessenger; + @Mock public PlaneProxyFlutterApi mockFlutterApi; + + InstanceManager instanceManager; + + @Before + public void setUp() { + instanceManager = InstanceManager.create(identifier -> {}); + } + + @After + public void tearDown() { + instanceManager.stopFinalizationListener(); + } + + @Test + public void getBuffer_returnsExpectedBytes() { + final PlaneProxyHostApiImpl hostApi = + new PlaneProxyHostApiImpl(instanceManager); + final long instanceIdentifier = 0; + final CameraXProxy mockCameraXProxy = mock(CameraXProxy.class); + final ByteBuffer mockByteBuffer = mock(ByteBuffer.class); + final int bufferRemaining = 23; + final byte[] returnValue = new byte[bufferRemaining];; + + instanceManager.addDartCreatedInstance(mockPlaneProxy, instanceIdentifier); + + hostApi.cameraXProxy = mockCameraXProxy; + + when(mockPlaneProxy.getBuffer()).thenReturn(mockByteBuffer); + when(mockByteBuffer.remaining()).thenReturn(bufferRemaining); + when(mockCameraXProxy.getBytesFromBuffer(bufferRemaining)).thenReturn(returnValue); + + final byte[] result = hostApi.getBuffer(instanceIdentifier); + + verify(mockPlaneProxy).getBuffer(); + assertEquals(result, returnValue); + } + + @Test + public void getPixelStride_makesExpectedCallAndReturnsExpectedValue() { + final PlaneProxyHostApiImpl hostApi = + new PlaneProxyHostApiImpl(instanceManager); + final long instanceIdentifier = 0; + final int returnValue = 0; + + instanceManager.addDartCreatedInstance(mockPlaneProxy, instanceIdentifier); + + when(mockPlaneProxy.getPixelStride()).thenReturn(returnValue); + + final Long result = hostApi.getPixelStride(instanceIdentifier); + + verify(mockPlaneProxy).getPixelStride(); + assertEquals(result, Long.valueOf(returnValue)); + } + + + @Test + public void getRowStride_makesExpectedCallAndReturnsExpectedValue() { + final PlaneProxyHostApiImpl hostApi = + new PlaneProxyHostApiImpl(instanceManager); + final long instanceIdentifier = 0; + final int returnValue = 25; + + instanceManager.addDartCreatedInstance(mockPlaneProxy, instanceIdentifier); + + when(mockPlaneProxy.getRowStride()).thenReturn(returnValue); + + final Long result = hostApi.getRowStride(instanceIdentifier); + + verify(mockPlaneProxy).getRowStride(); + assertEquals(result, Long.valueOf(returnValue)); + } + + + @Test + public void flutterApiCreate_makesCallToCreateInstanceWithExpectedIdentifier() { + final PlaneProxyFlutterApiImpl flutterApi = + new PlaneProxyFlutterApiImpl(mockBinaryMessenger, instanceManager); + + flutterApi.setApi(mockFlutterApi); + + flutterApi.create(mockPlaneProxy, reply -> {}); + final long instanceIdentifier = + Objects.requireNonNull( + instanceManager.getIdentifierForStrongReference(mockPlaneProxy)); + + verify(mockFlutterApi).create(eq(instanceIdentifier), any()); + } +} diff --git a/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java b/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java index 5e4454de80d3..575df3c087f2 100644 --- a/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java +++ b/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java @@ -8,12 +8,10 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; -import androidx.test.ext.junit.runners.AndroidJUnit4; import io.flutter.plugins.camerax.InstanceManager; import org.junit.Test; import org.junit.runner.RunWith; -@RunWith(AndroidJUnit4.class) public class InstanceManagerTest { @Test public void managerDoesNotTriggerFinalizationListenerWhenStopped() throws InterruptedException { From 14cc6021d8669f8b733e522308c4afb010586ddb Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 19 Apr 2023 14:05:04 -0700 Subject: [PATCH 43/62] Fix java test names --- .../io/flutter/plugins/camerax/AnalyzerTest.java | 6 +++--- .../flutter/plugins/camerax/ImageAnalysisTest.java | 6 +++--- .../io/flutter/plugins/camerax/ImageProxyTest.java | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java index f665d673dfa9..8d173f00fede 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java @@ -44,7 +44,7 @@ public void tearDown() { } @Test - public void hostApiCreate() { + public void hostApiCreate_makesCallToCreateAnalyzerInstanceWithExpectedIdentifier() { final AnalyzerHostApiImpl hostApi = new AnalyzerHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); final long instanceIdentifier = 0; @@ -58,7 +58,7 @@ public void hostApiCreate() { } @Test - public void flutterApiCreate() { + public void flutterApiCreate_makesCallToDartCreate() { final AnalyzerFlutterApiImpl flutterApi = new AnalyzerFlutterApiImpl(mockBinaryMessenger, instanceManager); @@ -73,7 +73,7 @@ public void flutterApiCreate() { } @Test - public void analyze() { + public void analyze_makesCallToDartAnalyze() { final AnalyzerFlutterApiImpl flutterApi = new AnalyzerFlutterApiImpl(mockBinaryMessenger, instanceManager); final ImageProxy mockImageProxy = mock(ImageProxy.class); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java index 6876eb4a71f9..10bfbf2e4d61 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java @@ -52,7 +52,7 @@ public void tearDown() { } @Test - public void hostApiCreate() { + public void hostApiCreate_createsExpectedImageAnalysisInstanceWithExpectedIdentifier() { final ImageAnalysisHostApiImpl hostApi = new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager); final CameraXProxy mockCameraXProxy = mock(CameraXProxy.class); @@ -82,7 +82,7 @@ public void hostApiCreate() { } @Test - public void setAnalyzer() { + public void setAnalyzer_makesCallToSetAnalyzerOnExpectedImageAnalysisInstance() { final ImageAnalysisHostApiImpl hostApi = new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager); hostApi.setContext(context); @@ -100,7 +100,7 @@ public void setAnalyzer() { } @Test - public void clearAnalyzer() { + public void clearAnalyzer_makesCallToClearAnalyzerOnExpectedImageAnalysisInstance() { final ImageAnalysisHostApiImpl hostApi = new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager); final long instanceIdentifier = 0; diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java index 5b1936cbbe9c..79b6763cfc3a 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java @@ -44,7 +44,7 @@ public void tearDown() { } @Test - public void getPlanes() { + public void getPlanes_returnsExpectedPlanesFromExpectedImageProxyInstance() { final ImageProxyHostApiImpl hostApi = new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); final long instanceIdentifier = 0; @@ -65,7 +65,7 @@ public void getPlanes() { } @Test - public void getFormat() { + public void getFormat_returnsExpectedFormatFromExpectedImageProxyInstance() { final ImageProxyHostApiImpl hostApi = new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); final long instanceIdentifier = 0; @@ -83,7 +83,7 @@ public void getFormat() { } @Test - public void getHeight() { + public void getHeight_returnsExpectedHeightFromExpectedImageProxyInstance() { final ImageProxyHostApiImpl hostApi = new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); final long instanceIdentifier = 0; @@ -101,7 +101,7 @@ public void getHeight() { } @Test - public void getWidth() { + public void getWidth_returnsExpectedHeightFromExpectedImageProxyInstance() { final ImageProxyHostApiImpl hostApi = new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); final long instanceIdentifier = 0; @@ -119,7 +119,7 @@ public void getWidth() { } @Test - public void close() { + public void close_makesCallToCloseExpectedImageProxyInstance() { final ImageProxyHostApiImpl hostApi = new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); final long instanceIdentifier = 0; @@ -132,7 +132,7 @@ public void close() { } @Test - public void flutterApiCreate() { + public void flutterApiCreate_makesCallToDartCreate() { final ImageProxyFlutterApiImpl flutterApi = new ImageProxyFlutterApiImpl(mockBinaryMessenger, instanceManager); From 1f420da030d5daed55a7fcc836aa8244d9b0e1d6 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 19 Apr 2023 14:56:30 -0700 Subject: [PATCH 44/62] Get feature working --- .../plugins/camerax/AnalyzerHostApiImpl.java | 7 +++++++ .../lib/src/android_camera_camerax.dart | 3 ++- ...android_camera_camerax_flutter_api_impls.dart | 16 ++++++++++++++++ .../lib/src/image_proxy.dart | 2 +- 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java index b185ba788c37..6544e574f1ea 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java @@ -39,7 +39,10 @@ public AnalyzerImpl create( * Implementation of {@link ImageAnalysis.Analyzer} that passes arguments of callback methods to Dart. */ public static class AnalyzerImpl implements ImageAnalysis.Analyzer { + private BinaryMessenger binaryMessenger; + private InstanceManager instanceManager; private AnalyzerFlutterApiImpl api; + private ImageProxyFlutterApiImpl imageProxyApi; /** * Constructs an instance of {@link ImageAnalysis.Analyzer} that passes arguments of callbacks methods @@ -48,11 +51,15 @@ public static class AnalyzerImpl implements ImageAnalysis.Analyzer { public AnalyzerImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { super(); + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; api = new AnalyzerFlutterApiImpl(binaryMessenger, instanceManager); + imageProxyApi = new ImageProxyFlutterApiImpl(binaryMessenger, instanceManager); } @Override public void analyze(ImageProxy imageProxy) { + imageProxyApi.create(imageProxy, reply -> {}); api.analyze(this, imageProxy, reply -> {}); } diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 2d6f48d56260..fb8d5f091995 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -375,13 +375,14 @@ class AndroidCameraCameraX extends CameraPlatform { final CameraImageFormat cameraImageFormat = CameraImageFormat( _imageFormatGroupFromPlatformData(format), raw: format); - final CameraImageData cameraImageData = CameraImageData( format: cameraImageFormat, planes: cameraImagePlanes, height: await imageProxy.getHeight(), width: await imageProxy.getWidth()); + _cameraImageDataStreamController?.add(cameraImageData); + imageProxy.close(); }); // TODO(camsim99): Support resolution configuration. diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart index 5cd8b2e5c55c..493071ec852a 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart @@ -7,7 +7,9 @@ import 'camera.dart'; import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.g.dart'; +import 'image_proxy.dart'; import 'java_object.dart'; +import 'plane_proxy.dart'; import 'process_camera_provider.dart'; import 'system_services.dart'; @@ -22,6 +24,8 @@ class AndroidCameraXCameraFlutterApis { ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi, SystemServicesFlutterApiImpl? systemServicesFlutterApi, AnalyzerFlutterApiImpl? analyzerFlutterApiImpl, + ImageProxyFlutterApiImpl? imageProxyFlutterApiImpl, + PlaneProxyFlutterApiImpl? planeProxyFlutterApiImpl, }) { this.javaObjectFlutterApi = javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); @@ -36,6 +40,10 @@ class AndroidCameraXCameraFlutterApis { systemServicesFlutterApi ?? SystemServicesFlutterApiImpl(); this.analyzerFlutterApiImpl = analyzerFlutterApiImpl ?? AnalyzerFlutterApiImpl(); + this.imageProxyFlutterApiImpl = + imageProxyFlutterApiImpl ?? ImageProxyFlutterApiImpl(); + this.planeProxyFlutterApiImpl = + planeProxyFlutterApiImpl ?? PlaneProxyFlutterApiImpl(); } static bool _haveBeenSetUp = false; @@ -68,6 +76,12 @@ class AndroidCameraXCameraFlutterApis { /// Flutter Api implementation for [Analyzer]. late final AnalyzerFlutterApiImpl analyzerFlutterApiImpl; + /// Flutter Api implementation for [ImageProxy]. + late final ImageProxyFlutterApiImpl imageProxyFlutterApiImpl; + + /// Flutter Api implementation for [PlaneProxy]. + late final PlaneProxyFlutterApiImpl planeProxyFlutterApiImpl; + /// Ensures all the Flutter APIs have been setup to receive calls from native code. void ensureSetUp() { if (!_haveBeenSetUp) { @@ -78,6 +92,8 @@ class AndroidCameraXCameraFlutterApis { CameraFlutterApi.setup(cameraFlutterApi); SystemServicesFlutterApi.setup(systemServicesFlutterApi); AnalyzerFlutterApi.setup(analyzerFlutterApiImpl); + ImageProxyFlutterApi.setup(imageProxyFlutterApiImpl); + PlaneProxyFlutterApi.setup(planeProxyFlutterApiImpl); _haveBeenSetUp = true; } } diff --git a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart index d07c1392de2b..8661eeb8f9cf 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart @@ -70,7 +70,7 @@ class _ImageProxyHostApiImpl extends ImageProxyHostApi { return planesAsObjects.map((int? planeIdentifier) { return instanceManager .getInstanceWithWeakReference(planeIdentifier!)!; - }) as List; + }).toList(); } /// Returns the format of the image represented by the [instance]. From c550fc02954f752d83055d193722fd17dace2eee Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 21 Apr 2023 15:55:08 -0700 Subject: [PATCH 45/62] Fix plugin test --- .../lib/src/analyzer.dart | 6 +- .../lib/src/android_camera_camerax.dart | 23 +++- .../test/android_camera_camerax_test.dart | 91 +++++++++++-- .../android_camera_camerax_test.mocks.dart | 123 ++++++++++++++++-- ..._analysis_analyzer_test.gen_api_impls.dart | 4 +- .../image_analysis_test.gen_api_impls.dart | 2 +- ..._proxy_plane_proxy_test.gen_api_impls.dart | 4 +- .../test/image_proxy_test.gen_api_impls.dart | 2 +- 8 files changed, 221 insertions(+), 34 deletions(-) diff --git a/packages/camera/camera_android_camerax/lib/src/analyzer.dart b/packages/camera/camera_android_camerax/lib/src/analyzer.dart index fa0de1da5ed9..fc312cd1982f 100644 --- a/packages/camera/camera_android_camerax/lib/src/analyzer.dart +++ b/packages/camera/camera_android_camerax/lib/src/analyzer.dart @@ -47,7 +47,7 @@ class Analyzer extends JavaObject { late final _AnalyzerHostApiImpl _api; /// Analyzes an image to produce a result. - final void Function(ImageProxy imageProxy) analyze; + final Future Function(ImageProxy imageProxy) analyze; } /// Host API implementation of [Analyzer]. @@ -107,7 +107,7 @@ class AnalyzerFlutterApiImpl implements AnalyzerFlutterApi { ) { instanceManager.addHostCreatedInstance( Analyzer.detached( - analyze: (ImageProxy imageProxy) {}, + analyze: (ImageProxy imageProxy) async {}, binaryMessenger: binaryMessenger, instanceManager: instanceManager, ), @@ -129,7 +129,7 @@ class AnalyzerFlutterApiImpl implements AnalyzerFlutterApi { instanceManager.getInstanceWithWeakReference(identifier)!; final ImageProxy imageProxy = instanceManager.getInstanceWithWeakReference(imageProxyIdentifier)!; - return instance.analyze( + instance.analyze( imageProxy, ); } diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index fb8d5f091995..b57d5fac3e9f 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -78,7 +78,13 @@ class AndroidCameraCameraX extends CameraPlatform { .where((CameraEvent event) => event.cameraId == cameraId); /// The controller we need to stream image data. - StreamController? _cameraImageDataStreamController; + @visibleForTesting + StreamController? cameraImageDataStreamController; + + /// Conditional used to create detached instances for testing their + /// callback methods. + @visibleForTesting + bool createDetachedCallbacks = false; /// Returns list of all available cameras and their descriptions. @override @@ -321,11 +327,11 @@ class AndroidCameraCameraX extends CameraPlatform { @override Stream onStreamedFrameAvailable(int cameraId, {CameraImageStreamOptions? options}) { - _cameraImageDataStreamController = StreamController( + cameraImageDataStreamController = StreamController( onListen: _onFrameStreamListen, onCancel: _onFrameStreamCancel, ); - return _cameraImageDataStreamController!.stream; + return cameraImageDataStreamController!.stream; } // Methods for binding UseCases to the lifecycle of the camera controlled @@ -361,7 +367,7 @@ class AndroidCameraCameraX extends CameraPlatform { } // Create Analyzer that can read image data for image streaming. - final Analyzer analyzer = Analyzer(analyze: (ImageProxy imageProxy) async { + Future analyze(ImageProxy imageProxy) async { final List planes = await imageProxy.getPlanes(); final List cameraImagePlanes = []; for (final PlaneProxy plane in planes) { @@ -375,15 +381,20 @@ class AndroidCameraCameraX extends CameraPlatform { final CameraImageFormat cameraImageFormat = CameraImageFormat( _imageFormatGroupFromPlatformData(format), raw: format); + final CameraImageData cameraImageData = CameraImageData( format: cameraImageFormat, planes: cameraImagePlanes, height: await imageProxy.getHeight(), width: await imageProxy.getWidth()); - _cameraImageDataStreamController?.add(cameraImageData); + cameraImageDataStreamController?.add(cameraImageData); imageProxy.close(); - }); + } + + final Analyzer analyzer = createDetachedCallbacks + ? Analyzer.detached(analyze: analyze) + : Analyzer(analyze: analyze); // TODO(camsim99): Support resolution configuration. // Defaults to YUV_420_888 image format. diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index 5d55210bbcef..92574fe51f2d 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart @@ -6,24 +6,28 @@ import 'dart:async'; import 'package:async/async.dart'; import 'package:camera_android_camerax/camera_android_camerax.dart'; +import 'package:camera_android_camerax/src/analyzer.dart'; import 'package:camera_android_camerax/src/camera.dart'; import 'package:camera_android_camerax/src/camera_info.dart'; import 'package:camera_android_camerax/src/camera_selector.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/image_analysis.dart'; import 'package:camera_android_camerax/src/image_capture.dart'; +import 'package:camera_android_camerax/src/image_proxy.dart'; +import 'package:camera_android_camerax/src/plane_proxy.dart'; import 'package:camera_android_camerax/src/preview.dart'; import 'package:camera_android_camerax/src/process_camera_provider.dart'; import 'package:camera_android_camerax/src/system_services.dart'; import 'package:camera_android_camerax/src/use_case.dart'; import 'package:camera_platform_interface/camera_platform_interface.dart'; -import 'package:flutter/services.dart' show DeviceOrientation; +import 'package:flutter/services.dart' show DeviceOrientation, Uint8List; import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'android_camera_camerax_test.mocks.dart'; +import 'test_camerax_library.g.dart'; @GenerateNiceMocks(>[ MockSpec(), @@ -32,13 +36,19 @@ import 'android_camera_camerax_test.mocks.dart'; MockSpec(), MockSpec(), MockSpec(), + MockSpec(), + MockSpec(), MockSpec(), MockSpec(), + MockSpec(), ]) @GenerateMocks([BuildContext]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); + // Mocks the call to clear the native InstanceManager. + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + test('Should fetch CameraDescription instances for available cameras', () async { // Arrange @@ -410,11 +420,12 @@ void main() { }); test( - 'onStreamedFrameAvailable emits CameraImageData when picked up from ImageAnalysis', + 'onStreamedFrameAvailable emits CameraImageData when picked up from CameraImageData stream controller', () async { final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); camera.processCameraProvider = MockProcessCameraProvider(); camera.cameraSelector = MockCameraSelector(); + camera.createDetachedCallbacks = true; final CameraImageData mockCameraImageData = MockCameraImageData(); final Stream imageStream = @@ -422,26 +433,89 @@ void main() { final StreamQueue streamQueue = StreamQueue(imageStream); - ImageAnalysis.onStreamedFrameAvailableStreamController - .add(mockCameraImageData); + camera.cameraImageDataStreamController!.add(mockCameraImageData); expect(await streamQueue.next, equals(mockCameraImageData)); await streamQueue.cancel(); }); test( - 'onStreamedFrameAvaiable returns stream that responds expectedly to being listened to and canceled', + 'onStreamedFrameAvaiable returns stream that responds expectedly to being listened to', () async { final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); final ProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final CameraSelector mockCameraSelector = MockCameraSelector(); + final Camera mockCamera = MockCamera(); + final MockImageProxy mockImageProxy = MockImageProxy(); + final MockPlaneProxy mockPlane = MockPlaneProxy(); + final List mockPlanes = [mockPlane]; + final Uint8List buffer = Uint8List(0); + const int pixelStride = 27; + const int rowStride = 58; + const int imageFormat = 582; + const int imageHeight = 100; + const int imageWidth = 200; camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = mockCameraSelector; + camera.createDetachedCallbacks = true; + + when(mockProcessCameraProvider.bindToLifecycle( + mockCameraSelector, [camera.mockImageAnalysis])) + .thenAnswer((_) async => mockCamera); + when(mockImageProxy.getPlanes()) + .thenAnswer((_) => Future>.value(mockPlanes)); + when(mockPlane.getBuffer()) + .thenAnswer((_) => Future.value(buffer)); + when(mockPlane.getRowStride()) + .thenAnswer((_) => Future.value(rowStride)); + when(mockPlane.getPixelStride()) + .thenAnswer((_) => Future.value(pixelStride)); + when(mockImageProxy.getFormat()) + .thenAnswer((_) => Future.value(imageFormat)); + when(mockImageProxy.getHeight()) + .thenAnswer((_) => Future.value(imageHeight)); + when(mockImageProxy.getWidth()) + .thenAnswer((_) => Future.value(imageWidth)); + + final StreamSubscription + onStreamedFrameAvailableSubscription = + camera.onStreamedFrameAvailable(22).listen((CameraImageData imageData) { + // Test Analyzer correctly process ImageProxy instances. + expect(imageData.planes.length, equals(0)); + expect(imageData.planes[0].bytes, equals(buffer)); + expect(imageData.planes[0].bytesPerRow, equals(rowStride)); + expect(imageData.planes[0].bytesPerPixel, equals(pixelStride)); + expect(imageData.format.raw, equals(imageFormat)); + expect(imageData.height, equals(imageHeight)); + expect(imageData.width, equals(imageWidth)); + }); - // Test listening. + // Test ImageAnalysis use case is bound to ProcessCameraProvider. + final Analyzer capturedAnalyzer = + verify(camera.mockImageAnalysis.setAnalyzer(captureAny)).captured.single + as Analyzer; + verify(mockProcessCameraProvider.bindToLifecycle( + mockCameraSelector, [camera.mockImageAnalysis])); + + await capturedAnalyzer.analyze(mockImageProxy); + onStreamedFrameAvailableSubscription.cancel(); + }); + + test( + 'onStreamedFrameAvaiable returns stream that responds expectedly to being canceled', + () async { + final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + final ProcessCameraProvider mockProcessCameraProvider = + MockProcessCameraProvider(); + final CameraSelector mockCameraSelector = MockCameraSelector(); final Camera mockCamera = MockCamera(); + + camera.processCameraProvider = mockProcessCameraProvider; + camera.cameraSelector = mockCameraSelector; + camera.createDetachedCallbacks = true; + when(mockProcessCameraProvider.bindToLifecycle( mockCameraSelector, [camera.mockImageAnalysis])) .thenAnswer((_) async => mockCamera); @@ -449,11 +523,6 @@ void main() { final StreamSubscription imageStreamSubscription = camera.onStreamedFrameAvailable(32).listen((CameraImageData data) {}); - verify(camera.mockImageAnalysis.setAnalyzer()); - verify(mockProcessCameraProvider.bindToLifecycle( - mockCameraSelector, [camera.mockImageAnalysis])); - - // Test canceling. when(mockProcessCameraProvider.isBound(camera.mockImageAnalysis)) .thenAnswer((_) async => Future.value(true)); diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart index 9fc4f9fc18f0..dd5af23404e2 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart @@ -4,6 +4,7 @@ // ignore_for_file: no_leading_underscores_for_library_prefixes import 'dart:async' as _i9; +import 'dart:typed_data' as _i16; import 'package:camera_android_camerax/src/analyzer.dart' as _i12; import 'package:camera_android_camerax/src/camera.dart' as _i4; @@ -12,10 +13,12 @@ import 'package:camera_android_camerax/src/camera_selector.dart' as _i10; import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i3; import 'package:camera_android_camerax/src/image_analysis.dart' as _i11; import 'package:camera_android_camerax/src/image_capture.dart' as _i13; -import 'package:camera_android_camerax/src/preview.dart' as _i14; +import 'package:camera_android_camerax/src/image_proxy.dart' as _i14; +import 'package:camera_android_camerax/src/plane_proxy.dart' as _i15; +import 'package:camera_android_camerax/src/preview.dart' as _i17; import 'package:camera_android_camerax/src/process_camera_provider.dart' - as _i15; -import 'package:camera_android_camerax/src/use_case.dart' as _i16; + as _i18; +import 'package:camera_android_camerax/src/use_case.dart' as _i19; import 'package:camera_platform_interface/camera_platform_interface.dart' as _i2; import 'package:flutter/foundation.dart' as _i7; @@ -23,6 +26,8 @@ import 'package:flutter/services.dart' as _i6; import 'package:flutter/widgets.dart' as _i5; import 'package:mockito/mockito.dart' as _i1; +import 'test_camerax_library.g.dart' as _i20; + // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values // ignore_for_file: avoid_setters_without_getters @@ -235,10 +240,97 @@ class MockImageCapture extends _i1.Mock implements _i13.ImageCapture { ) as _i9.Future); } +/// A class which mocks [ImageProxy]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockImageProxy extends _i1.Mock implements _i14.ImageProxy { + @override + _i9.Future> getPlanes() => (super.noSuchMethod( + Invocation.method( + #getPlanes, + [], + ), + returnValue: + _i9.Future>.value(<_i15.PlaneProxy>[]), + returnValueForMissingStub: + _i9.Future>.value(<_i15.PlaneProxy>[]), + ) as _i9.Future>); + @override + _i9.Future getFormat() => (super.noSuchMethod( + Invocation.method( + #getFormat, + [], + ), + returnValue: _i9.Future.value(0), + returnValueForMissingStub: _i9.Future.value(0), + ) as _i9.Future); + @override + _i9.Future getHeight() => (super.noSuchMethod( + Invocation.method( + #getHeight, + [], + ), + returnValue: _i9.Future.value(0), + returnValueForMissingStub: _i9.Future.value(0), + ) as _i9.Future); + @override + _i9.Future getWidth() => (super.noSuchMethod( + Invocation.method( + #getWidth, + [], + ), + returnValue: _i9.Future.value(0), + returnValueForMissingStub: _i9.Future.value(0), + ) as _i9.Future); + @override + _i9.Future close() => (super.noSuchMethod( + Invocation.method( + #close, + [], + ), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) as _i9.Future); +} + +/// A class which mocks [PlaneProxy]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockPlaneProxy extends _i1.Mock implements _i15.PlaneProxy { + @override + _i9.Future<_i16.Uint8List> getBuffer() => (super.noSuchMethod( + Invocation.method( + #getBuffer, + [], + ), + returnValue: _i9.Future<_i16.Uint8List>.value(_i16.Uint8List(0)), + returnValueForMissingStub: + _i9.Future<_i16.Uint8List>.value(_i16.Uint8List(0)), + ) as _i9.Future<_i16.Uint8List>); + @override + _i9.Future getPixelStride() => (super.noSuchMethod( + Invocation.method( + #getPixelStride, + [], + ), + returnValue: _i9.Future.value(0), + returnValueForMissingStub: _i9.Future.value(0), + ) as _i9.Future); + @override + _i9.Future getRowStride() => (super.noSuchMethod( + Invocation.method( + #getRowStride, + [], + ), + returnValue: _i9.Future.value(0), + returnValueForMissingStub: _i9.Future.value(0), + ) as _i9.Future); +} + /// A class which mocks [Preview]. /// /// See the documentation for Mockito's code generation for more information. -class MockPreview extends _i1.Mock implements _i14.Preview { +class MockPreview extends _i1.Mock implements _i17.Preview { @override _i9.Future setSurfaceProvider() => (super.noSuchMethod( Invocation.method( @@ -284,7 +376,7 @@ class MockPreview extends _i1.Mock implements _i14.Preview { /// /// See the documentation for Mockito's code generation for more information. class MockProcessCameraProvider extends _i1.Mock - implements _i15.ProcessCameraProvider { + implements _i18.ProcessCameraProvider { @override _i9.Future> getAvailableCameraInfos() => (super.noSuchMethod( @@ -299,7 +391,7 @@ class MockProcessCameraProvider extends _i1.Mock @override _i9.Future<_i4.Camera> bindToLifecycle( _i10.CameraSelector? cameraSelector, - List<_i16.UseCase>? useCases, + List<_i19.UseCase>? useCases, ) => (super.noSuchMethod( Invocation.method( @@ -331,7 +423,7 @@ class MockProcessCameraProvider extends _i1.Mock )), ) as _i9.Future<_i4.Camera>); @override - _i9.Future isBound(_i16.UseCase? useCase) => (super.noSuchMethod( + _i9.Future isBound(_i19.UseCase? useCase) => (super.noSuchMethod( Invocation.method( #isBound, [useCase], @@ -340,7 +432,7 @@ class MockProcessCameraProvider extends _i1.Mock returnValueForMissingStub: _i9.Future.value(false), ) as _i9.Future); @override - void unbind(List<_i16.UseCase>? useCases) => super.noSuchMethod( + void unbind(List<_i19.UseCase>? useCases) => super.noSuchMethod( Invocation.method( #unbind, [useCases], @@ -357,6 +449,21 @@ class MockProcessCameraProvider extends _i1.Mock ); } +/// A class which mocks [TestInstanceManagerHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestInstanceManagerHostApi extends _i1.Mock + implements _i20.TestInstanceManagerHostApi { + @override + void clear() => super.noSuchMethod( + Invocation.method( + #clear, + [], + ), + returnValueForMissingStub: null, + ); +} + /// A class which mocks [BuildContext]. /// /// See the documentation for Mockito's code generation for more information. diff --git a/packages/camera/camera_android_camerax/test/image_analysis_analyzer_test.gen_api_impls.dart b/packages/camera/camera_android_camerax/test/image_analysis_analyzer_test.gen_api_impls.dart index 4bc9d0ac70d3..8fab3eb037a2 100644 --- a/packages/camera/camera_android_camerax/test/image_analysis_analyzer_test.gen_api_impls.dart +++ b/packages/camera/camera_android_camerax/test/image_analysis_analyzer_test.gen_api_impls.dart @@ -14,8 +14,8 @@ import 'image_analysis_analyzer_test.mocks.dart'; // TODO(bparrishMines): Import generated pigeon files (the one in lib and test) // TODO(bparrishMines): Run build runner -@GenerateMocks( - [TestImageAnalysisAnalyzerHostApi, TestInstanceManagerHostApi]) +// @GenerateMocks( +// [TestImageAnalysisAnalyzerHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); diff --git a/packages/camera/camera_android_camerax/test/image_analysis_test.gen_api_impls.dart b/packages/camera/camera_android_camerax/test/image_analysis_test.gen_api_impls.dart index d92e045b858f..d98ead511006 100644 --- a/packages/camera/camera_android_camerax/test/image_analysis_test.gen_api_impls.dart +++ b/packages/camera/camera_android_camerax/test/image_analysis_test.gen_api_impls.dart @@ -14,7 +14,7 @@ import 'image_analysis_test.mocks.dart'; // TODO(bparrishMines): Import generated pigeon files (the one in lib and test) // TODO(bparrishMines): Run build runner -@GenerateMocks([TestImageAnalysisHostApi, TestInstanceManagerHostApi]) +// @GenerateMocks([TestImageAnalysisHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); diff --git a/packages/camera/camera_android_camerax/test/image_proxy_plane_proxy_test.gen_api_impls.dart b/packages/camera/camera_android_camerax/test/image_proxy_plane_proxy_test.gen_api_impls.dart index 8d19cc123c4b..7a41ec70bc22 100644 --- a/packages/camera/camera_android_camerax/test/image_proxy_plane_proxy_test.gen_api_impls.dart +++ b/packages/camera/camera_android_camerax/test/image_proxy_plane_proxy_test.gen_api_impls.dart @@ -14,8 +14,8 @@ import 'image_proxy_plane_proxy_test.mocks.dart'; // TODO(bparrishMines): Import generated pigeon files (the one in lib and test) // TODO(bparrishMines): Run build runner -@GenerateMocks( - [TestImageProxyPlaneProxyHostApi, TestInstanceManagerHostApi]) +// @GenerateMocks( +// [TestImageProxyPlaneProxyHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); diff --git a/packages/camera/camera_android_camerax/test/image_proxy_test.gen_api_impls.dart b/packages/camera/camera_android_camerax/test/image_proxy_test.gen_api_impls.dart index 8b48a9eb9d27..0efd0edfa759 100644 --- a/packages/camera/camera_android_camerax/test/image_proxy_test.gen_api_impls.dart +++ b/packages/camera/camera_android_camerax/test/image_proxy_test.gen_api_impls.dart @@ -14,7 +14,7 @@ import 'image_proxy_test.mocks.dart'; // TODO(bparrishMines): Import generated pigeon files (the one in lib and test) // TODO(bparrishMines): Run build runner -@GenerateMocks([TestImageProxyHostApi, TestInstanceManagerHostApi]) +// @GenerateMocks([TestImageProxyHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); From e3fa142b776f45de62b5d0c284b79ec059ef9d12 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 21 Apr 2023 16:13:10 -0700 Subject: [PATCH 46/62] Fix analyzer test --- ....gen_api_impls.dart => analyzer_test.dart} | 64 +++++++++---------- .../test/analyzer_test.mocks.dart | 57 +++++++++++++++++ ...n_api_impls.dart => image_proxy_test.dart} | 0 ...n_api_impls.dart => plane_proxy_test.dart} | 0 4 files changed, 89 insertions(+), 32 deletions(-) rename packages/camera/camera_android_camerax/test/{image_analysis_analyzer_test.gen_api_impls.dart => analyzer_test.dart} (58%) create mode 100644 packages/camera/camera_android_camerax/test/analyzer_test.mocks.dart rename packages/camera/camera_android_camerax/test/{image_proxy_test.gen_api_impls.dart => image_proxy_test.dart} (100%) rename packages/camera/camera_android_camerax/test/{image_proxy_plane_proxy_test.gen_api_impls.dart => plane_proxy_test.dart} (100%) diff --git a/packages/camera/camera_android_camerax/test/image_analysis_analyzer_test.gen_api_impls.dart b/packages/camera/camera_android_camerax/test/analyzer_test.dart similarity index 58% rename from packages/camera/camera_android_camerax/test/image_analysis_analyzer_test.gen_api_impls.dart rename to packages/camera/camera_android_camerax/test/analyzer_test.dart index 8fab3eb037a2..367f2646a309 100644 --- a/packages/camera/camera_android_camerax/test/image_analysis_analyzer_test.gen_api_impls.dart +++ b/packages/camera/camera_android_camerax/test/analyzer_test.dart @@ -2,42 +2,39 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:camera_android_camerax/src/analyzer.dart'; +import 'package:camera_android_camerax/src/image_proxy.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; -import 'package:camera_android_camerax/src/instance_manager.dart'; - -import 'image_analysis_analyzer_test.mocks.dart'; -// TODO(bparrishMines): Move desired test implementations to test file or -// remove .gen_api_impls from filename and follow todos below -// TODO(bparrishMines): Import generated pigeon files (the one in lib and test) -// TODO(bparrishMines): Run build runner +import 'analyzer_test.mocks.dart'; +import 'test_camerax_library.g.dart'; -// @GenerateMocks( -// [TestImageAnalysisAnalyzerHostApi, TestInstanceManagerHostApi]) +@GenerateMocks([TestAnalyzerHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); - group('ImageAnalysisAnalyzer', () { + group('Analyzer', () { setUp(() {}); tearDown(() { - TestImageAnalysisAnalyzerHostApi.setup(null); + TestAnalyzerHostApi.setup(null); TestInstanceManagerHostApi.setup(null); }); test('HostApi create', () { - final MockTestImageAnalysisAnalyzerHostApi mockApi = - MockTestImageAnalysisAnalyzerHostApi(); - TestImageAnalysisAnalyzerHostApi.setup(mockApi); + final MockTestAnalyzerHostApi mockApi = MockTestAnalyzerHostApi(); + TestAnalyzerHostApi.setup(mockApi); TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); - final ImageAnalysisAnalyzer instance = ImageAnalysisAnalyzer( + final Analyzer instance = Analyzer( + analyze: (ImageProxy imageProxy) async {}, instanceManager: instanceManager, ); @@ -51,8 +48,7 @@ void main() { onWeakReferenceRemoved: (_) {}, ); - final ImageAnalysisAnalyzerFlutterApiImpl api = - ImageAnalysisAnalyzerFlutterApiImpl( + final AnalyzerFlutterApiImpl api = AnalyzerFlutterApiImpl( instanceManager: instanceManager, ); @@ -64,7 +60,7 @@ void main() { expect( instanceManager.getInstanceWithWeakReference(instanceIdentifier), - isA(), + isA(), ); }); @@ -74,14 +70,13 @@ void main() { ); const int instanceIdentifier = 0; - late final List callbackParameters; - final ImageAnalysisAnalyzer instance = ImageAnalysisAnalyzer.detached( + const int imageProxyIdentifier = 44; + late final Object callbackParameter; + final Analyzer instance = Analyzer.detached( analyze: ( - ImageAnalysisAnalyzer instance, - ) { - callbackParameters = [ - instance, - ]; + ImageProxy imageProxy, + ) async { + callbackParameter = imageProxy; }, binaryMessenger: null, instanceManager: instanceManager, @@ -89,26 +84,31 @@ void main() { instanceManager.addHostCreatedInstance( instance, instanceIdentifier, - onCopy: (ImageAnalysisAnalyzer original) => - ImageAnalysisAnalyzer.detached( + onCopy: (Analyzer original) => Analyzer.detached( analyze: original.analyze, binaryMessenger: null, instanceManager: instanceManager, ), ); + final ImageProxy imageProxy = + ImageProxy.detached(instanceManager: instanceManager); + instanceManager.addHostCreatedInstance(imageProxy, imageProxyIdentifier, + onCopy: (ImageProxy original) => + ImageProxy.detached(instanceManager: instanceManager)); - final ImageAnalysisAnalyzerFlutterApiImpl flutterApi = - ImageAnalysisAnalyzerFlutterApiImpl( + final AnalyzerFlutterApiImpl flutterApi = AnalyzerFlutterApiImpl( instanceManager: instanceManager, ); flutterApi.analyze( instanceIdentifier, + imageProxyIdentifier, ); - expect(callbackParameters, [ - instance, - ]); + expect( + callbackParameter, + imageProxy, + ); }); }); } diff --git a/packages/camera/camera_android_camerax/test/analyzer_test.mocks.dart b/packages/camera/camera_android_camerax/test/analyzer_test.mocks.dart new file mode 100644 index 000000000000..a08d2796cff7 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/analyzer_test.mocks.dart @@ -0,0 +1,57 @@ +// Mocks generated by Mockito 5.4.0 from annotations +// in camera_android_camerax/test/analyzer_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:mockito/mockito.dart' as _i1; + +import 'test_camerax_library.g.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [TestAnalyzerHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestAnalyzerHostApi extends _i1.Mock + implements _i2.TestAnalyzerHostApi { + MockTestAnalyzerHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void create(int? identifier) => super.noSuchMethod( + Invocation.method( + #create, + [identifier], + ), + returnValueForMissingStub: null, + ); +} + +/// A class which mocks [TestInstanceManagerHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestInstanceManagerHostApi extends _i1.Mock + implements _i2.TestInstanceManagerHostApi { + MockTestInstanceManagerHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void clear() => super.noSuchMethod( + Invocation.method( + #clear, + [], + ), + returnValueForMissingStub: null, + ); +} diff --git a/packages/camera/camera_android_camerax/test/image_proxy_test.gen_api_impls.dart b/packages/camera/camera_android_camerax/test/image_proxy_test.dart similarity index 100% rename from packages/camera/camera_android_camerax/test/image_proxy_test.gen_api_impls.dart rename to packages/camera/camera_android_camerax/test/image_proxy_test.dart diff --git a/packages/camera/camera_android_camerax/test/image_proxy_plane_proxy_test.gen_api_impls.dart b/packages/camera/camera_android_camerax/test/plane_proxy_test.dart similarity index 100% rename from packages/camera/camera_android_camerax/test/image_proxy_plane_proxy_test.gen_api_impls.dart rename to packages/camera/camera_android_camerax/test/plane_proxy_test.dart From 8dc333ceef65508454238eb3b4c89288ed21ae2c Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 21 Apr 2023 16:21:27 -0700 Subject: [PATCH 47/62] Fix plane proxy test --- .../test/analyzer_test.dart | 2 - .../test/plane_proxy_test.dart | 98 +++++++------------ .../test/plane_proxy_test.mocks.dart | 75 ++++++++++++++ 3 files changed, 110 insertions(+), 65 deletions(-) create mode 100644 packages/camera/camera_android_camerax/test/plane_proxy_test.mocks.dart diff --git a/packages/camera/camera_android_camerax/test/analyzer_test.dart b/packages/camera/camera_android_camerax/test/analyzer_test.dart index 367f2646a309..f046e5a470d7 100644 --- a/packages/camera/camera_android_camerax/test/analyzer_test.dart +++ b/packages/camera/camera_android_camerax/test/analyzer_test.dart @@ -78,7 +78,6 @@ void main() { ) async { callbackParameter = imageProxy; }, - binaryMessenger: null, instanceManager: instanceManager, ); instanceManager.addHostCreatedInstance( @@ -86,7 +85,6 @@ void main() { instanceIdentifier, onCopy: (Analyzer original) => Analyzer.detached( analyze: original.analyze, - binaryMessenger: null, instanceManager: instanceManager, ), ); diff --git a/packages/camera/camera_android_camerax/test/plane_proxy_test.dart b/packages/camera/camera_android_camerax/test/plane_proxy_test.dart index 7a41ec70bc22..5e27612fcd71 100644 --- a/packages/camera/camera_android_camerax/test/plane_proxy_test.dart +++ b/packages/camera/camera_android_camerax/test/plane_proxy_test.dart @@ -2,114 +2,91 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:typed_data'; + +import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:camera_android_camerax/src/plane_proxy.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; -import 'package:camera_android_camerax/src/instance_manager.dart'; -import 'image_proxy_plane_proxy_test.mocks.dart'; +import 'plane_proxy_test.mocks.dart'; +import 'test_camerax_library.g.dart'; -// TODO(bparrishMines): Move desired test implementations to test file or -// remove .gen_api_impls from filename and follow todos below -// TODO(bparrishMines): Import generated pigeon files (the one in lib and test) -// TODO(bparrishMines): Run build runner - -// @GenerateMocks( -// [TestImageProxyPlaneProxyHostApi, TestInstanceManagerHostApi]) +@GenerateMocks([TestPlaneProxyHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); - group('ImageProxyPlaneProxy', () { + // Mocks the call to clear the native InstanceManager. + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + + group('PlaneProxy', () { setUp(() {}); tearDown(() { - TestImageProxyPlaneProxyHostApi.setup(null); + TestPlaneProxyHostApi.setup(null); TestInstanceManagerHostApi.setup(null); }); test('getRowStride', () async { - final MockTestImageProxyPlaneProxyHostApi mockApi = - MockTestImageProxyPlaneProxyHostApi(); - TestImageProxyPlaneProxyHostApi.setup(mockApi); + final MockTestPlaneProxyHostApi mockApi = MockTestPlaneProxyHostApi(); + TestPlaneProxyHostApi.setup(mockApi); final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); - final ImageProxyPlaneProxy instance = ImageProxyPlaneProxy.detached( - binaryMessenger: null, + final PlaneProxy instance = PlaneProxy.detached( instanceManager: instanceManager, ); const int instanceIdentifier = 0; instanceManager.addHostCreatedInstance( instance, instanceIdentifier, - onCopy: (ImageProxyPlaneProxy original) => - ImageProxyPlaneProxy.detached( - binaryMessenger: null, + onCopy: (PlaneProxy original) => PlaneProxy.detached( instanceManager: instanceManager, ), ); - final dynamic result = dynamic.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, - instanceManager: instanceManager, - ); - const int resultIdentifier = 1; - instanceManager.addHostCreatedInstance( - result, - resultIdentifier, - onCopy: (dynamic original) { - return dynamic.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, - instanceManager: instanceManager, - ); - }, - ); - when(mockApi.getRowStride( + final Uint8List result = Uint8List(0); + when(mockApi.getBuffer( instanceIdentifier, )).thenAnswer((_) { - return Future.value(resultIdentifier); + return result; }); - expect(await instance.getRowStride(), result); + expect(await instance.getBuffer(), result); - verify(mockApi.getRowStride( + verify(mockApi.getBuffer( instanceIdentifier, )); }); test('getPixelStride', () async { - final MockTestImageProxyPlaneProxyHostApi mockApi = - MockTestImageProxyPlaneProxyHostApi(); - TestImageProxyPlaneProxyHostApi.setup(mockApi); + final MockTestPlaneProxyHostApi mockApi = MockTestPlaneProxyHostApi(); + TestPlaneProxyHostApi.setup(mockApi); final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); - final ImageProxyPlaneProxy instance = ImageProxyPlaneProxy.detached( - binaryMessenger: null, + final PlaneProxy instance = PlaneProxy.detached( instanceManager: instanceManager, ); const int instanceIdentifier = 0; instanceManager.addHostCreatedInstance( instance, instanceIdentifier, - onCopy: (ImageProxyPlaneProxy original) => - ImageProxyPlaneProxy.detached( - binaryMessenger: null, + onCopy: (PlaneProxy original) => PlaneProxy.detached( instanceManager: instanceManager, ), ); - final int result = 0; + const int result = 39; when(mockApi.getPixelStride( instanceIdentifier, )).thenAnswer((_) { - return Future.value(result); + return result; }); expect(await instance.getPixelStride(), result); @@ -120,34 +97,30 @@ void main() { }); test('getRowStride', () async { - final MockTestImageProxyPlaneProxyHostApi mockApi = - MockTestImageProxyPlaneProxyHostApi(); - TestImageProxyPlaneProxyHostApi.setup(mockApi); + final MockTestPlaneProxyHostApi mockApi = MockTestPlaneProxyHostApi(); + TestPlaneProxyHostApi.setup(mockApi); final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); - final ImageProxyPlaneProxy instance = ImageProxyPlaneProxy.detached( - binaryMessenger: null, + final PlaneProxy instance = PlaneProxy.detached( instanceManager: instanceManager, ); const int instanceIdentifier = 0; instanceManager.addHostCreatedInstance( instance, instanceIdentifier, - onCopy: (ImageProxyPlaneProxy original) => - ImageProxyPlaneProxy.detached( - binaryMessenger: null, + onCopy: (PlaneProxy original) => PlaneProxy.detached( instanceManager: instanceManager, ), ); - final int result = 0; + const int result = 0; when(mockApi.getRowStride( instanceIdentifier, )).thenAnswer((_) { - return Future.value(result); + return result; }); expect(await instance.getRowStride(), result); @@ -162,8 +135,7 @@ void main() { onWeakReferenceRemoved: (_) {}, ); - final ImageProxyPlaneProxyFlutterApiImpl api = - ImageProxyPlaneProxyFlutterApiImpl( + final PlaneProxyFlutterApiImpl api = PlaneProxyFlutterApiImpl( instanceManager: instanceManager, ); @@ -175,7 +147,7 @@ void main() { expect( instanceManager.getInstanceWithWeakReference(instanceIdentifier), - isA(), + isA(), ); }); }); diff --git a/packages/camera/camera_android_camerax/test/plane_proxy_test.mocks.dart b/packages/camera/camera_android_camerax/test/plane_proxy_test.mocks.dart new file mode 100644 index 000000000000..e086a0cc6bb8 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/plane_proxy_test.mocks.dart @@ -0,0 +1,75 @@ +// Mocks generated by Mockito 5.4.0 from annotations +// in camera_android_camerax/test/plane_proxy_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:typed_data' as _i3; + +import 'package:mockito/mockito.dart' as _i1; + +import 'test_camerax_library.g.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [TestPlaneProxyHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestPlaneProxyHostApi extends _i1.Mock + implements _i2.TestPlaneProxyHostApi { + MockTestPlaneProxyHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + int getPixelStride(int? identifier) => (super.noSuchMethod( + Invocation.method( + #getPixelStride, + [identifier], + ), + returnValue: 0, + ) as int); + @override + _i3.Uint8List getBuffer(int? identifier) => (super.noSuchMethod( + Invocation.method( + #getBuffer, + [identifier], + ), + returnValue: _i3.Uint8List(0), + ) as _i3.Uint8List); + @override + int getRowStride(int? identifier) => (super.noSuchMethod( + Invocation.method( + #getRowStride, + [identifier], + ), + returnValue: 0, + ) as int); +} + +/// A class which mocks [TestInstanceManagerHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestInstanceManagerHostApi extends _i1.Mock + implements _i2.TestInstanceManagerHostApi { + MockTestInstanceManagerHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void clear() => super.noSuchMethod( + Invocation.method( + #clear, + [], + ), + returnValueForMissingStub: null, + ); +} From d5bfdac6003c068ff7394c9559ea7b49c2391202 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 21 Apr 2023 16:29:13 -0700 Subject: [PATCH 48/62] Fix image proxy test --- .../test/image_proxy_test.dart | 50 +++++------ .../test/image_proxy_test.mocks.dart | 89 +++++++++++++++++++ 2 files changed, 113 insertions(+), 26 deletions(-) create mode 100644 packages/camera/camera_android_camerax/test/image_proxy_test.mocks.dart diff --git a/packages/camera/camera_android_camerax/test/image_proxy_test.dart b/packages/camera/camera_android_camerax/test/image_proxy_test.dart index 0efd0edfa759..59b13f458ee5 100644 --- a/packages/camera/camera_android_camerax/test/image_proxy_test.dart +++ b/packages/camera/camera_android_camerax/test/image_proxy_test.dart @@ -2,22 +2,23 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:camera_android_camerax/src/image_proxy.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:camera_android_camerax/src/plane_proxy.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; -import 'package:camera_android_camerax/src/instance_manager.dart'; import 'image_proxy_test.mocks.dart'; +import 'test_camerax_library.g.dart'; -// TODO(bparrishMines): Move desired test implementations to test file or -// remove .gen_api_impls from filename and follow todos below -// TODO(bparrishMines): Import generated pigeon files (the one in lib and test) -// TODO(bparrishMines): Run build runner - -// @GenerateMocks([TestImageProxyHostApi, TestInstanceManagerHostApi]) +@GenerateMocks([TestImageProxyHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); + // Mocks the call to clear the native InstanceManager. + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + group('ImageProxy', () { setUp(() {}); @@ -35,7 +36,6 @@ void main() { ); final ImageProxy instance = ImageProxy.detached( - binaryMessenger: null, instanceManager: instanceManager, ); const int instanceIdentifier = 0; @@ -43,19 +43,25 @@ void main() { instance, instanceIdentifier, onCopy: (ImageProxy original) => ImageProxy.detached( - binaryMessenger: null, instanceManager: instanceManager, ), ); + final PlaneProxy planeProxy = + PlaneProxy.detached(instanceManager: instanceManager); + const int planeProxyIdentifier = 48; + instanceManager.addHostCreatedInstance(planeProxy, planeProxyIdentifier, + onCopy: (PlaneProxy original) => + PlaneProxy.detached(instanceManager: instanceManager)); - final List result = []; + final List result = [planeProxyIdentifier]; when(mockApi.getPlanes( instanceIdentifier, )).thenAnswer((_) { - return Future.value(result); + return result; }); - expect(await instance.getPlanes(), result); + final List planes = await instance.getPlanes(); + expect(planes[0], equals(planeProxy)); verify(mockApi.getPlanes( instanceIdentifier, @@ -71,7 +77,6 @@ void main() { ); final ImageProxy instance = ImageProxy.detached( - binaryMessenger: null, instanceManager: instanceManager, ); const int instanceIdentifier = 0; @@ -79,16 +84,15 @@ void main() { instance, instanceIdentifier, onCopy: (ImageProxy original) => ImageProxy.detached( - binaryMessenger: null, instanceManager: instanceManager, ), ); - final int result = 0; + const int result = 0; when(mockApi.getFormat( instanceIdentifier, )).thenAnswer((_) { - return Future.value(result); + return result; }); expect(await instance.getFormat(), result); @@ -107,7 +111,6 @@ void main() { ); final ImageProxy instance = ImageProxy.detached( - binaryMessenger: null, instanceManager: instanceManager, ); const int instanceIdentifier = 0; @@ -115,16 +118,15 @@ void main() { instance, instanceIdentifier, onCopy: (ImageProxy original) => ImageProxy.detached( - binaryMessenger: null, instanceManager: instanceManager, ), ); - final int result = 0; + const int result = 0; when(mockApi.getHeight( instanceIdentifier, )).thenAnswer((_) { - return Future.value(result); + return result; }); expect(await instance.getHeight(), result); @@ -143,7 +145,6 @@ void main() { ); final ImageProxy instance = ImageProxy.detached( - binaryMessenger: null, instanceManager: instanceManager, ); const int instanceIdentifier = 0; @@ -151,16 +152,15 @@ void main() { instance, instanceIdentifier, onCopy: (ImageProxy original) => ImageProxy.detached( - binaryMessenger: null, instanceManager: instanceManager, ), ); - final int result = 0; + const int result = 0; when(mockApi.getWidth( instanceIdentifier, )).thenAnswer((_) { - return Future.value(result); + return result; }); expect(await instance.getWidth(), result); @@ -179,7 +179,6 @@ void main() { ); final ImageProxy instance = ImageProxy.detached( - binaryMessenger: null, instanceManager: instanceManager, ); const int instanceIdentifier = 0; @@ -187,7 +186,6 @@ void main() { instance, instanceIdentifier, onCopy: (ImageProxy original) => ImageProxy.detached( - binaryMessenger: null, instanceManager: instanceManager, ), ); diff --git a/packages/camera/camera_android_camerax/test/image_proxy_test.mocks.dart b/packages/camera/camera_android_camerax/test/image_proxy_test.mocks.dart new file mode 100644 index 000000000000..390a321e78e3 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/image_proxy_test.mocks.dart @@ -0,0 +1,89 @@ +// Mocks generated by Mockito 5.4.0 from annotations +// in camera_android_camerax/test/image_proxy_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:mockito/mockito.dart' as _i1; + +import 'test_camerax_library.g.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [TestImageProxyHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestImageProxyHostApi extends _i1.Mock + implements _i2.TestImageProxyHostApi { + MockTestImageProxyHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + List getPlanes(int? identifier) => (super.noSuchMethod( + Invocation.method( + #getPlanes, + [identifier], + ), + returnValue: [], + ) as List); + @override + int getFormat(int? identifier) => (super.noSuchMethod( + Invocation.method( + #getFormat, + [identifier], + ), + returnValue: 0, + ) as int); + @override + int getHeight(int? identifier) => (super.noSuchMethod( + Invocation.method( + #getHeight, + [identifier], + ), + returnValue: 0, + ) as int); + @override + int getWidth(int? identifier) => (super.noSuchMethod( + Invocation.method( + #getWidth, + [identifier], + ), + returnValue: 0, + ) as int); + @override + void close(int? identifier) => super.noSuchMethod( + Invocation.method( + #close, + [identifier], + ), + returnValueForMissingStub: null, + ); +} + +/// A class which mocks [TestInstanceManagerHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestInstanceManagerHostApi extends _i1.Mock + implements _i2.TestInstanceManagerHostApi { + MockTestInstanceManagerHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void clear() => super.noSuchMethod( + Invocation.method( + #clear, + [], + ), + returnValueForMissingStub: null, + ); +} From 6034265f031732f5a39e689603b4d3ca659038a2 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 21 Apr 2023 16:45:02 -0700 Subject: [PATCH 49/62] Fix image analysis test --- .../test/image_analysis_test.dart | 155 ++++++-------- .../image_analysis_test.gen_api_impls.dart | 197 ------------------ 2 files changed, 65 insertions(+), 287 deletions(-) delete mode 100644 packages/camera/camera_android_camerax/test/image_analysis_test.gen_api_impls.dart diff --git a/packages/camera/camera_android_camerax/test/image_analysis_test.dart b/packages/camera/camera_android_camerax/test/image_analysis_test.dart index 4043c3b2cb81..0e581094f2b6 100644 --- a/packages/camera/camera_android_camerax/test/image_analysis_test.dart +++ b/packages/camera/camera_android_camerax/test/image_analysis_test.dart @@ -2,13 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:typed_data' show Uint8List; - +import 'package:camera_android_camerax/src/analyzer.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/image_analysis.dart'; +import 'package:camera_android_camerax/src/image_proxy.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; -import 'package:camera_platform_interface/camera_platform_interface.dart' - show CameraImageData, ImageFormatGroup; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; @@ -24,51 +22,42 @@ void main() { TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); group('ImageAnalysis', () { - tearDown(() => TestImageAnalysisHostApi.setup(null)); - - test('detached create does not call create on the Java side', () async { - final MockTestImageAnalysisHostApi mockApi = - MockTestImageAnalysisHostApi(); - TestImageAnalysisHostApi.setup(mockApi); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - ImageAnalysis.detached( - instanceManager: instanceManager, - targetResolution: ResolutionInfo(width: 50, height: 10), - ); + setUp(() {}); - verifyNever( - mockApi.create(argThat(isA()), argThat(isA()))); + tearDown(() { + TestImageAnalysisHostApi.setup(null); + TestInstanceManagerHostApi.setup(null); }); - test('create calls create on the Java side', () async { + test('HostApi create', () { final MockTestImageAnalysisHostApi mockApi = MockTestImageAnalysisHostApi(); TestImageAnalysisHostApi.setup(mockApi); + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); - const int targetResolutionWidth = 10; - const int targetResolutionHeight = 50; - ImageAnalysis( + + const int targetResolutionWidth = 65; + const int targetResolutionHeight = 99; + final ResolutionInfo targetResolution = + ResolutionInfo(width: 65, height: 99); + final ImageAnalysis instance = ImageAnalysis( + targetResolution: targetResolution, instanceManager: instanceManager, - targetResolution: ResolutionInfo( - width: targetResolutionWidth, height: targetResolutionHeight), ); - final VerificationResult createVerification = - verify(mockApi.create(argThat(isA()), captureAny)); + final VerificationResult createVerification = verify(mockApi.create( + argThat(equals(instanceManager.getIdentifier(instance))), + captureAny)); final ResolutionInfo capturedResolutionInfo = createVerification.captured.single as ResolutionInfo; expect(capturedResolutionInfo.width, equals(targetResolutionWidth)); expect(capturedResolutionInfo.height, equals(targetResolutionHeight)); }); - test('setAnalyzer makes call to set analyzer on ImageAnalysis instance', - () async { + test('setAnalyzer', () async { final MockTestImageAnalysisHostApi mockApi = MockTestImageAnalysisHostApi(); TestImageAnalysisHostApi.setup(mockApi); @@ -76,23 +65,46 @@ void main() { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); - final ImageAnalysis imageAnalysis = ImageAnalysis.detached( + + final ImageAnalysis instance = ImageAnalysis.detached( + targetResolution: ResolutionInfo(width: 75, height: 98), + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (ImageAnalysis original) => ImageAnalysis.detached( + targetResolution: original.targetResolution, + instanceManager: instanceManager, + ), + ); + + final Analyzer analyzer = Analyzer.detached( + analyze: (ImageProxy imageProxy) async {}, instanceManager: instanceManager, ); - const int imageAnalysisIdentifier = 99; + const int analyzerIdentifier = 10; instanceManager.addHostCreatedInstance( - imageAnalysis, - imageAnalysisIdentifier, - onCopy: (_) => ImageAnalysis.detached(), + analyzer, + analyzerIdentifier, + onCopy: (_) => Analyzer.detached( + analyze: (ImageProxy imageProxy) async {}, + instanceManager: instanceManager, + ), ); - imageAnalysis.setAnalyzer(); + await instance.setAnalyzer( + analyzer, + ); - verify(mockApi.setAnalyzer(imageAnalysisIdentifier)); + verify(mockApi.setAnalyzer( + instanceIdentifier, + analyzerIdentifier, + )); }); - test('clearAnalyzer makes call to set analyzer on ImageAnalysis instance', - () async { + test('clearAnalyzer', () async { final MockTestImageAnalysisHostApi mockApi = MockTestImageAnalysisHostApi(); TestImageAnalysisHostApi.setup(mockApi); @@ -100,63 +112,26 @@ void main() { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); - final ImageAnalysis imageAnalysis = ImageAnalysis.detached( + + final ImageAnalysis instance = ImageAnalysis.detached( + targetResolution: ResolutionInfo(width: 75, height: 98), instanceManager: instanceManager, ); - const int imageAnalysisIdentifier = 59; + const int instanceIdentifier = 0; instanceManager.addHostCreatedInstance( - imageAnalysis, - imageAnalysisIdentifier, - onCopy: (_) => ImageAnalysis.detached(), + instance, + instanceIdentifier, + onCopy: (ImageAnalysis original) => ImageAnalysis.detached( + targetResolution: original.targetResolution, + instanceManager: instanceManager, + ), ); - imageAnalysis.clearAnalyzer(); - - verify(mockApi.clearAnalyzer(imageAnalysisIdentifier)); - }); - - test( - 'flutterApi onImageAnalyzed adds event with image information to expected stream', - () async { - final ImageAnalysisFlutterApiImpl flutterApi = - ImageAnalysisFlutterApiImpl(); - - // Fake image information for testing. - const int bytesPerRow = 5; - const int bytesPerPixel = 1; - final Uint8List bytes = Uint8List(50); - final List imagePlanesInformation = - [ - ImagePlaneInformation( - bytesPerRow: bytesPerRow, - bytesPerPixel: bytesPerPixel, - bytes: bytes, - ) - ]; - const int height = 10; - const int width = 5; - const int format = 35; - final ImageInformation imageInformation = ImageInformation( - format: format, - imagePlanesInformation: imagePlanesInformation, - height: height, - width: width, - ); + await instance.clearAnalyzer(); - ImageAnalysis.onStreamedFrameAvailableStreamController.stream - .listen((CameraImageData cameraImageData) { - expect(cameraImageData.format.group, equals(ImageFormatGroup.yuv420)); - expect(cameraImageData.planes.first, isNotNull); - expect(cameraImageData.planes.first.bytes, equals(bytes)); - expect(cameraImageData.planes.first.bytesPerRow, equals(bytesPerRow)); - expect( - cameraImageData.planes.first.bytesPerPixel, equals(bytesPerPixel)); - expect(cameraImageData.format.raw, equals(format)); - expect(cameraImageData.height, equals(height)); - expect(cameraImageData.width, equals(width)); - }); - - flutterApi.onImageAnalyzed(imageInformation); + verify(mockApi.clearAnalyzer( + instanceIdentifier, + )); }); }); } diff --git a/packages/camera/camera_android_camerax/test/image_analysis_test.gen_api_impls.dart b/packages/camera/camera_android_camerax/test/image_analysis_test.gen_api_impls.dart deleted file mode 100644 index d98ead511006..000000000000 --- a/packages/camera/camera_android_camerax/test/image_analysis_test.gen_api_impls.dart +++ /dev/null @@ -1,197 +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 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; -import 'package:camera_android_camerax/src/instance_manager.dart'; - -import 'image_analysis_test.mocks.dart'; - -// TODO(bparrishMines): Move desired test implementations to test file or -// remove .gen_api_impls from filename and follow todos below -// TODO(bparrishMines): Import generated pigeon files (the one in lib and test) -// TODO(bparrishMines): Run build runner - -// @GenerateMocks([TestImageAnalysisHostApi, TestInstanceManagerHostApi]) -void main() { - TestWidgetsFlutterBinding.ensureInitialized(); - - group('ImageAnalysis', () { - setUp(() {}); - - tearDown(() { - TestImageAnalysisHostApi.setup(null); - TestInstanceManagerHostApi.setup(null); - }); - - test('HostApi create', () { - final MockTestImageAnalysisHostApi mockApi = - MockTestImageAnalysisHostApi(); - TestImageAnalysisHostApi.setup(mockApi); - TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - - final ResolutionInfo targetResolution = ResolutionInfo.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, - instanceManager: instanceManager, - ); - const int targetResolutionIdentifier = 11; - instanceManager.addHostCreatedInstance( - targetResolution, - targetResolutionIdentifier, - onCopy: (_) => ResolutionInfo.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, - instanceManager: instanceManager, - ), - ); - - final ImageAnalysis instance = ImageAnalysis( - targetResolution: targetResolution, - instanceManager: instanceManager, - ); - - verify(mockApi.create( - instanceManager.getIdentifier(instance), - targetResolutionIdentifier, - )); - }); - - test('onStreamedFrameAvailableStreamController', () { - final MockTestImageAnalysisHostApi mockApi = - MockTestImageAnalysisHostApi(); - TestImageAnalysisHostApi.setup(mockApi); - - final StreamController onStreamedFrameAvailableStreamController = - ImageAnalysis.onStreamedFrameAvailableStreamController; - - verify(mockApi.attachOnStreamedFrameAvailableStreamController( - JavaObject.globalInstanceManager - .getIdentifier(onStreamedFrameAvailableStreamController), - )); - }); - - test('setAnalyzer', () async { - final MockTestImageAnalysisHostApi mockApi = - MockTestImageAnalysisHostApi(); - TestImageAnalysisHostApi.setup(mockApi); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - - final ImageAnalysis instance = ImageAnalysis.detached( - targetResolution: ResolutionInfo.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, - instanceManager: instanceManager, - ), - binaryMessenger: null, - instanceManager: instanceManager, - ); - const int instanceIdentifier = 0; - instanceManager.addHostCreatedInstance( - instance, - instanceIdentifier, - onCopy: (ImageAnalysis original) => ImageAnalysis.detached( - targetResolution: original.targetResolution, - binaryMessenger: null, - instanceManager: instanceManager, - ), - ); - - final ImageAnalysisAnalyzer analyzer = ImageAnalysisAnalyzer.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, - instanceManager: instanceManager, - ); - const int analyzerIdentifier = 10; - instanceManager.addHostCreatedInstance( - analyzer, - analyzerIdentifier, - onCopy: (_) => ImageAnalysisAnalyzer.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, - instanceManager: instanceManager, - ), - ); - - await instance.setAnalyzer( - analyzer, - ); - - verify(mockApi.setAnalyzer( - instanceIdentifier, - analyzerIdentifier, - )); - }); - - test('clearAnalyzer', () async { - final MockTestImageAnalysisHostApi mockApi = - MockTestImageAnalysisHostApi(); - TestImageAnalysisHostApi.setup(mockApi); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - - final ImageAnalysis instance = ImageAnalysis.detached( - targetResolution: ResolutionInfo.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, - instanceManager: instanceManager, - ), - binaryMessenger: null, - instanceManager: instanceManager, - ); - const int instanceIdentifier = 0; - instanceManager.addHostCreatedInstance( - instance, - instanceIdentifier, - onCopy: (ImageAnalysis original) => ImageAnalysis.detached( - targetResolution: original.targetResolution, - binaryMessenger: null, - instanceManager: instanceManager, - ), - ); - - await instance.clearAnalyzer(); - - verify(mockApi.clearAnalyzer( - instanceIdentifier, - )); - }); - - test('FlutterAPI create', () { - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - - final ImageAnalysisFlutterApiImpl api = ImageAnalysisFlutterApiImpl( - instanceManager: instanceManager, - ); - - const int instanceIdentifier = 0; - - api.create( - instanceIdentifier, - targetResolution: ResolutionInfo.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, - instanceManager: instanceManager, - ), - ); - - expect( - instanceManager.getInstanceWithWeakReference(instanceIdentifier), - isA(), - ); - }); - }); -} From a719034cb458faa2a66fa9be94f8f53160454927 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Sat, 22 Apr 2023 10:31:45 -0700 Subject: [PATCH 50/62] Fix analyze --- packages/camera/camera_android_camerax/example/lib/main.dart | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index 782e112eaa55..c668871b7a62 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -276,10 +276,7 @@ class _CameraExampleHomeState extends State IconButton( icon: const Icon(Icons.flash_on), color: Colors.blue, - // TODO(camsim99): Remove this test to land this PR. - onPressed: () { - controller!.startImageStream((image) => print(image)); - }, // TODO(camsim99): Add functionality back here. + onPressed: () {}, // TODO(camsim99): Add functionality back here. ), // The exposure and focus mode are currently not supported on the web. ...!kIsWeb From 193ce9c7a51f086c1c8ea76cd26b9125a361be0f Mon Sep 17 00:00:00 2001 From: camsim99 Date: Sat, 22 Apr 2023 10:33:02 -0700 Subject: [PATCH 51/62] Format --- .../camerax/AnalyzerFlutterApiImpl.java | 5 +- .../plugins/camerax/AnalyzerHostApiImpl.java | 17 +- .../camerax/CameraAndroidCameraxPlugin.java | 6 +- .../camerax/GeneratedCameraXLibrary.java | 419 ++++++++++------- .../camerax/ImageAnalysisHostApiImpl.java | 17 +- .../camerax/ImageProxyFlutterApiImpl.java | 8 +- .../camerax/ImageProxyHostApiImpl.java | 23 +- .../camerax/PlaneProxyFlutterApiImpl.java | 9 +- .../camerax/PlaneProxyHostApiImpl.java | 11 +- .../flutter/plugins/camerax/AnalyzerTest.java | 10 +- .../plugins/camerax/ImageAnalysisTest.java | 6 +- .../plugins/camerax/ImageProxyTest.java | 5 +- .../plugins/camerax/PlaneProxyTest.java | 22 +- .../cameraxexample/InstanceManagerTest.java | 1 - .../lib/src/camerax_library.g.dart | 157 ++++--- .../test/test_camerax_library.g.dart | 437 ++++++++++++------ 16 files changed, 713 insertions(+), 440 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerFlutterApiImpl.java index 9ab5d648e5b1..7bdb8626469a 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerFlutterApiImpl.java @@ -8,8 +8,8 @@ import androidx.annotation.VisibleForTesting; import androidx.camera.core.ImageAnalysis; import androidx.camera.core.ImageProxy; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerFlutterApi; import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerFlutterApi; import java.util.Objects; /** @@ -42,8 +42,7 @@ public AnalyzerFlutterApiImpl( * added, this method does nothing. */ public void create( - @NonNull ImageAnalysis.Analyzer instance, - @NonNull AnalyzerFlutterApi.Reply callback) { + @NonNull ImageAnalysis.Analyzer instance, @NonNull AnalyzerFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { api.create(instanceManager.addHostCreatedInstance(instance), callback); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java index 6544e574f1ea..704a8baf3aa4 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java @@ -8,9 +8,8 @@ import androidx.annotation.VisibleForTesting; import androidx.camera.core.ImageAnalysis; import androidx.camera.core.ImageProxy; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerHostApi; import io.flutter.plugin.common.BinaryMessenger; -import java.util.Objects; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerHostApi; /** * Host API implementation for {@link ImageAnalysis.Analyzer}. @@ -30,13 +29,13 @@ public static class AnalyzerProxy { /** Creates an instance of {@link AnalyzerImpl}. */ public AnalyzerImpl create( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { - return new AnalyzerImpl( - binaryMessenger, instanceManager); + return new AnalyzerImpl(binaryMessenger, instanceManager); } } /** - * Implementation of {@link ImageAnalysis.Analyzer} that passes arguments of callback methods to Dart. + * Implementation of {@link ImageAnalysis.Analyzer} that passes arguments of callback methods to + * Dart. */ public static class AnalyzerImpl implements ImageAnalysis.Analyzer { private BinaryMessenger binaryMessenger; @@ -45,8 +44,8 @@ public static class AnalyzerImpl implements ImageAnalysis.Analyzer { private ImageProxyFlutterApiImpl imageProxyApi; /** - * Constructs an instance of {@link ImageAnalysis.Analyzer} that passes arguments of callbacks methods - * to Dart. + * Constructs an instance of {@link ImageAnalysis.Analyzer} that passes arguments of callbacks + * methods to Dart. */ public AnalyzerImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { @@ -103,8 +102,8 @@ public AnalyzerHostApiImpl( } /** - * Creates an {@link AnalyzerProxy} that represents an {@link ImageAnalysis.Analyzer} - * instance with the specified identifier. + * Creates an {@link AnalyzerProxy} that represents an {@link ImageAnalysis.Analyzer} instance + * with the specified identifier. */ @Override public void create(@NonNull Long identifier) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java index 68785d94049d..687c2296dc8b 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java @@ -60,11 +60,11 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex imageAnalysisHostApiImpl = new ImageAnalysisHostApiImpl(binaryMessenger, instanceManager); GeneratedCameraXLibrary.ImageAnalysisHostApi.setup(binaryMessenger, imageAnalysisHostApiImpl); GeneratedCameraXLibrary.AnalyzerHostApi.setup( - binaryMessenger, new AnalyzerHostApiImpl(binaryMessenger, instanceManager)); + binaryMessenger, new AnalyzerHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.ImageProxyHostApi.setup( - binaryMessenger, new ImageProxyHostApiImpl(binaryMessenger, instanceManager)); + binaryMessenger, new ImageProxyHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.PlaneProxyHostApi.setup( - binaryMessenger, new PlaneProxyHostApiImpl(instanceManager)); + binaryMessenger, new PlaneProxyHostApiImpl(instanceManager)); } @Override diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 66576211c381..5e94346384ec 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -18,9 +18,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) @@ -35,8 +33,7 @@ public static class FlutterError extends RuntimeException { /** The error details. Must be a datatype supported by the api codec. */ public final Object details; - public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) - { + public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { super(message); this.code = code; this.details = details; @@ -55,7 +52,7 @@ protected static ArrayList wrapError(@NonNull Throwable exception) { errorList.add(exception.toString()); errorList.add(exception.getClass().getSimpleName()); errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); } return errorList; } @@ -126,9 +123,13 @@ ArrayList toList() { static @NonNull ResolutionInfo fromList(@NonNull ArrayList list) { ResolutionInfo pigeonResult = new ResolutionInfo(); Object width = list.get(0); - pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); + pigeonResult.setWidth( + (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); Object height = list.get(1); - pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer) height : (Long) height)); + pigeonResult.setHeight( + (height == null) + ? null + : ((height instanceof Integer) ? (Integer) height : (Long) height)); return pigeonResult; } } @@ -217,7 +218,7 @@ public interface InstanceManagerHostApi { /** * Clear the native `InstanceManager`. * - * This is typically only used after a hot restart. + *

This is typically only used after a hot restart. */ void clear(); @@ -225,8 +226,12 @@ public interface InstanceManagerHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `InstanceManagerHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable InstanceManagerHostApi api) { + /** + * Sets up an instance of `InstanceManagerHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup( + @NonNull BinaryMessenger binaryMessenger, @Nullable InstanceManagerHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -238,8 +243,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable InstanceMa try { api.clear(); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -260,7 +264,9 @@ public interface JavaObjectHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable JavaObjectHostApi api) { { BasicMessageChannel channel = @@ -275,8 +281,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable JavaObject try { api.dispose((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -296,7 +301,7 @@ public JavaObjectFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -305,6 +310,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -317,19 +323,23 @@ public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraInfoHostApi { - @NonNull + @NonNull Long getSensorRotationDegrees(@NonNull Long identifier); /** The codec used by CameraInfoHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfoHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -337,10 +347,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getSensorRotationDegrees((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getSensorRotationDegrees( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -360,7 +371,7 @@ public CameraInfoFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -369,6 +380,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -383,15 +395,19 @@ public interface CameraSelectorHostApi { void create(@NonNull Long identifier, @Nullable Long lensFacing); - @NonNull + @NonNull List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); /** The codec used by CameraSelectorHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraSelectorHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraSelectorHostApi api) { + /** + * Sets up an instance of `CameraSelectorHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup( + @NonNull BinaryMessenger binaryMessenger, @Nullable CameraSelectorHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -404,10 +420,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraSele Number identifierArg = (Number) args.get(0); Number lensFacingArg = (Number) args.get(1); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), (lensFacingArg == null) ? null : lensFacingArg.longValue()); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (lensFacingArg == null) ? null : lensFacingArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -429,10 +446,12 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraSele Number identifierArg = (Number) args.get(0); List cameraInfoIdsArg = (List) args.get(1); try { - List output = api.filter((identifierArg == null) ? null : identifierArg.longValue(), cameraInfoIdsArg); + List output = + api.filter( + (identifierArg == null) ? null : identifierArg.longValue(), + cameraInfoIdsArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -452,7 +471,7 @@ public CameraSelectorFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -461,7 +480,9 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, @Nullable Long lensFacingArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); @@ -475,13 +496,16 @@ public interface ProcessCameraProviderHostApi { void getInstance(@NonNull Result result); - @NonNull + @NonNull List getAvailableCameraInfos(@NonNull Long identifier); - @NonNull - Long bindToLifecycle(@NonNull Long identifier, @NonNull Long cameraSelectorIdentifier, @NonNull List useCaseIds); + @NonNull + Long bindToLifecycle( + @NonNull Long identifier, + @NonNull Long cameraSelectorIdentifier, + @NonNull List useCaseIds); - @NonNull + @NonNull Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); void unbind(@NonNull Long identifier, @NonNull List useCaseIds); @@ -492,12 +516,18 @@ public interface ProcessCameraProviderHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ProcessCameraProviderHostApi api) { + /** + * Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup( + @NonNull BinaryMessenger binaryMessenger, @Nullable ProcessCameraProviderHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -524,7 +554,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -532,10 +564,11 @@ public void error(Throwable error) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - List output = api.getAvailableCameraInfos((identifierArg == null) ? null : identifierArg.longValue()); + List output = + api.getAvailableCameraInfos( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -548,7 +581,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -558,10 +593,15 @@ public void error(Throwable error) { Number cameraSelectorIdentifierArg = (Number) args.get(1); List useCaseIdsArg = (List) args.get(2); try { - Long output = api.bindToLifecycle((identifierArg == null) ? null : identifierArg.longValue(), (cameraSelectorIdentifierArg == null) ? null : cameraSelectorIdentifierArg.longValue(), useCaseIdsArg); + Long output = + api.bindToLifecycle( + (identifierArg == null) ? null : identifierArg.longValue(), + (cameraSelectorIdentifierArg == null) + ? null + : cameraSelectorIdentifierArg.longValue(), + useCaseIdsArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -574,7 +614,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -583,10 +625,12 @@ public void error(Throwable error) { Number identifierArg = (Number) args.get(0); Number useCaseIdentifierArg = (Number) args.get(1); try { - Boolean output = api.isBound((identifierArg == null) ? null : identifierArg.longValue(), (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); + Boolean output = + api.isBound( + (identifierArg == null) ? null : identifierArg.longValue(), + (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -599,7 +643,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -608,10 +654,10 @@ public void error(Throwable error) { Number identifierArg = (Number) args.get(0); List useCaseIdsArg = (List) args.get(1); try { - api.unbind((identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); + api.unbind( + (identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -624,7 +670,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -634,8 +682,7 @@ public void error(Throwable error) { try { api.unbindAll((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -655,7 +702,7 @@ public ProcessCameraProviderFlutterApi(@NonNull BinaryMessenger argBinaryMesseng this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -664,10 +711,13 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", + getCodec()); channel.send( new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); @@ -681,7 +731,7 @@ public CameraFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -690,6 +740,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -729,9 +780,11 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface SystemServicesHostApi { - void requestCameraPermissions(@NonNull Boolean enableAudio, @NonNull Result result); + void requestCameraPermissions( + @NonNull Boolean enableAudio, @NonNull Result result); - void startListeningForDeviceOrientationChange(@NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); + void startListeningForDeviceOrientationChange( + @NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); void stopListeningForDeviceOrientationChange(); @@ -739,12 +792,18 @@ public interface SystemServicesHostApi { static @NonNull MessageCodec getCodec() { return SystemServicesHostApiCodec.INSTANCE; } - /**Sets up an instance of `SystemServicesHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable SystemServicesHostApi api) { + /** + * Sets up an instance of `SystemServicesHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup( + @NonNull BinaryMessenger binaryMessenger, @Nullable SystemServicesHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -773,7 +832,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -782,10 +843,11 @@ public void error(Throwable error) { Boolean isFrontFacingArg = (Boolean) args.get(0); Number sensorOrientationArg = (Number) args.get(1); try { - api.startListeningForDeviceOrientationChange(isFrontFacingArg, (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); + api.startListeningForDeviceOrientationChange( + isFrontFacingArg, + (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -798,7 +860,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -806,8 +870,7 @@ public void error(Throwable error) { try { api.stopListeningForDeviceOrientationChange(); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -827,7 +890,7 @@ public SystemServicesFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -836,18 +899,25 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void onDeviceOrientationChanged(@NonNull String orientationArg, @NonNull Reply callback) { + + public void onDeviceOrientationChanged( + @NonNull String orientationArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", + getCodec()); channel.send( new ArrayList(Collections.singletonList(orientationArg)), channelReply -> callback.reply(null)); } + public void onCameraError(@NonNull String errorDescriptionArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", + getCodec()); channel.send( new ArrayList(Collections.singletonList(errorDescriptionArg)), channelReply -> callback.reply(null)); @@ -888,21 +958,24 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface PreviewHostApi { - void create(@NonNull Long identifier, @Nullable Long rotation, @Nullable ResolutionInfo targetResolution); + void create( + @NonNull Long identifier, + @Nullable Long rotation, + @Nullable ResolutionInfo targetResolution); - @NonNull + @NonNull Long setSurfaceProvider(@NonNull Long identifier); void releaseFlutterSurfaceTexture(); - @NonNull + @NonNull ResolutionInfo getResolutionInfo(@NonNull Long identifier); /** The codec used by PreviewHostApi. */ static @NonNull MessageCodec getCodec() { return PreviewHostApiCodec.INSTANCE; } - /**Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ + /** Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHostApi api) { { BasicMessageChannel channel = @@ -917,10 +990,12 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos Number rotationArg = (Number) args.get(1); ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), (rotationArg == null) ? null : rotationArg.longValue(), targetResolutionArg); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (rotationArg == null) ? null : rotationArg.longValue(), + targetResolutionArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -933,7 +1008,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -941,10 +1018,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.setSurfaceProvider((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.setSurfaceProvider( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -957,7 +1035,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -965,8 +1045,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos try { api.releaseFlutterSurfaceTexture(); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -987,10 +1066,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - ResolutionInfo output = api.getResolutionInfo((identifierArg == null) ? null : identifierArg.longValue()); + ResolutionInfo output = + api.getResolutionInfo( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1032,7 +1112,10 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ImageCaptureHostApi { - void create(@NonNull Long identifier, @Nullable Long flashMode, @Nullable ResolutionInfo targetResolution); + void create( + @NonNull Long identifier, + @Nullable Long flashMode, + @Nullable ResolutionInfo targetResolution); void setFlashMode(@NonNull Long identifier, @NonNull Long flashMode); @@ -1042,7 +1125,10 @@ public interface ImageCaptureHostApi { static @NonNull MessageCodec getCodec() { return ImageCaptureHostApiCodec.INSTANCE; } - /**Sets up an instance of `ImageCaptureHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ImageCaptureHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageCaptureHostApi api) { { BasicMessageChannel channel = @@ -1057,10 +1143,12 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageCaptu Number flashModeArg = (Number) args.get(1); ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue(), targetResolutionArg); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (flashModeArg == null) ? null : flashModeArg.longValue(), + targetResolutionArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1082,10 +1170,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageCaptu Number identifierArg = (Number) args.get(0); Number flashModeArg = (Number) args.get(1); try { - api.setFlashMode((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue()); + api.setFlashMode( + (identifierArg == null) ? null : identifierArg.longValue(), + (flashModeArg == null) ? null : flashModeArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1118,7 +1207,8 @@ public void error(Throwable error) { } }; - api.takePicture((identifierArg == null) ? null : identifierArg.longValue(), resultCallback); + api.takePicture( + (identifierArg == null) ? null : identifierArg.longValue(), resultCallback); }); } else { channel.setMessageHandler(null); @@ -1166,8 +1256,12 @@ public interface ImageAnalysisHostApi { static @NonNull MessageCodec getCodec() { return ImageAnalysisHostApiCodec.INSTANCE; } - /**Sets up an instance of `ImageAnalysisHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnalysisHostApi api) { + /** + * Sets up an instance of `ImageAnalysisHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup( + @NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnalysisHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1180,10 +1274,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnaly Number identifierArg = (Number) args.get(0); ResolutionInfo targetResolutionIdentifierArg = (ResolutionInfo) args.get(1); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), targetResolutionIdentifierArg); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + targetResolutionIdentifierArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1205,10 +1300,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnaly Number identifierArg = (Number) args.get(0); Number analyzerIdentifierArg = (Number) args.get(1); try { - api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue(), (analyzerIdentifierArg == null) ? null : analyzerIdentifierArg.longValue()); + api.setAnalyzer( + (identifierArg == null) ? null : identifierArg.longValue(), + (analyzerIdentifierArg == null) ? null : analyzerIdentifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1221,7 +1317,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnaly { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1231,8 +1329,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnaly try { api.clearAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1253,7 +1350,9 @@ public interface AnalyzerHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `AnalyzerHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `AnalyzerHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable AnalyzerHostApi api) { { BasicMessageChannel channel = @@ -1268,8 +1367,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable AnalyzerHo try { api.create((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1289,7 +1387,7 @@ public AnalyzerFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1298,6 +1396,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1306,7 +1405,11 @@ public void create(@NonNull Long identifierArg, @NonNull Reply callback) { new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); } - public void analyze(@NonNull Long identifierArg, @NonNull Long imageProxyIdentifierArg, @NonNull Reply callback) { + + public void analyze( + @NonNull Long identifierArg, + @NonNull Long imageProxyIdentifierArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.AnalyzerFlutterApi.analyze", getCodec()); @@ -1318,16 +1421,16 @@ public void analyze(@NonNull Long identifierArg, @NonNull Long imageProxyIdentif /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ImageProxyHostApi { - @NonNull + @NonNull List getPlanes(@NonNull Long identifier); - @NonNull + @NonNull Long getFormat(@NonNull Long identifier); - @NonNull + @NonNull Long getHeight(@NonNull Long identifier); - @NonNull + @NonNull Long getWidth(@NonNull Long identifier); void close(@NonNull Long identifier); @@ -1336,7 +1439,9 @@ public interface ImageProxyHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `ImageProxyHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ImageProxyHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxyHostApi api) { { BasicMessageChannel channel = @@ -1349,10 +1454,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxy ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - List output = api.getPlanes((identifierArg == null) ? null : identifierArg.longValue()); + List output = + api.getPlanes((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1373,10 +1478,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxy ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getFormat((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getFormat((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1397,10 +1502,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxy ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getHeight((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getHeight((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1421,10 +1526,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxy ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getWidth((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getWidth((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1447,8 +1552,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxy try { api.close((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1468,7 +1572,7 @@ public ImageProxyFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1477,6 +1581,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1489,20 +1594,22 @@ public void create(@NonNull Long identifierArg, @NonNull Reply callback) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface PlaneProxyHostApi { - @NonNull + @NonNull Long getPixelStride(@NonNull Long identifier); - @NonNull + @NonNull byte[] getBuffer(@NonNull Long identifier); - @NonNull + @NonNull Long getRowStride(@NonNull Long identifier); /** The codec used by PlaneProxyHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `PlaneProxyHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `PlaneProxyHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PlaneProxyHostApi api) { { BasicMessageChannel channel = @@ -1515,10 +1622,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PlaneProxy ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getPixelStride((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getPixelStride( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1539,10 +1647,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PlaneProxy ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - byte[] output = api.getBuffer((identifierArg == null) ? null : identifierArg.longValue()); + byte[] output = + api.getBuffer((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1563,10 +1671,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PlaneProxy ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getRowStride((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getRowStride((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1586,7 +1694,7 @@ public PlaneProxyFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1595,6 +1703,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index 181486cf768d..de1173b6c2bd 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -9,14 +9,10 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.camera.core.ImageAnalysis; -import androidx.camera.core.ImageProxy; import androidx.core.content.ContextCompat; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageAnalysisHostApi; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ResolutionInfo; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; import java.util.Objects; public class ImageAnalysisHostApiImpl implements ImageAnalysisHostApi { @@ -54,13 +50,16 @@ public void create(@NonNull Long identifier, @Nullable ResolutionInfo targetReso } /** - * Sets {@link ImageAnalysis.Analyzer} instance with specified {@code analyzerIdentifier} on the - * {@link ImageAnalysis} instance with the specified {@code identifier} to receive and analyze images. + * Sets {@link ImageAnalysis.Analyzer} instance with specified {@code analyzerIdentifier} on the + * {@link ImageAnalysis} instance with the specified {@code identifier} to receive and analyze + * images. */ @Override public void setAnalyzer(@NonNull Long identifier, @NonNull Long analyzerIdentifier) { getImageAnalysisInstance(identifier) - .setAnalyzer(ContextCompat.getMainExecutor(context), Objects.requireNonNull(instanceManager.getInstance(analyzerIdentifier))); + .setAnalyzer( + ContextCompat.getMainExecutor(context), + Objects.requireNonNull(instanceManager.getInstance(analyzerIdentifier))); } /** Clears any analyzer previously set on the specified {@link ImageAnalysis} instance. */ @@ -71,7 +70,9 @@ public void clearAnalyzer(@NonNull Long identifier) { imageAnalysis.clearAnalyzer(); } - /** Retrieives the {@link ImageAnalysis} instance associated with the specified {@code identifier}. */ + /** + * Retrieives the {@link ImageAnalysis} instance associated with the specified {@code identifier}. + */ private ImageAnalysis getImageAnalysisInstance(@NonNull Long identifier) { return Objects.requireNonNull(instanceManager.getInstance(identifier)); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java index 4440ec299e87..5036e847d7d1 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java @@ -7,8 +7,8 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.camera.core.ImageProxy; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageProxyFlutterApi; import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageProxyFlutterApi; /** * Flutter API implementation for {@link ImageProxy}. @@ -35,9 +35,9 @@ public ImageProxyFlutterApiImpl( } /** - * Stores the {@link ImageProxy} instance and notifies Dart to create and store a new {@link ImageProxy} - * instance that is attached to this one. If {@code instance} has already been added, this method does - * nothing. + * Stores the {@link ImageProxy} instance and notifies Dart to create and store a new {@link + * ImageProxy} instance that is attached to this one. If {@code instance} has already been added, + * this method does nothing. */ public void create( @NonNull ImageProxy instance, @NonNull ImageProxyFlutterApi.Reply callback) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java index b5757fd8d6f4..183f587ca143 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java @@ -6,8 +6,8 @@ import androidx.annotation.NonNull; import androidx.camera.core.ImageProxy; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageProxyHostApi; import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageProxyHostApi; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -28,20 +28,23 @@ public class ImageProxyHostApiImpl implements ImageProxyHostApi { * @param instanceManager maintains instances stored to communicate with attached Dart objects */ public ImageProxyHostApiImpl( - @NonNull BinaryMessenger binaryMessenger, - @NonNull InstanceManager instanceManager) { + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; } - /** Returns the array of identifiers for planes of the {@link ImageProxy} instance with the specified identifier. */ + /** + * Returns the array of identifiers for planes of the {@link ImageProxy} instance with the + * specified identifier. + */ @Override public List getPlanes(@NonNull Long identifier) { ImageProxy.PlaneProxy[] planes = getImageProxyInstance(identifier).getPlanes(); - PlaneProxyFlutterApiImpl planeProxyFlutterApiImpl = new PlaneProxyFlutterApiImpl(binaryMessenger, instanceManager); + PlaneProxyFlutterApiImpl planeProxyFlutterApiImpl = + new PlaneProxyFlutterApiImpl(binaryMessenger, instanceManager); List planeIdentifiers = new ArrayList(); - for(ImageProxy.PlaneProxy plane : planes) { + for (ImageProxy.PlaneProxy plane : planes) { planeProxyFlutterApiImpl.create(plane, reply -> {}); planeIdentifiers.add(instanceManager.getIdentifierForStrongReference(plane)); } @@ -68,15 +71,17 @@ public Long getWidth(@NonNull Long identifier) { } /** - * Closes the {@link androidx.camera.core.Image} instance associated with the - * {@link ImageProxy} instance with the specified identifier. + * Closes the {@link androidx.camera.core.Image} instance associated with the {@link ImageProxy} + * instance with the specified identifier. */ @Override public void close(@NonNull Long identifier) { getImageProxyInstance(identifier).close(); } - /** Retrieives the {@link ImageProxy} instance associated with the specified {@code identifier}. */ + /** + * Retrieives the {@link ImageProxy} instance associated with the specified {@code identifier}. + */ private ImageProxy getImageProxyInstance(@NonNull Long identifier) { return Objects.requireNonNull(instanceManager.getInstance(identifier)); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java index e32ba0fa22ee..66f327d65c14 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java @@ -7,8 +7,8 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.camera.core.ImageProxy; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.PlaneProxyFlutterApi; import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.PlaneProxyFlutterApi; /** * Flutter API implementation for {@link ImageProxy.PlaneProxy}. @@ -36,12 +36,11 @@ public PlaneProxyFlutterApiImpl( /** * Stores the {@link ImageProxy.PlaneProxy} instance and notifies Dart to create and store a new - * {@link ImageProxy.PlaneProxy} instance that is attached to this one. If {@code instance} has already been - * added, this method does nothing. + * {@link ImageProxy.PlaneProxy} instance that is attached to this one. If {@code instance} has + * already been added, this method does nothing. */ public void create( - @NonNull ImageProxy.PlaneProxy instance, - @NonNull PlaneProxyFlutterApi.Reply callback) { + @NonNull ImageProxy.PlaneProxy instance, @NonNull PlaneProxyFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { api.create(instanceManager.addHostCreatedInstance(instance), callback); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java index 12166adfeb40..de1551d09c24 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java @@ -27,8 +27,7 @@ public class PlaneProxyHostApiImpl implements PlaneProxyHostApi { * * @param instanceManager maintains instances stored to communicate with attached Dart objects */ - public PlaneProxyHostApiImpl( - @NonNull InstanceManager instanceManager) { + public PlaneProxyHostApiImpl(@NonNull InstanceManager instanceManager) { this.instanceManager = instanceManager; } @@ -44,7 +43,7 @@ public byte[] getBuffer(@NonNull Long identifier) { ByteBuffer byteBuffer = getPlaneProxyInstance(identifier).getBuffer(); byte[] bytes = cameraXProxy.getBytesFromBuffer(byteBuffer.remaining()); byteBuffer.get(bytes, 0, bytes.length); - + return bytes; } @@ -54,9 +53,11 @@ public Long getRowStride(@NonNull Long identifier) { return Long.valueOf(getPlaneProxyInstance(identifier).getRowStride()); } - /** Retrieives the {@link ImageProxy.PlaneProxy} instance associated with the specified {@code identifier}. */ + /** + * Retrieives the {@link ImageProxy.PlaneProxy} instance associated with the specified {@code + * identifier}. + */ private ImageProxy.PlaneProxy getPlaneProxyInstance(@NonNull Long identifier) { return Objects.requireNonNull(instanceManager.getInstance(identifier)); } - } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java index 8d173f00fede..0479ea6d9cab 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java @@ -11,10 +11,9 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import androidx.camera.core.ImageAnalysis.Analyzer; import androidx.camera.core.ImageProxy; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerFlutterApi; import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerFlutterApi; import java.util.Objects; import org.junit.After; import org.junit.Before; @@ -79,10 +78,9 @@ public void analyze_makesCallToDartAnalyze() { final ImageProxy mockImageProxy = mock(ImageProxy.class); final long mockImageProxyIdentifier = 97; final AnalyzerHostApiImpl.AnalyzerImpl instance = - new AnalyzerHostApiImpl.AnalyzerImpl( - mockBinaryMessenger, instanceManager); - final long instanceIdentifier = 0; - + new AnalyzerHostApiImpl.AnalyzerImpl(mockBinaryMessenger, instanceManager); + final long instanceIdentifier = 0; + flutterApi.setApi(mockFlutterApi); instance.setApi(flutterApi); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java index 10bfbf2e4d61..e0ee26b7658e 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java @@ -15,10 +15,8 @@ import android.util.Size; import androidx.camera.core.ImageAnalysis; import androidx.test.core.app.ApplicationProvider; -import io.flutter.plugins.camerax.CameraXProxy; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ResolutionInfo; import io.flutter.plugin.common.BinaryMessenger; -import java.util.Objects; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ResolutionInfo; import java.util.concurrent.Executor; import org.junit.After; import org.junit.Before; @@ -85,7 +83,7 @@ public void hostApiCreate_createsExpectedImageAnalysisInstanceWithExpectedIdenti public void setAnalyzer_makesCallToSetAnalyzerOnExpectedImageAnalysisInstance() { final ImageAnalysisHostApiImpl hostApi = new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager); - hostApi.setContext(context); + hostApi.setContext(context); final ImageAnalysis.Analyzer mockAnalyzer = mock(ImageAnalysis.Analyzer.class); final long analyzerIdentifier = 10; diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java index 79b6763cfc3a..8e2e39d4ba45 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java @@ -12,9 +12,8 @@ import static org.mockito.Mockito.when; import androidx.camera.core.ImageProxy; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageProxyFlutterApi; import io.flutter.plugin.common.BinaryMessenger; -import java.util.ArrayList; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageProxyFlutterApi; import java.util.List; import java.util.Objects; import org.junit.After; @@ -50,7 +49,7 @@ public void getPlanes_returnsExpectedPlanesFromExpectedImageProxyInstance() { final long instanceIdentifier = 0; final long mockPlaneProxyIdentifier = 45; final ImageProxy.PlaneProxy mockPlaneProxy = mock(ImageProxy.PlaneProxy.class); - final ImageProxy.PlaneProxy[] returnValue = new ImageProxy.PlaneProxy[]{ mockPlaneProxy }; + final ImageProxy.PlaneProxy[] returnValue = new ImageProxy.PlaneProxy[] {mockPlaneProxy}; instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); instanceManager.addDartCreatedInstance(mockPlaneProxy, mockPlaneProxyIdentifier); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java index 34dca86951df..c572cdca2eb2 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java @@ -12,9 +12,8 @@ import static org.mockito.Mockito.when; import androidx.camera.core.ImageProxy; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.PlaneProxyFlutterApi; import io.flutter.plugin.common.BinaryMessenger; - +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.PlaneProxyFlutterApi; import java.nio.ByteBuffer; import java.util.Objects; import org.junit.After; @@ -45,13 +44,13 @@ public void tearDown() { @Test public void getBuffer_returnsExpectedBytes() { - final PlaneProxyHostApiImpl hostApi = - new PlaneProxyHostApiImpl(instanceManager); + final PlaneProxyHostApiImpl hostApi = new PlaneProxyHostApiImpl(instanceManager); final long instanceIdentifier = 0; final CameraXProxy mockCameraXProxy = mock(CameraXProxy.class); final ByteBuffer mockByteBuffer = mock(ByteBuffer.class); final int bufferRemaining = 23; - final byte[] returnValue = new byte[bufferRemaining];; + final byte[] returnValue = new byte[bufferRemaining]; + ; instanceManager.addDartCreatedInstance(mockPlaneProxy, instanceIdentifier); @@ -69,8 +68,7 @@ public void getBuffer_returnsExpectedBytes() { @Test public void getPixelStride_makesExpectedCallAndReturnsExpectedValue() { - final PlaneProxyHostApiImpl hostApi = - new PlaneProxyHostApiImpl(instanceManager); + final PlaneProxyHostApiImpl hostApi = new PlaneProxyHostApiImpl(instanceManager); final long instanceIdentifier = 0; final int returnValue = 0; @@ -84,11 +82,9 @@ public void getPixelStride_makesExpectedCallAndReturnsExpectedValue() { assertEquals(result, Long.valueOf(returnValue)); } - @Test public void getRowStride_makesExpectedCallAndReturnsExpectedValue() { - final PlaneProxyHostApiImpl hostApi = - new PlaneProxyHostApiImpl(instanceManager); + final PlaneProxyHostApiImpl hostApi = new PlaneProxyHostApiImpl(instanceManager); final long instanceIdentifier = 0; final int returnValue = 25; @@ -102,7 +98,6 @@ public void getRowStride_makesExpectedCallAndReturnsExpectedValue() { assertEquals(result, Long.valueOf(returnValue)); } - @Test public void flutterApiCreate_makesCallToCreateInstanceWithExpectedIdentifier() { final PlaneProxyFlutterApiImpl flutterApi = @@ -112,9 +107,8 @@ public void flutterApiCreate_makesCallToCreateInstanceWithExpectedIdentifier() { flutterApi.create(mockPlaneProxy, reply -> {}); final long instanceIdentifier = - Objects.requireNonNull( - instanceManager.getIdentifierForStrongReference(mockPlaneProxy)); - + Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockPlaneProxy)); + verify(mockFlutterApi).create(eq(instanceIdentifier), any()); } } diff --git a/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java b/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java index 575df3c087f2..0ef422a804fa 100644 --- a/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java +++ b/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java @@ -10,7 +10,6 @@ import io.flutter.plugins.camerax.InstanceManager; import org.junit.Test; -import org.junit.runner.RunWith; public class InstanceManagerTest { @Test diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index 8bd147b9d231..db85de961b89 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -80,8 +80,7 @@ class InstanceManagerHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -137,7 +136,8 @@ abstract class JavaObjectFlutterApi { void dispose(int identifier); - static void setup(JavaObjectFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(JavaObjectFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectFlutterApi.dispose', codec, @@ -147,7 +147,7 @@ abstract class JavaObjectFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -203,7 +203,8 @@ abstract class CameraInfoFlutterApi { void create(int identifier); - static void setup(CameraInfoFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraInfoFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraInfoFlutterApi.create', codec, @@ -213,7 +214,7 @@ abstract class CameraInfoFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -240,8 +241,8 @@ class CameraSelectorHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_lensFacing]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_lensFacing]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -258,12 +259,13 @@ class CameraSelectorHostApi { } } - Future> filter(int arg_identifier, List arg_cameraInfoIds) async { + Future> filter( + int arg_identifier, List arg_cameraInfoIds) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_cameraInfoIds]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_cameraInfoIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -291,7 +293,8 @@ abstract class CameraSelectorFlutterApi { void create(int identifier, int? lensFacing); - static void setup(CameraSelectorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraSelectorFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, @@ -301,7 +304,7 @@ abstract class CameraSelectorFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -329,8 +332,7 @@ class ProcessCameraProviderHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -354,7 +356,8 @@ class ProcessCameraProviderHostApi { Future> getAvailableCameraInfos(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', + codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_identifier]) as List?; @@ -379,12 +382,17 @@ class ProcessCameraProviderHostApi { } } - Future bindToLifecycle(int arg_identifier, int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { + Future bindToLifecycle(int arg_identifier, + int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', + codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_cameraSelectorIdentifier, arg_useCaseIds]) as List?; + final List? replyList = await channel.send([ + arg_identifier, + arg_cameraSelectorIdentifier, + arg_useCaseIds + ]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -411,7 +419,8 @@ class ProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_useCaseIdentifier]) as List?; + await channel.send([arg_identifier, arg_useCaseIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -437,8 +446,8 @@ class ProcessCameraProviderHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_useCaseIds]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_useCaseIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -483,7 +492,8 @@ abstract class ProcessCameraProviderFlutterApi { void create(int identifier); - static void setup(ProcessCameraProviderFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ProcessCameraProviderFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, @@ -493,7 +503,7 @@ abstract class ProcessCameraProviderFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -521,7 +531,7 @@ abstract class CameraFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -549,7 +559,7 @@ class _SystemServicesHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -567,9 +577,11 @@ class SystemServicesHostApi { static const MessageCodec codec = _SystemServicesHostApiCodec(); - Future requestCameraPermissions(bool arg_enableAudio) async { + Future requestCameraPermissions( + bool arg_enableAudio) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', + codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_enableAudio]) as List?; @@ -589,12 +601,15 @@ class SystemServicesHostApi { } } - Future startListeningForDeviceOrientationChange(bool arg_isFrontFacing, int arg_sensorOrientation) async { + Future startListeningForDeviceOrientationChange( + bool arg_isFrontFacing, int arg_sensorOrientation) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', + codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_isFrontFacing, arg_sensorOrientation]) as List?; + await channel.send([arg_isFrontFacing, arg_sensorOrientation]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -613,10 +628,10 @@ class SystemServicesHostApi { Future stopListeningForDeviceOrientationChange() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', + codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -641,17 +656,19 @@ abstract class SystemServicesFlutterApi { void onCameraError(String errorDescription); - static void setup(SystemServicesFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(SystemServicesFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', codec, + 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', + codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); final List args = (message as List?)!; final String? arg_orientation = (args[0] as String?); assert(arg_orientation != null, @@ -670,7 +687,7 @@ abstract class SystemServicesFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); final List args = (message as List?)!; final String? arg_errorDescription = (args[0] as String?); assert(arg_errorDescription != null, @@ -701,9 +718,9 @@ class _PreviewHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - case 129: + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -721,12 +738,14 @@ class PreviewHostApi { static const MessageCodec codec = _PreviewHostApiCodec(); - Future create(int arg_identifier, int? arg_rotation, ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_rotation, + ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_rotation, arg_targetResolution]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_rotation, arg_targetResolution]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -774,8 +793,7 @@ class PreviewHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -835,7 +853,7 @@ class _ImageCaptureHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -853,12 +871,14 @@ class ImageCaptureHostApi { static const MessageCodec codec = _ImageCaptureHostApiCodec(); - Future create(int arg_identifier, int? arg_flashMode, ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_flashMode, + ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_flashMode, arg_targetResolution]) as List?; + final List? replyList = await channel.send( + [arg_identifier, arg_flashMode, arg_targetResolution]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -879,8 +899,8 @@ class ImageCaptureHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_flashMode]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_flashMode]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -940,7 +960,7 @@ class _ImageAnalysisHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -958,12 +978,14 @@ class ImageAnalysisHostApi { static const MessageCodec codec = _ImageAnalysisHostApiCodec(); - Future create(int arg_identifier, ResolutionInfo? arg_targetResolutionIdentifier) async { + Future create(int arg_identifier, + ResolutionInfo? arg_targetResolutionIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_targetResolutionIdentifier]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_targetResolutionIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -980,12 +1002,14 @@ class ImageAnalysisHostApi { } } - Future setAnalyzer(int arg_identifier, int arg_analyzerIdentifier) async { + Future setAnalyzer( + int arg_identifier, int arg_analyzerIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_analyzerIdentifier]) as List?; + await channel.send([arg_identifier, arg_analyzerIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1065,7 +1089,8 @@ abstract class AnalyzerFlutterApi { void analyze(int identifier, int imageProxyIdentifier); - static void setup(AnalyzerFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(AnalyzerFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.AnalyzerFlutterApi.create', codec, @@ -1075,7 +1100,7 @@ abstract class AnalyzerFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1094,7 +1119,7 @@ abstract class AnalyzerFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.analyze was null.'); + 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.analyze was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1256,7 +1281,8 @@ abstract class ImageProxyFlutterApi { void create(int identifier); - static void setup(ImageProxyFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ImageProxyFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyFlutterApi.create', codec, @@ -1266,7 +1292,7 @@ abstract class ImageProxyFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1376,7 +1402,8 @@ abstract class PlaneProxyFlutterApi { void create(int identifier); - static void setup(PlaneProxyFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(PlaneProxyFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PlaneProxyFlutterApi.create', codec, @@ -1386,7 +1413,7 @@ abstract class PlaneProxyFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index 155486f44cf5..e325761c2aad 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -14,7 +14,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; abstract class TestInstanceManagerHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); /// Clear the native `InstanceManager`. @@ -22,15 +23,19 @@ abstract class TestInstanceManagerHostApi { /// This is typically only used after a hot restart. void clear(); - static void setup(TestInstanceManagerHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestInstanceManagerHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { // ignore message api.clear(); return []; @@ -41,22 +46,27 @@ abstract class TestInstanceManagerHostApi { } abstract class TestJavaObjectHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void dispose(int identifier); - static void setup(TestJavaObjectHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestJavaObjectHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -70,22 +80,28 @@ abstract class TestJavaObjectHostApi { } abstract class TestCameraInfoHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getSensorRotationDegrees(int identifier); - static void setup(TestCameraInfoHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraInfoHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -99,24 +115,29 @@ abstract class TestCameraInfoHostApi { } abstract class TestCameraSelectorHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void create(int identifier, int? lensFacing); List filter(int identifier, List cameraInfoIds); - static void setup(TestCameraSelectorHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraSelectorHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -132,19 +153,24 @@ abstract class TestCameraSelectorHostApi { 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); - final List? arg_cameraInfoIds = (args[1] as List?)?.cast(); + final List? arg_cameraInfoIds = + (args[1] as List?)?.cast(); assert(arg_cameraInfoIds != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); - final List output = api.filter(arg_identifier!, arg_cameraInfoIds!); + final List output = + api.filter(arg_identifier!, arg_cameraInfoIds!); return [output]; }); } @@ -153,14 +179,16 @@ abstract class TestCameraSelectorHostApi { } abstract class TestProcessCameraProviderHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); Future getInstance(); List getAvailableCameraInfos(int identifier); - int bindToLifecycle(int identifier, int cameraSelectorIdentifier, List useCaseIds); + int bindToLifecycle( + int identifier, int cameraSelectorIdentifier, List useCaseIds); bool isBound(int identifier, int useCaseIdentifier); @@ -168,15 +196,19 @@ abstract class TestProcessCameraProviderHostApi { void unbindAll(int identifier); - static void setup(TestProcessCameraProviderHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestProcessCameraProviderHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { // ignore message final int output = await api.getInstance(); return [output]; @@ -185,33 +217,42 @@ abstract class TestProcessCameraProviderHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); - final List output = api.getAvailableCameraInfos(arg_identifier!); + final List output = + api.getAvailableCameraInfos(arg_identifier!); return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -219,10 +260,12 @@ abstract class TestProcessCameraProviderHostApi { final int? arg_cameraSelectorIdentifier = (args[1] as int?); assert(arg_cameraSelectorIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); - final List? arg_useCaseIds = (args[2] as List?)?.cast(); + final List? arg_useCaseIds = + (args[2] as List?)?.cast(); assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null List.'); - final int output = api.bindToLifecycle(arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); + final int output = api.bindToLifecycle( + arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); return [output]; }); } @@ -232,11 +275,14 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -244,7 +290,8 @@ abstract class TestProcessCameraProviderHostApi { final int? arg_useCaseIdentifier = (args[1] as int?); assert(arg_useCaseIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); - final bool output = api.isBound(arg_identifier!, arg_useCaseIdentifier!); + final bool output = + api.isBound(arg_identifier!, arg_useCaseIdentifier!); return [output]; }); } @@ -254,16 +301,20 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null int.'); - final List? arg_useCaseIds = (args[1] as List?)?.cast(); + final List? arg_useCaseIds = + (args[1] as List?)?.cast(); assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null List.'); api.unbind(arg_identifier!, arg_useCaseIds!); @@ -276,11 +327,14 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -308,7 +362,7 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -317,45 +371,58 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { } abstract class TestSystemServicesHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestSystemServicesHostApiCodec(); - Future requestCameraPermissions(bool enableAudio); + Future requestCameraPermissions( + bool enableAudio); - void startListeningForDeviceOrientationChange(bool isFrontFacing, int sensorOrientation); + void startListeningForDeviceOrientationChange( + bool isFrontFacing, int sensorOrientation); void stopListeningForDeviceOrientationChange(); - static void setup(TestSystemServicesHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestSystemServicesHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); final List args = (message as List?)!; final bool? arg_enableAudio = (args[0] as bool?); assert(arg_enableAudio != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null, expected non-null bool.'); - final CameraPermissionsErrorData? output = await api.requestCameraPermissions(arg_enableAudio!); + final CameraPermissionsErrorData? output = + await api.requestCameraPermissions(arg_enableAudio!); return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); final List args = (message as List?)!; final bool? arg_isFrontFacing = (args[0] as bool?); assert(arg_isFrontFacing != null, @@ -363,19 +430,24 @@ abstract class TestSystemServicesHostApi { final int? arg_sensorOrientation = (args[1] as int?); assert(arg_sensorOrientation != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null int.'); - api.startListeningForDeviceOrientationChange(arg_isFrontFacing!, arg_sensorOrientation!); + api.startListeningForDeviceOrientationChange( + arg_isFrontFacing!, arg_sensorOrientation!); return []; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { // ignore message api.stopListeningForDeviceOrientationChange(); return []; @@ -403,9 +475,9 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - case 129: + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -414,7 +486,8 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { } abstract class TestPreviewHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestPreviewHostApiCodec(); void create(int identifier, int? rotation, ResolutionInfo? targetResolution); @@ -425,23 +498,28 @@ abstract class TestPreviewHostApi { ResolutionInfo getResolutionInfo(int identifier); - static void setup(TestPreviewHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestPreviewHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null, expected non-null int.'); final int? arg_rotation = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = + (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_rotation, arg_targetResolution); return []; }); @@ -452,11 +530,14 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -468,12 +549,16 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, + 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { // ignore message api.releaseFlutterSurfaceTexture(); return []; @@ -485,11 +570,14 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -517,7 +605,7 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -526,7 +614,8 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { } abstract class TestImageCaptureHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestImageCaptureHostApiCodec(); void create(int identifier, int? flashMode, ResolutionInfo? targetResolution); @@ -535,23 +624,28 @@ abstract class TestImageCaptureHostApi { Future takePicture(int identifier); - static void setup(TestImageCaptureHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageCaptureHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); final int? arg_flashMode = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = + (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_flashMode, arg_targetResolution); return []; }); @@ -562,11 +656,14 @@ abstract class TestImageCaptureHostApi { 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -584,11 +681,14 @@ abstract class TestImageCaptureHostApi { 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -616,7 +716,7 @@ class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -625,7 +725,8 @@ class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { } abstract class TestImageAnalysisHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestImageAnalysisHostApiCodec(); void create(int identifier, ResolutionInfo? targetResolutionIdentifier); @@ -634,22 +735,27 @@ abstract class TestImageAnalysisHostApi { void clearAnalyzer(int identifier); - static void setup(TestImageAnalysisHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageAnalysisHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); - final ResolutionInfo? arg_targetResolutionIdentifier = (args[1] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolutionIdentifier = + (args[1] as ResolutionInfo?); api.create(arg_identifier!, arg_targetResolutionIdentifier); return []; }); @@ -660,11 +766,14 @@ abstract class TestImageAnalysisHostApi { 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -682,11 +791,14 @@ abstract class TestImageAnalysisHostApi { 'dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -700,22 +812,27 @@ abstract class TestImageAnalysisHostApi { } abstract class TestAnalyzerHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void create(int identifier); - static void setup(TestAnalyzerHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestAnalyzerHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.AnalyzerHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.AnalyzerHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.AnalyzerHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -729,7 +846,8 @@ abstract class TestAnalyzerHostApi { } abstract class TestImageProxyHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); List getPlanes(int identifier); @@ -742,17 +860,21 @@ abstract class TestImageProxyHostApi { void close(int identifier); - static void setup(TestImageProxyHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageProxyHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyHostApi.getPlanes', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getPlanes was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getPlanes was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -767,11 +889,14 @@ abstract class TestImageProxyHostApi { 'dev.flutter.pigeon.ImageProxyHostApi.getFormat', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getFormat was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getFormat was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -786,11 +911,14 @@ abstract class TestImageProxyHostApi { 'dev.flutter.pigeon.ImageProxyHostApi.getHeight', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getHeight was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getHeight was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -805,11 +933,14 @@ abstract class TestImageProxyHostApi { 'dev.flutter.pigeon.ImageProxyHostApi.getWidth', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getWidth was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getWidth was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -824,11 +955,14 @@ abstract class TestImageProxyHostApi { 'dev.flutter.pigeon.ImageProxyHostApi.close', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.close was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.close was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -842,7 +976,8 @@ abstract class TestImageProxyHostApi { } abstract class TestPlaneProxyHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getPixelStride(int identifier); @@ -851,17 +986,21 @@ abstract class TestPlaneProxyHostApi { int getRowStride(int identifier); - static void setup(TestPlaneProxyHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestPlaneProxyHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride was null.'); + 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -876,11 +1015,14 @@ abstract class TestPlaneProxyHostApi { 'dev.flutter.pigeon.PlaneProxyHostApi.getBuffer', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getBuffer was null.'); + 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getBuffer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -895,11 +1037,14 @@ abstract class TestPlaneProxyHostApi { 'dev.flutter.pigeon.PlaneProxyHostApi.getRowStride', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getRowStride was null.'); + 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getRowStride was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, From 914e2444bdb7b5c85ae2201bd6b60b1569caaad7 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 26 Apr 2023 14:58:02 -0700 Subject: [PATCH 52/62] Change getters to params, fix java tests --- .../plugins/camerax/AnalyzerHostApiImpl.java | 9 +- .../camerax/CameraAndroidCameraxPlugin.java | 2 - .../camerax/GeneratedCameraXLibrary.java | 548 +++++------------- .../camerax/ImageProxyFlutterApiImpl.java | 4 +- .../camerax/ImageProxyHostApiImpl.java | 35 +- .../camerax/PlaneProxyFlutterApiImpl.java | 4 +- .../camerax/PlaneProxyHostApiImpl.java | 63 -- .../flutter/plugins/camerax/AnalyzerTest.java | 18 +- .../plugins/camerax/ImageAnalysisTest.java | 4 +- .../plugins/camerax/ImageProxyTest.java | 87 +-- .../plugins/camerax/InstanceManagerTest.java | 5 +- .../plugins/camerax/PlaneProxyTest.java | 63 +- .../lib/src/android_camera_camerax.dart | 13 +- .../lib/src/camerax_library.g.dart | 356 +++--------- .../lib/src/image_analysis.dart | 2 - .../lib/src/image_proxy.dart | 65 +-- .../lib/src/plane_proxy.dart | 76 +-- .../pigeons/camerax_library.dart | 19 +- .../camera_android_camerax/pubspec.yaml | 5 - .../test/android_camera_camerax_test.dart | 15 +- .../test/test_camerax_library.g.dart | 531 ++++------------- 21 files changed, 487 insertions(+), 1437 deletions(-) delete mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java index 704a8baf3aa4..ccae0b87de16 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java @@ -41,7 +41,8 @@ public static class AnalyzerImpl implements ImageAnalysis.Analyzer { private BinaryMessenger binaryMessenger; private InstanceManager instanceManager; private AnalyzerFlutterApiImpl api; - private ImageProxyFlutterApiImpl imageProxyApi; + + @VisibleForTesting public ImageProxyFlutterApiImpl imageProxyApi; /** * Constructs an instance of {@link ImageAnalysis.Analyzer} that passes arguments of callbacks @@ -58,7 +59,11 @@ public AnalyzerImpl( @Override public void analyze(ImageProxy imageProxy) { - imageProxyApi.create(imageProxy, reply -> {}); + Long imageFormat = Long.valueOf(imageProxy.getFormat()); + Long imageHeight = Long.valueOf(imageProxy.getHeight()); + Long imageWidth = Long.valueOf(imageProxy.getWidth()); + imageProxyApi.create(imageProxy, imageFormat, imageHeight, imageWidth, reply -> {}); + api.analyze(this, imageProxy, reply -> {}); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java index 687c2296dc8b..8d111a003e12 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java @@ -63,8 +63,6 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex binaryMessenger, new AnalyzerHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.ImageProxyHostApi.setup( binaryMessenger, new ImageProxyHostApiImpl(binaryMessenger, instanceManager)); - GeneratedCameraXLibrary.PlaneProxyHostApi.setup( - binaryMessenger, new PlaneProxyHostApiImpl(instanceManager)); } @Override diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 5e94346384ec..9146f1c3d3ec 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -18,7 +18,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) @@ -33,7 +35,8 @@ public static class FlutterError extends RuntimeException { /** The error details. Must be a datatype supported by the api codec. */ public final Object details; - public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { + public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) + { super(message); this.code = code; this.details = details; @@ -52,7 +55,7 @@ protected static ArrayList wrapError(@NonNull Throwable exception) { errorList.add(exception.toString()); errorList.add(exception.getClass().getSimpleName()); errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); } return errorList; } @@ -123,13 +126,9 @@ ArrayList toList() { static @NonNull ResolutionInfo fromList(@NonNull ArrayList list) { ResolutionInfo pigeonResult = new ResolutionInfo(); Object width = list.get(0); - pigeonResult.setWidth( - (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); + pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); Object height = list.get(1); - pigeonResult.setHeight( - (height == null) - ? null - : ((height instanceof Integer) ? (Integer) height : (Long) height)); + pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer) height : (Long) height)); return pigeonResult; } } @@ -218,7 +217,7 @@ public interface InstanceManagerHostApi { /** * Clear the native `InstanceManager`. * - *

This is typically only used after a hot restart. + * This is typically only used after a hot restart. */ void clear(); @@ -226,12 +225,8 @@ public interface InstanceManagerHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `InstanceManagerHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setup( - @NonNull BinaryMessenger binaryMessenger, @Nullable InstanceManagerHostApi api) { + /**Sets up an instance of `InstanceManagerHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable InstanceManagerHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -243,7 +238,8 @@ static void setup( try { api.clear(); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -264,9 +260,7 @@ public interface JavaObjectHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. - */ + /**Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable JavaObjectHostApi api) { { BasicMessageChannel channel = @@ -281,7 +275,8 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable JavaObject try { api.dispose((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -301,7 +296,7 @@ public JavaObjectFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -310,7 +305,6 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -323,23 +317,19 @@ public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraInfoHostApi { - @NonNull + @NonNull Long getSensorRotationDegrees(@NonNull Long identifier); /** The codec used by CameraInfoHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. - */ + /**Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfoHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -347,11 +337,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = - api.getSensorRotationDegrees( - (identifierArg == null) ? null : identifierArg.longValue()); + Long output = api.getSensorRotationDegrees((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -371,7 +360,7 @@ public CameraInfoFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -380,7 +369,6 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -395,19 +383,15 @@ public interface CameraSelectorHostApi { void create(@NonNull Long identifier, @Nullable Long lensFacing); - @NonNull + @NonNull List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); /** The codec used by CameraSelectorHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `CameraSelectorHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setup( - @NonNull BinaryMessenger binaryMessenger, @Nullable CameraSelectorHostApi api) { + /**Sets up an instance of `CameraSelectorHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraSelectorHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -420,11 +404,10 @@ static void setup( Number identifierArg = (Number) args.get(0); Number lensFacingArg = (Number) args.get(1); try { - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - (lensFacingArg == null) ? null : lensFacingArg.longValue()); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (lensFacingArg == null) ? null : lensFacingArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -446,12 +429,10 @@ static void setup( Number identifierArg = (Number) args.get(0); List cameraInfoIdsArg = (List) args.get(1); try { - List output = - api.filter( - (identifierArg == null) ? null : identifierArg.longValue(), - cameraInfoIdsArg); + List output = api.filter((identifierArg == null) ? null : identifierArg.longValue(), cameraInfoIdsArg); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -471,7 +452,7 @@ public CameraSelectorFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -480,9 +461,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - - public void create( - @NonNull Long identifierArg, @Nullable Long lensFacingArg, @NonNull Reply callback) { + public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); @@ -496,16 +475,13 @@ public interface ProcessCameraProviderHostApi { void getInstance(@NonNull Result result); - @NonNull + @NonNull List getAvailableCameraInfos(@NonNull Long identifier); - @NonNull - Long bindToLifecycle( - @NonNull Long identifier, - @NonNull Long cameraSelectorIdentifier, - @NonNull List useCaseIds); + @NonNull + Long bindToLifecycle(@NonNull Long identifier, @NonNull Long cameraSelectorIdentifier, @NonNull List useCaseIds); - @NonNull + @NonNull Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); void unbind(@NonNull Long identifier, @NonNull List useCaseIds); @@ -516,18 +492,12 @@ Long bindToLifecycle( static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setup( - @NonNull BinaryMessenger binaryMessenger, @Nullable ProcessCameraProviderHostApi api) { + /**Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ProcessCameraProviderHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -554,9 +524,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -564,11 +532,10 @@ public void error(Throwable error) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - List output = - api.getAvailableCameraInfos( - (identifierArg == null) ? null : identifierArg.longValue()); + List output = api.getAvailableCameraInfos((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -581,9 +548,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -593,15 +558,10 @@ public void error(Throwable error) { Number cameraSelectorIdentifierArg = (Number) args.get(1); List useCaseIdsArg = (List) args.get(2); try { - Long output = - api.bindToLifecycle( - (identifierArg == null) ? null : identifierArg.longValue(), - (cameraSelectorIdentifierArg == null) - ? null - : cameraSelectorIdentifierArg.longValue(), - useCaseIdsArg); + Long output = api.bindToLifecycle((identifierArg == null) ? null : identifierArg.longValue(), (cameraSelectorIdentifierArg == null) ? null : cameraSelectorIdentifierArg.longValue(), useCaseIdsArg); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -614,9 +574,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -625,12 +583,10 @@ public void error(Throwable error) { Number identifierArg = (Number) args.get(0); Number useCaseIdentifierArg = (Number) args.get(1); try { - Boolean output = - api.isBound( - (identifierArg == null) ? null : identifierArg.longValue(), - (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); + Boolean output = api.isBound((identifierArg == null) ? null : identifierArg.longValue(), (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -643,9 +599,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -654,10 +608,10 @@ public void error(Throwable error) { Number identifierArg = (Number) args.get(0); List useCaseIdsArg = (List) args.get(1); try { - api.unbind( - (identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); + api.unbind((identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -670,9 +624,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -682,7 +634,8 @@ public void error(Throwable error) { try { api.unbindAll((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -702,7 +655,7 @@ public ProcessCameraProviderFlutterApi(@NonNull BinaryMessenger argBinaryMesseng this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -711,13 +664,10 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", getCodec()); channel.send( new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); @@ -731,7 +681,7 @@ public CameraFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -740,7 +690,6 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -780,11 +729,9 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface SystemServicesHostApi { - void requestCameraPermissions( - @NonNull Boolean enableAudio, @NonNull Result result); + void requestCameraPermissions(@NonNull Boolean enableAudio, @NonNull Result result); - void startListeningForDeviceOrientationChange( - @NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); + void startListeningForDeviceOrientationChange(@NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); void stopListeningForDeviceOrientationChange(); @@ -792,18 +739,12 @@ void startListeningForDeviceOrientationChange( static @NonNull MessageCodec getCodec() { return SystemServicesHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `SystemServicesHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setup( - @NonNull BinaryMessenger binaryMessenger, @Nullable SystemServicesHostApi api) { + /**Sets up an instance of `SystemServicesHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable SystemServicesHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -832,9 +773,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -843,11 +782,10 @@ public void error(Throwable error) { Boolean isFrontFacingArg = (Boolean) args.get(0); Number sensorOrientationArg = (Number) args.get(1); try { - api.startListeningForDeviceOrientationChange( - isFrontFacingArg, - (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); + api.startListeningForDeviceOrientationChange(isFrontFacingArg, (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -860,9 +798,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -870,7 +806,8 @@ public void error(Throwable error) { try { api.stopListeningForDeviceOrientationChange(); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -890,7 +827,7 @@ public SystemServicesFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -899,25 +836,18 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - - public void onDeviceOrientationChanged( - @NonNull String orientationArg, @NonNull Reply callback) { + public void onDeviceOrientationChanged(@NonNull String orientationArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", getCodec()); channel.send( new ArrayList(Collections.singletonList(orientationArg)), channelReply -> callback.reply(null)); } - public void onCameraError(@NonNull String errorDescriptionArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", getCodec()); channel.send( new ArrayList(Collections.singletonList(errorDescriptionArg)), channelReply -> callback.reply(null)); @@ -958,24 +888,21 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface PreviewHostApi { - void create( - @NonNull Long identifier, - @Nullable Long rotation, - @Nullable ResolutionInfo targetResolution); + void create(@NonNull Long identifier, @Nullable Long rotation, @Nullable ResolutionInfo targetResolution); - @NonNull + @NonNull Long setSurfaceProvider(@NonNull Long identifier); void releaseFlutterSurfaceTexture(); - @NonNull + @NonNull ResolutionInfo getResolutionInfo(@NonNull Long identifier); /** The codec used by PreviewHostApi. */ static @NonNull MessageCodec getCodec() { return PreviewHostApiCodec.INSTANCE; } - /** Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ + /**Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHostApi api) { { BasicMessageChannel channel = @@ -990,12 +917,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos Number rotationArg = (Number) args.get(1); ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); try { - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - (rotationArg == null) ? null : rotationArg.longValue(), - targetResolutionArg); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (rotationArg == null) ? null : rotationArg.longValue(), targetResolutionArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1008,9 +933,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1018,11 +941,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = - api.setSurfaceProvider( - (identifierArg == null) ? null : identifierArg.longValue()); + Long output = api.setSurfaceProvider((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1035,9 +957,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1045,7 +965,8 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos try { api.releaseFlutterSurfaceTexture(); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1066,11 +987,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - ResolutionInfo output = - api.getResolutionInfo( - (identifierArg == null) ? null : identifierArg.longValue()); + ResolutionInfo output = api.getResolutionInfo((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1112,10 +1032,7 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ImageCaptureHostApi { - void create( - @NonNull Long identifier, - @Nullable Long flashMode, - @Nullable ResolutionInfo targetResolution); + void create(@NonNull Long identifier, @Nullable Long flashMode, @Nullable ResolutionInfo targetResolution); void setFlashMode(@NonNull Long identifier, @NonNull Long flashMode); @@ -1125,10 +1042,7 @@ void create( static @NonNull MessageCodec getCodec() { return ImageCaptureHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `ImageCaptureHostApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `ImageCaptureHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageCaptureHostApi api) { { BasicMessageChannel channel = @@ -1143,12 +1057,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageCaptu Number flashModeArg = (Number) args.get(1); ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); try { - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - (flashModeArg == null) ? null : flashModeArg.longValue(), - targetResolutionArg); + api.create((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue(), targetResolutionArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1170,11 +1082,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageCaptu Number identifierArg = (Number) args.get(0); Number flashModeArg = (Number) args.get(1); try { - api.setFlashMode( - (identifierArg == null) ? null : identifierArg.longValue(), - (flashModeArg == null) ? null : flashModeArg.longValue()); + api.setFlashMode((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1207,8 +1118,7 @@ public void error(Throwable error) { } }; - api.takePicture( - (identifierArg == null) ? null : identifierArg.longValue(), resultCallback); + api.takePicture((identifierArg == null) ? null : identifierArg.longValue(), resultCallback); }); } else { channel.setMessageHandler(null); @@ -1256,12 +1166,8 @@ public interface ImageAnalysisHostApi { static @NonNull MessageCodec getCodec() { return ImageAnalysisHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `ImageAnalysisHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setup( - @NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnalysisHostApi api) { + /**Sets up an instance of `ImageAnalysisHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnalysisHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1274,11 +1180,10 @@ static void setup( Number identifierArg = (Number) args.get(0); ResolutionInfo targetResolutionIdentifierArg = (ResolutionInfo) args.get(1); try { - api.create( - (identifierArg == null) ? null : identifierArg.longValue(), - targetResolutionIdentifierArg); + api.create((identifierArg == null) ? null : identifierArg.longValue(), targetResolutionIdentifierArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1300,11 +1205,10 @@ static void setup( Number identifierArg = (Number) args.get(0); Number analyzerIdentifierArg = (Number) args.get(1); try { - api.setAnalyzer( - (identifierArg == null) ? null : identifierArg.longValue(), - (analyzerIdentifierArg == null) ? null : analyzerIdentifierArg.longValue()); + api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue(), (analyzerIdentifierArg == null) ? null : analyzerIdentifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1317,9 +1221,7 @@ static void setup( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1329,7 +1231,8 @@ static void setup( try { api.clearAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1350,9 +1253,7 @@ public interface AnalyzerHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `AnalyzerHostApi` to handle messages through the `binaryMessenger`. - */ + /**Sets up an instance of `AnalyzerHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable AnalyzerHostApi api) { { BasicMessageChannel channel = @@ -1367,7 +1268,8 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable AnalyzerHo try { api.create((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1387,7 +1289,7 @@ public AnalyzerFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1396,7 +1298,6 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1405,11 +1306,7 @@ public void create(@NonNull Long identifierArg, @NonNull Reply callback) { new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); } - - public void analyze( - @NonNull Long identifierArg, - @NonNull Long imageProxyIdentifierArg, - @NonNull Reply callback) { + public void analyze(@NonNull Long identifierArg, @NonNull Long imageProxyIdentifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.AnalyzerFlutterApi.analyze", getCodec()); @@ -1421,27 +1318,16 @@ public void analyze( /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ImageProxyHostApi { - @NonNull + @NonNull List getPlanes(@NonNull Long identifier); - @NonNull - Long getFormat(@NonNull Long identifier); - - @NonNull - Long getHeight(@NonNull Long identifier); - - @NonNull - Long getWidth(@NonNull Long identifier); - void close(@NonNull Long identifier); /** The codec used by ImageProxyHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `ImageProxyHostApi` to handle messages through the `binaryMessenger`. - */ + /**Sets up an instance of `ImageProxyHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxyHostApi api) { { BasicMessageChannel channel = @@ -1454,82 +1340,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxy ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - List output = - api.getPlanes((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); - } catch (Throwable exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getFormat", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - try { - Long output = - api.getFormat((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); - } catch (Throwable exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getHeight", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - try { - Long output = - api.getHeight((identifierArg == null) ? null : identifierArg.longValue()); + List output = api.getPlanes((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageProxyHostApi.getWidth", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - try { - Long output = - api.getWidth((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); - } catch (Throwable exception) { + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1552,7 +1366,8 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxy try { api.close((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1572,7 +1387,7 @@ public ImageProxyFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1581,111 +1396,15 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull Long formatArg, @NonNull Long heightArg, @NonNull Long widthArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ImageProxyFlutterApi.create", getCodec()); channel.send( - new ArrayList(Collections.singletonList(identifierArg)), + new ArrayList(Arrays.asList(identifierArg, formatArg, heightArg, widthArg)), channelReply -> callback.reply(null)); } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface PlaneProxyHostApi { - - @NonNull - Long getPixelStride(@NonNull Long identifier); - - @NonNull - byte[] getBuffer(@NonNull Long identifier); - - @NonNull - Long getRowStride(@NonNull Long identifier); - - /** The codec used by PlaneProxyHostApi. */ - static @NonNull MessageCodec getCodec() { - return new StandardMessageCodec(); - } - /** - * Sets up an instance of `PlaneProxyHostApi` to handle messages through the `binaryMessenger`. - */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PlaneProxyHostApi api) { - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - try { - Long output = - api.getPixelStride( - (identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); - } catch (Throwable exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PlaneProxyHostApi.getBuffer", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - try { - byte[] output = - api.getBuffer((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); - } catch (Throwable exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PlaneProxyHostApi.getRowStride", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - try { - Long output = - api.getRowStride((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); - } catch (Throwable exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - } - } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class PlaneProxyFlutterApi { private final @NonNull BinaryMessenger binaryMessenger; @@ -1694,7 +1413,7 @@ public PlaneProxyFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1703,13 +1422,12 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull byte[] bufferArg, @NonNull Long pixelStrideArg, @NonNull Long rowStrideArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.PlaneProxyFlutterApi.create", getCodec()); channel.send( - new ArrayList(Collections.singletonList(identifierArg)), + new ArrayList(Arrays.asList(identifierArg, bufferArg, pixelStrideArg, rowStrideArg)), channelReply -> callback.reply(null)); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java index 5036e847d7d1..2240ca405d47 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java @@ -40,9 +40,9 @@ public ImageProxyFlutterApiImpl( * this method does nothing. */ public void create( - @NonNull ImageProxy instance, @NonNull ImageProxyFlutterApi.Reply callback) { + @NonNull ImageProxy instance, @NonNull Long imageFormat, @NonNull Long imageHeight, @NonNull Long imageWidth, @NonNull ImageProxyFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { - api.create(instanceManager.addHostCreatedInstance(instance), callback); + api.create(instanceManager.addHostCreatedInstance(instance), imageFormat, imageHeight, imageWidth, callback); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java index 183f587ca143..2a6e947d43fb 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java @@ -5,9 +5,11 @@ package io.flutter.plugins.camerax; import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import androidx.camera.core.ImageProxy; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageProxyHostApi; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -22,6 +24,9 @@ public class ImageProxyHostApiImpl implements ImageProxyHostApi { private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; + @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); + @VisibleForTesting public PlaneProxyFlutterApiImpl planeProxyFlutterApiImpl; + /** * Constructs a {@link ImageProxyHostApiImpl}. * @@ -31,6 +36,8 @@ public ImageProxyHostApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; + planeProxyFlutterApiImpl = + new PlaneProxyFlutterApiImpl(binaryMessenger, instanceManager); } /** @@ -40,36 +47,22 @@ public ImageProxyHostApiImpl( @Override public List getPlanes(@NonNull Long identifier) { ImageProxy.PlaneProxy[] planes = getImageProxyInstance(identifier).getPlanes(); - PlaneProxyFlutterApiImpl planeProxyFlutterApiImpl = - new PlaneProxyFlutterApiImpl(binaryMessenger, instanceManager); List planeIdentifiers = new ArrayList(); for (ImageProxy.PlaneProxy plane : planes) { - planeProxyFlutterApiImpl.create(plane, reply -> {}); + ByteBuffer byteBuffer = plane.getBuffer(); + byte[] bytes = cameraXProxy.getBytesFromBuffer(byteBuffer.remaining()); + byteBuffer.get(bytes, 0, bytes.length); + Long pixelStride = Long.valueOf(plane.getPixelStride()); + Long rowStride = Long.valueOf(plane.getRowStride()); + + planeProxyFlutterApiImpl.create(plane, bytes, pixelStride, rowStride, reply -> {}); planeIdentifiers.add(instanceManager.getIdentifierForStrongReference(plane)); } return planeIdentifiers; } - /** Returns the image format of the {@link ImageProxy} instance with the specified identifier. */ - @Override - public Long getFormat(@NonNull Long identifier) { - return Long.valueOf(getImageProxyInstance(identifier).getFormat()); - } - - /** Returns the image height of the {@link ImageProxy} instance with the specified identifier. */ - @Override - public Long getHeight(@NonNull Long identifier) { - return Long.valueOf(getImageProxyInstance(identifier).getHeight()); - } - - /** Returns the image width of the {@link ImageProxy} instance with the specified identifier. */ - @Override - public Long getWidth(@NonNull Long identifier) { - return Long.valueOf(getImageProxyInstance(identifier).getWidth()); - } - /** * Closes the {@link androidx.camera.core.Image} instance associated with the {@link ImageProxy} * instance with the specified identifier. diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java index 66f327d65c14..fd483ec173dc 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java @@ -40,9 +40,9 @@ public PlaneProxyFlutterApiImpl( * already been added, this method does nothing. */ public void create( - @NonNull ImageProxy.PlaneProxy instance, @NonNull PlaneProxyFlutterApi.Reply callback) { + @NonNull ImageProxy.PlaneProxy instance, @NonNull byte[] bytes, @NonNull Long pixelStride, @NonNull Long rowStride, @NonNull PlaneProxyFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { - api.create(instanceManager.addHostCreatedInstance(instance), callback); + api.create(instanceManager.addHostCreatedInstance(instance), bytes, pixelStride, rowStride, callback); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java deleted file mode 100644 index de1551d09c24..000000000000 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyHostApiImpl.java +++ /dev/null @@ -1,63 +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. - -package io.flutter.plugins.camerax; - -import androidx.annotation.NonNull; -import androidx.annotation.VisibleForTesting; -import androidx.camera.core.ImageProxy; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.PlaneProxyHostApi; -import java.nio.ByteBuffer; -import java.util.Objects; - -/** - * Host API implementation for {@link ImageProxy.PlaneProxy}. - * - *

This class may handle instantiating and adding native object instances that are attached to a - * Dart instance or handle method calls on the associated native class or an instance of the class. - */ -public class PlaneProxyHostApiImpl implements PlaneProxyHostApi { - private final InstanceManager instanceManager; - - @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); - - /** - * Constructs a {@link PlaneProxyHostApiImpl}. - * - * @param instanceManager maintains instances stored to communicate with attached Dart objects - */ - public PlaneProxyHostApiImpl(@NonNull InstanceManager instanceManager) { - this.instanceManager = instanceManager; - } - - /** Returns the pixel stride. */ - @Override - public Long getPixelStride(@NonNull Long identifier) { - return Long.valueOf(getPlaneProxyInstance(identifier).getPixelStride()); - } - - /** Returns the pixels buffer. */ - @Override - public byte[] getBuffer(@NonNull Long identifier) { - ByteBuffer byteBuffer = getPlaneProxyInstance(identifier).getBuffer(); - byte[] bytes = cameraXProxy.getBytesFromBuffer(byteBuffer.remaining()); - byteBuffer.get(bytes, 0, bytes.length); - - return bytes; - } - - /** Returns the row stride. */ - @Override - public Long getRowStride(@NonNull Long identifier) { - return Long.valueOf(getPlaneProxyInstance(identifier).getRowStride()); - } - - /** - * Retrieives the {@link ImageProxy.PlaneProxy} instance associated with the specified {@code - * identifier}. - */ - private ImageProxy.PlaneProxy getPlaneProxyInstance(@NonNull Long identifier) { - return Objects.requireNonNull(instanceManager.getInstance(identifier)); - } -} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java index 0479ea6d9cab..a18e1a689495 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java @@ -8,12 +8,15 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import androidx.camera.core.ImageProxy; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerFlutterApi; + +import java.text.Format; import java.util.Objects; import org.junit.After; import org.junit.Before; @@ -46,7 +49,7 @@ public void tearDown() { public void hostApiCreate_makesCallToCreateAnalyzerInstanceWithExpectedIdentifier() { final AnalyzerHostApiImpl hostApi = new AnalyzerHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); - final long instanceIdentifier = 0; + final long instanceIdentifier = 90; when(mockProxy.create(mockBinaryMessenger, instanceManager)) .thenReturn(mockImageAnalysisAnalyzer); @@ -79,16 +82,27 @@ public void analyze_makesCallToDartAnalyze() { final long mockImageProxyIdentifier = 97; final AnalyzerHostApiImpl.AnalyzerImpl instance = new AnalyzerHostApiImpl.AnalyzerImpl(mockBinaryMessenger, instanceManager); - final long instanceIdentifier = 0; + final ImageProxyFlutterApiImpl mockImageProxyApi = spy(new ImageProxyFlutterApiImpl(mockBinaryMessenger, instanceManager)); + final long instanceIdentifier = 20; + final long format = 3; + final long height = 2; + final long width = 1; flutterApi.setApi(mockFlutterApi); instance.setApi(flutterApi); + instance.imageProxyApi = mockImageProxyApi; instanceManager.addDartCreatedInstance(instance, instanceIdentifier); instanceManager.addDartCreatedInstance(mockImageProxy, mockImageProxyIdentifier); + when(mockImageProxy.getFormat()).thenReturn(3); + when(mockImageProxy.getHeight()).thenReturn(2); + when(mockImageProxy.getWidth()).thenReturn(1); + + instance.analyze(mockImageProxy); verify(mockFlutterApi).analyze(eq(instanceIdentifier), eq(mockImageProxyIdentifier), any()); + verify(mockImageProxyApi).create(eq(mockImageProxy), eq(format), eq(height), eq(width), any()); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java index e0ee26b7658e..38f77761da99 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java @@ -87,7 +87,7 @@ public void setAnalyzer_makesCallToSetAnalyzerOnExpectedImageAnalysisInstance() final ImageAnalysis.Analyzer mockAnalyzer = mock(ImageAnalysis.Analyzer.class); final long analyzerIdentifier = 10; - final long instanceIdentifier = 0; + final long instanceIdentifier = 94; instanceManager.addDartCreatedInstance(mockAnalyzer, analyzerIdentifier); instanceManager.addDartCreatedInstance(mockImageAnalysis, instanceIdentifier); @@ -101,7 +101,7 @@ public void setAnalyzer_makesCallToSetAnalyzerOnExpectedImageAnalysisInstance() public void clearAnalyzer_makesCallToClearAnalyzerOnExpectedImageAnalysisInstance() { final ImageAnalysisHostApiImpl hostApi = new ImageAnalysisHostApiImpl(mockBinaryMessenger, instanceManager); - final long instanceIdentifier = 0; + final long instanceIdentifier = 22; instanceManager.addDartCreatedInstance(mockImageAnalysis, instanceIdentifier); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java index 8e2e39d4ba45..20107baedc57 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java @@ -14,6 +14,7 @@ import androidx.camera.core.ImageProxy; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ImageProxyFlutterApi; +import java.nio.ByteBuffer; import java.util.List; import java.util.Objects; import org.junit.After; @@ -23,6 +24,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import org.robolectric.annotation.Config; public class ImageProxyTest { @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @@ -42,86 +44,48 @@ public void tearDown() { instanceManager.stopFinalizationListener(); } + @Config(sdk = 21) @Test public void getPlanes_returnsExpectedPlanesFromExpectedImageProxyInstance() { final ImageProxyHostApiImpl hostApi = new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); - final long instanceIdentifier = 0; + final CameraXProxy mockCameraXProxy = mock(CameraXProxy.class); + final PlaneProxyFlutterApiImpl mockPlaneProxyFlutterApiImpl = mock(PlaneProxyFlutterApiImpl.class); + final long instanceIdentifier = 24; final long mockPlaneProxyIdentifier = 45; final ImageProxy.PlaneProxy mockPlaneProxy = mock(ImageProxy.PlaneProxy.class); final ImageProxy.PlaneProxy[] returnValue = new ImageProxy.PlaneProxy[] {mockPlaneProxy}; + final ByteBuffer mockByteBuffer = mock(ByteBuffer.class); + final int bufferRemaining = 23; + final byte[] buffer = new byte[bufferRemaining]; + final int pixelStride = 2; + final int rowStride = 65; instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); - instanceManager.addDartCreatedInstance(mockPlaneProxy, mockPlaneProxyIdentifier); + + hostApi.cameraXProxy = mockCameraXProxy; + hostApi.planeProxyFlutterApiImpl = mockPlaneProxyFlutterApiImpl; when(mockImageProxy.getPlanes()).thenReturn(returnValue); + when(mockPlaneProxy.getBuffer()).thenReturn(mockByteBuffer); + when(mockByteBuffer.remaining()).thenReturn(bufferRemaining); + when(mockCameraXProxy.getBytesFromBuffer(bufferRemaining)).thenReturn(buffer); + when(mockPlaneProxy.getPixelStride()).thenReturn(pixelStride); + when(mockPlaneProxy.getRowStride()).thenReturn(rowStride); + final List result = hostApi.getPlanes(instanceIdentifier); verify(mockImageProxy).getPlanes(); + verify(mockPlaneProxyFlutterApiImpl).create(eq(mockPlaneProxy), eq(buffer), eq(Long.valueOf(pixelStride)), eq(Long.valueOf(rowStride)), any()); assertEquals(result.size(), 1); - assertEquals(result.get(0), Long.valueOf(mockPlaneProxyIdentifier)); - } - - @Test - public void getFormat_returnsExpectedFormatFromExpectedImageProxyInstance() { - final ImageProxyHostApiImpl hostApi = - new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); - final long instanceIdentifier = 0; - final int returnValue = 0; - - instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); - - when(mockImageProxy.getFormat()).thenReturn(returnValue); - - final Long result = hostApi.getFormat(instanceIdentifier); - - verify(mockImageProxy).getFormat(); - - assertEquals(result, Long.valueOf(returnValue)); - } - - @Test - public void getHeight_returnsExpectedHeightFromExpectedImageProxyInstance() { - final ImageProxyHostApiImpl hostApi = - new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); - final long instanceIdentifier = 0; - final int returnValue = 0; - - instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); - - when(mockImageProxy.getHeight()).thenReturn(returnValue); - - final Long result = hostApi.getHeight(instanceIdentifier); - - verify(mockImageProxy).getHeight(); - - assertEquals(result, Long.valueOf(returnValue)); - } - - @Test - public void getWidth_returnsExpectedHeightFromExpectedImageProxyInstance() { - final ImageProxyHostApiImpl hostApi = - new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); - final long instanceIdentifier = 0; - final int returnValue = 0; - - instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); - - when(mockImageProxy.getWidth()).thenReturn(returnValue); - - final Long result = hostApi.getWidth(instanceIdentifier); - - verify(mockImageProxy).getWidth(); - - assertEquals(result, Long.valueOf(returnValue)); } @Test public void close_makesCallToCloseExpectedImageProxyInstance() { final ImageProxyHostApiImpl hostApi = new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); - final long instanceIdentifier = 0; + final long instanceIdentifier = 9; instanceManager.addDartCreatedInstance(mockImageProxy, instanceIdentifier); @@ -134,13 +98,16 @@ public void close_makesCallToCloseExpectedImageProxyInstance() { public void flutterApiCreate_makesCallToDartCreate() { final ImageProxyFlutterApiImpl flutterApi = new ImageProxyFlutterApiImpl(mockBinaryMessenger, instanceManager); + final long format = 3; + final long height = 2; + final long width = 1; flutterApi.setApi(mockFlutterApi); - flutterApi.create(mockImageProxy, reply -> {}); + flutterApi.create(mockImageProxy, format, height, width, reply -> {}); final long instanceIdentifier = Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockImageProxy)); - verify(mockFlutterApi).create(eq(instanceIdentifier), any()); + verify(mockFlutterApi).create(eq(instanceIdentifier), eq(format), eq(height), eq(width), any()); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/InstanceManagerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/InstanceManagerTest.java index 7dd5e62acabb..2080f58e6407 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/InstanceManagerTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/InstanceManagerTest.java @@ -9,9 +9,12 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; - +import androidx.test.ext.junit.runners.AndroidJUnit4; +import io.flutter.plugins.camerax.InstanceManager; import org.junit.Test; +import org.junit.runner.RunWith; +@RunWith(AndroidJUnit4.class) public class InstanceManagerTest { @Test public void addDartCreatedInstance() { diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java index c572cdca2eb2..c8455b43a01a 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java @@ -42,73 +42,20 @@ public void tearDown() { instanceManager.stopFinalizationListener(); } - @Test - public void getBuffer_returnsExpectedBytes() { - final PlaneProxyHostApiImpl hostApi = new PlaneProxyHostApiImpl(instanceManager); - final long instanceIdentifier = 0; - final CameraXProxy mockCameraXProxy = mock(CameraXProxy.class); - final ByteBuffer mockByteBuffer = mock(ByteBuffer.class); - final int bufferRemaining = 23; - final byte[] returnValue = new byte[bufferRemaining]; - ; - - instanceManager.addDartCreatedInstance(mockPlaneProxy, instanceIdentifier); - - hostApi.cameraXProxy = mockCameraXProxy; - - when(mockPlaneProxy.getBuffer()).thenReturn(mockByteBuffer); - when(mockByteBuffer.remaining()).thenReturn(bufferRemaining); - when(mockCameraXProxy.getBytesFromBuffer(bufferRemaining)).thenReturn(returnValue); - - final byte[] result = hostApi.getBuffer(instanceIdentifier); - - verify(mockPlaneProxy).getBuffer(); - assertEquals(result, returnValue); - } - - @Test - public void getPixelStride_makesExpectedCallAndReturnsExpectedValue() { - final PlaneProxyHostApiImpl hostApi = new PlaneProxyHostApiImpl(instanceManager); - final long instanceIdentifier = 0; - final int returnValue = 0; - - instanceManager.addDartCreatedInstance(mockPlaneProxy, instanceIdentifier); - - when(mockPlaneProxy.getPixelStride()).thenReturn(returnValue); - - final Long result = hostApi.getPixelStride(instanceIdentifier); - - verify(mockPlaneProxy).getPixelStride(); - assertEquals(result, Long.valueOf(returnValue)); - } - - @Test - public void getRowStride_makesExpectedCallAndReturnsExpectedValue() { - final PlaneProxyHostApiImpl hostApi = new PlaneProxyHostApiImpl(instanceManager); - final long instanceIdentifier = 0; - final int returnValue = 25; - - instanceManager.addDartCreatedInstance(mockPlaneProxy, instanceIdentifier); - - when(mockPlaneProxy.getRowStride()).thenReturn(returnValue); - - final Long result = hostApi.getRowStride(instanceIdentifier); - - verify(mockPlaneProxy).getRowStride(); - assertEquals(result, Long.valueOf(returnValue)); - } - @Test public void flutterApiCreate_makesCallToCreateInstanceWithExpectedIdentifier() { final PlaneProxyFlutterApiImpl flutterApi = new PlaneProxyFlutterApiImpl(mockBinaryMessenger, instanceManager); + final byte[] buffer = new byte[23]; + final long pixelStride = 20; + final long rowStride = 2; flutterApi.setApi(mockFlutterApi); - flutterApi.create(mockPlaneProxy, reply -> {}); + flutterApi.create(mockPlaneProxy, buffer, pixelStride, rowStride, reply -> {}); final long instanceIdentifier = Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockPlaneProxy)); - verify(mockFlutterApi).create(eq(instanceIdentifier), any()); + verify(mockFlutterApi).create(eq(instanceIdentifier), eq(buffer), eq(pixelStride), eq(rowStride), any()); } } diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index b57d5fac3e9f..51f594b5d419 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -372,12 +372,12 @@ class AndroidCameraCameraX extends CameraPlatform { final List cameraImagePlanes = []; for (final PlaneProxy plane in planes) { cameraImagePlanes.add(CameraImagePlane( - bytes: await plane.getBuffer(), - bytesPerRow: await plane.getRowStride(), - bytesPerPixel: await plane.getPixelStride())); + bytes: plane.buffer, + bytesPerRow: plane.rowStride, + bytesPerPixel: plane.pixelStride)); } - final int format = await imageProxy.getFormat(); + final int format = imageProxy.format; final CameraImageFormat cameraImageFormat = CameraImageFormat( _imageFormatGroupFromPlatformData(format), raw: format); @@ -385,9 +385,8 @@ class AndroidCameraCameraX extends CameraPlatform { final CameraImageData cameraImageData = CameraImageData( format: cameraImageFormat, planes: cameraImagePlanes, - height: await imageProxy.getHeight(), - width: await imageProxy.getWidth()); - + height: imageProxy.height, + width: imageProxy.width); cameraImageDataStreamController?.add(cameraImageData); imageProxy.close(); } diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index db85de961b89..47b4c6ed419e 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -80,7 +80,8 @@ class InstanceManagerHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; + final List? replyList = + await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -136,8 +137,7 @@ abstract class JavaObjectFlutterApi { void dispose(int identifier); - static void setup(JavaObjectFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(JavaObjectFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectFlutterApi.dispose', codec, @@ -147,7 +147,7 @@ abstract class JavaObjectFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -203,8 +203,7 @@ abstract class CameraInfoFlutterApi { void create(int identifier); - static void setup(CameraInfoFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(CameraInfoFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraInfoFlutterApi.create', codec, @@ -214,7 +213,7 @@ abstract class CameraInfoFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -241,8 +240,8 @@ class CameraSelectorHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_lensFacing]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_lensFacing]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -259,13 +258,12 @@ class CameraSelectorHostApi { } } - Future> filter( - int arg_identifier, List arg_cameraInfoIds) async { + Future> filter(int arg_identifier, List arg_cameraInfoIds) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_cameraInfoIds]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_cameraInfoIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -293,8 +291,7 @@ abstract class CameraSelectorFlutterApi { void create(int identifier, int? lensFacing); - static void setup(CameraSelectorFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(CameraSelectorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, @@ -304,7 +301,7 @@ abstract class CameraSelectorFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -332,7 +329,8 @@ class ProcessCameraProviderHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; + final List? replyList = + await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -356,8 +354,7 @@ class ProcessCameraProviderHostApi { Future> getAvailableCameraInfos(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', - codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_identifier]) as List?; @@ -382,17 +379,12 @@ class ProcessCameraProviderHostApi { } } - Future bindToLifecycle(int arg_identifier, - int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { + Future bindToLifecycle(int arg_identifier, int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', - codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send([ - arg_identifier, - arg_cameraSelectorIdentifier, - arg_useCaseIds - ]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_cameraSelectorIdentifier, arg_useCaseIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -419,8 +411,7 @@ class ProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_useCaseIdentifier]) - as List?; + await channel.send([arg_identifier, arg_useCaseIdentifier]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -446,8 +437,8 @@ class ProcessCameraProviderHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_useCaseIds]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_useCaseIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -492,8 +483,7 @@ abstract class ProcessCameraProviderFlutterApi { void create(int identifier); - static void setup(ProcessCameraProviderFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(ProcessCameraProviderFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, @@ -503,7 +493,7 @@ abstract class ProcessCameraProviderFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -531,7 +521,7 @@ abstract class CameraFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -559,7 +549,7 @@ class _SystemServicesHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -577,11 +567,9 @@ class SystemServicesHostApi { static const MessageCodec codec = _SystemServicesHostApiCodec(); - Future requestCameraPermissions( - bool arg_enableAudio) async { + Future requestCameraPermissions(bool arg_enableAudio) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_enableAudio]) as List?; @@ -601,15 +589,12 @@ class SystemServicesHostApi { } } - Future startListeningForDeviceOrientationChange( - bool arg_isFrontFacing, int arg_sensorOrientation) async { + Future startListeningForDeviceOrientationChange(bool arg_isFrontFacing, int arg_sensorOrientation) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_isFrontFacing, arg_sensorOrientation]) - as List?; + await channel.send([arg_isFrontFacing, arg_sensorOrientation]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -628,10 +613,10 @@ class SystemServicesHostApi { Future stopListeningForDeviceOrientationChange() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; + final List? replyList = + await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -656,19 +641,17 @@ abstract class SystemServicesFlutterApi { void onCameraError(String errorDescription); - static void setup(SystemServicesFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(SystemServicesFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', - codec, + 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); final List args = (message as List?)!; final String? arg_orientation = (args[0] as String?); assert(arg_orientation != null, @@ -687,7 +670,7 @@ abstract class SystemServicesFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); final List args = (message as List?)!; final String? arg_errorDescription = (args[0] as String?); assert(arg_errorDescription != null, @@ -718,9 +701,9 @@ class _PreviewHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - case 129: + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -738,14 +721,12 @@ class PreviewHostApi { static const MessageCodec codec = _PreviewHostApiCodec(); - Future create(int arg_identifier, int? arg_rotation, - ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_rotation, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_rotation, arg_targetResolution]) - as List?; + final List? replyList = + await channel.send([arg_identifier, arg_rotation, arg_targetResolution]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -793,7 +774,8 @@ class PreviewHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; + final List? replyList = + await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -853,7 +835,7 @@ class _ImageCaptureHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -871,14 +853,12 @@ class ImageCaptureHostApi { static const MessageCodec codec = _ImageCaptureHostApiCodec(); - Future create(int arg_identifier, int? arg_flashMode, - ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_flashMode, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send( - [arg_identifier, arg_flashMode, arg_targetResolution]) - as List?; + final List? replyList = + await channel.send([arg_identifier, arg_flashMode, arg_targetResolution]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -899,8 +879,8 @@ class ImageCaptureHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_flashMode]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_flashMode]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -960,7 +940,7 @@ class _ImageAnalysisHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -978,14 +958,12 @@ class ImageAnalysisHostApi { static const MessageCodec codec = _ImageAnalysisHostApiCodec(); - Future create(int arg_identifier, - ResolutionInfo? arg_targetResolutionIdentifier) async { + Future create(int arg_identifier, ResolutionInfo? arg_targetResolutionIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_targetResolutionIdentifier]) - as List?; + final List? replyList = + await channel.send([arg_identifier, arg_targetResolutionIdentifier]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1002,14 +980,12 @@ class ImageAnalysisHostApi { } } - Future setAnalyzer( - int arg_identifier, int arg_analyzerIdentifier) async { + Future setAnalyzer(int arg_identifier, int arg_analyzerIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_analyzerIdentifier]) - as List?; + await channel.send([arg_identifier, arg_analyzerIdentifier]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1089,8 +1065,7 @@ abstract class AnalyzerFlutterApi { void analyze(int identifier, int imageProxyIdentifier); - static void setup(AnalyzerFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(AnalyzerFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.AnalyzerFlutterApi.create', codec, @@ -1100,7 +1075,7 @@ abstract class AnalyzerFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1119,7 +1094,7 @@ abstract class AnalyzerFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.analyze was null.'); + 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.analyze was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1172,87 +1147,6 @@ class ImageProxyHostApi { } } - Future getFormat(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyHostApi.getFormat', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else if (replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (replyList[0] as int?)!; - } - } - - Future getHeight(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyHostApi.getHeight', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else if (replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (replyList[0] as int?)!; - } - } - - Future getWidth(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyHostApi.getWidth', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else if (replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (replyList[0] as int?)!; - } - } - Future close(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyHostApi.close', codec, @@ -1279,10 +1173,9 @@ class ImageProxyHostApi { abstract class ImageProxyFlutterApi { static const MessageCodec codec = StandardMessageCodec(); - void create(int identifier); + void create(int identifier, int format, int height, int width); - static void setup(ImageProxyFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(ImageProxyFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyFlutterApi.create', codec, @@ -1292,12 +1185,21 @@ abstract class ImageProxyFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageProxyFlutterApi.create was null, expected non-null int.'); - api.create(arg_identifier!); + final int? arg_format = (args[1] as int?); + assert(arg_format != null, + 'Argument for dev.flutter.pigeon.ImageProxyFlutterApi.create was null, expected non-null int.'); + final int? arg_height = (args[2] as int?); + assert(arg_height != null, + 'Argument for dev.flutter.pigeon.ImageProxyFlutterApi.create was null, expected non-null int.'); + final int? arg_width = (args[3] as int?); + assert(arg_width != null, + 'Argument for dev.flutter.pigeon.ImageProxyFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!, arg_format!, arg_height!, arg_width!); return; }); } @@ -1305,105 +1207,12 @@ abstract class ImageProxyFlutterApi { } } -class PlaneProxyHostApi { - /// Constructor for [PlaneProxyHostApi]. The [binaryMessenger] named argument is - /// available for dependency injection. If it is left null, the default - /// BinaryMessenger will be used which routes to the host platform. - PlaneProxyHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = StandardMessageCodec(); - - Future getPixelStride(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else if (replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (replyList[0] as int?)!; - } - } - - Future getBuffer(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PlaneProxyHostApi.getBuffer', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else if (replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (replyList[0] as Uint8List?)!; - } - } - - Future getRowStride(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PlaneProxyHostApi.getRowStride', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else if (replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (replyList[0] as int?)!; - } - } -} - abstract class PlaneProxyFlutterApi { static const MessageCodec codec = StandardMessageCodec(); - void create(int identifier); + void create(int identifier, Uint8List buffer, int pixelStride, int rowStride); - static void setup(PlaneProxyFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(PlaneProxyFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PlaneProxyFlutterApi.create', codec, @@ -1413,12 +1222,21 @@ abstract class PlaneProxyFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null, expected non-null int.'); - api.create(arg_identifier!); + final Uint8List? arg_buffer = (args[1] as Uint8List?); + assert(arg_buffer != null, + 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null, expected non-null Uint8List.'); + final int? arg_pixelStride = (args[2] as int?); + assert(arg_pixelStride != null, + 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null, expected non-null int.'); + final int? arg_rowStride = (args[3] as int?); + assert(arg_rowStride != null, + 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!, arg_buffer!, arg_pixelStride!, arg_rowStride!); return; }); } diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index 568cf7ec6428..89572d156e2a 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -5,7 +5,6 @@ import 'dart:async'; import 'package:flutter/services.dart' show BinaryMessenger; -import 'package:simple_ast/annotations.dart'; import 'analyzer.dart'; import 'android_camera_camerax_flutter_api_impls.dart'; @@ -17,7 +16,6 @@ import 'use_case.dart'; /// Use case for providing CPU accessible images for performing image analysis. /// /// See https://developer.android.com/reference/androidx/camera/core/ImageAnalysis. -@SimpleClassAnnotation() class ImageAnalysis extends UseCase { /// Creates an [ImageAnalysis]. ImageAnalysis( diff --git a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart index 8661eeb8f9cf..4c17b1f0b9af 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart @@ -19,7 +19,11 @@ import 'plane_proxy.dart'; class ImageProxy extends JavaObject { /// Constructs a [ImageProxy] that is not automatically attached to a native object. ImageProxy.detached( - {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + required this.format, + required this.height, + required this.width}) : super.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager) { @@ -28,19 +32,19 @@ class ImageProxy extends JavaObject { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - late final _ImageProxyHostApiImpl _api; + /// The image format. + final int format; - /// Returns the list of color planes of image data. - Future> getPlanes() => _api.getPlanesFromInstances(this); + /// The image height. + final int height; - /// Returns the image format. - Future getFormat() => _api.getFormatFromInstances(this); + /// The image width. + final int width; - /// Returns the image height. - Future getHeight() => _api.getHeightFromInstances(this); + late final _ImageProxyHostApiImpl _api; - /// Returns the image width. - Future getWidth() => _api.getWidthFromInstances(this); + /// Returns the list of color planes of image data. + Future> getPlanes() => _api.getPlanesFromInstances(this); /// Closes the underlying image. Future close() => _api.closeFromInstances(this); @@ -73,33 +77,6 @@ class _ImageProxyHostApiImpl extends ImageProxyHostApi { }).toList(); } - /// Returns the format of the image represented by the [instance]. - Future getFormatFromInstances( - ImageProxy instance, - ) { - return getFormat( - instanceManager.getIdentifier(instance)!, - ); - } - - /// Returns the height of the image represented by the [instance]. - Future getHeightFromInstances( - ImageProxy instance, - ) { - return getHeight( - instanceManager.getIdentifier(instance)!, - ); - } - - /// Returns the width of the image represented by the [instance]. - Future getWidthFromInstances( - ImageProxy instance, - ) { - return getWidth( - instanceManager.getIdentifier(instance)!, - ); - } - /// Closes the underlying image of the [instance]. Future closeFromInstances( ImageProxy instance, @@ -135,17 +112,25 @@ class ImageProxyFlutterApiImpl implements ImageProxyFlutterApi { @override void create( int identifier, + int format, + int height, + int width, ) { instanceManager.addHostCreatedInstance( ImageProxy.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager, + format: format, + height: height, + width: width, ), identifier, onCopy: (ImageProxy original) => ImageProxy.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, - ), + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + format: original.format, + height: original.height, + width: original.width), ); } } diff --git a/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart b/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart index bc398f652f2a..97feaad8b3c7 100644 --- a/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart @@ -19,73 +19,27 @@ import 'java_object.dart'; class PlaneProxy extends JavaObject { /// Constructs a [PlaneProxy] that is not automatically attached to a native object. PlaneProxy.detached( - {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + required this.buffer, + required this.pixelStride, + required this.rowStride}) : super.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager) { - _api = _PlaneProxyHostApiImpl( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - late final _PlaneProxyHostApiImpl _api; - /// Returns the pixels buffer containing frame data. - Future getBuffer() { - return _api.getBufferfromInstances(this); - } + final Uint8List buffer; /// Returns the pixel stride, the distance between adjacent pixel samples, in /// bytes. - Future getPixelStride() { - return _api.getPixelStridefromInstances(this); - } + final int pixelStride; /// Returns the row stride, the distance between the start of two consecutive /// rows of pixels in the image, in bytes. - Future getRowStride() { - return _api.getRowStridefromInstances(this); - } -} - -/// Host API implementation of [PlaneProxy]. -class _PlaneProxyHostApiImpl extends PlaneProxyHostApi { - _PlaneProxyHostApiImpl({ - this.binaryMessenger, - InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager, - super(binaryMessenger: binaryMessenger); - - final BinaryMessenger? binaryMessenger; - - final InstanceManager instanceManager; - - /// Returns the pixel stride of the [instance]. - Future getPixelStridefromInstances( - PlaneProxy instance, - ) { - return getPixelStride( - instanceManager.getIdentifier(instance)!, - ); - } - - /// Returns the pixels buffer of the [instance]. - Future getBufferfromInstances( - PlaneProxy instance, - ) { - return getBuffer( - instanceManager.getIdentifier(instance)!, - ); - } - - /// Returns the row stride of the [instance]. - Future getRowStridefromInstances( - PlaneProxy instance, - ) async { - return getRowStride( - instanceManager.getIdentifier(instance)!, - ); - } + final int rowStride; } /// Flutter API implementation for [PlaneProxy]. @@ -113,17 +67,25 @@ class PlaneProxyFlutterApiImpl implements PlaneProxyFlutterApi { @override void create( int identifier, + Uint8List buffer, + int pixelStride, + int rowStride, ) { instanceManager.addHostCreatedInstance( PlaneProxy.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager, + buffer: buffer, + pixelStride: pixelStride, + rowStride: rowStride, ), identifier, onCopy: (PlaneProxy original) => PlaneProxy.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, - ), + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + buffer: buffer, + pixelStride: pixelStride, + rowStride: rowStride), ); } } diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 1e259ac39991..3d492709c900 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -177,30 +177,15 @@ abstract class AnalyzerFlutterApi { abstract class ImageProxyHostApi { List getPlanes(int identifier); - int getFormat(int identifier); - - int getHeight(int identifier); - - int getWidth(int identifier); - void close(int identifier); } @FlutterApi() abstract class ImageProxyFlutterApi { - void create(int identifier); -} - -@HostApi(dartHostTestHandler: 'TestPlaneProxyHostApi') -abstract class PlaneProxyHostApi { - int getPixelStride(int identifier); - - Uint8List getBuffer(int identifier); - - int getRowStride(int identifier); + void create(int identifier, int format, int height, int width); } @FlutterApi() abstract class PlaneProxyFlutterApi { - void create(int identifier); + void create(int identifier, Uint8List buffer, int pixelStride, int rowStride); } diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index 80d40e66f9b3..cae592716b41 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -23,11 +23,6 @@ dependencies: sdk: flutter integration_test: sdk: flutter - meta: ^1.7.0 - simple_ast: - git: - url: git@github.com:bparrishMines/penguin.git - path: packages/simple_ast stream_transform: ^2.1.0 dev_dependencies: diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index 92574fe51f2d..b0aba3522abb 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart @@ -423,13 +423,14 @@ void main() { 'onStreamedFrameAvailable emits CameraImageData when picked up from CameraImageData stream controller', () async { final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + const int cameraId = 22; camera.processCameraProvider = MockProcessCameraProvider(); camera.cameraSelector = MockCameraSelector(); camera.createDetachedCallbacks = true; final CameraImageData mockCameraImageData = MockCameraImageData(); final Stream imageStream = - camera.onStreamedFrameAvailable(22); + camera.onStreamedFrameAvailable(cameraId); final StreamQueue streamQueue = StreamQueue(imageStream); @@ -443,6 +444,7 @@ void main() { 'onStreamedFrameAvaiable returns stream that responds expectedly to being listened to', () async { final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + const int cameraId = 33; final ProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final CameraSelector mockCameraSelector = MockCameraSelector(); @@ -480,8 +482,9 @@ void main() { .thenAnswer((_) => Future.value(imageWidth)); final StreamSubscription - onStreamedFrameAvailableSubscription = - camera.onStreamedFrameAvailable(22).listen((CameraImageData imageData) { + onStreamedFrameAvailableSubscription = camera + .onStreamedFrameAvailable(cameraId) + .listen((CameraImageData imageData) { // Test Analyzer correctly process ImageProxy instances. expect(imageData.planes.length, equals(0)); expect(imageData.planes[0].bytes, equals(buffer)); @@ -507,6 +510,7 @@ void main() { 'onStreamedFrameAvaiable returns stream that responds expectedly to being canceled', () async { final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + const int cameraId = 32; final ProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final CameraSelector mockCameraSelector = MockCameraSelector(); @@ -520,8 +524,9 @@ void main() { mockCameraSelector, [camera.mockImageAnalysis])) .thenAnswer((_) async => mockCamera); - final StreamSubscription imageStreamSubscription = - camera.onStreamedFrameAvailable(32).listen((CameraImageData data) {}); + final StreamSubscription imageStreamSubscription = camera + .onStreamedFrameAvailable(cameraId) + .listen((CameraImageData data) {}); when(mockProcessCameraProvider.isBound(camera.mockImageAnalysis)) .thenAnswer((_) async => Future.value(true)); diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index e325761c2aad..a816c2ce658f 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -14,8 +14,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; abstract class TestInstanceManagerHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); /// Clear the native `InstanceManager`. @@ -23,19 +22,15 @@ abstract class TestInstanceManagerHostApi { /// This is typically only used after a hot restart. void clear(); - static void setup(TestInstanceManagerHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestInstanceManagerHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { // ignore message api.clear(); return []; @@ -46,27 +41,22 @@ abstract class TestInstanceManagerHostApi { } abstract class TestJavaObjectHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void dispose(int identifier); - static void setup(TestJavaObjectHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestJavaObjectHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -80,28 +70,22 @@ abstract class TestJavaObjectHostApi { } abstract class TestCameraInfoHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getSensorRotationDegrees(int identifier); - static void setup(TestCameraInfoHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraInfoHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', - codec, + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -115,29 +99,24 @@ abstract class TestCameraInfoHostApi { } abstract class TestCameraSelectorHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void create(int identifier, int? lensFacing); List filter(int identifier, List cameraInfoIds); - static void setup(TestCameraSelectorHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraSelectorHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -153,24 +132,19 @@ abstract class TestCameraSelectorHostApi { 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); - final List? arg_cameraInfoIds = - (args[1] as List?)?.cast(); + final List? arg_cameraInfoIds = (args[1] as List?)?.cast(); assert(arg_cameraInfoIds != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); - final List output = - api.filter(arg_identifier!, arg_cameraInfoIds!); + final List output = api.filter(arg_identifier!, arg_cameraInfoIds!); return [output]; }); } @@ -179,16 +153,14 @@ abstract class TestCameraSelectorHostApi { } abstract class TestProcessCameraProviderHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); Future getInstance(); List getAvailableCameraInfos(int identifier); - int bindToLifecycle( - int identifier, int cameraSelectorIdentifier, List useCaseIds); + int bindToLifecycle(int identifier, int cameraSelectorIdentifier, List useCaseIds); bool isBound(int identifier, int useCaseIdentifier); @@ -196,19 +168,15 @@ abstract class TestProcessCameraProviderHostApi { void unbindAll(int identifier); - static void setup(TestProcessCameraProviderHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestProcessCameraProviderHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { // ignore message final int output = await api.getInstance(); return [output]; @@ -217,42 +185,33 @@ abstract class TestProcessCameraProviderHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', - codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); - final List output = - api.getAvailableCameraInfos(arg_identifier!); + final List output = api.getAvailableCameraInfos(arg_identifier!); return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', - codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -260,12 +219,10 @@ abstract class TestProcessCameraProviderHostApi { final int? arg_cameraSelectorIdentifier = (args[1] as int?); assert(arg_cameraSelectorIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); - final List? arg_useCaseIds = - (args[2] as List?)?.cast(); + final List? arg_useCaseIds = (args[2] as List?)?.cast(); assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null List.'); - final int output = api.bindToLifecycle( - arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); + final int output = api.bindToLifecycle(arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); return [output]; }); } @@ -275,14 +232,11 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -290,8 +244,7 @@ abstract class TestProcessCameraProviderHostApi { final int? arg_useCaseIdentifier = (args[1] as int?); assert(arg_useCaseIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); - final bool output = - api.isBound(arg_identifier!, arg_useCaseIdentifier!); + final bool output = api.isBound(arg_identifier!, arg_useCaseIdentifier!); return [output]; }); } @@ -301,20 +254,16 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null int.'); - final List? arg_useCaseIds = - (args[1] as List?)?.cast(); + final List? arg_useCaseIds = (args[1] as List?)?.cast(); assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null List.'); api.unbind(arg_identifier!, arg_useCaseIds!); @@ -327,14 +276,11 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -362,7 +308,7 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -371,58 +317,45 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { } abstract class TestSystemServicesHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestSystemServicesHostApiCodec(); - Future requestCameraPermissions( - bool enableAudio); + Future requestCameraPermissions(bool enableAudio); - void startListeningForDeviceOrientationChange( - bool isFrontFacing, int sensorOrientation); + void startListeningForDeviceOrientationChange(bool isFrontFacing, int sensorOrientation); void stopListeningForDeviceOrientationChange(); - static void setup(TestSystemServicesHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestSystemServicesHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); final List args = (message as List?)!; final bool? arg_enableAudio = (args[0] as bool?); assert(arg_enableAudio != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null, expected non-null bool.'); - final CameraPermissionsErrorData? output = - await api.requestCameraPermissions(arg_enableAudio!); + final CameraPermissionsErrorData? output = await api.requestCameraPermissions(arg_enableAudio!); return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); final List args = (message as List?)!; final bool? arg_isFrontFacing = (args[0] as bool?); assert(arg_isFrontFacing != null, @@ -430,24 +363,19 @@ abstract class TestSystemServicesHostApi { final int? arg_sensorOrientation = (args[1] as int?); assert(arg_sensorOrientation != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null int.'); - api.startListeningForDeviceOrientationChange( - arg_isFrontFacing!, arg_sensorOrientation!); + api.startListeningForDeviceOrientationChange(arg_isFrontFacing!, arg_sensorOrientation!); return []; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { // ignore message api.stopListeningForDeviceOrientationChange(); return []; @@ -475,9 +403,9 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - case 129: + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -486,8 +414,7 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { } abstract class TestPreviewHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestPreviewHostApiCodec(); void create(int identifier, int? rotation, ResolutionInfo? targetResolution); @@ -498,28 +425,23 @@ abstract class TestPreviewHostApi { ResolutionInfo getResolutionInfo(int identifier); - static void setup(TestPreviewHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestPreviewHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null, expected non-null int.'); final int? arg_rotation = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = - (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_rotation, arg_targetResolution); return []; }); @@ -530,14 +452,11 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -549,16 +468,12 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', - codec, + 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { // ignore message api.releaseFlutterSurfaceTexture(); return []; @@ -570,14 +485,11 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -605,7 +517,7 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -614,8 +526,7 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { } abstract class TestImageCaptureHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestImageCaptureHostApiCodec(); void create(int identifier, int? flashMode, ResolutionInfo? targetResolution); @@ -624,28 +535,23 @@ abstract class TestImageCaptureHostApi { Future takePicture(int identifier); - static void setup(TestImageCaptureHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageCaptureHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); final int? arg_flashMode = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = - (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_flashMode, arg_targetResolution); return []; }); @@ -656,14 +562,11 @@ abstract class TestImageCaptureHostApi { 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -681,14 +584,11 @@ abstract class TestImageCaptureHostApi { 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -716,7 +616,7 @@ class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -725,8 +625,7 @@ class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { } abstract class TestImageAnalysisHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestImageAnalysisHostApiCodec(); void create(int identifier, ResolutionInfo? targetResolutionIdentifier); @@ -735,27 +634,22 @@ abstract class TestImageAnalysisHostApi { void clearAnalyzer(int identifier); - static void setup(TestImageAnalysisHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageAnalysisHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); - final ResolutionInfo? arg_targetResolutionIdentifier = - (args[1] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolutionIdentifier = (args[1] as ResolutionInfo?); api.create(arg_identifier!, arg_targetResolutionIdentifier); return []; }); @@ -766,14 +660,11 @@ abstract class TestImageAnalysisHostApi { 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -791,14 +682,11 @@ abstract class TestImageAnalysisHostApi { 'dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -812,27 +700,22 @@ abstract class TestImageAnalysisHostApi { } abstract class TestAnalyzerHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void create(int identifier); - static void setup(TestAnalyzerHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestAnalyzerHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.AnalyzerHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.AnalyzerHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.AnalyzerHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -846,35 +729,24 @@ abstract class TestAnalyzerHostApi { } abstract class TestImageProxyHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); List getPlanes(int identifier); - int getFormat(int identifier); - - int getHeight(int identifier); - - int getWidth(int identifier); - void close(int identifier); - static void setup(TestImageProxyHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageProxyHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyHostApi.getPlanes', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getPlanes was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getPlanes was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -884,85 +756,16 @@ abstract class TestImageProxyHostApi { }); } } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyHostApi.getFormat', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getFormat was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getFormat was null, expected non-null int.'); - final int output = api.getFormat(arg_identifier!); - return [output]; - }); - } - } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyHostApi.getHeight', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getHeight was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getHeight was null, expected non-null int.'); - final int output = api.getHeight(arg_identifier!); - return [output]; - }); - } - } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ImageProxyHostApi.getWidth', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getWidth was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getWidth was null, expected non-null int.'); - final int output = api.getWidth(arg_identifier!); - return [output]; - }); - } - } { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyHostApi.close', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.close was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.close was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -974,85 +777,3 @@ abstract class TestImageProxyHostApi { } } } - -abstract class TestPlaneProxyHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); - - int getPixelStride(int identifier); - - Uint8List getBuffer(int identifier); - - int getRowStride(int identifier); - - static void setup(TestPlaneProxyHostApi? api, - {BinaryMessenger? binaryMessenger}) { - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getPixelStride was null, expected non-null int.'); - final int output = api.getPixelStride(arg_identifier!); - return [output]; - }); - } - } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PlaneProxyHostApi.getBuffer', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getBuffer was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getBuffer was null, expected non-null int.'); - final Uint8List output = api.getBuffer(arg_identifier!); - return [output]; - }); - } - } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PlaneProxyHostApi.getRowStride', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getRowStride was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.PlaneProxyHostApi.getRowStride was null, expected non-null int.'); - final int output = api.getRowStride(arg_identifier!); - return [output]; - }); - } - } - } -} From b704ff5ef1148eab41ba2042144294ff6935181e Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 26 Apr 2023 15:54:53 -0700 Subject: [PATCH 53/62] Fix analyze, dart tests --- .../plugins/camerax/AnalyzerHostApiImpl.java | 4 +- .../camerax/GeneratedCameraXLibrary.java | 383 ++++++++++++------ .../camerax/ImageProxyFlutterApiImpl.java | 13 +- .../camerax/ImageProxyHostApiImpl.java | 3 +- .../camerax/PlaneProxyFlutterApiImpl.java | 13 +- .../flutter/plugins/camerax/AnalyzerTest.java | 6 +- .../plugins/camerax/ImageProxyTest.java | 12 +- .../plugins/camerax/InstanceManagerTest.java | 2 +- .../plugins/camerax/PlaneProxyTest.java | 7 +- .../lib/src/camerax_library.g.dart | 160 +++++--- .../lib/src/plane_proxy.dart | 9 +- .../camera_android_camerax/pubspec.yaml | 1 + .../test/analyzer_test.dart | 11 +- .../test/android_camera_camerax_test.dart | 18 +- .../android_camera_camerax_test.mocks.dart | 85 ++-- .../test/image_proxy_test.dart | 164 ++------ .../test/image_proxy_test.mocks.dart | 24 -- .../test/plane_proxy_test.dart | 124 +----- .../test/plane_proxy_test.mocks.dart | 37 -- .../test/test_camerax_library.g.dart | 377 +++++++++++------ 20 files changed, 732 insertions(+), 721 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java index ccae0b87de16..1839f1aaade6 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java @@ -41,7 +41,7 @@ public static class AnalyzerImpl implements ImageAnalysis.Analyzer { private BinaryMessenger binaryMessenger; private InstanceManager instanceManager; private AnalyzerFlutterApiImpl api; - + @VisibleForTesting public ImageProxyFlutterApiImpl imageProxyApi; /** @@ -63,7 +63,7 @@ public void analyze(ImageProxy imageProxy) { Long imageHeight = Long.valueOf(imageProxy.getHeight()); Long imageWidth = Long.valueOf(imageProxy.getWidth()); imageProxyApi.create(imageProxy, imageFormat, imageHeight, imageWidth, reply -> {}); - + api.analyze(this, imageProxy, reply -> {}); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 9146f1c3d3ec..31cea4add1f1 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -18,9 +18,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) @@ -35,8 +33,7 @@ public static class FlutterError extends RuntimeException { /** The error details. Must be a datatype supported by the api codec. */ public final Object details; - public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) - { + public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { super(message); this.code = code; this.details = details; @@ -55,7 +52,7 @@ protected static ArrayList wrapError(@NonNull Throwable exception) { errorList.add(exception.toString()); errorList.add(exception.getClass().getSimpleName()); errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); } return errorList; } @@ -126,9 +123,13 @@ ArrayList toList() { static @NonNull ResolutionInfo fromList(@NonNull ArrayList list) { ResolutionInfo pigeonResult = new ResolutionInfo(); Object width = list.get(0); - pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); + pigeonResult.setWidth( + (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); Object height = list.get(1); - pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer) height : (Long) height)); + pigeonResult.setHeight( + (height == null) + ? null + : ((height instanceof Integer) ? (Integer) height : (Long) height)); return pigeonResult; } } @@ -217,7 +218,7 @@ public interface InstanceManagerHostApi { /** * Clear the native `InstanceManager`. * - * This is typically only used after a hot restart. + *

This is typically only used after a hot restart. */ void clear(); @@ -225,8 +226,12 @@ public interface InstanceManagerHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `InstanceManagerHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable InstanceManagerHostApi api) { + /** + * Sets up an instance of `InstanceManagerHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup( + @NonNull BinaryMessenger binaryMessenger, @Nullable InstanceManagerHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -238,8 +243,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable InstanceMa try { api.clear(); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -260,7 +264,9 @@ public interface JavaObjectHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable JavaObjectHostApi api) { { BasicMessageChannel channel = @@ -275,8 +281,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable JavaObject try { api.dispose((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -296,7 +301,7 @@ public JavaObjectFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -305,6 +310,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -317,19 +323,23 @@ public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraInfoHostApi { - @NonNull + @NonNull Long getSensorRotationDegrees(@NonNull Long identifier); /** The codec used by CameraInfoHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfoHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -337,10 +347,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getSensorRotationDegrees((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getSensorRotationDegrees( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -360,7 +371,7 @@ public CameraInfoFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -369,6 +380,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -383,15 +395,19 @@ public interface CameraSelectorHostApi { void create(@NonNull Long identifier, @Nullable Long lensFacing); - @NonNull + @NonNull List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); /** The codec used by CameraSelectorHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraSelectorHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraSelectorHostApi api) { + /** + * Sets up an instance of `CameraSelectorHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup( + @NonNull BinaryMessenger binaryMessenger, @Nullable CameraSelectorHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -404,10 +420,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraSele Number identifierArg = (Number) args.get(0); Number lensFacingArg = (Number) args.get(1); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), (lensFacingArg == null) ? null : lensFacingArg.longValue()); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (lensFacingArg == null) ? null : lensFacingArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -429,10 +446,12 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraSele Number identifierArg = (Number) args.get(0); List cameraInfoIdsArg = (List) args.get(1); try { - List output = api.filter((identifierArg == null) ? null : identifierArg.longValue(), cameraInfoIdsArg); + List output = + api.filter( + (identifierArg == null) ? null : identifierArg.longValue(), + cameraInfoIdsArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -452,7 +471,7 @@ public CameraSelectorFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -461,7 +480,9 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, @Nullable Long lensFacingArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); @@ -475,13 +496,16 @@ public interface ProcessCameraProviderHostApi { void getInstance(@NonNull Result result); - @NonNull + @NonNull List getAvailableCameraInfos(@NonNull Long identifier); - @NonNull - Long bindToLifecycle(@NonNull Long identifier, @NonNull Long cameraSelectorIdentifier, @NonNull List useCaseIds); + @NonNull + Long bindToLifecycle( + @NonNull Long identifier, + @NonNull Long cameraSelectorIdentifier, + @NonNull List useCaseIds); - @NonNull + @NonNull Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); void unbind(@NonNull Long identifier, @NonNull List useCaseIds); @@ -492,12 +516,18 @@ public interface ProcessCameraProviderHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ProcessCameraProviderHostApi api) { + /** + * Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup( + @NonNull BinaryMessenger binaryMessenger, @Nullable ProcessCameraProviderHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -524,7 +554,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -532,10 +564,11 @@ public void error(Throwable error) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - List output = api.getAvailableCameraInfos((identifierArg == null) ? null : identifierArg.longValue()); + List output = + api.getAvailableCameraInfos( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -548,7 +581,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -558,10 +593,15 @@ public void error(Throwable error) { Number cameraSelectorIdentifierArg = (Number) args.get(1); List useCaseIdsArg = (List) args.get(2); try { - Long output = api.bindToLifecycle((identifierArg == null) ? null : identifierArg.longValue(), (cameraSelectorIdentifierArg == null) ? null : cameraSelectorIdentifierArg.longValue(), useCaseIdsArg); + Long output = + api.bindToLifecycle( + (identifierArg == null) ? null : identifierArg.longValue(), + (cameraSelectorIdentifierArg == null) + ? null + : cameraSelectorIdentifierArg.longValue(), + useCaseIdsArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -574,7 +614,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -583,10 +625,12 @@ public void error(Throwable error) { Number identifierArg = (Number) args.get(0); Number useCaseIdentifierArg = (Number) args.get(1); try { - Boolean output = api.isBound((identifierArg == null) ? null : identifierArg.longValue(), (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); + Boolean output = + api.isBound( + (identifierArg == null) ? null : identifierArg.longValue(), + (useCaseIdentifierArg == null) ? null : useCaseIdentifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -599,7 +643,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -608,10 +654,10 @@ public void error(Throwable error) { Number identifierArg = (Number) args.get(0); List useCaseIdsArg = (List) args.get(1); try { - api.unbind((identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); + api.unbind( + (identifierArg == null) ? null : identifierArg.longValue(), useCaseIdsArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -624,7 +670,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -634,8 +682,7 @@ public void error(Throwable error) { try { api.unbindAll((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -655,7 +702,7 @@ public ProcessCameraProviderFlutterApi(@NonNull BinaryMessenger argBinaryMesseng this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -664,10 +711,13 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", + getCodec()); channel.send( new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); @@ -681,7 +731,7 @@ public CameraFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -690,6 +740,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -729,9 +780,11 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface SystemServicesHostApi { - void requestCameraPermissions(@NonNull Boolean enableAudio, @NonNull Result result); + void requestCameraPermissions( + @NonNull Boolean enableAudio, @NonNull Result result); - void startListeningForDeviceOrientationChange(@NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); + void startListeningForDeviceOrientationChange( + @NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); void stopListeningForDeviceOrientationChange(); @@ -739,12 +792,18 @@ public interface SystemServicesHostApi { static @NonNull MessageCodec getCodec() { return SystemServicesHostApiCodec.INSTANCE; } - /**Sets up an instance of `SystemServicesHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable SystemServicesHostApi api) { + /** + * Sets up an instance of `SystemServicesHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup( + @NonNull BinaryMessenger binaryMessenger, @Nullable SystemServicesHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -773,7 +832,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -782,10 +843,11 @@ public void error(Throwable error) { Boolean isFrontFacingArg = (Boolean) args.get(0); Number sensorOrientationArg = (Number) args.get(1); try { - api.startListeningForDeviceOrientationChange(isFrontFacingArg, (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); + api.startListeningForDeviceOrientationChange( + isFrontFacingArg, + (sensorOrientationArg == null) ? null : sensorOrientationArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -798,7 +860,9 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -806,8 +870,7 @@ public void error(Throwable error) { try { api.stopListeningForDeviceOrientationChange(); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -827,7 +890,7 @@ public SystemServicesFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -836,18 +899,25 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void onDeviceOrientationChanged(@NonNull String orientationArg, @NonNull Reply callback) { + + public void onDeviceOrientationChanged( + @NonNull String orientationArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", + getCodec()); channel.send( new ArrayList(Collections.singletonList(orientationArg)), channelReply -> callback.reply(null)); } + public void onCameraError(@NonNull String errorDescriptionArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", + getCodec()); channel.send( new ArrayList(Collections.singletonList(errorDescriptionArg)), channelReply -> callback.reply(null)); @@ -888,21 +958,24 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface PreviewHostApi { - void create(@NonNull Long identifier, @Nullable Long rotation, @Nullable ResolutionInfo targetResolution); + void create( + @NonNull Long identifier, + @Nullable Long rotation, + @Nullable ResolutionInfo targetResolution); - @NonNull + @NonNull Long setSurfaceProvider(@NonNull Long identifier); void releaseFlutterSurfaceTexture(); - @NonNull + @NonNull ResolutionInfo getResolutionInfo(@NonNull Long identifier); /** The codec used by PreviewHostApi. */ static @NonNull MessageCodec getCodec() { return PreviewHostApiCodec.INSTANCE; } - /**Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ + /** Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHostApi api) { { BasicMessageChannel channel = @@ -917,10 +990,12 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos Number rotationArg = (Number) args.get(1); ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), (rotationArg == null) ? null : rotationArg.longValue(), targetResolutionArg); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (rotationArg == null) ? null : rotationArg.longValue(), + targetResolutionArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -933,7 +1008,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -941,10 +1018,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.setSurfaceProvider((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.setSurfaceProvider( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -957,7 +1035,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -965,8 +1045,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos try { api.releaseFlutterSurfaceTexture(); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -987,10 +1066,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHos ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - ResolutionInfo output = api.getResolutionInfo((identifierArg == null) ? null : identifierArg.longValue()); + ResolutionInfo output = + api.getResolutionInfo( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1032,7 +1112,10 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ImageCaptureHostApi { - void create(@NonNull Long identifier, @Nullable Long flashMode, @Nullable ResolutionInfo targetResolution); + void create( + @NonNull Long identifier, + @Nullable Long flashMode, + @Nullable ResolutionInfo targetResolution); void setFlashMode(@NonNull Long identifier, @NonNull Long flashMode); @@ -1042,7 +1125,10 @@ public interface ImageCaptureHostApi { static @NonNull MessageCodec getCodec() { return ImageCaptureHostApiCodec.INSTANCE; } - /**Sets up an instance of `ImageCaptureHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ImageCaptureHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageCaptureHostApi api) { { BasicMessageChannel channel = @@ -1057,10 +1143,12 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageCaptu Number flashModeArg = (Number) args.get(1); ResolutionInfo targetResolutionArg = (ResolutionInfo) args.get(2); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue(), targetResolutionArg); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (flashModeArg == null) ? null : flashModeArg.longValue(), + targetResolutionArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1082,10 +1170,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageCaptu Number identifierArg = (Number) args.get(0); Number flashModeArg = (Number) args.get(1); try { - api.setFlashMode((identifierArg == null) ? null : identifierArg.longValue(), (flashModeArg == null) ? null : flashModeArg.longValue()); + api.setFlashMode( + (identifierArg == null) ? null : identifierArg.longValue(), + (flashModeArg == null) ? null : flashModeArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1118,7 +1207,8 @@ public void error(Throwable error) { } }; - api.takePicture((identifierArg == null) ? null : identifierArg.longValue(), resultCallback); + api.takePicture( + (identifierArg == null) ? null : identifierArg.longValue(), resultCallback); }); } else { channel.setMessageHandler(null); @@ -1166,8 +1256,12 @@ public interface ImageAnalysisHostApi { static @NonNull MessageCodec getCodec() { return ImageAnalysisHostApiCodec.INSTANCE; } - /**Sets up an instance of `ImageAnalysisHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnalysisHostApi api) { + /** + * Sets up an instance of `ImageAnalysisHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup( + @NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnalysisHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1180,10 +1274,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnaly Number identifierArg = (Number) args.get(0); ResolutionInfo targetResolutionIdentifierArg = (ResolutionInfo) args.get(1); try { - api.create((identifierArg == null) ? null : identifierArg.longValue(), targetResolutionIdentifierArg); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + targetResolutionIdentifierArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1205,10 +1300,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnaly Number identifierArg = (Number) args.get(0); Number analyzerIdentifierArg = (Number) args.get(1); try { - api.setAnalyzer((identifierArg == null) ? null : identifierArg.longValue(), (analyzerIdentifierArg == null) ? null : analyzerIdentifierArg.longValue()); + api.setAnalyzer( + (identifierArg == null) ? null : identifierArg.longValue(), + (analyzerIdentifierArg == null) ? null : analyzerIdentifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1221,7 +1317,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnaly { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1231,8 +1329,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageAnaly try { api.clearAnalyzer((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1253,7 +1350,9 @@ public interface AnalyzerHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `AnalyzerHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `AnalyzerHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable AnalyzerHostApi api) { { BasicMessageChannel channel = @@ -1268,8 +1367,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable AnalyzerHo try { api.create((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1289,7 +1387,7 @@ public AnalyzerFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1298,6 +1396,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1306,7 +1405,11 @@ public void create(@NonNull Long identifierArg, @NonNull Reply callback) { new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); } - public void analyze(@NonNull Long identifierArg, @NonNull Long imageProxyIdentifierArg, @NonNull Reply callback) { + + public void analyze( + @NonNull Long identifierArg, + @NonNull Long imageProxyIdentifierArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.AnalyzerFlutterApi.analyze", getCodec()); @@ -1318,7 +1421,7 @@ public void analyze(@NonNull Long identifierArg, @NonNull Long imageProxyIdentif /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ImageProxyHostApi { - @NonNull + @NonNull List getPlanes(@NonNull Long identifier); void close(@NonNull Long identifier); @@ -1327,7 +1430,9 @@ public interface ImageProxyHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `ImageProxyHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ImageProxyHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxyHostApi api) { { BasicMessageChannel channel = @@ -1340,10 +1445,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxy ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - List output = api.getPlanes((identifierArg == null) ? null : identifierArg.longValue()); + List output = + api.getPlanes((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1366,8 +1471,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageProxy try { api.close((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1387,7 +1491,7 @@ public ImageProxyFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1396,7 +1500,13 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Long formatArg, @NonNull Long heightArg, @NonNull Long widthArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull Long formatArg, + @NonNull Long heightArg, + @NonNull Long widthArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ImageProxyFlutterApi.create", getCodec()); @@ -1413,7 +1523,7 @@ public PlaneProxyFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1422,12 +1532,19 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull byte[] bufferArg, @NonNull Long pixelStrideArg, @NonNull Long rowStrideArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull byte[] bufferArg, + @NonNull Long pixelStrideArg, + @NonNull Long rowStrideArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.PlaneProxyFlutterApi.create", getCodec()); channel.send( - new ArrayList(Arrays.asList(identifierArg, bufferArg, pixelStrideArg, rowStrideArg)), + new ArrayList( + Arrays.asList(identifierArg, bufferArg, pixelStrideArg, rowStrideArg)), channelReply -> callback.reply(null)); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java index 2240ca405d47..0ad569973fd8 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyFlutterApiImpl.java @@ -40,9 +40,18 @@ public ImageProxyFlutterApiImpl( * this method does nothing. */ public void create( - @NonNull ImageProxy instance, @NonNull Long imageFormat, @NonNull Long imageHeight, @NonNull Long imageWidth, @NonNull ImageProxyFlutterApi.Reply callback) { + @NonNull ImageProxy instance, + @NonNull Long imageFormat, + @NonNull Long imageHeight, + @NonNull Long imageWidth, + @NonNull ImageProxyFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { - api.create(instanceManager.addHostCreatedInstance(instance), imageFormat, imageHeight, imageWidth, callback); + api.create( + instanceManager.addHostCreatedInstance(instance), + imageFormat, + imageHeight, + imageWidth, + callback); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java index 2a6e947d43fb..bde45e35c67a 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java @@ -36,8 +36,7 @@ public ImageProxyHostApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; - planeProxyFlutterApiImpl = - new PlaneProxyFlutterApiImpl(binaryMessenger, instanceManager); + planeProxyFlutterApiImpl = new PlaneProxyFlutterApiImpl(binaryMessenger, instanceManager); } /** diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java index fd483ec173dc..713e40321bdc 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PlaneProxyFlutterApiImpl.java @@ -40,9 +40,18 @@ public PlaneProxyFlutterApiImpl( * already been added, this method does nothing. */ public void create( - @NonNull ImageProxy.PlaneProxy instance, @NonNull byte[] bytes, @NonNull Long pixelStride, @NonNull Long rowStride, @NonNull PlaneProxyFlutterApi.Reply callback) { + @NonNull ImageProxy.PlaneProxy instance, + @NonNull byte[] bytes, + @NonNull Long pixelStride, + @NonNull Long rowStride, + @NonNull PlaneProxyFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { - api.create(instanceManager.addHostCreatedInstance(instance), bytes, pixelStride, rowStride, callback); + api.create( + instanceManager.addHostCreatedInstance(instance), + bytes, + pixelStride, + rowStride, + callback); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java index a18e1a689495..bcc2648e4eb7 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/AnalyzerTest.java @@ -15,8 +15,6 @@ import androidx.camera.core.ImageProxy; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.AnalyzerFlutterApi; - -import java.text.Format; import java.util.Objects; import org.junit.After; import org.junit.Before; @@ -82,7 +80,8 @@ public void analyze_makesCallToDartAnalyze() { final long mockImageProxyIdentifier = 97; final AnalyzerHostApiImpl.AnalyzerImpl instance = new AnalyzerHostApiImpl.AnalyzerImpl(mockBinaryMessenger, instanceManager); - final ImageProxyFlutterApiImpl mockImageProxyApi = spy(new ImageProxyFlutterApiImpl(mockBinaryMessenger, instanceManager)); + final ImageProxyFlutterApiImpl mockImageProxyApi = + spy(new ImageProxyFlutterApiImpl(mockBinaryMessenger, instanceManager)); final long instanceIdentifier = 20; final long format = 3; final long height = 2; @@ -99,7 +98,6 @@ public void analyze_makesCallToDartAnalyze() { when(mockImageProxy.getHeight()).thenReturn(2); when(mockImageProxy.getWidth()).thenReturn(1); - instance.analyze(mockImageProxy); verify(mockFlutterApi).analyze(eq(instanceIdentifier), eq(mockImageProxyIdentifier), any()); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java index 20107baedc57..99cd06a7beae 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageProxyTest.java @@ -50,7 +50,8 @@ public void getPlanes_returnsExpectedPlanesFromExpectedImageProxyInstance() { final ImageProxyHostApiImpl hostApi = new ImageProxyHostApiImpl(mockBinaryMessenger, instanceManager); final CameraXProxy mockCameraXProxy = mock(CameraXProxy.class); - final PlaneProxyFlutterApiImpl mockPlaneProxyFlutterApiImpl = mock(PlaneProxyFlutterApiImpl.class); + final PlaneProxyFlutterApiImpl mockPlaneProxyFlutterApiImpl = + mock(PlaneProxyFlutterApiImpl.class); final long instanceIdentifier = 24; final long mockPlaneProxyIdentifier = 45; final ImageProxy.PlaneProxy mockPlaneProxy = mock(ImageProxy.PlaneProxy.class); @@ -73,11 +74,16 @@ public void getPlanes_returnsExpectedPlanesFromExpectedImageProxyInstance() { when(mockPlaneProxy.getPixelStride()).thenReturn(pixelStride); when(mockPlaneProxy.getRowStride()).thenReturn(rowStride); - final List result = hostApi.getPlanes(instanceIdentifier); verify(mockImageProxy).getPlanes(); - verify(mockPlaneProxyFlutterApiImpl).create(eq(mockPlaneProxy), eq(buffer), eq(Long.valueOf(pixelStride)), eq(Long.valueOf(rowStride)), any()); + verify(mockPlaneProxyFlutterApiImpl) + .create( + eq(mockPlaneProxy), + eq(buffer), + eq(Long.valueOf(pixelStride)), + eq(Long.valueOf(rowStride)), + any()); assertEquals(result.size(), 1); } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/InstanceManagerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/InstanceManagerTest.java index 2080f58e6407..b0d1d7fb042d 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/InstanceManagerTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/InstanceManagerTest.java @@ -9,8 +9,8 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; + import androidx.test.ext.junit.runners.AndroidJUnit4; -import io.flutter.plugins.camerax.InstanceManager; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java index c8455b43a01a..643b63e3f93f 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PlaneProxyTest.java @@ -4,17 +4,13 @@ package io.flutter.plugins.camerax; -import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import androidx.camera.core.ImageProxy; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.PlaneProxyFlutterApi; -import java.nio.ByteBuffer; import java.util.Objects; import org.junit.After; import org.junit.Before; @@ -56,6 +52,7 @@ public void flutterApiCreate_makesCallToCreateInstanceWithExpectedIdentifier() { final long instanceIdentifier = Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockPlaneProxy)); - verify(mockFlutterApi).create(eq(instanceIdentifier), eq(buffer), eq(pixelStride), eq(rowStride), any()); + verify(mockFlutterApi) + .create(eq(instanceIdentifier), eq(buffer), eq(pixelStride), eq(rowStride), any()); } } diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index 47b4c6ed419e..5e8e95548d38 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -80,8 +80,7 @@ class InstanceManagerHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -137,7 +136,8 @@ abstract class JavaObjectFlutterApi { void dispose(int identifier); - static void setup(JavaObjectFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(JavaObjectFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectFlutterApi.dispose', codec, @@ -147,7 +147,7 @@ abstract class JavaObjectFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectFlutterApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -203,7 +203,8 @@ abstract class CameraInfoFlutterApi { void create(int identifier); - static void setup(CameraInfoFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraInfoFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraInfoFlutterApi.create', codec, @@ -213,7 +214,7 @@ abstract class CameraInfoFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -240,8 +241,8 @@ class CameraSelectorHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_lensFacing]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_lensFacing]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -258,12 +259,13 @@ class CameraSelectorHostApi { } } - Future> filter(int arg_identifier, List arg_cameraInfoIds) async { + Future> filter( + int arg_identifier, List arg_cameraInfoIds) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_cameraInfoIds]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_cameraInfoIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -291,7 +293,8 @@ abstract class CameraSelectorFlutterApi { void create(int identifier, int? lensFacing); - static void setup(CameraSelectorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraSelectorFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, @@ -301,7 +304,7 @@ abstract class CameraSelectorFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -329,8 +332,7 @@ class ProcessCameraProviderHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -354,7 +356,8 @@ class ProcessCameraProviderHostApi { Future> getAvailableCameraInfos(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', + codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_identifier]) as List?; @@ -379,12 +382,17 @@ class ProcessCameraProviderHostApi { } } - Future bindToLifecycle(int arg_identifier, int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { + Future bindToLifecycle(int arg_identifier, + int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', + codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_cameraSelectorIdentifier, arg_useCaseIds]) as List?; + final List? replyList = await channel.send([ + arg_identifier, + arg_cameraSelectorIdentifier, + arg_useCaseIds + ]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -411,7 +419,8 @@ class ProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_useCaseIdentifier]) as List?; + await channel.send([arg_identifier, arg_useCaseIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -437,8 +446,8 @@ class ProcessCameraProviderHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_useCaseIds]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_useCaseIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -483,7 +492,8 @@ abstract class ProcessCameraProviderFlutterApi { void create(int identifier); - static void setup(ProcessCameraProviderFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ProcessCameraProviderFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, @@ -493,7 +503,7 @@ abstract class ProcessCameraProviderFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -521,7 +531,7 @@ abstract class CameraFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -549,7 +559,7 @@ class _SystemServicesHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -567,9 +577,11 @@ class SystemServicesHostApi { static const MessageCodec codec = _SystemServicesHostApiCodec(); - Future requestCameraPermissions(bool arg_enableAudio) async { + Future requestCameraPermissions( + bool arg_enableAudio) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', + codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_enableAudio]) as List?; @@ -589,12 +601,15 @@ class SystemServicesHostApi { } } - Future startListeningForDeviceOrientationChange(bool arg_isFrontFacing, int arg_sensorOrientation) async { + Future startListeningForDeviceOrientationChange( + bool arg_isFrontFacing, int arg_sensorOrientation) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', + codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_isFrontFacing, arg_sensorOrientation]) as List?; + await channel.send([arg_isFrontFacing, arg_sensorOrientation]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -613,10 +628,10 @@ class SystemServicesHostApi { Future stopListeningForDeviceOrientationChange() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', + codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -641,17 +656,19 @@ abstract class SystemServicesFlutterApi { void onCameraError(String errorDescription); - static void setup(SystemServicesFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(SystemServicesFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', codec, + 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', + codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); final List args = (message as List?)!; final String? arg_orientation = (args[0] as String?); assert(arg_orientation != null, @@ -670,7 +687,7 @@ abstract class SystemServicesFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); final List args = (message as List?)!; final String? arg_errorDescription = (args[0] as String?); assert(arg_errorDescription != null, @@ -701,9 +718,9 @@ class _PreviewHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - case 129: + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -721,12 +738,14 @@ class PreviewHostApi { static const MessageCodec codec = _PreviewHostApiCodec(); - Future create(int arg_identifier, int? arg_rotation, ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_rotation, + ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_rotation, arg_targetResolution]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_rotation, arg_targetResolution]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -774,8 +793,7 @@ class PreviewHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -835,7 +853,7 @@ class _ImageCaptureHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -853,12 +871,14 @@ class ImageCaptureHostApi { static const MessageCodec codec = _ImageCaptureHostApiCodec(); - Future create(int arg_identifier, int? arg_flashMode, ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_flashMode, + ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_flashMode, arg_targetResolution]) as List?; + final List? replyList = await channel.send( + [arg_identifier, arg_flashMode, arg_targetResolution]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -879,8 +899,8 @@ class ImageCaptureHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_flashMode]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_flashMode]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -940,7 +960,7 @@ class _ImageAnalysisHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -958,12 +978,14 @@ class ImageAnalysisHostApi { static const MessageCodec codec = _ImageAnalysisHostApiCodec(); - Future create(int arg_identifier, ResolutionInfo? arg_targetResolutionIdentifier) async { + Future create(int arg_identifier, + ResolutionInfo? arg_targetResolutionIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_targetResolutionIdentifier]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_targetResolutionIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -980,12 +1002,14 @@ class ImageAnalysisHostApi { } } - Future setAnalyzer(int arg_identifier, int arg_analyzerIdentifier) async { + Future setAnalyzer( + int arg_identifier, int arg_analyzerIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_analyzerIdentifier]) as List?; + await channel.send([arg_identifier, arg_analyzerIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1065,7 +1089,8 @@ abstract class AnalyzerFlutterApi { void analyze(int identifier, int imageProxyIdentifier); - static void setup(AnalyzerFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(AnalyzerFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.AnalyzerFlutterApi.create', codec, @@ -1075,7 +1100,7 @@ abstract class AnalyzerFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1094,7 +1119,7 @@ abstract class AnalyzerFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.analyze was null.'); + 'Argument for dev.flutter.pigeon.AnalyzerFlutterApi.analyze was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1175,7 +1200,8 @@ abstract class ImageProxyFlutterApi { void create(int identifier, int format, int height, int width); - static void setup(ImageProxyFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ImageProxyFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyFlutterApi.create', codec, @@ -1185,7 +1211,7 @@ abstract class ImageProxyFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1212,7 +1238,8 @@ abstract class PlaneProxyFlutterApi { void create(int identifier, Uint8List buffer, int pixelStride, int rowStride); - static void setup(PlaneProxyFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(PlaneProxyFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PlaneProxyFlutterApi.create', codec, @@ -1222,7 +1249,7 @@ abstract class PlaneProxyFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1236,7 +1263,8 @@ abstract class PlaneProxyFlutterApi { final int? arg_rowStride = (args[3] as int?); assert(arg_rowStride != null, 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null, expected non-null int.'); - api.create(arg_identifier!, arg_buffer!, arg_pixelStride!, arg_rowStride!); + api.create( + arg_identifier!, arg_buffer!, arg_pixelStride!, arg_rowStride!); return; }); } diff --git a/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart b/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart index 97feaad8b3c7..c6a6cd027374 100644 --- a/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:async'; import 'dart:typed_data'; import 'package:flutter/services.dart' show BinaryMessenger; @@ -19,14 +18,12 @@ import 'java_object.dart'; class PlaneProxy extends JavaObject { /// Constructs a [PlaneProxy] that is not automatically attached to a native object. PlaneProxy.detached( - {BinaryMessenger? binaryMessenger, - InstanceManager? instanceManager, + {super.binaryMessenger, + super.instanceManager, required this.buffer, required this.pixelStride, required this.rowStride}) - : super.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager) { + : super.detached() { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index cae592716b41..f4630a7ab26f 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -23,6 +23,7 @@ dependencies: sdk: flutter integration_test: sdk: flutter + meta: ^1.7.0 stream_transform: ^2.1.0 dev_dependencies: diff --git a/packages/camera/camera_android_camerax/test/analyzer_test.dart b/packages/camera/camera_android_camerax/test/analyzer_test.dart index f046e5a470d7..1888e4c9b8f8 100644 --- a/packages/camera/camera_android_camerax/test/analyzer_test.dart +++ b/packages/camera/camera_android_camerax/test/analyzer_test.dart @@ -88,11 +88,14 @@ void main() { instanceManager: instanceManager, ), ); - final ImageProxy imageProxy = - ImageProxy.detached(instanceManager: instanceManager); + final ImageProxy imageProxy = ImageProxy.detached( + instanceManager: instanceManager, format: 3, height: 4, width: 5); instanceManager.addHostCreatedInstance(imageProxy, imageProxyIdentifier, - onCopy: (ImageProxy original) => - ImageProxy.detached(instanceManager: instanceManager)); + onCopy: (ImageProxy original) => ImageProxy.detached( + instanceManager: instanceManager, + format: original.format, + height: original.height, + width: original.width)); final AnalyzerFlutterApiImpl flutterApi = AnalyzerFlutterApiImpl( instanceManager: instanceManager, diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index b0aba3522abb..e2dfe17f2012 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart @@ -468,18 +468,12 @@ void main() { .thenAnswer((_) async => mockCamera); when(mockImageProxy.getPlanes()) .thenAnswer((_) => Future>.value(mockPlanes)); - when(mockPlane.getBuffer()) - .thenAnswer((_) => Future.value(buffer)); - when(mockPlane.getRowStride()) - .thenAnswer((_) => Future.value(rowStride)); - when(mockPlane.getPixelStride()) - .thenAnswer((_) => Future.value(pixelStride)); - when(mockImageProxy.getFormat()) - .thenAnswer((_) => Future.value(imageFormat)); - when(mockImageProxy.getHeight()) - .thenAnswer((_) => Future.value(imageHeight)); - when(mockImageProxy.getWidth()) - .thenAnswer((_) => Future.value(imageWidth)); + when(mockPlane.buffer).thenReturn(buffer); + when(mockPlane.rowStride).thenReturn(rowStride); + when(mockPlane.pixelStride).thenReturn(pixelStride); + when(mockImageProxy.format).thenReturn(imageFormat); + when(mockImageProxy.height).thenReturn(imageHeight); + when(mockImageProxy.width).thenReturn(imageWidth); final StreamSubscription onStreamedFrameAvailableSubscription = camera diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart index dd5af23404e2..56673fc45926 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart @@ -245,6 +245,24 @@ class MockImageCapture extends _i1.Mock implements _i13.ImageCapture { /// See the documentation for Mockito's code generation for more information. class MockImageProxy extends _i1.Mock implements _i14.ImageProxy { @override + int get format => (super.noSuchMethod( + Invocation.getter(#format), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + @override + int get height => (super.noSuchMethod( + Invocation.getter(#height), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + @override + int get width => (super.noSuchMethod( + Invocation.getter(#width), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + @override _i9.Future> getPlanes() => (super.noSuchMethod( Invocation.method( #getPlanes, @@ -256,33 +274,6 @@ class MockImageProxy extends _i1.Mock implements _i14.ImageProxy { _i9.Future>.value(<_i15.PlaneProxy>[]), ) as _i9.Future>); @override - _i9.Future getFormat() => (super.noSuchMethod( - Invocation.method( - #getFormat, - [], - ), - returnValue: _i9.Future.value(0), - returnValueForMissingStub: _i9.Future.value(0), - ) as _i9.Future); - @override - _i9.Future getHeight() => (super.noSuchMethod( - Invocation.method( - #getHeight, - [], - ), - returnValue: _i9.Future.value(0), - returnValueForMissingStub: _i9.Future.value(0), - ) as _i9.Future); - @override - _i9.Future getWidth() => (super.noSuchMethod( - Invocation.method( - #getWidth, - [], - ), - returnValue: _i9.Future.value(0), - returnValueForMissingStub: _i9.Future.value(0), - ) as _i9.Future); - @override _i9.Future close() => (super.noSuchMethod( Invocation.method( #close, @@ -298,33 +289,23 @@ class MockImageProxy extends _i1.Mock implements _i14.ImageProxy { /// See the documentation for Mockito's code generation for more information. class MockPlaneProxy extends _i1.Mock implements _i15.PlaneProxy { @override - _i9.Future<_i16.Uint8List> getBuffer() => (super.noSuchMethod( - Invocation.method( - #getBuffer, - [], - ), - returnValue: _i9.Future<_i16.Uint8List>.value(_i16.Uint8List(0)), - returnValueForMissingStub: - _i9.Future<_i16.Uint8List>.value(_i16.Uint8List(0)), - ) as _i9.Future<_i16.Uint8List>); + _i16.Uint8List get buffer => (super.noSuchMethod( + Invocation.getter(#buffer), + returnValue: _i16.Uint8List(0), + returnValueForMissingStub: _i16.Uint8List(0), + ) as _i16.Uint8List); @override - _i9.Future getPixelStride() => (super.noSuchMethod( - Invocation.method( - #getPixelStride, - [], - ), - returnValue: _i9.Future.value(0), - returnValueForMissingStub: _i9.Future.value(0), - ) as _i9.Future); + int get pixelStride => (super.noSuchMethod( + Invocation.getter(#pixelStride), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); @override - _i9.Future getRowStride() => (super.noSuchMethod( - Invocation.method( - #getRowStride, - [], - ), - returnValue: _i9.Future.value(0), - returnValueForMissingStub: _i9.Future.value(0), - ) as _i9.Future); + int get rowStride => (super.noSuchMethod( + Invocation.getter(#rowStride), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); } /// A class which mocks [Preview]. diff --git a/packages/camera/camera_android_camerax/test/image_proxy_test.dart b/packages/camera/camera_android_camerax/test/image_proxy_test.dart index 59b13f458ee5..15f9fdabd738 100644 --- a/packages/camera/camera_android_camerax/test/image_proxy_test.dart +++ b/packages/camera/camera_android_camerax/test/image_proxy_test.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:typed_data'; + import 'package:camera_android_camerax/src/image_proxy.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; import 'package:camera_android_camerax/src/plane_proxy.dart'; @@ -36,22 +38,26 @@ void main() { ); final ImageProxy instance = ImageProxy.detached( - instanceManager: instanceManager, - ); + instanceManager: instanceManager, format: 2, height: 7, width: 10); const int instanceIdentifier = 0; - instanceManager.addHostCreatedInstance( - instance, - instanceIdentifier, - onCopy: (ImageProxy original) => ImageProxy.detached( + instanceManager.addHostCreatedInstance(instance, instanceIdentifier, + onCopy: (ImageProxy original) => ImageProxy.detached( + instanceManager: instanceManager, + format: original.format, + height: original.height, + width: original.width)); + final PlaneProxy planeProxy = PlaneProxy.detached( instanceManager: instanceManager, - ), - ); - final PlaneProxy planeProxy = - PlaneProxy.detached(instanceManager: instanceManager); + buffer: Uint8List(3), + pixelStride: 3, + rowStride: 20); const int planeProxyIdentifier = 48; instanceManager.addHostCreatedInstance(planeProxy, planeProxyIdentifier, - onCopy: (PlaneProxy original) => - PlaneProxy.detached(instanceManager: instanceManager)); + onCopy: (PlaneProxy original) => PlaneProxy.detached( + instanceManager: instanceManager, + buffer: original.buffer, + pixelStride: original.pixelStride, + rowStride: original.rowStride)); final List result = [planeProxyIdentifier]; when(mockApi.getPlanes( @@ -68,108 +74,6 @@ void main() { )); }); - test('getFormat', () async { - final MockTestImageProxyHostApi mockApi = MockTestImageProxyHostApi(); - TestImageProxyHostApi.setup(mockApi); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - - final ImageProxy instance = ImageProxy.detached( - instanceManager: instanceManager, - ); - const int instanceIdentifier = 0; - instanceManager.addHostCreatedInstance( - instance, - instanceIdentifier, - onCopy: (ImageProxy original) => ImageProxy.detached( - instanceManager: instanceManager, - ), - ); - - const int result = 0; - when(mockApi.getFormat( - instanceIdentifier, - )).thenAnswer((_) { - return result; - }); - - expect(await instance.getFormat(), result); - - verify(mockApi.getFormat( - instanceIdentifier, - )); - }); - - test('getHeight', () async { - final MockTestImageProxyHostApi mockApi = MockTestImageProxyHostApi(); - TestImageProxyHostApi.setup(mockApi); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - - final ImageProxy instance = ImageProxy.detached( - instanceManager: instanceManager, - ); - const int instanceIdentifier = 0; - instanceManager.addHostCreatedInstance( - instance, - instanceIdentifier, - onCopy: (ImageProxy original) => ImageProxy.detached( - instanceManager: instanceManager, - ), - ); - - const int result = 0; - when(mockApi.getHeight( - instanceIdentifier, - )).thenAnswer((_) { - return result; - }); - - expect(await instance.getHeight(), result); - - verify(mockApi.getHeight( - instanceIdentifier, - )); - }); - - test('getWidth', () async { - final MockTestImageProxyHostApi mockApi = MockTestImageProxyHostApi(); - TestImageProxyHostApi.setup(mockApi); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - - final ImageProxy instance = ImageProxy.detached( - instanceManager: instanceManager, - ); - const int instanceIdentifier = 0; - instanceManager.addHostCreatedInstance( - instance, - instanceIdentifier, - onCopy: (ImageProxy original) => ImageProxy.detached( - instanceManager: instanceManager, - ), - ); - - const int result = 0; - when(mockApi.getWidth( - instanceIdentifier, - )).thenAnswer((_) { - return result; - }); - - expect(await instance.getWidth(), result); - - verify(mockApi.getWidth( - instanceIdentifier, - )); - }); - test('close', () async { final MockTestImageProxyHostApi mockApi = MockTestImageProxyHostApi(); TestImageProxyHostApi.setup(mockApi); @@ -179,16 +83,14 @@ void main() { ); final ImageProxy instance = ImageProxy.detached( - instanceManager: instanceManager, - ); + instanceManager: instanceManager, format: 2, height: 7, width: 10); const int instanceIdentifier = 0; - instanceManager.addHostCreatedInstance( - instance, - instanceIdentifier, - onCopy: (ImageProxy original) => ImageProxy.detached( - instanceManager: instanceManager, - ), - ); + instanceManager.addHostCreatedInstance(instance, instanceIdentifier, + onCopy: (ImageProxy original) => ImageProxy.detached( + instanceManager: instanceManager, + format: original.format, + height: original.height, + width: original.width)); await instance.close(); @@ -207,15 +109,23 @@ void main() { ); const int instanceIdentifier = 0; + const int format = 9; + const int height = 55; + const int width = 11; api.create( instanceIdentifier, + format, + height, + width, ); - expect( - instanceManager.getInstanceWithWeakReference(instanceIdentifier), - isA(), - ); + final ImageProxy imageProxy = + instanceManager.getInstanceWithWeakReference(instanceIdentifier)!; + + expect(imageProxy.format, equals(format)); + expect(imageProxy.height, equals(height)); + expect(imageProxy.width, equals(width)); }); }); } diff --git a/packages/camera/camera_android_camerax/test/image_proxy_test.mocks.dart b/packages/camera/camera_android_camerax/test/image_proxy_test.mocks.dart index 390a321e78e3..175d917e68d3 100644 --- a/packages/camera/camera_android_camerax/test/image_proxy_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/image_proxy_test.mocks.dart @@ -36,30 +36,6 @@ class MockTestImageProxyHostApi extends _i1.Mock returnValue: [], ) as List); @override - int getFormat(int? identifier) => (super.noSuchMethod( - Invocation.method( - #getFormat, - [identifier], - ), - returnValue: 0, - ) as int); - @override - int getHeight(int? identifier) => (super.noSuchMethod( - Invocation.method( - #getHeight, - [identifier], - ), - returnValue: 0, - ) as int); - @override - int getWidth(int? identifier) => (super.noSuchMethod( - Invocation.method( - #getWidth, - [identifier], - ), - returnValue: 0, - ) as int); - @override void close(int? identifier) => super.noSuchMethod( Invocation.method( #close, diff --git a/packages/camera/camera_android_camerax/test/plane_proxy_test.dart b/packages/camera/camera_android_camerax/test/plane_proxy_test.dart index 5e27612fcd71..9bb115b9287d 100644 --- a/packages/camera/camera_android_camerax/test/plane_proxy_test.dart +++ b/packages/camera/camera_android_camerax/test/plane_proxy_test.dart @@ -8,12 +8,11 @@ import 'package:camera_android_camerax/src/instance_manager.dart'; import 'package:camera_android_camerax/src/plane_proxy.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; import 'plane_proxy_test.mocks.dart'; import 'test_camerax_library.g.dart'; -@GenerateMocks([TestPlaneProxyHostApi, TestInstanceManagerHostApi]) +@GenerateMocks([TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -24,131 +23,30 @@ void main() { setUp(() {}); tearDown(() { - TestPlaneProxyHostApi.setup(null); TestInstanceManagerHostApi.setup(null); }); - test('getRowStride', () async { - final MockTestPlaneProxyHostApi mockApi = MockTestPlaneProxyHostApi(); - TestPlaneProxyHostApi.setup(mockApi); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - - final PlaneProxy instance = PlaneProxy.detached( - instanceManager: instanceManager, - ); - const int instanceIdentifier = 0; - instanceManager.addHostCreatedInstance( - instance, - instanceIdentifier, - onCopy: (PlaneProxy original) => PlaneProxy.detached( - instanceManager: instanceManager, - ), - ); - - final Uint8List result = Uint8List(0); - when(mockApi.getBuffer( - instanceIdentifier, - )).thenAnswer((_) { - return result; - }); - - expect(await instance.getBuffer(), result); - - verify(mockApi.getBuffer( - instanceIdentifier, - )); - }); - - test('getPixelStride', () async { - final MockTestPlaneProxyHostApi mockApi = MockTestPlaneProxyHostApi(); - TestPlaneProxyHostApi.setup(mockApi); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - - final PlaneProxy instance = PlaneProxy.detached( - instanceManager: instanceManager, - ); - const int instanceIdentifier = 0; - instanceManager.addHostCreatedInstance( - instance, - instanceIdentifier, - onCopy: (PlaneProxy original) => PlaneProxy.detached( - instanceManager: instanceManager, - ), - ); - - const int result = 39; - when(mockApi.getPixelStride( - instanceIdentifier, - )).thenAnswer((_) { - return result; - }); - - expect(await instance.getPixelStride(), result); - - verify(mockApi.getPixelStride( - instanceIdentifier, - )); - }); - - test('getRowStride', () async { - final MockTestPlaneProxyHostApi mockApi = MockTestPlaneProxyHostApi(); - TestPlaneProxyHostApi.setup(mockApi); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - - final PlaneProxy instance = PlaneProxy.detached( - instanceManager: instanceManager, - ); - const int instanceIdentifier = 0; - instanceManager.addHostCreatedInstance( - instance, - instanceIdentifier, - onCopy: (PlaneProxy original) => PlaneProxy.detached( - instanceManager: instanceManager, - ), - ); - - const int result = 0; - when(mockApi.getRowStride( - instanceIdentifier, - )).thenAnswer((_) { - return result; - }); - - expect(await instance.getRowStride(), result); - - verify(mockApi.getRowStride( - instanceIdentifier, - )); - }); - test('FlutterAPI create', () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); - final PlaneProxyFlutterApiImpl api = PlaneProxyFlutterApiImpl( instanceManager: instanceManager, ); const int instanceIdentifier = 0; + final Uint8List buffer = Uint8List(4); + const int pixelStride = 3; + const int rowStride = 6; - api.create( - instanceIdentifier, - ); + api.create(instanceIdentifier, buffer, pixelStride, rowStride); - expect( - instanceManager.getInstanceWithWeakReference(instanceIdentifier), - isA(), - ); + final PlaneProxy planeProxy = + instanceManager.getInstanceWithWeakReference(instanceIdentifier)!; + + expect(planeProxy.buffer, equals(buffer)); + expect(planeProxy.pixelStride, equals(pixelStride)); + expect(planeProxy.rowStride, equals(rowStride)); }); }); } diff --git a/packages/camera/camera_android_camerax/test/plane_proxy_test.mocks.dart b/packages/camera/camera_android_camerax/test/plane_proxy_test.mocks.dart index e086a0cc6bb8..cd378700d83c 100644 --- a/packages/camera/camera_android_camerax/test/plane_proxy_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/plane_proxy_test.mocks.dart @@ -3,8 +3,6 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:typed_data' as _i3; - import 'package:mockito/mockito.dart' as _i1; import 'test_camerax_library.g.dart' as _i2; @@ -20,41 +18,6 @@ import 'test_camerax_library.g.dart' as _i2; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -/// A class which mocks [TestPlaneProxyHostApi]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockTestPlaneProxyHostApi extends _i1.Mock - implements _i2.TestPlaneProxyHostApi { - MockTestPlaneProxyHostApi() { - _i1.throwOnMissingStub(this); - } - - @override - int getPixelStride(int? identifier) => (super.noSuchMethod( - Invocation.method( - #getPixelStride, - [identifier], - ), - returnValue: 0, - ) as int); - @override - _i3.Uint8List getBuffer(int? identifier) => (super.noSuchMethod( - Invocation.method( - #getBuffer, - [identifier], - ), - returnValue: _i3.Uint8List(0), - ) as _i3.Uint8List); - @override - int getRowStride(int? identifier) => (super.noSuchMethod( - Invocation.method( - #getRowStride, - [identifier], - ), - returnValue: 0, - ) as int); -} - /// A class which mocks [TestInstanceManagerHostApi]. /// /// See the documentation for Mockito's code generation for more information. diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index a816c2ce658f..0af4cd0029f8 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -14,7 +14,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; abstract class TestInstanceManagerHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); /// Clear the native `InstanceManager`. @@ -22,15 +23,19 @@ abstract class TestInstanceManagerHostApi { /// This is typically only used after a hot restart. void clear(); - static void setup(TestInstanceManagerHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestInstanceManagerHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { // ignore message api.clear(); return []; @@ -41,22 +46,27 @@ abstract class TestInstanceManagerHostApi { } abstract class TestJavaObjectHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void dispose(int identifier); - static void setup(TestJavaObjectHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestJavaObjectHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -70,22 +80,28 @@ abstract class TestJavaObjectHostApi { } abstract class TestCameraInfoHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getSensorRotationDegrees(int identifier); - static void setup(TestCameraInfoHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraInfoHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -99,24 +115,29 @@ abstract class TestCameraInfoHostApi { } abstract class TestCameraSelectorHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void create(int identifier, int? lensFacing); List filter(int identifier, List cameraInfoIds); - static void setup(TestCameraSelectorHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraSelectorHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -132,19 +153,24 @@ abstract class TestCameraSelectorHostApi { 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); - final List? arg_cameraInfoIds = (args[1] as List?)?.cast(); + final List? arg_cameraInfoIds = + (args[1] as List?)?.cast(); assert(arg_cameraInfoIds != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); - final List output = api.filter(arg_identifier!, arg_cameraInfoIds!); + final List output = + api.filter(arg_identifier!, arg_cameraInfoIds!); return [output]; }); } @@ -153,14 +179,16 @@ abstract class TestCameraSelectorHostApi { } abstract class TestProcessCameraProviderHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); Future getInstance(); List getAvailableCameraInfos(int identifier); - int bindToLifecycle(int identifier, int cameraSelectorIdentifier, List useCaseIds); + int bindToLifecycle( + int identifier, int cameraSelectorIdentifier, List useCaseIds); bool isBound(int identifier, int useCaseIdentifier); @@ -168,15 +196,19 @@ abstract class TestProcessCameraProviderHostApi { void unbindAll(int identifier); - static void setup(TestProcessCameraProviderHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestProcessCameraProviderHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { // ignore message final int output = await api.getInstance(); return [output]; @@ -185,33 +217,42 @@ abstract class TestProcessCameraProviderHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); - final List output = api.getAvailableCameraInfos(arg_identifier!); + final List output = + api.getAvailableCameraInfos(arg_identifier!); return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -219,10 +260,12 @@ abstract class TestProcessCameraProviderHostApi { final int? arg_cameraSelectorIdentifier = (args[1] as int?); assert(arg_cameraSelectorIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); - final List? arg_useCaseIds = (args[2] as List?)?.cast(); + final List? arg_useCaseIds = + (args[2] as List?)?.cast(); assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null List.'); - final int output = api.bindToLifecycle(arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); + final int output = api.bindToLifecycle( + arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); return [output]; }); } @@ -232,11 +275,14 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -244,7 +290,8 @@ abstract class TestProcessCameraProviderHostApi { final int? arg_useCaseIdentifier = (args[1] as int?); assert(arg_useCaseIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); - final bool output = api.isBound(arg_identifier!, arg_useCaseIdentifier!); + final bool output = + api.isBound(arg_identifier!, arg_useCaseIdentifier!); return [output]; }); } @@ -254,16 +301,20 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null int.'); - final List? arg_useCaseIds = (args[1] as List?)?.cast(); + final List? arg_useCaseIds = + (args[1] as List?)?.cast(); assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null List.'); api.unbind(arg_identifier!, arg_useCaseIds!); @@ -276,11 +327,14 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -308,7 +362,7 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -317,45 +371,58 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { } abstract class TestSystemServicesHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestSystemServicesHostApiCodec(); - Future requestCameraPermissions(bool enableAudio); + Future requestCameraPermissions( + bool enableAudio); - void startListeningForDeviceOrientationChange(bool isFrontFacing, int sensorOrientation); + void startListeningForDeviceOrientationChange( + bool isFrontFacing, int sensorOrientation); void stopListeningForDeviceOrientationChange(); - static void setup(TestSystemServicesHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestSystemServicesHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); final List args = (message as List?)!; final bool? arg_enableAudio = (args[0] as bool?); assert(arg_enableAudio != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null, expected non-null bool.'); - final CameraPermissionsErrorData? output = await api.requestCameraPermissions(arg_enableAudio!); + final CameraPermissionsErrorData? output = + await api.requestCameraPermissions(arg_enableAudio!); return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); final List args = (message as List?)!; final bool? arg_isFrontFacing = (args[0] as bool?); assert(arg_isFrontFacing != null, @@ -363,19 +430,24 @@ abstract class TestSystemServicesHostApi { final int? arg_sensorOrientation = (args[1] as int?); assert(arg_sensorOrientation != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null int.'); - api.startListeningForDeviceOrientationChange(arg_isFrontFacing!, arg_sensorOrientation!); + api.startListeningForDeviceOrientationChange( + arg_isFrontFacing!, arg_sensorOrientation!); return []; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { // ignore message api.stopListeningForDeviceOrientationChange(); return []; @@ -403,9 +475,9 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - case 129: + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -414,7 +486,8 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { } abstract class TestPreviewHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestPreviewHostApiCodec(); void create(int identifier, int? rotation, ResolutionInfo? targetResolution); @@ -425,23 +498,28 @@ abstract class TestPreviewHostApi { ResolutionInfo getResolutionInfo(int identifier); - static void setup(TestPreviewHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestPreviewHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null, expected non-null int.'); final int? arg_rotation = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = + (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_rotation, arg_targetResolution); return []; }); @@ -452,11 +530,14 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -468,12 +549,16 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, + 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { // ignore message api.releaseFlutterSurfaceTexture(); return []; @@ -485,11 +570,14 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -517,7 +605,7 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -526,7 +614,8 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { } abstract class TestImageCaptureHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestImageCaptureHostApiCodec(); void create(int identifier, int? flashMode, ResolutionInfo? targetResolution); @@ -535,23 +624,28 @@ abstract class TestImageCaptureHostApi { Future takePicture(int identifier); - static void setup(TestImageCaptureHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageCaptureHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); final int? arg_flashMode = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = + (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_flashMode, arg_targetResolution); return []; }); @@ -562,11 +656,14 @@ abstract class TestImageCaptureHostApi { 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -584,11 +681,14 @@ abstract class TestImageCaptureHostApi { 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -616,7 +716,7 @@ class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -625,7 +725,8 @@ class _TestImageAnalysisHostApiCodec extends StandardMessageCodec { } abstract class TestImageAnalysisHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestImageAnalysisHostApiCodec(); void create(int identifier, ResolutionInfo? targetResolutionIdentifier); @@ -634,22 +735,27 @@ abstract class TestImageAnalysisHostApi { void clearAnalyzer(int identifier); - static void setup(TestImageAnalysisHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageAnalysisHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageAnalysisHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.create was null, expected non-null int.'); - final ResolutionInfo? arg_targetResolutionIdentifier = (args[1] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolutionIdentifier = + (args[1] as ResolutionInfo?); api.create(arg_identifier!, arg_targetResolutionIdentifier); return []; }); @@ -660,11 +766,14 @@ abstract class TestImageAnalysisHostApi { 'dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.setAnalyzer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -682,11 +791,14 @@ abstract class TestImageAnalysisHostApi { 'dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); + 'Argument for dev.flutter.pigeon.ImageAnalysisHostApi.clearAnalyzer was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -700,22 +812,27 @@ abstract class TestImageAnalysisHostApi { } abstract class TestAnalyzerHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void create(int identifier); - static void setup(TestAnalyzerHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestAnalyzerHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.AnalyzerHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.AnalyzerHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.AnalyzerHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -729,24 +846,29 @@ abstract class TestAnalyzerHostApi { } abstract class TestImageProxyHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); List getPlanes(int identifier); void close(int identifier); - static void setup(TestImageProxyHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageProxyHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyHostApi.getPlanes', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getPlanes was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getPlanes was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -761,11 +883,14 @@ abstract class TestImageProxyHostApi { 'dev.flutter.pigeon.ImageProxyHostApi.close', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.close was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.close was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, From 6bae3528816014f9c607715faf6b3a7aecbee2fa Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 26 Apr 2023 16:22:46 -0700 Subject: [PATCH 54/62] Add nonnull annotation for lint --- .../java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java index 1839f1aaade6..36e32b9c478b 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java @@ -27,6 +27,7 @@ public class AnalyzerHostApiImpl implements AnalyzerHostApi { public static class AnalyzerProxy { /** Creates an instance of {@link AnalyzerImpl}. */ + @NonNull public AnalyzerImpl create( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { return new AnalyzerImpl(binaryMessenger, instanceManager); From e4f522e4d3214eb8c7aad6cdcca0d1e96b36862a Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 26 Apr 2023 16:40:07 -0700 Subject: [PATCH 55/62] Bump test rerun --- .../camera/camera_android_camerax/test/plane_proxy_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/test/plane_proxy_test.dart b/packages/camera/camera_android_camerax/test/plane_proxy_test.dart index 9bb115b9287d..cbf886b44e30 100644 --- a/packages/camera/camera_android_camerax/test/plane_proxy_test.dart +++ b/packages/camera/camera_android_camerax/test/plane_proxy_test.dart @@ -35,7 +35,7 @@ void main() { ); const int instanceIdentifier = 0; - final Uint8List buffer = Uint8List(4); + final Uint8List buffer = Uint8List(1); const int pixelStride = 3; const int rowStride = 6; From f2a61672d6fbde0715aab326b753abda84b2a764 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 27 Apr 2023 09:31:51 -0700 Subject: [PATCH 56/62] Add annotations, try fix for test --- .../flutter/plugins/camerax/AnalyzerHostApiImpl.java | 2 +- .../java/io/flutter/plugins/camerax/CameraXProxy.java | 3 +++ .../plugins/camerax/ImageAnalysisHostApiImpl.java | 6 ++++-- .../flutter/plugins/camerax/ImageProxyHostApiImpl.java | 10 ++++++++-- .../test/image_capture_test.dart | 2 +- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java index 36e32b9c478b..08d79cdc827e 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java @@ -59,7 +59,7 @@ public AnalyzerImpl( } @Override - public void analyze(ImageProxy imageProxy) { + public void analyze(@NonNull ImageProxy imageProxy) { Long imageFormat = Long.valueOf(imageProxy.getFormat()); Long imageHeight = Long.valueOf(imageProxy.getHeight()); Long imageWidth = Long.valueOf(imageProxy.getWidth()); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java index 9974671bc33b..da025b11dac2 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java @@ -69,16 +69,19 @@ public ImageCapture.Builder createImageCaptureBuilder() { /** * Creates an {@link ImageCapture.OutputFileOptions} to configure where to save a captured image. */ + @NonNull public ImageCapture.OutputFileOptions createImageCaptureOutputFileOptions(@NonNull File file) { return new ImageCapture.OutputFileOptions.Builder(file).build(); } /** Creates an instance of {@link ImageAnalysis.Builder}. */ + @NonNull public ImageAnalysis.Builder createImageAnalysisBuilder() { return new ImageAnalysis.Builder(); } /** Creates an array of {@code byte}s with the size provided. */ + @NonNull public byte[] getBytesFromBuffer(int size) { return new byte[size]; } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index de1173b6c2bd..2f6044b3622c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -21,7 +21,9 @@ public class ImageAnalysisHostApiImpl implements ImageAnalysisHostApi { private BinaryMessenger binaryMessenger; private Context context; - @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); + @VisibleForTesting + @NonNull + public CameraXProxy cameraXProxy = new CameraXProxy(); public ImageAnalysisHostApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { @@ -32,7 +34,7 @@ public ImageAnalysisHostApiImpl( /** * Sets the context that will be used to run an {@link ImageAnalysis.Analyzer} on the main thread. */ - public void setContext(Context context) { + public void setContext(@NonNull Context context) { this.context = context; } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java index bde45e35c67a..2ca55fbc1682 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java @@ -24,8 +24,13 @@ public class ImageProxyHostApiImpl implements ImageProxyHostApi { private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; - @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); - @VisibleForTesting public PlaneProxyFlutterApiImpl planeProxyFlutterApiImpl; + @VisibleForTesting + @NonNull + public CameraXProxy cameraXProxy = new CameraXProxy(); + + @VisibleForTesting + @NonNull + public PlaneProxyFlutterApiImpl planeProxyFlutterApiImpl; /** * Constructs a {@link ImageProxyHostApiImpl}. @@ -44,6 +49,7 @@ public ImageProxyHostApiImpl( * specified identifier. */ @Override + @NonNull public List getPlanes(@NonNull Long identifier) { ImageProxy.PlaneProxy[] planes = getImageProxyInstance(identifier).getPlanes(); List planeIdentifiers = new ArrayList(); diff --git a/packages/camera/camera_android_camerax/test/image_capture_test.dart b/packages/camera/camera_android_camerax/test/image_capture_test.dart index 1d507c370bb0..bfcc66c0175f 100644 --- a/packages/camera/camera_android_camerax/test/image_capture_test.dart +++ b/packages/camera/camera_android_camerax/test/image_capture_test.dart @@ -79,7 +79,7 @@ void main() { onCopy: (_) => ImageCapture.detached(instanceManager: instanceManager), ); - imageCapture.setFlashMode(flashMode); + await imageCapture.setFlashMode(flashMode); verify(mockApi.setFlashMode( instanceManager.getIdentifier(imageCapture), flashMode)); From c42f7a124d8247842fe8b710116e458c5bb179e1 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 27 Apr 2023 09:40:15 -0700 Subject: [PATCH 57/62] Formatting --- .../flutter/plugins/camerax/ImageAnalysisHostApiImpl.java | 4 +--- .../io/flutter/plugins/camerax/ImageProxyHostApiImpl.java | 8 ++------ 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java index 2f6044b3622c..5e786176d50c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisHostApiImpl.java @@ -21,9 +21,7 @@ public class ImageAnalysisHostApiImpl implements ImageAnalysisHostApi { private BinaryMessenger binaryMessenger; private Context context; - @VisibleForTesting - @NonNull - public CameraXProxy cameraXProxy = new CameraXProxy(); + @VisibleForTesting @NonNull public CameraXProxy cameraXProxy = new CameraXProxy(); public ImageAnalysisHostApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java index 2ca55fbc1682..ad34c6ed8d06 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageProxyHostApiImpl.java @@ -24,13 +24,9 @@ public class ImageProxyHostApiImpl implements ImageProxyHostApi { private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; - @VisibleForTesting - @NonNull - public CameraXProxy cameraXProxy = new CameraXProxy(); + @VisibleForTesting @NonNull public CameraXProxy cameraXProxy = new CameraXProxy(); - @VisibleForTesting - @NonNull - public PlaneProxyFlutterApiImpl planeProxyFlutterApiImpl; + @VisibleForTesting @NonNull public PlaneProxyFlutterApiImpl planeProxyFlutterApiImpl; /** * Constructs a {@link ImageProxyHostApiImpl}. From 402af7bbb56caba7d6e6a850a0a11b2bc15ff780 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 27 Apr 2023 09:41:16 -0700 Subject: [PATCH 58/62] Add annotation --- .../java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java index 08d79cdc827e..6f6f7552ad41 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerHostApiImpl.java @@ -43,7 +43,7 @@ public static class AnalyzerImpl implements ImageAnalysis.Analyzer { private InstanceManager instanceManager; private AnalyzerFlutterApiImpl api; - @VisibleForTesting public ImageProxyFlutterApiImpl imageProxyApi; + @VisibleForTesting @NonNull public ImageProxyFlutterApiImpl imageProxyApi; /** * Constructs an instance of {@link ImageAnalysis.Analyzer} that passes arguments of callbacks From c711743dcc15737d0d12cd54d29becdb4791f3f7 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 27 Apr 2023 12:53:22 -0700 Subject: [PATCH 59/62] Revert instance manager integration test changes --- .../java/io/flutter/plugins/camerax/InstanceManagerTest.java | 3 --- .../io/flutter/plugins/cameraxexample/InstanceManagerTest.java | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/InstanceManagerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/InstanceManagerTest.java index b0d1d7fb042d..7dd5e62acabb 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/InstanceManagerTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/InstanceManagerTest.java @@ -10,11 +10,8 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Test; -import org.junit.runner.RunWith; -@RunWith(AndroidJUnit4.class) public class InstanceManagerTest { @Test public void addDartCreatedInstance() { diff --git a/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java b/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java index 0ef422a804fa..5e4454de80d3 100644 --- a/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java +++ b/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java @@ -8,9 +8,12 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; +import androidx.test.ext.junit.runners.AndroidJUnit4; import io.flutter.plugins.camerax.InstanceManager; import org.junit.Test; +import org.junit.runner.RunWith; +@RunWith(AndroidJUnit4.class) public class InstanceManagerTest { @Test public void managerDoesNotTriggerFinalizationListenerWhenStopped() throws InterruptedException { From 5091aa3b6799828cc41a5324315c692fdb7d53ee Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 27 Apr 2023 14:06:20 -0700 Subject: [PATCH 60/62] Address review, mock test instance manager host api for failing test --- .../lib/src/android_camera_camerax.dart | 15 ++++++-- .../lib/src/image_analysis.dart | 5 +++ .../lib/src/image_capture.dart | 4 ++ .../lib/src/image_proxy.dart | 5 +++ .../test/camera_test.dart | 8 ++++ .../test/camera_test.mocks.dart | 38 +++++++++++++++++++ 6 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 packages/camera/camera_android_camerax/test/camera_test.mocks.dart diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 51f594b5d419..8971c376e6ac 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -86,6 +86,16 @@ class AndroidCameraCameraX extends CameraPlatform { @visibleForTesting bool createDetachedCallbacks = false; + /// Constant representing the multi-plane Android YUV 420 image format. + /// + /// See https://developer.android.com/reference/android/graphics/ImageFormat#YUV_420_888. + static const int imageFormatYuv420_888 = 35; + + /// Constant representing the compressed JPEG image format. + /// + /// See https://developer.android.com/reference/android/graphics/ImageFormat#JPEG. + static const int imageFormatJpeg = 256; + /// Returns list of all available cameras and their descriptions. @override Future> availableCameras() async { @@ -266,7 +276,6 @@ class AndroidCameraCameraX extends CameraPlatform { /// [cameraId] not used. @override Future pausePreview(int cameraId) async { - assert(preview != null); _unbindUseCaseFromLifecycle(preview!); _previewIsPaused = true; } @@ -442,9 +451,9 @@ class AndroidCameraCameraX extends CameraPlatform { /// See https://developer.android.com/reference/android/graphics/ImageFormat. ImageFormatGroup _imageFormatGroupFromPlatformData(dynamic data) { switch (data) { - case 35: // android.graphics.ImageFormat.YUV_420_888 + case imageFormatYuv420_888: // android.graphics.ImageFormat.YUV_420_888 return ImageFormatGroup.yuv420; - case 256: // android.graphics.ImageFormat.JPEG + case imageFormatJpeg: // android.graphics.ImageFormat.JPEG return ImageFormatGroup.jpeg; } diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index 89572d156e2a..bf653a7ab615 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -59,6 +59,11 @@ class ImageAnalysis extends UseCase { /// Host API implementation of [ImageAnalysis]. class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { + /// Constructor for [_ImageAnalysisHostApiImpl]. + /// + /// An [instanceManager] should be passed if another instance of + /// [InstanceManager] has been used to maintain the Dart & native creation + /// of objects for an implementation of this plugin. _ImageAnalysisHostApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, diff --git a/packages/camera/camera_android_camerax/lib/src/image_capture.dart b/packages/camera/camera_android_camerax/lib/src/image_capture.dart index 60754c577090..9a3fe495a1c1 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_capture.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -95,6 +95,10 @@ class ImageCapture extends UseCase { /// Host API implementation of [ImageCapture]. class ImageCaptureHostApiImpl extends ImageCaptureHostApi { /// Constructs a [ImageCaptureHostApiImpl]. + /// + /// An [instanceManager] should be passed if another instance of + /// [InstanceManager] has been used to maintain the Dart & native creation + /// of objects for an implementation of this plugin. ImageCaptureHostApiImpl( {this.binaryMessenger, InstanceManager? instanceManager}) { this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; diff --git a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart index 4c17b1f0b9af..f444f5a627f9 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart @@ -52,6 +52,11 @@ class ImageProxy extends JavaObject { /// Host API implementation of [ImageProxy]. class _ImageProxyHostApiImpl extends ImageProxyHostApi { + /// Constructor for [_ImageProxyHostApiImpl]. + /// + /// An [instanceManager] should be passed if another instance of + /// [InstanceManager] has been used to maintain the Dart & native creation + /// of objects for an implementation of this plugin. _ImageProxyHostApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, diff --git a/packages/camera/camera_android_camerax/test/camera_test.dart b/packages/camera/camera_android_camerax/test/camera_test.dart index c2948282dcf1..3d6ea51b4b04 100644 --- a/packages/camera/camera_android_camerax/test/camera_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_test.dart @@ -5,10 +5,18 @@ import 'package:camera_android_camerax/src/camera.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'camera_info_test.mocks.dart'; +import 'test_camerax_library.g.dart'; + +@GenerateMocks([TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); + // Mocks the call to clear the native InstanceManager. + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + group('Camera', () { test('flutterApiCreateTest', () { final InstanceManager instanceManager = InstanceManager( diff --git a/packages/camera/camera_android_camerax/test/camera_test.mocks.dart b/packages/camera/camera_android_camerax/test/camera_test.mocks.dart new file mode 100644 index 000000000000..915ba5584b4d --- /dev/null +++ b/packages/camera/camera_android_camerax/test/camera_test.mocks.dart @@ -0,0 +1,38 @@ +// Mocks generated by Mockito 5.4.0 from annotations +// in camera_android_camerax/test/camera_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:mockito/mockito.dart' as _i1; + +import 'test_camerax_library.g.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [TestInstanceManagerHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestInstanceManagerHostApi extends _i1.Mock + implements _i2.TestInstanceManagerHostApi { + MockTestInstanceManagerHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void clear() => super.noSuchMethod( + Invocation.method( + #clear, + [], + ), + returnValueForMissingStub: null, + ); +} From c6c5753743a96ef47547ee368423bd945a7dd6ff Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 27 Apr 2023 16:58:51 -0700 Subject: [PATCH 61/62] Remove asserts in plugin code --- .../lib/src/android_camera_camerax.dart | 26 ++++++------------- .../test/android_camera_camerax_test.dart | 4 +-- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 8971c376e6ac..7975c9851074 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -213,10 +213,14 @@ class AndroidCameraCameraX extends CameraPlatform { // Configure CameraInitializedEvent to send as representation of a // configured camera: // Retrieve preview resolution. - assert( - preview != null, - 'Preview instance not found. Please call the "createCamera" method before calling "initializeCamera"', - ); + if (preview == null) { + // No camera has been created; createCamera must be called before initializeCamera. + throw CameraException( + 'cameraNotFound', + "Camera not found. Please call the 'create' method before calling 'initialize'", + ); + } + final ResolutionInfo previewResolutionInfo = await preview!.getResolutionInfo(); @@ -312,10 +316,6 @@ class AndroidCameraCameraX extends CameraPlatform { /// [cameraId] is not used. @override Future takePicture(int cameraId) async { - assert(processCameraProvider != null); - assert(cameraSelector != null); - assert(imageCapture != null); - // TODO(camsim99): Add support for flash mode configuration. // https://github.com/flutter/flutter/issues/120715 final String picturePath = await imageCapture!.takePicture(); @@ -349,10 +349,6 @@ class AndroidCameraCameraX extends CameraPlatform { /// Binds [preview] instance to the camera lifecycle controlled by the /// [processCameraProvider]. Future _bindPreviewToLifecycle() async { - assert(processCameraProvider != null); - assert(cameraSelector != null); - assert(preview != null); - final bool previewIsBound = await processCameraProvider!.isBound(preview!); if (previewIsBound || _previewIsPaused) { // Only bind if preview is not already bound or intentionally paused. @@ -366,9 +362,6 @@ class AndroidCameraCameraX extends CameraPlatform { /// Configures the [imageAnalysis] instance for image streaming and binds it /// to camera lifecycle controlled by the [processCameraProvider]. Future _configureAndBindImageAnalysisToLifecycle() async { - assert(processCameraProvider != null); - assert(cameraSelector != null); - if (imageAnalysis != null && await processCameraProvider!.isBound(imageAnalysis!)) { // imageAnalysis already configured and bound to lifecycle. @@ -418,8 +411,6 @@ class AndroidCameraCameraX extends CameraPlatform { /// Unbinds [useCase] from camera lifecycle controlled by the /// [processCameraProvider]. Future _unbindUseCaseFromLifecycle(UseCase useCase) async { - assert(processCameraProvider != null); - final bool useCaseIsBound = await processCameraProvider!.isBound(useCase); if (!useCaseIsBound) { return; @@ -442,7 +433,6 @@ class AndroidCameraCameraX extends CameraPlatform { /// Removes the previously set analyzer on the [imageAnalysis] instance, since /// image information should no longer be streamed. FutureOr _onFrameStreamCancel() async { - assert(imageAnalysis != null); imageAnalysis!.clearAnalyzer(); } diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index e2dfe17f2012..2db12ebde63b 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart @@ -171,10 +171,10 @@ void main() { }); test( - 'initializeCamera throws AssertionError when createCamera has not been called before initializedCamera', + 'initializeCamera throws a CameraException when createCamera has not been called before initializedCamera', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); - expect(() => camera.initializeCamera(3), throwsAssertionError); + expect(() => camera.initializeCamera(3), throwsA(isA())); }); test('initializeCamera sends expected CameraInitializedEvent', () async { From 619a165f8e186ab0156ae0b69eb93b6c6821324e Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 28 Apr 2023 10:07:48 -0700 Subject: [PATCH 62/62] Fix comment --- packages/camera/camera_android_camerax/lib/src/camera.dart | 5 ++++- .../camera_android_camerax/lib/src/camera_selector.dart | 3 +++ .../camera_android_camerax/lib/src/image_analysis.dart | 5 ++--- .../camera/camera_android_camerax/lib/src/image_capture.dart | 5 ++--- .../camera/camera_android_camerax/lib/src/image_proxy.dart | 5 ++--- .../camera/camera_android_camerax/lib/src/plane_proxy.dart | 3 +++ packages/camera/camera_android_camerax/lib/src/preview.dart | 3 +++ .../lib/src/process_camera_provider.dart | 3 +++ 8 files changed, 22 insertions(+), 10 deletions(-) diff --git a/packages/camera/camera_android_camerax/lib/src/camera.dart b/packages/camera/camera_android_camerax/lib/src/camera.dart index 24ff30540b28..51e0813cdd32 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera.dart @@ -23,7 +23,10 @@ class Camera extends JavaObject { /// Flutter API implementation of [Camera]. class CameraFlutterApiImpl implements CameraFlutterApi { - /// Constructs a [CameraSelectorFlutterApiImpl]. + /// Constructs a [CameraFlutterApiImpl]. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an `InstanceManager` is being created. CameraFlutterApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, diff --git a/packages/camera/camera_android_camerax/lib/src/camera_selector.dart b/packages/camera/camera_android_camerax/lib/src/camera_selector.dart index aa7ee88023c1..8300063204c0 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_selector.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_selector.dart @@ -99,6 +99,9 @@ class CameraSelector extends JavaObject { /// Host API implementation of [CameraSelector]. class CameraSelectorHostApiImpl extends CameraSelectorHostApi { /// Constructs a [CameraSelectorHostApiImpl]. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an `InstanceManager` is being created. CameraSelectorHostApiImpl( {this.binaryMessenger, InstanceManager? instanceManager}) : super(binaryMessenger: binaryMessenger) { diff --git a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart index bf653a7ab615..69cc7829c7a3 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -61,9 +61,8 @@ class ImageAnalysis extends UseCase { class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { /// Constructor for [_ImageAnalysisHostApiImpl]. /// - /// An [instanceManager] should be passed if another instance of - /// [InstanceManager] has been used to maintain the Dart & native creation - /// of objects for an implementation of this plugin. + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an `InstanceManager` is being created. _ImageAnalysisHostApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, diff --git a/packages/camera/camera_android_camerax/lib/src/image_capture.dart b/packages/camera/camera_android_camerax/lib/src/image_capture.dart index 9a3fe495a1c1..9b80c8706214 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_capture.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -96,9 +96,8 @@ class ImageCapture extends UseCase { class ImageCaptureHostApiImpl extends ImageCaptureHostApi { /// Constructs a [ImageCaptureHostApiImpl]. /// - /// An [instanceManager] should be passed if another instance of - /// [InstanceManager] has been used to maintain the Dart & native creation - /// of objects for an implementation of this plugin. + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an `InstanceManager` is being created. ImageCaptureHostApiImpl( {this.binaryMessenger, InstanceManager? instanceManager}) { this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; diff --git a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart index f444f5a627f9..a1f929c5960d 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart @@ -54,9 +54,8 @@ class ImageProxy extends JavaObject { class _ImageProxyHostApiImpl extends ImageProxyHostApi { /// Constructor for [_ImageProxyHostApiImpl]. /// - /// An [instanceManager] should be passed if another instance of - /// [InstanceManager] has been used to maintain the Dart & native creation - /// of objects for an implementation of this plugin. + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an `InstanceManager` is being created. _ImageProxyHostApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, diff --git a/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart b/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart index c6a6cd027374..c057876d1ede 100644 --- a/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart @@ -47,6 +47,9 @@ class PlaneProxy extends JavaObject { @protected class PlaneProxyFlutterApiImpl implements PlaneProxyFlutterApi { /// Constructs a [PlaneProxyFlutterApiImpl]. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an `InstanceManager` is being created. PlaneProxyFlutterApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, diff --git a/packages/camera/camera_android_camerax/lib/src/preview.dart b/packages/camera/camera_android_camerax/lib/src/preview.dart index d62ab77f20f2..02a540a3b507 100644 --- a/packages/camera/camera_android_camerax/lib/src/preview.dart +++ b/packages/camera/camera_android_camerax/lib/src/preview.dart @@ -71,6 +71,9 @@ class Preview extends UseCase { /// Host API implementation of [Preview]. class PreviewHostApiImpl extends PreviewHostApi { /// Constructs a [PreviewHostApiImpl]. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an `InstanceManager` is being created. PreviewHostApiImpl({this.binaryMessenger, InstanceManager? instanceManager}) { this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; } diff --git a/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart index d722cf524fae..d8cccdb2aa3e 100644 --- a/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart +++ b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart @@ -75,6 +75,9 @@ class ProcessCameraProvider extends JavaObject { /// Host API implementation of [ProcessCameraProvider]. class ProcessCameraProviderHostApiImpl extends ProcessCameraProviderHostApi { /// Creates a [ProcessCameraProviderHostApiImpl]. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an `InstanceManager` is being created. ProcessCameraProviderHostApiImpl( {this.binaryMessenger, InstanceManager? instanceManager}) : super(binaryMessenger: binaryMessenger) {