From 6125eca646d50407d23be471585203381fc27d58 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 23 Feb 2023 14:35:21 -0800 Subject: [PATCH 01/71] 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/71] 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/71] 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/71] 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/71] 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/71] 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/71] 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/71] 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/71] 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/71] 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/71] 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/71] 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/71] 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/71] 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/71] 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/71] 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 5bf6b17aa195cb2d5f39d2751503f590841a24c7 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 8 Mar 2023 09:19:08 -0800 Subject: [PATCH 17/71] Start dev --- .../lib/src/android_camera_camerax.dart | 9 +++++++-- 1 file changed, 7 insertions(+), 2 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 adafd74f33f9..a36fcf76080e 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 @@ -232,6 +232,11 @@ class AndroidCameraCameraX extends CameraPlatform { return _cameraEvents(cameraId).whereType(); } + /// The camera started to close. + Stream onCameraClosing(int cameraId) { + throw UnimplementedError('onCameraClosing() is not implemented.'); + } + /// The camera experienced an error. @override Stream onCameraError(int cameraId) { @@ -299,8 +304,8 @@ class AndroidCameraCameraX extends CameraPlatform { return XFile(picturePath); } - // Methods for binding UseCases to the lifecycle of the camera controlled - // by a ProcessCameraProvider instance: + // Methods for binding/unbinding UseCases to the lifecycle of the camera + // controlled by a ProcessCameraProvider instance: /// Binds [preview] instance to the camera lifecycle controlled by the /// [processCameraProvider]. From 5e58b2c46a2662074f20a7d7bac3d1ff14f37269 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 8 Mar 2023 09:51:06 -0800 Subject: [PATCH 18/71] Add cameraClosing impl --- .../lib/src/android_camera_camerax.dart | 12 ++++++++++-- .../lib/src/process_camera_provider.dart | 8 ++++++++ 2 files changed, 18 insertions(+), 2 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 a36fcf76080e..727f2ff4809f 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 @@ -122,6 +122,9 @@ class AndroidCameraCameraX extends CameraPlatform { /// To return the camera ID, which is equivalent to the ID of the surface texture /// that a camera preview can be drawn to, a [Preview] instance is configured /// and bound to the [ProcessCameraProvider] instance. + // TODO(camsim99): Merge changes for image capture implementation, and ensure + // onCameraClosing is not called when the processCameraProvider has its + // UseCases cleared here if it was not previously null. @override Future createCamera( CameraDescription cameraDescription, @@ -232,9 +235,14 @@ class AndroidCameraCameraX extends CameraPlatform { return _cameraEvents(cameraId).whereType(); } - /// The camera started to close. + /// The camera started to close. + @override Stream onCameraClosing(int cameraId) { - throw UnimplementedError('onCameraClosing() is not implemented.'); + return ProcessCameraProvider.cameraClosingStreamController.stream + .map((bool isCameraClosing) { + assert(isCameraClosing); + return CameraClosingEvent(cameraId); + }); } /// The camera experienced an error. 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 2186ddbd544b..2f7b0d0fda63 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 @@ -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:async'; + import 'package:flutter/services.dart'; import 'android_camera_camerax_flutter_api_impls.dart'; @@ -28,6 +30,11 @@ class ProcessCameraProvider extends JavaObject { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } + /// Stream that emits an event when [unbindAll] is called, which will initiate + /// the closing of the cameras controlled by this instance. + static final StreamController cameraClosingStreamController = + StreamController.broadcast(); + late final ProcessCameraProviderHostApiImpl _api; /// Gets an instance of [ProcessCameraProvider]. @@ -68,6 +75,7 @@ class ProcessCameraProvider extends JavaObject { /// Unbinds all previously bound [UseCase]s from the lifecycle of the camera /// that this tracks. void unbindAll() { + cameraClosingStreamController.add(true); _api.unbindAllFromInstances(this); } } From 4c8c94d3d8957dccc02d676a977f517b027020b7 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 13 Mar 2023 11:32:14 -0700 Subject: [PATCH 19/71] Add tests --- .../lib/src/android_camera_camerax.dart | 8 ++++---- .../test/android_camera_camerax_test.dart | 16 ++++++++++++++++ .../test/process_camera_provider_test.dart | 19 +++++++++---------- 3 files changed, 29 insertions(+), 14 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 727f2ff4809f..7a84f798e6bd 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 @@ -239,10 +239,10 @@ class AndroidCameraCameraX extends CameraPlatform { @override Stream onCameraClosing(int cameraId) { return ProcessCameraProvider.cameraClosingStreamController.stream - .map((bool isCameraClosing) { - assert(isCameraClosing); - return CameraClosingEvent(cameraId); - }); + .map((bool isCameraClosing) { + assert(isCameraClosing); + return CameraClosingEvent(cameraId); + }); } /// The camera experienced an error. 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..18850e410a25 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 @@ -249,6 +249,22 @@ void main() { await streamQueue.cancel(); }); + test( + 'onCameraClosing stream emits camera closing event when detected by ProcessCameraProvider', + () async { + final AndroidCameraCameraX camera = AndroidCameraCameraX(); + const int cameraId = 99; + final Stream eventStream = + camera.onCameraClosing(cameraId); + final StreamQueue streamQueue = + StreamQueue(eventStream); + + ProcessCameraProvider.cameraClosingStreamController.add(true); + + expect(await streamQueue.next, equals(const CameraClosingEvent(cameraId))); + await streamQueue.cancel(); + }); + test('onCameraError stream emits errors caught by system services', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); const int cameraId = 27; 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 d20545103c26..54702a6faff6 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 @@ -191,7 +191,8 @@ void main() { verify(mockApi.unbind(0, [1])); }); - test('unbindAllTest', () async { + test('unbindAll unbinds UseCases and sends camera closing events', + () async { final MockTestProcessCameraProviderHostApi mockApi = MockTestProcessCameraProviderHostApi(); TestProcessCameraProviderHostApi.setup(mockApi); @@ -203,22 +204,20 @@ void main() { ProcessCameraProvider.detached( instanceManager: instanceManager, ); - final UseCase fakeUseCase = - UseCase.detached(instanceManager: instanceManager); instanceManager.addHostCreatedInstance( processCameraProvider, 0, onCopy: (_) => ProcessCameraProvider.detached(), ); - instanceManager.addHostCreatedInstance( - fakeUseCase, - 1, - onCopy: (_) => UseCase.detached(), - ); - processCameraProvider.unbind([fakeUseCase]); - verify(mockApi.unbind(0, [1])); + ProcessCameraProvider.cameraClosingStreamController.stream + .listen((bool event) { + expect(event, isTrue); + }); + + processCameraProvider.unbindAll(); + verify(mockApi.unbindAll(0)); }); test('flutterApiCreateTest', () { From 6a0de0892c54ac07fd7a4f54f2f4ed90641b13bf Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 14 Mar 2023 14:18:18 -0700 Subject: [PATCH 20/71] Implement occ with camera state --- .../camerax/CameraAndroidCameraxPlugin.java | 16 ++-- .../plugins/camerax/CameraHostApiImpl.java | 35 ++++++++ .../camerax/CameraInfoFlutterApiImpl.java | 4 + .../camerax/CameraInfoHostApiImpl.java | 74 ++++++++++++++- .../camerax/GeneratedCameraXLibrary.java | 90 +++++++++++++++++++ .../plugins/camerax/PreviewHostApiImpl.java | 2 +- .../example/lib/main.dart | 36 ++++---- .../lib/src/android_camera_camerax.dart | 6 +- .../lib/src/camera.dart | 37 ++++++++ .../lib/src/camera_info.dart | 24 +++++ .../lib/src/camerax_library.g.dart | 90 +++++++++++++++++++ .../lib/src/process_camera_provider.dart | 6 -- .../pigeons/camerax_library.dart | 9 ++ .../test/test_camerax_library.g.dart | 21 +++++ 14 files changed, 418 insertions(+), 32 deletions(-) create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.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 1f5cdb174504..ce1706ec4757 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 @@ -4,6 +4,7 @@ package io.flutter.plugins.camerax; +import android.app.Activity; import android.content.Context; import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; @@ -17,6 +18,7 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, ActivityAware { private InstanceManager instanceManager; private FlutterPluginBinding pluginBinding; + private CameraInfoHostApiImpl cameraInfoHostApiImpl; private ProcessCameraProviderHostApiImpl processCameraProviderHostApi; private ImageCaptureHostApiImpl imageCaptureHostApi; public SystemServicesHostApiImpl systemServicesHostApi; @@ -38,8 +40,8 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex }); // Set up Host APIs. - GeneratedCameraXLibrary.CameraInfoHostApi.setup( - binaryMessenger, new CameraInfoHostApiImpl(instanceManager)); + cameraInfoHostApiImpl = new CameraInfoHostApiImpl(binaryMessenger, instanceManager); + GeneratedCameraXLibrary.CameraInfoHostApi.setup(binaryMessenger, cameraInfoHostApiImpl); GeneratedCameraXLibrary.CameraSelectorHostApi.setup( binaryMessenger, new CameraSelectorHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.JavaObjectHostApi.setup( @@ -54,6 +56,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.CameraHostApi.setup( + binaryMessenger, new CameraHostApiImpl(binaryMessenger, instanceManager)); } @Override @@ -77,9 +81,11 @@ public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBi pluginBinding.getApplicationContext(), pluginBinding.getTextureRegistry()); updateContext(pluginBinding.getApplicationContext()); - processCameraProviderHostApi.setLifecycleOwner( - (LifecycleOwner) activityPluginBinding.getActivity()); - systemServicesHostApi.setActivity(activityPluginBinding.getActivity()); + + Activity activity = activityPluginBinding.getActivity(); + processCameraProviderHostApi.setLifecycleOwner((LifecycleOwner) activity); + cameraInfoHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); + systemServicesHostApi.setActivity(activity); systemServicesHostApi.setPermissionsRegistry( activityPluginBinding::addRequestPermissionsResultListener); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java new file mode 100644 index 000000000000..96ada1f57e24 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.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 androidx.annotation.NonNull; +import androidx.camera.core.Camera; +import androidx.camera.core.CameraInfo; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraHostApi; +import java.util.Objects; + +public class CameraHostApiImpl implements CameraHostApi { + private final BinaryMessenger binaryMessenger; + private final InstanceManager instanceManager; + + public CameraHostApiImpl(BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + } + + @Override + public Long getCameraInfo(@NonNull Long identifier) { + Camera camera = (Camera) Objects.requireNonNull(instanceManager.getInstance(identifier)); + CameraInfo cameraInfo = camera.getCameraInfo(); + + if (!instanceManager.containsInstance(cameraInfo)) { + CameraInfoFlutterApiImpl cameraInfoFlutterApiImpl = + new CameraInfoFlutterApiImpl(binaryMessenger, instanceManager); + cameraInfoFlutterApiImpl.create(cameraInfo, reply -> {}); + } + return instanceManager.getIdentifierForStrongReference(cameraInfo); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java index c538e420cc7e..3b2850c512c7 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java @@ -20,4 +20,8 @@ public CameraInfoFlutterApiImpl( void create(CameraInfo cameraInfo, Reply reply) { create(instanceManager.addHostCreatedInstance(cameraInfo), reply); } + + void sendCameraClosingEvent(Long identifier, Reply reply) { + onCameraClosing(identifier, reply); + } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index d960b7fff70a..057d6f73a99b 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -5,21 +5,93 @@ package io.flutter.plugins.camerax; import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import androidx.camera.core.CameraInfo; +import androidx.camera.core.CameraState; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.Observer; +import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraInfoHostApi; import java.util.Objects; public class CameraInfoHostApiImpl implements CameraInfoHostApi { + private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; + private LifecycleOwner lifecycleOwner; - public CameraInfoHostApiImpl(InstanceManager instanceManager) { + @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); + + public CameraInfoHostApiImpl(BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; } + /** Sets {@link LifecycleOwner} used to observe the camera state if so requested. */ + public void setLifecycleOwner(LifecycleOwner lifecycleOwner) { + this.lifecycleOwner = lifecycleOwner; + } + @Override public Long getSensorRotationDegrees(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); return Long.valueOf(cameraInfo.getSensorRotationDegrees()); } + + @Override + public void startListeningForCameraClosing(@NonNull Long identifier) { + CameraInfo cameraInfo = + (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); + LiveData liveCameraState = cameraInfo.getCameraState(); + liveCameraState.observe(lifecycleOwner, createCameraStateObserver(identifier)); + } + + private Observer createCameraStateObserver(Long identifier) { + return new Observer() { + @Override + public void onChanged(@NonNull CameraState cameraState) { + if (cameraState.getType() == CameraState.Type.CLOSING) { + CameraInfoFlutterApiImpl cameraInfoFlutterApiImpl = + new CameraInfoFlutterApiImpl(binaryMessenger, instanceManager); + cameraInfoFlutterApiImpl.sendCameraClosingEvent(identifier, reply -> {}); + } + CameraState.StateError cameraStateError = cameraState.getError(); + if (cameraStateError != null) { + SystemServicesFlutterApiImpl systemServicesFlutterApi = + cameraXProxy.createSystemServicesFlutterApiImpl(binaryMessenger); + systemServicesFlutterApi.sendCameraError( + getCameraStateErrorDescription(cameraStateError.getCode()), reply -> {}); + } + } + }; + } + + private String getCameraStateErrorDescription(@NonNull int cameraStateErrorCode) { + // See CameraState errors: https://developer.android.com/reference/androidx/camera/core/CameraState#constants_1. + switch (cameraStateErrorCode) { + case CameraState.ERROR_CAMERA_IN_USE: + return cameraStateErrorCode + + ": The camera was already in use, possibly by a higher-priority camera client."; + case CameraState.ERROR_MAX_CAMERAS_IN_USE: + return cameraStateErrorCode + + ": The limit number of open cameras has been reached, and more cameras cannot be opened until other instances are closed."; + case CameraState.ERROR_OTHER_RECOVERABLE_ERROR: + return cameraStateErrorCode + + ": The camera device has encountered a recoverable error. CameraX will attempt to recover from the error."; + case CameraState.ERROR_STREAM_CONFIG: + return cameraStateErrorCode + ": Configuring the camera has failed."; + case CameraState.ERROR_CAMERA_DISABLED: + return cameraStateErrorCode + + ": The camera device could not be opened due to a device policy. Thia may be caused by a client from a background process attempting to open the camera."; + case CameraState.ERROR_CAMERA_FATAL_ERROR: + return cameraStateErrorCode + + ": The camera was closed due to a fatal error. This may require the Android device be shut down and restarted to restore camera function or may indicate a persistent camera hardware problem."; + case CameraState.ERROR_DO_NOT_DISTURB_MODE_ENABLED: + return cameraStateErrorCode + + ": The camera could not be opened because 'Do Not Disturb' mode is enabled. Please disable this mode, and try opening the camera again."; + default: + return "There was an undefined issue with the camera state."; + } + } } 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..5f7d74ff72ee 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 @@ -271,6 +271,8 @@ public interface CameraInfoHostApi { @NonNull Long getSensorRotationDegrees(@NonNull Long identifier); + void startListeningForCameraClosing(@NonNull Long identifier); + /** The codec used by CameraInfoHostApi. */ static MessageCodec getCodec() { return CameraInfoHostApiCodec.INSTANCE; @@ -309,6 +311,34 @@ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { channel.setMessageHandler(null); } } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.startListeningForCameraClosing", + 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.startListeningForCameraClosing( + (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); + } + } } } @@ -344,6 +374,19 @@ public void create(@NonNull Long identifierArg, Reply callback) { callback.reply(null); }); } + + public void onCameraClosing(@NonNull Long identifierArg, Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.CameraInfoFlutterApi.onCameraClosing", + getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg)), + channelReply -> { + callback.reply(null); + }); + } } private static class CameraSelectorHostApiCodec extends StandardMessageCodec { @@ -743,6 +786,53 @@ public void create(@NonNull Long identifierArg, Reply callback) { } } + private static class CameraHostApiCodec extends StandardMessageCodec { + public static final CameraHostApiCodec INSTANCE = new CameraHostApiCodec(); + + private CameraHostApiCodec() {} + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface CameraHostApi { + @NonNull + Long getCameraInfo(@NonNull Long identifier); + + /** The codec used by CameraHostApi. */ + static MessageCodec getCodec() { + return CameraHostApiCodec.INSTANCE; + } + + /** Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(BinaryMessenger binaryMessenger, CameraHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraHostApi.getCameraInfo", 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.getCameraInfo((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 CameraFlutterApiCodec extends StandardMessageCodec { public static final CameraFlutterApiCodec INSTANCE = new CameraFlutterApiCodec(); 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..19cc4db59fa4 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 @@ -114,7 +114,7 @@ public void onSurfaceRequested(SurfaceRequest request) { * Returns an error description for each {@link SurfaceRequest.Result} that represents an error * with providing a surface. */ - private String getProvideSurfaceErrorDescription(@Nullable int resultCode) { + private String getProvideSurfaceErrorDescription(@NonNull int resultCode) { switch (resultCode) { case SurfaceRequest.Result.RESULT_INVALID_SURFACE: return resultCode + ": Provided surface could not be used by the camera."; 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 7a84f798e6bd..4ba2e578fe13 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 @@ -166,6 +166,8 @@ class AndroidCameraCameraX extends CameraPlatform { // instance as bound but not paused. camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); + CameraInfo cameraInfo = await camera!.getCameraInfo(); + cameraInfo.startListeningForCameraClosing(); _previewIsPaused = false; return flutterSurfaceTextureId; @@ -238,7 +240,7 @@ class AndroidCameraCameraX extends CameraPlatform { /// The camera started to close. @override Stream onCameraClosing(int cameraId) { - return ProcessCameraProvider.cameraClosingStreamController.stream + return CameraInfo.cameraClosingStreamController.stream .map((bool isCameraClosing) { assert(isCameraClosing); return CameraClosingEvent(cameraId); @@ -330,6 +332,8 @@ class AndroidCameraCameraX extends CameraPlatform { camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!]); + CameraInfo cameraInfo = await camera!.getCameraInfo(); + cameraInfo.startListeningForCameraClosing(); } /// Unbinds [preview] instance to camera lifecycle controlled by the diff --git a/packages/camera/camera_android_camerax/lib/src/camera.dart b/packages/camera/camera_android_camerax/lib/src/camera.dart index 24ff30540b28..9f0e4f298f36 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera.dart @@ -5,6 +5,7 @@ import 'package:flutter/services.dart' show BinaryMessenger; import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camera_info.dart'; import 'camerax_library.g.dart'; import 'instance_manager.dart'; import 'java_object.dart'; @@ -17,8 +18,44 @@ class Camera extends JavaObject { /// Constructs a [Camera] that is not automatically attached to a native object. Camera.detached({super.binaryMessenger, super.instanceManager}) : super.detached() { + _api = CameraHostApiImpl(); AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } + + late final CameraHostApiImpl _api; + + Future getCameraInfo() async { + return _api.getCameraInfoFromInstance(this); + } +} + +/// Host API implementation of [Camera]. +class CameraHostApiImpl extends CameraHostApi { + /// Constructs a [CameraHostApiImpl]. + CameraHostApiImpl({this.binaryMessenger, InstanceManager? instanceManager}) + : super(binaryMessenger: binaryMessenger) { + 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; + + /// Gets the [CameraInfo] associated with the specified instance of [Camera]. + Future getCameraInfoFromInstance(Camera instance) async { + final int? identifier = instanceManager.getIdentifier(instance); + + assert(identifier != null, + 'No Camera has the identifer of that which was requested.'); + final int? cameraInfoId = await getCameraInfo(identifier!); + return instanceManager + .getInstanceWithWeakReference(cameraInfoId!)! as CameraInfo; + } } /// Flutter API implementation of [Camera]. diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index 8c2c7bcf0aec..c52cda48a25a 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.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:async'; + import 'package:flutter/services.dart' show BinaryMessenger; import 'android_camera_camerax_flutter_api_impls.dart'; @@ -24,11 +26,20 @@ class CameraInfo extends JavaObject { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } + /// Stream that emits an event when the related [Camera] instance starts + /// to close. + static final StreamController cameraClosingStreamController = + StreamController.broadcast(); + late final CameraInfoHostApiImpl _api; /// Gets sensor orientation degrees of camera. Future getSensorRotationDegrees() => _api.getSensorRotationDegreesFromInstance(this); + + /// Starts listening for the camera closing. + Future startListeningForCameraClosing() => + _api.startListeningForCameraClosingFromInstance(this); } /// Host API implementation of [CameraInfo]. @@ -50,6 +61,14 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { instanceManager.getIdentifier(instance)!); return sensorRotationDegrees; } + + Future startListeningForCameraClosingFromInstance( + CameraInfo instance) async { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No CameraInfo has the identifer of that which was requested.'); + startListeningForCameraClosing(identifier!); + } } /// Flutter API implementation of [CameraInfo]. @@ -81,4 +100,9 @@ class CameraInfoFlutterApiImpl extends CameraInfoFlutterApi { }, ); } + + @override + void onCameraClosing(int identifier) { + CameraInfo.cameraClosingStreamController.add(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 2ed53bb2ab5a..7efae9528420 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 @@ -175,6 +175,31 @@ class CameraInfoHostApi { return (replyMap['result'] as int?)!; } } + + Future startListeningForCameraClosing(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraInfoHostApi.startListeningForCameraClosing', + 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; + } + } } class _CameraInfoFlutterApiCodec extends StandardMessageCodec { @@ -185,6 +210,7 @@ abstract class CameraInfoFlutterApi { static const MessageCodec codec = _CameraInfoFlutterApiCodec(); void create(int identifier); + void onCameraClosing(int identifier); static void setup(CameraInfoFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { @@ -206,6 +232,25 @@ abstract class CameraInfoFlutterApi { }); } } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraInfoFlutterApi.onCameraClosing', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.onCameraClosing 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.onCameraClosing was null, expected non-null int.'); + api.onCameraClosing(arg_identifier!); + return; + }); + } + } } } @@ -536,6 +581,51 @@ abstract class ProcessCameraProviderFlutterApi { } } +class _CameraHostApiCodec extends StandardMessageCodec { + const _CameraHostApiCodec(); +} + +class CameraHostApi { + /// Constructor for [CameraHostApi]. 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. + CameraHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = _CameraHostApiCodec(); + + Future getCameraInfo(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', 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 int?)!; + } + } +} + class _CameraFlutterApiCodec extends StandardMessageCodec { const _CameraFlutterApiCodec(); } 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 2f7b0d0fda63..e4be966672df 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 @@ -30,11 +30,6 @@ class ProcessCameraProvider extends JavaObject { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - /// Stream that emits an event when [unbindAll] is called, which will initiate - /// the closing of the cameras controlled by this instance. - static final StreamController cameraClosingStreamController = - StreamController.broadcast(); - late final ProcessCameraProviderHostApiImpl _api; /// Gets an instance of [ProcessCameraProvider]. @@ -75,7 +70,6 @@ class ProcessCameraProvider extends JavaObject { /// Unbinds all previously bound [UseCase]s from the lifecycle of the camera /// that this tracks. void unbindAll() { - cameraClosingStreamController.add(true); _api.unbindAllFromInstances(this); } } diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 033c63ed9fd1..4d574a68317c 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -59,11 +59,15 @@ abstract class JavaObjectFlutterApi { @HostApi(dartHostTestHandler: 'TestCameraInfoHostApi') abstract class CameraInfoHostApi { int getSensorRotationDegrees(int identifier); + + void startListeningForCameraClosing(int identifier); } @FlutterApi() abstract class CameraInfoFlutterApi { void create(int identifier); + + void onCameraClosing(int identifier); } @HostApi(dartHostTestHandler: 'TestCameraSelectorHostApi') @@ -100,6 +104,11 @@ abstract class ProcessCameraProviderFlutterApi { void create(int identifier); } +@HostApi() +abstract class CameraHostApi { + int getCameraInfo(int identifier); +} + @FlutterApi() abstract class CameraFlutterApi { void create(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..2f5a29cb2b14 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 @@ -53,6 +53,7 @@ abstract class TestCameraInfoHostApi { static const MessageCodec codec = _TestCameraInfoHostApiCodec(); int getSensorRotationDegrees(int identifier); + void startListeningForCameraClosing(int identifier); static void setup(TestCameraInfoHostApi? api, {BinaryMessenger? binaryMessenger}) { { @@ -75,6 +76,26 @@ abstract class TestCameraInfoHostApi { }); } } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraInfoHostApi.startListeningForCameraClosing', + codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.startListeningForCameraClosing 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.startListeningForCameraClosing was null, expected non-null int.'); + api.startListeningForCameraClosing(arg_identifier!); + return {}; + }); + } + } } } From d3ed3e71ebdfe54d667df39f5acf1e976676508c Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 15 Mar 2023 10:33:49 -0700 Subject: [PATCH 21/71] Reimplement with live camera state --- .../camerax/CameraAndroidCameraxPlugin.java | 9 +- .../camerax/CameraInfoFlutterApiImpl.java | 4 - .../camerax/CameraInfoHostApiImpl.java | 60 +- .../camerax/GeneratedCameraXLibrary.java | 1421 ++++++++--------- .../LiveCameraStateFlutterApiImpl.java | 28 + .../camerax/LiveCameraStateHostApiImpl.java | 98 ++ .../lib/src/android_camera_camerax.dart | 13 +- .../lib/src/camera_info.dart | 20 +- .../lib/src/camerax_library.g.dart | 479 +++--- .../lib/src/live_camera_state.dart | 99 ++ .../pigeons/camerax_library.dart | 18 +- .../test/test_camerax_library.g.dart | 363 ++--- 12 files changed, 1275 insertions(+), 1337 deletions(-) create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateFlutterApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java create mode 100644 packages/camera/camera_android_camerax/lib/src/live_camera_state.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 ce1706ec4757..63eb5de33e55 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,7 +18,7 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, ActivityAware { private InstanceManager instanceManager; private FlutterPluginBinding pluginBinding; - private CameraInfoHostApiImpl cameraInfoHostApiImpl; + private LiveCameraStateHostApiImpl liveCameraStateHostApiImpl; private ProcessCameraProviderHostApiImpl processCameraProviderHostApi; private ImageCaptureHostApiImpl imageCaptureHostApi; public SystemServicesHostApiImpl systemServicesHostApi; @@ -40,8 +40,7 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex }); // Set up Host APIs. - cameraInfoHostApiImpl = new CameraInfoHostApiImpl(binaryMessenger, instanceManager); - GeneratedCameraXLibrary.CameraInfoHostApi.setup(binaryMessenger, cameraInfoHostApiImpl); + GeneratedCameraXLibrary.CameraInfoHostApi.setup(binaryMessenger, new CameraInfoHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.CameraSelectorHostApi.setup( binaryMessenger, new CameraSelectorHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.JavaObjectHostApi.setup( @@ -58,6 +57,8 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex GeneratedCameraXLibrary.ImageCaptureHostApi.setup(binaryMessenger, imageCaptureHostApi); GeneratedCameraXLibrary.CameraHostApi.setup( binaryMessenger, new CameraHostApiImpl(binaryMessenger, instanceManager)); + liveCameraStateHostApiImpl = new LiveCameraStateHostApiImpl(binaryMessenger, instanceManager); + GeneratedCameraXLibrary.LiveCameraStateHostApi.setup(binaryMessenger, liveCameraStateHostApiImpl); } @Override @@ -84,7 +85,7 @@ public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBi Activity activity = activityPluginBinding.getActivity(); processCameraProviderHostApi.setLifecycleOwner((LifecycleOwner) activity); - cameraInfoHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); + liveCameraStateHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); systemServicesHostApi.setActivity(activity); systemServicesHostApi.setPermissionsRegistry( activityPluginBinding::addRequestPermissionsResultListener); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java index 3b2850c512c7..c538e420cc7e 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java @@ -20,8 +20,4 @@ public CameraInfoFlutterApiImpl( void create(CameraInfo cameraInfo, Reply reply) { create(instanceManager.addHostCreatedInstance(cameraInfo), reply); } - - void sendCameraClosingEvent(Long identifier, Reply reply) { - onCameraClosing(identifier, reply); - } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index 057d6f73a99b..7ccbd8a6f6a7 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -18,7 +18,6 @@ public class CameraInfoHostApiImpl implements CameraInfoHostApi { private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; - private LifecycleOwner lifecycleOwner; @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); @@ -27,11 +26,6 @@ public CameraInfoHostApiImpl(BinaryMessenger binaryMessenger, InstanceManager in this.instanceManager = instanceManager; } - /** Sets {@link LifecycleOwner} used to observe the camera state if so requested. */ - public void setLifecycleOwner(LifecycleOwner lifecycleOwner) { - this.lifecycleOwner = lifecycleOwner; - } - @Override public Long getSensorRotationDegrees(@NonNull Long identifier) { CameraInfo cameraInfo = @@ -40,58 +34,14 @@ public Long getSensorRotationDegrees(@NonNull Long identifier) { } @Override - public void startListeningForCameraClosing(@NonNull Long identifier) { + public Long getLiveCameraState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); LiveData liveCameraState = cameraInfo.getCameraState(); - liveCameraState.observe(lifecycleOwner, createCameraStateObserver(identifier)); - } - - private Observer createCameraStateObserver(Long identifier) { - return new Observer() { - @Override - public void onChanged(@NonNull CameraState cameraState) { - if (cameraState.getType() == CameraState.Type.CLOSING) { - CameraInfoFlutterApiImpl cameraInfoFlutterApiImpl = - new CameraInfoFlutterApiImpl(binaryMessenger, instanceManager); - cameraInfoFlutterApiImpl.sendCameraClosingEvent(identifier, reply -> {}); - } - CameraState.StateError cameraStateError = cameraState.getError(); - if (cameraStateError != null) { - SystemServicesFlutterApiImpl systemServicesFlutterApi = - cameraXProxy.createSystemServicesFlutterApiImpl(binaryMessenger); - systemServicesFlutterApi.sendCameraError( - getCameraStateErrorDescription(cameraStateError.getCode()), reply -> {}); - } - } - }; - } - - private String getCameraStateErrorDescription(@NonNull int cameraStateErrorCode) { - // See CameraState errors: https://developer.android.com/reference/androidx/camera/core/CameraState#constants_1. - switch (cameraStateErrorCode) { - case CameraState.ERROR_CAMERA_IN_USE: - return cameraStateErrorCode - + ": The camera was already in use, possibly by a higher-priority camera client."; - case CameraState.ERROR_MAX_CAMERAS_IN_USE: - return cameraStateErrorCode - + ": The limit number of open cameras has been reached, and more cameras cannot be opened until other instances are closed."; - case CameraState.ERROR_OTHER_RECOVERABLE_ERROR: - return cameraStateErrorCode - + ": The camera device has encountered a recoverable error. CameraX will attempt to recover from the error."; - case CameraState.ERROR_STREAM_CONFIG: - return cameraStateErrorCode + ": Configuring the camera has failed."; - case CameraState.ERROR_CAMERA_DISABLED: - return cameraStateErrorCode - + ": The camera device could not be opened due to a device policy. Thia may be caused by a client from a background process attempting to open the camera."; - case CameraState.ERROR_CAMERA_FATAL_ERROR: - return cameraStateErrorCode - + ": The camera was closed due to a fatal error. This may require the Android device be shut down and restarted to restore camera function or may indicate a persistent camera hardware problem."; - case CameraState.ERROR_DO_NOT_DISTURB_MODE_ENABLED: - return cameraStateErrorCode - + ": The camera could not be opened because 'Do Not Disturb' mode is enabled. Please disable this mode, and try opening the camera again."; - default: - return "There was an undefined issue with the camera state."; + LiveCameraStateFlutterApiImpl liveCameraStateFlutterApiImpl = new LiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); + if (!instanceManager.containsInstance(liveCameraState)) { + liveCameraStateFlutterApiImpl.create(liveCameraState, reply -> {}); } + return instanceManager.getIdentifierForStrongReference(liveCameraState); } } 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 5f7d74ff72ee..2c9704bf88eb 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,348 +155,263 @@ 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); - - void startListeningForCameraClosing(@NonNull Long identifier); + @NonNull Long getSensorRotationDegrees(@NonNull Long identifier); + @NonNull Long getLiveCameraState(@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); } } { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.CameraInfoHostApi.startListeningForCameraClosing", - getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", 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.startListeningForCameraClosing( - (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."); + } + Long output = api.getLiveCameraState((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); - }); - } - - public void onCameraClosing(@NonNull Long identifierArg, Reply callback) { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.CameraInfoFlutterApi.onCameraClosing", - 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. */ @@ -543,259 +419,209 @@ 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 CameraHostApiCodec extends StandardMessageCodec { public static final CameraHostApiCodec INSTANCE = new CameraHostApiCodec(); - private CameraHostApiCodec() {} } - /** 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 CameraHostApi { - @NonNull - Long getCameraInfo(@NonNull Long identifier); + @NonNull Long getCameraInfo(@NonNull Long identifier); /** The codec used by CameraHostApi. */ static MessageCodec getCodec() { @@ -806,102 +632,86 @@ static MessageCodec getCodec() { static void setup(BinaryMessenger binaryMessenger, CameraHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraHostApi.getCameraInfo", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraHostApi.getCameraInfo", 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.getCameraInfo((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.getCameraInfo((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 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. */ @@ -909,205 +719,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() { @@ -1118,151 +886,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. */ @@ -1270,120 +1016,203 @@ 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 LiveCameraStateHostApiCodec extends StandardMessageCodec { + public static final LiveCameraStateHostApiCodec INSTANCE = new LiveCameraStateHostApiCodec(); + private LiveCameraStateHostApiCodec() {} + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + public interface LiveCameraStateHostApi { + void addObserver(@NonNull Long identifier); + void removeObservers(@NonNull Long identifier); + /** The codec used by LiveCameraStateHostApi. */ + static MessageCodec getCodec() { + return LiveCameraStateHostApiCodec.INSTANCE; + } + + /** Sets up an instance of `LiveCameraStateHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(BinaryMessenger binaryMessenger, LiveCameraStateHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.LiveCameraStateHostApi.addObserver", 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.addObserver((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.LiveCameraStateHostApi.removeObservers", 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.removeObservers((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 LiveCameraStateFlutterApiCodec extends StandardMessageCodec { + public static final LiveCameraStateFlutterApiCodec INSTANCE = new LiveCameraStateFlutterApiCodec(); + private LiveCameraStateFlutterApiCodec() {} + } + + /** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/ + public static class LiveCameraStateFlutterApi { + private final BinaryMessenger binaryMessenger; + public LiveCameraStateFlutterApi(BinaryMessenger argBinaryMessenger){ + this.binaryMessenger = argBinaryMessenger; + } + public interface Reply { + void reply(T reply); + } + static MessageCodec getCodec() { + return LiveCameraStateFlutterApiCodec.INSTANCE; + } + + public void create(@NonNull Long identifierArg, Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.LiveCameraStateFlutterApi.create", getCodec()); + channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { + callback.reply(null); + }); + } + public void onCameraClosing(Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing", getCodec()); + channel.send(null, 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/LiveCameraStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateFlutterApiImpl.java new file mode 100644 index 000000000000..b2333d049629 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateFlutterApiImpl.java @@ -0,0 +1,28 @@ +// 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.camera.core.CameraState; +import androidx.lifecycle.LiveData; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveCameraStateFlutterApi; + +public class LiveCameraStateFlutterApiImpl extends LiveCameraStateFlutterApi { + public LiveCameraStateFlutterApiImpl( + BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + super(binaryMessenger); + this.instanceManager = instanceManager; + } + + private final InstanceManager instanceManager; + + void create(LiveData liveCameraState, Reply reply) { + create(instanceManager.addHostCreatedInstance(liveCameraState), reply); + } + + void sendCameraClosingEvent(Reply reply) { + onCameraClosing(reply); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java new file mode 100644 index 000000000000..4678f6f67faf --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.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. + +package io.flutter.plugins.camerax; + +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; +import androidx.camera.core.CameraInfo; +import androidx.camera.core.CameraState; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.Observer; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveCameraStateHostApi; +import java.util.Objects; + +public class LiveCameraStateHostApiImpl implements LiveCameraStateHostApi { + private final BinaryMessenger binaryMessenger; + private final InstanceManager instanceManager; + private LifecycleOwner lifecycleOwner; + + @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); + + public LiveCameraStateHostApiImpl(BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + } + + /** Sets {@link LifecycleOwner} used to observe the camera state if so requested. */ + public void setLifecycleOwner(LifecycleOwner lifecycleOwner) { + this.lifecycleOwner = lifecycleOwner; + } + + @Override + @SuppressWarnings("unchecked") + public void addObserver(@NonNull Long identifier) { + LiveData liveCameraState = + (LiveData) Objects.requireNonNull(instanceManager.getInstance(identifier)); + liveCameraState.observe(lifecycleOwner, createCameraStateObserver()); + } + + private Observer createCameraStateObserver() { + return new Observer() { + @Override + public void onChanged(@NonNull CameraState cameraState) { + if (cameraState.getType() == CameraState.Type.CLOSING) { + LiveCameraStateFlutterApiImpl liveCameraStateFlutterApiImpl = + new LiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); + liveCameraStateFlutterApiImpl.sendCameraClosingEvent(reply -> {}); + } + CameraState.StateError cameraStateError = cameraState.getError(); + if (cameraStateError != null) { + SystemServicesFlutterApiImpl systemServicesFlutterApi = + cameraXProxy.createSystemServicesFlutterApiImpl(binaryMessenger); + systemServicesFlutterApi.sendCameraError( + getCameraStateErrorDescription(cameraStateError.getCode()), reply -> {}); + } + } + }; + } + + private String getCameraStateErrorDescription(@NonNull int cameraStateErrorCode) { + // See CameraState errors: https://developer.android.com/reference/androidx/camera/core/CameraState#constants_1. + switch (cameraStateErrorCode) { + case CameraState.ERROR_CAMERA_IN_USE: + return cameraStateErrorCode + + ": The camera was already in use, possibly by a higher-priority camera client."; + case CameraState.ERROR_MAX_CAMERAS_IN_USE: + return cameraStateErrorCode + + ": The limit number of open cameras has been reached, and more cameras cannot be opened until other instances are closed."; + case CameraState.ERROR_OTHER_RECOVERABLE_ERROR: + return cameraStateErrorCode + + ": The camera device has encountered a recoverable error. CameraX will attempt to recover from the error."; + case CameraState.ERROR_STREAM_CONFIG: + return cameraStateErrorCode + ": Configuring the camera has failed."; + case CameraState.ERROR_CAMERA_DISABLED: + return cameraStateErrorCode + + ": The camera device could not be opened due to a device policy. Thia may be caused by a client from a background process attempting to open the camera."; + case CameraState.ERROR_CAMERA_FATAL_ERROR: + return cameraStateErrorCode + + ": The camera was closed due to a fatal error. This may require the Android device be shut down and restarted to restore camera function or may indicate a persistent camera hardware problem."; + case CameraState.ERROR_DO_NOT_DISTURB_MODE_ENABLED: + return cameraStateErrorCode + + ": The camera could not be opened because 'Do Not Disturb' mode is enabled. Please disable this mode, and try opening the camera again."; + default: + return "There was an undefined issue with the camera state."; + } + } + + @Override + @SuppressWarnings("unchecked") + public void removeObservers(@NonNull Long identifier) { + LiveData liveCameraState = + (LiveData) Objects.requireNonNull(instanceManager.getInstance(identifier)); + liveCameraState.removeObservers(lifecycleOwner); + } +} \ No newline at end of file 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 4ba2e578fe13..e10bae8f15a3 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 @@ -13,6 +13,7 @@ import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.g.dart'; import 'image_capture.dart'; +import 'live_camera_state.dart'; import 'preview.dart'; import 'process_camera_provider.dart'; import 'surface.dart'; @@ -35,6 +36,8 @@ class AndroidCameraCameraX extends CameraPlatform { @visibleForTesting Camera? camera; + LiveCameraState? liveCameraState; + /// The [Preview] instance that can be configured to present a live camera preview. @visibleForTesting Preview? preview; @@ -167,7 +170,9 @@ class AndroidCameraCameraX extends CameraPlatform { camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); CameraInfo cameraInfo = await camera!.getCameraInfo(); - cameraInfo.startListeningForCameraClosing(); + liveCameraState?.removeObservers(); + liveCameraState = await cameraInfo.getLiveCameraState(); + liveCameraState!.addObserver(); _previewIsPaused = false; return flutterSurfaceTextureId; @@ -240,7 +245,7 @@ class AndroidCameraCameraX extends CameraPlatform { /// The camera started to close. @override Stream onCameraClosing(int cameraId) { - return CameraInfo.cameraClosingStreamController.stream + return LiveCameraState.cameraClosingStreamController.stream .map((bool isCameraClosing) { assert(isCameraClosing); return CameraClosingEvent(cameraId); @@ -333,7 +338,9 @@ class AndroidCameraCameraX extends CameraPlatform { camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!]); CameraInfo cameraInfo = await camera!.getCameraInfo(); - cameraInfo.startListeningForCameraClosing(); + liveCameraState?.removeObservers(); + liveCameraState = await cameraInfo.getLiveCameraState(); + liveCameraState!.addObserver(); } /// Unbinds [preview] instance to camera lifecycle controlled by the diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index c52cda48a25a..a99fedda8440 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -10,6 +10,7 @@ import 'android_camera_camerax_flutter_api_impls.dart'; import 'camerax_library.g.dart'; import 'instance_manager.dart'; import 'java_object.dart'; +import 'live_camera_state.dart'; /// Represents the metadata of a camera. /// @@ -26,11 +27,6 @@ class CameraInfo extends JavaObject { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - /// Stream that emits an event when the related [Camera] instance starts - /// to close. - static final StreamController cameraClosingStreamController = - StreamController.broadcast(); - late final CameraInfoHostApiImpl _api; /// Gets sensor orientation degrees of camera. @@ -38,8 +34,8 @@ class CameraInfo extends JavaObject { _api.getSensorRotationDegreesFromInstance(this); /// Starts listening for the camera closing. - Future startListeningForCameraClosing() => - _api.startListeningForCameraClosingFromInstance(this); + Future getLiveCameraState() => + _api.getLiveCameraStateFromInstance(this); } /// Host API implementation of [CameraInfo]. @@ -62,12 +58,13 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { return sensorRotationDegrees; } - Future startListeningForCameraClosingFromInstance( + Future getLiveCameraStateFromInstance( CameraInfo instance) async { final int? identifier = instanceManager.getIdentifier(instance); assert(identifier != null, 'No CameraInfo has the identifer of that which was requested.'); - startListeningForCameraClosing(identifier!); + int? liveCameraStateId = await getLiveCameraState(identifier!); + return instanceManager.getInstanceWithWeakReference(liveCameraStateId!)!; } } @@ -100,9 +97,4 @@ class CameraInfoFlutterApiImpl extends CameraInfoFlutterApi { }, ); } - - @override - void onCameraClosing(int identifier) { - CameraInfo.cameraClosingStreamController.add(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 7efae9528420..ae3e663efd24 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?, @@ -176,11 +165,9 @@ class CameraInfoHostApi { } } - Future startListeningForCameraClosing(int arg_identifier) async { + Future getLiveCameraState(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.startListeningForCameraClosing', - codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -189,15 +176,19 @@ 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?, 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; + return (replyMap['result'] as int?)!; } } } @@ -205,52 +196,27 @@ class CameraInfoHostApi { class _CameraInfoFlutterApiCodec extends StandardMessageCodec { const _CameraInfoFlutterApiCodec(); } - abstract class CameraInfoFlutterApi { static const MessageCodec codec = _CameraInfoFlutterApiCodec(); void create(int identifier); - void onCameraClosing(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; }); } } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoFlutterApi.onCameraClosing', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMessageHandler(null); - } else { - channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.onCameraClosing 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.onCameraClosing was null, expected non-null int.'); - api.onCameraClosing(arg_identifier!); - return; - }); - } - } } } @@ -262,8 +228,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; @@ -271,19 +236,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?, @@ -294,22 +256,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?, @@ -329,27 +287,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; @@ -367,18 +320,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) { @@ -387,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?, @@ -406,9 +355,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) { @@ -417,8 +364,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?, @@ -434,25 +380,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?, @@ -470,19 +409,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?, @@ -500,19 +436,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?, @@ -525,8 +458,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) { @@ -535,8 +467,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?, @@ -551,28 +482,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; }); @@ -589,8 +514,7 @@ class CameraHostApi { /// Constructor for [CameraHostApi]. 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. - CameraHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + CameraHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -598,8 +522,7 @@ class CameraHostApi { Future getCameraInfo(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', codec, - binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -608,8 +531,7 @@ class CameraHostApi { 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?, @@ -629,7 +551,6 @@ class CameraHostApi { class _CameraFlutterApiCodec extends StandardMessageCodec { const _CameraFlutterApiCodec(); } - abstract class CameraFlutterApi { static const MessageCodec codec = _CameraFlutterApiCodec(); @@ -637,18 +558,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; }); @@ -664,19 +582,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); + } } } @@ -685,29 +604,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?, @@ -718,23 +632,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?, @@ -747,9 +656,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) { @@ -758,8 +665,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?, @@ -774,29 +680,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; }); @@ -804,18 +704,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; }); @@ -831,25 +728,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); + } } } @@ -858,29 +757,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?, @@ -893,8 +787,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) { @@ -903,8 +796,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?, @@ -922,8 +814,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) { @@ -932,8 +823,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?, @@ -946,8 +836,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) { @@ -956,8 +845,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?, @@ -981,19 +869,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); + } } } @@ -1002,29 +891,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?, @@ -1037,19 +921,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?, @@ -1062,8 +943,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) { @@ -1072,8 +952,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?, @@ -1089,3 +968,103 @@ class ImageCaptureHostApi { } } } + +class _LiveCameraStateHostApiCodec extends StandardMessageCodec { + const _LiveCameraStateHostApiCodec(); +} + +class LiveCameraStateHostApi { + /// Constructor for [LiveCameraStateHostApi]. 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. + LiveCameraStateHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = _LiveCameraStateHostApiCodec(); + + Future addObserver(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', 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; + } + } + + Future removeObservers(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', 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; + } + } +} + +class _LiveCameraStateFlutterApiCodec extends StandardMessageCodec { + const _LiveCameraStateFlutterApiCodec(); +} +abstract class LiveCameraStateFlutterApi { + static const MessageCodec codec = _LiveCameraStateFlutterApiCodec(); + + void create(int identifier); + void onCameraClosing(); + static void setup(LiveCameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveCameraStateFlutterApi.create', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.LiveCameraStateFlutterApi.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.LiveCameraStateFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!); + return; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + // ignore message + api.onCameraClosing(); + return; + }); + } + } + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart b/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart new file mode 100644 index 000000000000..29522e9af98e --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart @@ -0,0 +1,99 @@ +// 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:flutter/services.dart'; + +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camerax_library.g.dart'; +import 'instance_manager.dart'; +import 'java_object.dart'; + +class LiveCameraState extends JavaObject { + /// Creates a detached [LiveCameraState]. + LiveCameraState.detached( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + }) : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = LiveCameraStateHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + } + + /// Stream that emits an event when the related [Camera] instance starts + /// to close. + static final StreamController cameraClosingStreamController = + StreamController.broadcast(); + + late final LiveCameraStateHostApiImpl _api; + + Future addObserver() => _api.addObserverFromInstance(this); + + Future removeObservers() => _api.removeObserversFromInstance(this); +} + +/// Host API implementation of [LiveCameraState]. +class LiveCameraStateHostApiImpl extends LiveCameraStateHostApi { + /// Constructs a [LiveCameraStateHostApiImpl]. + LiveCameraStateHostApiImpl( + {super.binaryMessenger, InstanceManager? instanceManager}) { + this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + } + + /// Maintains instances stored to communicate with native language objects. + late final InstanceManager instanceManager; + + Future addObserverFromInstance(LiveCameraState instance) async { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No LiveCameraState has the identifer of that which was requested.'); + addObserver(identifier!); + } + + Future removeObserversFromInstance(LiveCameraState instance) async { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No LiveCameraState has the identifer of that which was requested.'); + removeObservers(identifier!); + } +} + +/// Flutter API implementation of [LiveCameraState]. +class LiveCameraStateFlutterApiImpl extends LiveCameraStateFlutterApi { + /// Constructs a [LiveCameraStateFlutterApiImpl]. + LiveCameraStateFlutterApiImpl({ + 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( + LiveCameraState.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager), + identifier, + onCopy: (LiveCameraState original) { + return LiveCameraState.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + }, + ); + } + + @override + void onCameraClosing() { + LiveCameraState.cameraClosingStreamController.add(true); + } +} diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 4d574a68317c..94a8aa458e84 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -60,14 +60,12 @@ abstract class JavaObjectFlutterApi { abstract class CameraInfoHostApi { int getSensorRotationDegrees(int identifier); - void startListeningForCameraClosing(int identifier); + int getLiveCameraState(int identifier); } @FlutterApi() abstract class CameraInfoFlutterApi { void create(int identifier); - - void onCameraClosing(int identifier); } @HostApi(dartHostTestHandler: 'TestCameraSelectorHostApi') @@ -152,3 +150,17 @@ abstract class ImageCaptureHostApi { @async String takePicture(int identifier); } + +@HostApi(dartHostTestHandler: 'TestLiveCameraStateHostApi') +abstract class LiveCameraStateHostApi { + void addObserver(int identifier); + + void removeObservers(int identifier); +} + +@FlutterApi() +abstract class LiveCameraStateFlutterApi { + void create(int identifier); + + void onCameraClosing(); +} 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 2f5a29cb2b14..77953e467ebb 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,29 +43,23 @@ abstract class TestJavaObjectHostApi { class _TestCameraInfoHostApiCodec extends StandardMessageCodec { const _TestCameraInfoHostApiCodec(); } - abstract class TestCameraInfoHostApi { static const MessageCodec codec = _TestCameraInfoHostApiCodec(); int getSensorRotationDegrees(int identifier); - void startListeningForCameraClosing(int identifier); - static void setup(TestCameraInfoHostApi? api, - {BinaryMessenger? binaryMessenger}) { + int getLiveCameraState(int identifier); + 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}; }); @@ -78,21 +67,17 @@ abstract class TestCameraInfoHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.startListeningForCameraClosing', - codec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.startListeningForCameraClosing was null.'); + assert(message != null, 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState 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.startListeningForCameraClosing was null, expected non-null int.'); - api.startListeningForCameraClosing(arg_identifier!); - return {}; + assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState was null, expected non-null int.'); + final int output = api.getLiveCameraState(arg_identifier!); + return {'result': output}; }); } } @@ -102,28 +87,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 {}; @@ -132,24 +112,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}; }); } @@ -160,24 +134,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 { @@ -190,94 +159,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 {}; }); @@ -285,18 +231,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 {}; }); @@ -312,83 +255,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 { @@ -409,29 +336,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(); @@ -439,25 +367,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 {}; }); @@ -465,18 +388,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}; }); @@ -484,9 +404,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 { @@ -499,18 +417,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}; }); @@ -526,48 +441,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 {}; }); @@ -575,21 +485,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 {}; }); @@ -597,18 +503,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}; }); @@ -616,3 +519,47 @@ abstract class TestImageCaptureHostApi { } } } + +class _TestLiveCameraStateHostApiCodec extends StandardMessageCodec { + const _TestLiveCameraStateHostApiCodec(); +} +abstract class TestLiveCameraStateHostApi { + static const MessageCodec codec = _TestLiveCameraStateHostApiCodec(); + + void addObserver(int identifier); + void removeObservers(int identifier); + static void setup(TestLiveCameraStateHostApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.addObserver 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.LiveCameraStateHostApi.addObserver was null, expected non-null int.'); + api.addObserver(arg_identifier!); + return {}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers 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.LiveCameraStateHostApi.removeObservers was null, expected non-null int.'); + api.removeObservers(arg_identifier!); + return {}; + }); + } + } + } +} From d1c684fb67c03425c8f4797a1daa764cb6d49918 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 22 Mar 2023 09:24:21 -0700 Subject: [PATCH 22/71] Start adding tests --- .../flutter/plugins/camerax/CameraXProxy.java | 4 + .../camerax/ImageCaptureHostApiImpl.java | 1 - .../camerax/LiveCameraStateHostApiImpl.java | 4 +- .../plugins/camerax/CameraInfoTest.java | 22 +- .../plugins/camerax/ImageCaptureTest.java | 2 - .../plugins/camerax/LiveCameraStateTest.java | 125 ++++++++ ...roid_camera_camerax_flutter_api_impls.dart | 8 + .../test/android_camera_camerax_test.dart | 57 +++- .../android_camera_camerax_test.mocks.dart | 292 ++++++++++++------ .../test/camera_info_test.mocks.dart | 8 + .../test/live_camera_state_test.dart | 92 ++++++ .../test/live_camera_state_test.mocks.dart | 46 +++ .../test/process_camera_provider_test.dart | 7 +- 13 files changed, 549 insertions(+), 119 deletions(-) create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java create mode 100644 packages/camera/camera_android_camerax/test/live_camera_state_test.dart create mode 100644 packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart 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..df6593dd67c0 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 @@ -61,4 +61,8 @@ public ImageCapture.Builder createImageCaptureBuilder() { public ImageCapture.OutputFileOptions createImageCaptureOutputFileOptions(@NonNull File file) { return new ImageCapture.OutputFileOptions.Builder(file).build(); } + + public LiveCameraStateFlutterApiImpl createLiveCameraStateFlutterApiImpl(@NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + return new LiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); + } } 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..0865e6bdaa62 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 @@ -23,7 +23,6 @@ public class ImageCaptureHostApiImpl implements ImageCaptureHostApi { private final InstanceManager instanceManager; private Context context; - private SystemServicesFlutterApiImpl systemServicesFlutterApiImpl; public static final String TEMPORARY_FILE_NAME = "CAP"; public static final String JPG_FILE_TYPE = ".jpg"; diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java index 4678f6f67faf..2215d673e68c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java @@ -33,8 +33,8 @@ public void setLifecycleOwner(LifecycleOwner lifecycleOwner) { } @Override - @SuppressWarnings("unchecked") public void addObserver(@NonNull Long identifier) { + @SuppressWarnings("unchecked") LiveData liveCameraState = (LiveData) Objects.requireNonNull(instanceManager.getInstance(identifier)); liveCameraState.observe(lifecycleOwner, createCameraStateObserver()); @@ -46,7 +46,7 @@ private Observer createCameraStateObserver() { public void onChanged(@NonNull CameraState cameraState) { if (cameraState.getType() == CameraState.Type.CLOSING) { LiveCameraStateFlutterApiImpl liveCameraStateFlutterApiImpl = - new LiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); + cameraXProxy.createLiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); liveCameraStateFlutterApiImpl.sendCameraClosingEvent(reply -> {}); } CameraState.StateError cameraStateError = cameraState.getError(); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java index 663d0e2f26d6..734bbd0e0042 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java @@ -12,6 +12,8 @@ import static org.mockito.Mockito.when; import androidx.camera.core.CameraInfo; +import androidx.camera.core.CameraState; +import androidx.lifecycle.LiveData; import io.flutter.plugin.common.BinaryMessenger; import java.util.Objects; import org.junit.After; @@ -41,8 +43,8 @@ public void tearDown() { } @Test - public void getSensorRotationDegreesTest() { - final CameraInfoHostApiImpl cameraInfoHostApi = new CameraInfoHostApiImpl(testInstanceManager); + public void getSensorRotationDegrees_MakesCallToRetrieveSensorRotationDegrees() { + final CameraInfoHostApiImpl cameraInfoHostApi = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); testInstanceManager.addDartCreatedInstance(mockCameraInfo, 1); @@ -53,7 +55,21 @@ public void getSensorRotationDegreesTest() { } @Test - public void flutterApiCreateTest() { + public void getLiveCameraState_MakesCallToRetrieveLiveCameraState() { + final CameraInfoHostApiImpl cameraInfoHostApiImpl = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); + final Long mockCameraInfoIdentifier = 27L; + final LiveData mockLiveCameraState = mock(LiveData.class); + + testInstanceManager.addDartCreatedInstance(mockCameraInfo, mockCameraInfoIdentifier); + + when(mockCameraInfo.getCameraState()).thenReturn(mockLiveCameraState); + + final Long liveCameraStateIdentifier = cameraInfoHostApiImpl.getLiveCameraState(mockCameraInfoIdentifier); + assertEquals(liveCameraStateIdentifier, testInstanceManager.getIdentifierForStrongReference(mockLiveCameraState)); + } + + @Test + public void flutterApi_MakesCallToDartToCreateInstance() { final CameraInfoFlutterApiImpl spyFlutterApi = spy(new CameraInfoFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); 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 01f16f0b1120..d7fe0cfdb22a 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 @@ -187,8 +187,6 @@ public void takePicture_usesExpectedOnImageSavedCallback() { 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)) diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java new file mode 100644 index 000000000000..577707b41cb6 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java @@ -0,0 +1,125 @@ +// 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.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +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 androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; +import androidx.camera.core.CameraInfo; +import androidx.camera.core.CameraState; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.Observer; +import androidx.camera.core.CameraInfo; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.CameraXProxy; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveCameraStateFlutterApi.Reply; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.SystemServicesFlutterApi.Reply; +import io.flutter.plugins.camerax.LiveCameraStateFlutterApiImpl; +import io.flutter.plugins.camerax.LiveCameraStateHostApiImpl; +import io.flutter.plugins.camerax.InstanceManager; +import java.util.Objects; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.ArgumentMatchers; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class LiveCameraStateTest { + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public LiveData liveCameraState; + @Mock public BinaryMessenger mockBinaryMessenger; + + InstanceManager testInstanceManager; + + @Before + public void setUp() { + testInstanceManager = InstanceManager.open(identifier -> {}); + } + + @After + public void tearDown() { + testInstanceManager.close(); + } + + @Test + public void addObserver_addsExpectedCameraStateObesrveToLiveCameraState() { + final LiveCameraStateHostApiImpl liveCameraStateHostApiImpl = new LiveCameraStateHostApiImpl(mockBinaryMessenger, testInstanceManager); + final LiveCameraStateFlutterApiImpl mockLiveCameraStateFlutterApiImpl = mock(LiveCameraStateFlutterApiImpl.class); + final Long liveCameraStateIdentifier = 94L; + final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); + final CameraXProxy mockCameraXProxy = mock(CameraXProxy.class); + final ArgumentCaptor> cameraStateObserverCaptor = ArgumentCaptor.forClass(Observer.class); + + testInstanceManager.addDartCreatedInstance(liveCameraState, liveCameraStateIdentifier); + liveCameraStateHostApiImpl.setLifecycleOwner(mockLifecycleOwner); + liveCameraStateHostApiImpl.cameraXProxy = mockCameraXProxy; + + liveCameraStateHostApiImpl.addObserver(liveCameraStateIdentifier); + + verify(liveCameraState).observe(eq(mockLifecycleOwner), cameraStateObserverCaptor.capture()); + + // Test camera state observer handles onChanged callback as expected: + Observer cameraStateObserver = cameraStateObserverCaptor.getValue(); + + // Test case where camera is closing. + when(mockCameraXProxy.createLiveCameraStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)).thenReturn(mockLiveCameraStateFlutterApiImpl); + cameraStateObserver.onChanged(CameraState.create(CameraState.Type.CLOSING)); + verify(mockLiveCameraStateFlutterApiImpl).sendCameraClosingEvent(ArgumentMatchers.>any()); + + // Test case where there is a camera state error. + when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger)); + cameraStateObserver.onChanged(CameraState.create(CameraState.Type.OPEN, CameraState.StateError.create(CameraState.ERROR_CAMERA_IN_USE))); + verify(mockBinaryMessenger).sendCameraError(anyString(), ArgumentMatchers.>any()); + } + + @Test + public void removeObservers_removesObserversFromLiveCameraState() { + final LiveCameraStateHostApiImpl liveCameraStateHostApiImpl = new LiveCameraStateHostApiImpl(mockBinaryMessenger, testInstanceManager); + final Long liveCameraStateIdentifier = 96L; + final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); + + testInstanceManager.addDartCreatedInstance(liveCameraState, liveCameraStateIdentifier); + liveCameraStateHostApiImpl.setLifecycleOwner(mockLifecycleOwner); + + liveCameraStateHostApiImpl.removeObservers(liveCameraStateIdentifier); + + verify(liveCameraState).removeObservers(mockLifecycleOwner); + } + + @Test + public void flutterApiCreate_makesCallToCreateInstanceInDart() { + final LiveCameraStateFlutterApiImpl spyLiveCameraStateFlutterApiImpl = + spy(new LiveCameraStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); + spyLiveCameraStateFlutterApiImpl.create(liveCameraState, reply -> {}); + + final long liveCameraStateIdentifier = + Objects.requireNonNull( + testInstanceManager.getIdentifierForStrongReference(liveCameraState)); + verify(spyLiveCameraStateFlutterApiImpl).create(eq(liveCameraStateIdentifier), any()); + } + + @Test + public void flutterApiSendCameraClosingEvent_makesCallToDartCallbackMethod() { + final LiveCameraStateFlutterApiImpl spyLiveCameraStateFlutterApiImpl = + spy(new LiveCameraStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); + spyLiveCameraStateFlutterApiImpl.onCameraClosing(reply -> {}); + verify(spyLiveCameraStateFlutterApiImpl).onCameraClosing(any()); + } +} \ No newline at end of file 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..71de48813e27 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,6 +7,7 @@ import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.g.dart'; import 'java_object.dart'; +import 'live_camera_state.dart'; import 'process_camera_provider.dart'; import 'system_services.dart'; @@ -20,6 +21,7 @@ class AndroidCameraXCameraFlutterApis { CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi, ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi, SystemServicesFlutterApiImpl? systemServicesFlutterApi, + LiveCameraStateFlutterApiImpl? liveCameraStateFlutterApiImpl, }) { this.javaObjectFlutterApi = javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); @@ -32,6 +34,8 @@ class AndroidCameraXCameraFlutterApis { this.cameraFlutterApi = cameraFlutterApi ?? CameraFlutterApiImpl(); this.systemServicesFlutterApi = systemServicesFlutterApi ?? SystemServicesFlutterApiImpl(); + this.liveCameraStateFlutterApiImpl = + liveCameraStateFlutterApiImpl ?? LiveCameraStateFlutterApiImpl(); } static bool _haveBeenSetUp = false; @@ -61,6 +65,9 @@ class AndroidCameraXCameraFlutterApis { /// Flutter Api for [SystemServices]. late final SystemServicesFlutterApiImpl systemServicesFlutterApi; + /// Flutter Api for [LiveCameraState]. + late final LiveCameraStateFlutterApiImpl liveCameraStateFlutterApiImpl; + /// 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); + LiveCameraStateFlutterApi.setup(liveCameraStateFlutterApiImpl); _haveBeenSetUp = true; } } 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 18850e410a25..a85d4ca1af61 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 @@ -11,6 +11,7 @@ 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/live_camera_state.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'; @@ -29,6 +30,7 @@ import 'android_camera_camerax_test.mocks.dart'; MockSpec(), MockSpec(), MockSpec(), + MockSpec(), MockSpec(), MockSpec(), ]) @@ -110,9 +112,16 @@ void main() { const ResolutionPreset testResolutionPreset = ResolutionPreset.veryHigh; const bool enableAudio = true; const int testSurfaceTextureId = 6; + final MockCamera testCamera = MockCamera(); + final MockCameraInfo testCameraInfo = MockCameraInfo(); when(camera.testPreview.setSurfaceProvider()) .thenAnswer((_) async => testSurfaceTextureId); + when(camera.processCameraProvider!.bindToLifecycle(camera.mockBackCameraSelector, + [camera.testPreview, camera.testImageCapture])) + .thenAnswer((_) async => testCamera); + when(testCamera.getCameraInfo()).thenAnswer((_) async => testCameraInfo); + when(testCameraInfo.getLiveCameraState()).thenAnswer((_) async => MockLiveCameraState()); expect( await camera.createCamera(testCameraDescription, testResolutionPreset, @@ -149,6 +158,14 @@ void main() { sensorOrientation: testSensorOrientation); const ResolutionPreset testResolutionPreset = ResolutionPreset.veryHigh; const bool enableAudio = true; + final MockCamera testCamera = MockCamera(); + final MockCameraInfo testCameraInfo = MockCameraInfo(); + + when(camera.processCameraProvider!.bindToLifecycle(camera.mockBackCameraSelector, + [camera.testPreview, camera.testImageCapture])) + .thenAnswer((_) async => testCamera); + when(testCamera.getCameraInfo()).thenAnswer((_) async => testCameraInfo); + when(testCameraInfo.getLiveCameraState()).thenAnswer((_) async => MockLiveCameraState()); await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); @@ -181,6 +198,7 @@ void main() { final Camera mockCamera = MockCamera(); final ResolutionInfo testResolutionInfo = ResolutionInfo(width: resolutionWidth, height: resolutionHeight); + final CameraInfo testCameraInfo = MockCameraInfo(); // TODO(camsim99): Modify this when camera configuration is supported and // defualt values no longer being used. @@ -199,12 +217,17 @@ void main() { // Call createCamera. when(camera.testPreview.setSurfaceProvider()) .thenAnswer((_) async => cameraId); - await camera.createCamera(testCameraDescription, testResolutionPreset, - enableAudio: enableAudio); - when(camera.processCameraProvider!.bindToLifecycle(camera.cameraSelector!, + + when(camera.processCameraProvider!.bindToLifecycle(camera.mockBackCameraSelector!, [camera.testPreview, camera.testImageCapture])) .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()).thenAnswer((_) async => testCameraInfo); + when(testCameraInfo.getLiveCameraState()).thenAnswer((_) async => MockLiveCameraState()); + + await camera.createCamera(testCameraDescription, testResolutionPreset, + enableAudio: enableAudio); + when(camera.testPreview.getResolutionInfo()) .thenAnswer((_) async => testResolutionInfo); @@ -250,7 +273,7 @@ void main() { }); test( - 'onCameraClosing stream emits camera closing event when detected by ProcessCameraProvider', + 'onCameraClosing stream emits camera closing event when detected by LiveCameraState', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); const int cameraId = 99; @@ -259,7 +282,7 @@ void main() { final StreamQueue streamQueue = StreamQueue(eventStream); - ProcessCameraProvider.cameraClosingStreamController.add(true); + LiveCameraState.cameraClosingStreamController.add(true); expect(await streamQueue.next, equals(const CameraClosingEvent(cameraId))); await streamQueue.cancel(); @@ -347,11 +370,19 @@ void main() { test('resumePreview binds preview to lifecycle if not already bound', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockCamera mockCamera = MockCamera(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); camera.processCameraProvider = MockProcessCameraProvider(); camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); + when(camera.processCameraProvider!.bindToLifecycle(camera.cameraSelector!, + [camera.preview!])) + .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); + when(mockCameraInfo.getLiveCameraState()).thenAnswer((_) async => MockLiveCameraState()); + await camera.resumePreview(78); verify(camera.processCameraProvider! @@ -362,12 +393,20 @@ void main() { 'buildPreview returns a FutureBuilder that does not return a Texture until the preview is bound to the lifecycle', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockCamera mockCamera = MockCamera(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); const int textureId = 75; camera.processCameraProvider = MockProcessCameraProvider(); camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); + when(camera.processCameraProvider!.bindToLifecycle(camera.cameraSelector!, + [camera.preview!])) + .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); + when(mockCameraInfo.getLiveCameraState()).thenAnswer((_) async => MockLiveCameraState()); + final FutureBuilder previewWidget = camera.buildPreview(textureId) as FutureBuilder; @@ -389,12 +428,20 @@ void main() { 'buildPreview returns a FutureBuilder that returns a Texture once the preview is bound to the lifecycle', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockCamera mockCamera = MockCamera(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); const int textureId = 75; camera.processCameraProvider = MockProcessCameraProvider(); camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); + when(camera.processCameraProvider!.bindToLifecycle(camera.cameraSelector!, + [camera.preview!])) + .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); + when(mockCameraInfo.getLiveCameraState()).thenAnswer((_) async => MockLiveCameraState()); + final FutureBuilder previewWidget = camera.buildPreview(textureId) as FutureBuilder; 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..e7c9d9a91974 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,21 +3,22 @@ // 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 _i5; +import 'package:camera_android_camerax/src/camera_info.dart' as _i2; +import 'package:camera_android_camerax/src/camera_selector.dart' as _i10; +import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i4; +import 'package:camera_android_camerax/src/image_capture.dart' as _i11; +import 'package:camera_android_camerax/src/live_camera_state.dart' as _i3; +import 'package:camera_android_camerax/src/preview.dart' as _i12; 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/src/widgets/framework.dart' as _i4; -import 'package:flutter/src/widgets/notification_listener.dart' as _i14; + as _i13; +import 'package:camera_android_camerax/src/use_case.dart' as _i14; +import 'package:flutter/foundation.dart' as _i8; +import 'package:flutter/services.dart' as _i7; +import 'package:flutter/src/widgets/framework.dart' as _i6; +import 'package:flutter/src/widgets/notification_listener.dart' as _i15; import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: type=lint @@ -31,9 +32,8 @@ 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 _FakeCameraInfo_0 extends _i1.SmartFake implements _i2.CameraInfo { + _FakeCameraInfo_0( Object parent, Invocation parentInvocation, ) : super( @@ -42,8 +42,9 @@ class _FakeResolutionInfo_0 extends _i1.SmartFake ); } -class _FakeCamera_1 extends _i1.SmartFake implements _i3.Camera { - _FakeCamera_1( +class _FakeLiveCameraState_1 extends _i1.SmartFake + implements _i3.LiveCameraState { + _FakeLiveCameraState_1( Object parent, Invocation parentInvocation, ) : super( @@ -52,8 +53,29 @@ class _FakeCamera_1 extends _i1.SmartFake implements _i3.Camera { ); } -class _FakeWidget_2 extends _i1.SmartFake implements _i4.Widget { - _FakeWidget_2( +class _FakeResolutionInfo_2 extends _i1.SmartFake + implements _i4.ResolutionInfo { + _FakeResolutionInfo_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeCamera_3 extends _i1.SmartFake implements _i5.Camera { + _FakeCamera_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeWidget_4 extends _i1.SmartFake implements _i6.Widget { + _FakeWidget_4( Object parent, Invocation parentInvocation, ) : super( @@ -62,13 +84,13 @@ class _FakeWidget_2 extends _i1.SmartFake implements _i4.Widget { ); @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => + String toString({_i7.DiagnosticLevel? minLevel = _i7.DiagnosticLevel.info}) => super.toString(); } -class _FakeInheritedWidget_3 extends _i1.SmartFake - implements _i4.InheritedWidget { - _FakeInheritedWidget_3( +class _FakeInheritedWidget_5 extends _i1.SmartFake + implements _i6.InheritedWidget { + _FakeInheritedWidget_5( Object parent, Invocation parentInvocation, ) : super( @@ -77,13 +99,13 @@ class _FakeInheritedWidget_3 extends _i1.SmartFake ); @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => + String toString({_i7.DiagnosticLevel? minLevel = _i7.DiagnosticLevel.info}) => super.toString(); } -class _FakeDiagnosticsNode_4 extends _i1.SmartFake - implements _i6.DiagnosticsNode { - _FakeDiagnosticsNode_4( +class _FakeDiagnosticsNode_6 extends _i1.SmartFake + implements _i8.DiagnosticsNode { + _FakeDiagnosticsNode_6( Object parent, Invocation parentInvocation, ) : super( @@ -93,8 +115,8 @@ class _FakeDiagnosticsNode_4 extends _i1.SmartFake @override String toString({ - _i6.TextTreeConfiguration? parentConfiguration, - _i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info, + _i8.TextTreeConfiguration? parentConfiguration, + _i7.DiagnosticLevel? minLevel = _i7.DiagnosticLevel.info, }) => super.toString(); } @@ -102,77 +124,147 @@ 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 _i5.Camera { + @override + _i9.Future<_i2.CameraInfo> getCameraInfo() => (super.noSuchMethod( + Invocation.method( + #getCameraInfo, + [], + ), + returnValue: _i9.Future<_i2.CameraInfo>.value(_FakeCameraInfo_0( + this, + Invocation.method( + #getCameraInfo, + [], + ), + )), + returnValueForMissingStub: + _i9.Future<_i2.CameraInfo>.value(_FakeCameraInfo_0( + this, + Invocation.method( + #getCameraInfo, + [], + ), + )), + ) as _i9.Future<_i2.CameraInfo>); +} /// 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 _i2.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); + @override + _i9.Future<_i3.LiveCameraState> getLiveCameraState() => (super.noSuchMethod( + Invocation.method( + #getLiveCameraState, + [], + ), + returnValue: + _i9.Future<_i3.LiveCameraState>.value(_FakeLiveCameraState_1( + this, + Invocation.method( + #getLiveCameraState, + [], + ), + )), + returnValueForMissingStub: + _i9.Future<_i3.LiveCameraState>.value(_FakeLiveCameraState_1( + this, + Invocation.method( + #getLiveCameraState, + [], + ), + )), + ) as _i9.Future<_i3.LiveCameraState>); } /// 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<_i2.CameraInfo>? cameraInfos) => (super.noSuchMethod( Invocation.method( #filter, [cameraInfos], ), - returnValue: _i8.Future>.value(<_i7.CameraInfo>[]), + returnValue: _i9.Future>.value(<_i2.CameraInfo>[]), returnValueForMissingStub: - _i8.Future>.value(<_i7.CameraInfo>[]), - ) as _i8.Future>); + _i9.Future>.value(<_i2.CameraInfo>[]), + ) 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 _i11.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 [LiveCameraState]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockLiveCameraState extends _i1.Mock implements _i3.LiveCameraState { + @override + _i9.Future addObserver() => (super.noSuchMethod( + Invocation.method( + #addObserver, + [], + ), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) as _i9.Future); + @override + _i9.Future removeObservers() => (super.noSuchMethod( + Invocation.method( + #removeObservers, + [], + ), + 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 _i12.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( @@ -182,12 +274,12 @@ class MockPreview extends _i1.Mock implements _i11.Preview { returnValueForMissingStub: null, ); @override - _i8.Future<_i2.ResolutionInfo> getResolutionInfo() => (super.noSuchMethod( + _i9.Future<_i4.ResolutionInfo> getResolutionInfo() => (super.noSuchMethod( Invocation.method( #getResolutionInfo, [], ), - returnValue: _i8.Future<_i2.ResolutionInfo>.value(_FakeResolutionInfo_0( + returnValue: _i9.Future<_i4.ResolutionInfo>.value(_FakeResolutionInfo_2( this, Invocation.method( #getResolutionInfo, @@ -195,36 +287,36 @@ class MockPreview extends _i1.Mock implements _i11.Preview { ), )), returnValueForMissingStub: - _i8.Future<_i2.ResolutionInfo>.value(_FakeResolutionInfo_0( + _i9.Future<_i4.ResolutionInfo>.value(_FakeResolutionInfo_2( this, Invocation.method( #getResolutionInfo, [], ), )), - ) as _i8.Future<_i2.ResolutionInfo>); + ) as _i9.Future<_i4.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 _i13.ProcessCameraProvider { @override - _i8.Future> getAvailableCameraInfos() => + _i9.Future> getAvailableCameraInfos() => (super.noSuchMethod( Invocation.method( #getAvailableCameraInfos, [], ), - returnValue: _i8.Future>.value(<_i7.CameraInfo>[]), + returnValue: _i9.Future>.value(<_i2.CameraInfo>[]), returnValueForMissingStub: - _i8.Future>.value(<_i7.CameraInfo>[]), - ) as _i8.Future>); + _i9.Future>.value(<_i2.CameraInfo>[]), + ) as _i9.Future>); @override - _i8.Future<_i3.Camera> bindToLifecycle( - _i9.CameraSelector? cameraSelector, - List<_i13.UseCase>? useCases, + _i9.Future<_i5.Camera> bindToLifecycle( + _i10.CameraSelector? cameraSelector, + List<_i14.UseCase>? useCases, ) => (super.noSuchMethod( Invocation.method( @@ -234,7 +326,7 @@ class MockProcessCameraProvider extends _i1.Mock useCases, ], ), - returnValue: _i8.Future<_i3.Camera>.value(_FakeCamera_1( + returnValue: _i9.Future<_i5.Camera>.value(_FakeCamera_3( this, Invocation.method( #bindToLifecycle, @@ -244,7 +336,7 @@ class MockProcessCameraProvider extends _i1.Mock ], ), )), - returnValueForMissingStub: _i8.Future<_i3.Camera>.value(_FakeCamera_1( + returnValueForMissingStub: _i9.Future<_i5.Camera>.value(_FakeCamera_3( this, Invocation.method( #bindToLifecycle, @@ -254,18 +346,18 @@ class MockProcessCameraProvider extends _i1.Mock ], ), )), - ) as _i8.Future<_i3.Camera>); + ) as _i9.Future<_i5.Camera>); @override - _i8.Future isBound(_i13.UseCase? useCase) => (super.noSuchMethod( + _i9.Future isBound(_i14.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<_i14.UseCase>? useCases) => super.noSuchMethod( Invocation.method( #unbind, [useCases], @@ -285,19 +377,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 _i6.BuildContext { MockBuildContext() { _i1.throwOnMissingStub(this); } @override - _i4.Widget get widget => (super.noSuchMethod( + _i6.Widget get widget => (super.noSuchMethod( Invocation.getter(#widget), - returnValue: _FakeWidget_2( + returnValue: _FakeWidget_4( this, Invocation.getter(#widget), ), - ) as _i4.Widget); + ) as _i6.Widget); @override bool get mounted => (super.noSuchMethod( Invocation.getter(#mounted), @@ -309,8 +401,8 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValue: false, ) as bool); @override - _i4.InheritedWidget dependOnInheritedElement( - _i4.InheritedElement? ancestor, { + _i6.InheritedWidget dependOnInheritedElement( + _i6.InheritedElement? ancestor, { Object? aspect, }) => (super.noSuchMethod( @@ -319,7 +411,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { [ancestor], {#aspect: aspect}, ), - returnValue: _FakeInheritedWidget_3( + returnValue: _FakeInheritedWidget_5( this, Invocation.method( #dependOnInheritedElement, @@ -327,9 +419,9 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { {#aspect: aspect}, ), ), - ) as _i4.InheritedWidget); + ) as _i6.InheritedWidget); @override - void visitAncestorElements(bool Function(_i4.Element)? visitor) => + void visitAncestorElements(_i6.ConditionalElementVisitor? visitor) => super.noSuchMethod( Invocation.method( #visitAncestorElements, @@ -338,7 +430,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValueForMissingStub: null, ); @override - void visitChildElements(_i4.ElementVisitor? visitor) => super.noSuchMethod( + void visitChildElements(_i6.ElementVisitor? visitor) => super.noSuchMethod( Invocation.method( #visitChildElements, [visitor], @@ -346,7 +438,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValueForMissingStub: null, ); @override - void dispatchNotification(_i14.Notification? notification) => + void dispatchNotification(_i15.Notification? notification) => super.noSuchMethod( Invocation.method( #dispatchNotification, @@ -355,9 +447,9 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValueForMissingStub: null, ); @override - _i6.DiagnosticsNode describeElement( + _i8.DiagnosticsNode describeElement( String? name, { - _i6.DiagnosticsTreeStyle? style = _i6.DiagnosticsTreeStyle.errorProperty, + _i8.DiagnosticsTreeStyle? style = _i8.DiagnosticsTreeStyle.errorProperty, }) => (super.noSuchMethod( Invocation.method( @@ -365,7 +457,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { [name], {#style: style}, ), - returnValue: _FakeDiagnosticsNode_4( + returnValue: _FakeDiagnosticsNode_6( this, Invocation.method( #describeElement, @@ -373,11 +465,11 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { {#style: style}, ), ), - ) as _i6.DiagnosticsNode); + ) as _i8.DiagnosticsNode); @override - _i6.DiagnosticsNode describeWidget( + _i8.DiagnosticsNode describeWidget( String? name, { - _i6.DiagnosticsTreeStyle? style = _i6.DiagnosticsTreeStyle.errorProperty, + _i8.DiagnosticsTreeStyle? style = _i8.DiagnosticsTreeStyle.errorProperty, }) => (super.noSuchMethod( Invocation.method( @@ -385,7 +477,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { [name], {#style: style}, ), - returnValue: _FakeDiagnosticsNode_4( + returnValue: _FakeDiagnosticsNode_6( this, Invocation.method( #describeWidget, @@ -393,9 +485,9 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { {#style: style}, ), ), - ) as _i6.DiagnosticsNode); + ) as _i8.DiagnosticsNode); @override - List<_i6.DiagnosticsNode> describeMissingAncestor( + List<_i8.DiagnosticsNode> describeMissingAncestor( {required Type? expectedAncestorType}) => (super.noSuchMethod( Invocation.method( @@ -403,21 +495,21 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { [], {#expectedAncestorType: expectedAncestorType}, ), - returnValue: <_i6.DiagnosticsNode>[], - ) as List<_i6.DiagnosticsNode>); + returnValue: <_i8.DiagnosticsNode>[], + ) as List<_i8.DiagnosticsNode>); @override - _i6.DiagnosticsNode describeOwnershipChain(String? name) => + _i8.DiagnosticsNode describeOwnershipChain(String? name) => (super.noSuchMethod( Invocation.method( #describeOwnershipChain, [name], ), - returnValue: _FakeDiagnosticsNode_4( + returnValue: _FakeDiagnosticsNode_6( this, Invocation.method( #describeOwnershipChain, [name], ), ), - ) as _i6.DiagnosticsNode); + ) as _i8.DiagnosticsNode); } 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 5e558a8226b6..ffdf48b1e4a9 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 @@ -35,4 +35,12 @@ class MockTestCameraInfoHostApi extends _i1.Mock ), returnValue: 0, ) as int); + @override + int getLiveCameraState(int? identifier) => (super.noSuchMethod( + Invocation.method( + #getLiveCameraState, + [identifier], + ), + returnValue: 0, + ) as int); } diff --git a/packages/camera/camera_android_camerax/test/live_camera_state_test.dart b/packages/camera/camera_android_camerax/test/live_camera_state_test.dart new file mode 100644 index 000000000000..2c229b162e9d --- /dev/null +++ b/packages/camera/camera_android_camerax/test/live_camera_state_test.dart @@ -0,0 +1,92 @@ +// 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/instance_manager.dart'; +import 'package:camera_android_camerax/src/live_camera_state.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'live_camera_state_test.mocks.dart'; +import 'test_camerax_library.g.dart'; + +@GenerateMocks([TestLiveCameraStateHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('LiveCameraState', () { + tearDown(() => TestLiveCameraStateHostApi.setup(null)); + + test('addObserver makes call to add camera state observer', () async { + final MockTestLiveCameraStateHostApi mockApi = + MockTestLiveCameraStateHostApi(); + TestLiveCameraStateHostApi.setup(mockApi); + const int liveCameraStateId = 28; + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final LiveCameraState liveCameraState = LiveCameraState.detached( + instanceManager: instanceManager, + ); + + instanceManager.addHostCreatedInstance( + liveCameraState, + liveCameraStateId, + onCopy: (_) => LiveCameraState.detached(), + ); + + liveCameraState.addObserver(); + + verify(mockApi.addObserver(liveCameraStateId)); + }); + + test('removeObservers makes call to remove camera state observers', () async { + final MockTestLiveCameraStateHostApi mockApi = + MockTestLiveCameraStateHostApi(); + TestLiveCameraStateHostApi.setup(mockApi); + const int liveCameraStateId = 33; + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final LiveCameraState liveCameraState = LiveCameraState.detached( + instanceManager: instanceManager, + ); + + instanceManager.addHostCreatedInstance( + liveCameraState, + liveCameraStateId, + onCopy: (_) => LiveCameraState.detached(), + ); + + liveCameraState.removeObservers(); + + verify(mockApi.removeObservers(liveCameraStateId)); + }); + + test('flutter api create adds LiveCameraState instance to instance manager', () async { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final LiveCameraStateFlutterApi flutterApi = LiveCameraStateFlutterApiImpl( + instanceManager: instanceManager, + ); + const int liveCameraStateId = 90; + + flutterApi.create(liveCameraStateId); + + expect(instanceManager.getInstanceWithWeakReference(liveCameraStateId), + isA()); + }); + + test('flutter api onCameraClosing adds event to expected stream when called', () async { + LiveCameraState.cameraClosingStreamController.stream + .listen((bool event) { + expect(event, isTrue); + }); + + LiveCameraStateFlutterApiImpl().onCameraClosing(); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart b/packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart new file mode 100644 index 000000000000..700a72c07efb --- /dev/null +++ b/packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart @@ -0,0 +1,46 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in camera_android_camerax/test/live_camera_state_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 [TestLiveCameraStateHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestLiveCameraStateHostApi extends _i1.Mock + implements _i2.TestLiveCameraStateHostApi { + MockTestLiveCameraStateHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void addObserver(int? identifier) => super.noSuchMethod( + Invocation.method( + #addObserver, + [identifier], + ), + returnValueForMissingStub: null, + ); + @override + void removeObservers(int? identifier) => super.noSuchMethod( + Invocation.method( + #removeObservers, + [identifier], + ), + returnValueForMissingStub: null, + ); +} 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 54702a6faff6..b1e13213079b 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 @@ -191,7 +191,7 @@ void main() { verify(mockApi.unbind(0, [1])); }); - test('unbindAll unbinds UseCases and sends camera closing events', + test('unbindAll unbinds UseCases', () async { final MockTestProcessCameraProviderHostApi mockApi = MockTestProcessCameraProviderHostApi(); @@ -211,11 +211,6 @@ void main() { onCopy: (_) => ProcessCameraProvider.detached(), ); - ProcessCameraProvider.cameraClosingStreamController.stream - .listen((bool event) { - expect(event, isTrue); - }); - processCameraProvider.unbindAll(); verify(mockApi.unbindAll(0)); }); From c04d8c142dc880f320fcb3358e8e84b542ae6c60 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 22 Mar 2023 09:48:13 -0700 Subject: [PATCH 23/71] Add java tests --- .../io/flutter/plugins/camerax/CameraInfoTest.java | 2 ++ .../flutter/plugins/camerax/ImageCaptureTest.java | 3 +++ .../plugins/camerax/LiveCameraStateTest.java | 13 ++++++++----- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java index 734bbd0e0042..bfb9314801cd 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java @@ -7,6 +7,7 @@ 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.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -58,6 +59,7 @@ public void getSensorRotationDegrees_MakesCallToRetrieveSensorRotationDegrees() public void getLiveCameraState_MakesCallToRetrieveLiveCameraState() { final CameraInfoHostApiImpl cameraInfoHostApiImpl = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); final Long mockCameraInfoIdentifier = 27L; + @SuppressWarnings("unchecked") final LiveData mockLiveCameraState = mock(LiveData.class); testInstanceManager.addDartCreatedInstance(mockCameraInfo, mockCameraInfoIdentifier); 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 d7fe0cfdb22a..e5c81be3a1ef 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 @@ -116,6 +116,7 @@ public void setFlashMode_setsFlashModeOfImageCaptureInstance() { mock(ImageCapture.OutputFileOptions.class); final ImageCapture.OnImageSavedCallback mockOnImageSavedCallback = mock(ImageCapture.OnImageSavedCallback.class); + @SuppressWarnings("unchecked") final GeneratedCameraXLibrary.Result mockResult = mock(GeneratedCameraXLibrary.Result.class); @@ -148,6 +149,7 @@ public void takePicture_sendsErrorWhenTemporaryFileCannotBeCreated() { final Long imageCaptureIdentifier = 6L; final File mockOutputDir = mock(File.class); final File mockTemporaryCaptureFile = mock(File.class); + @SuppressWarnings("unchecked") final GeneratedCameraXLibrary.Result mockResult = mock(GeneratedCameraXLibrary.Result.class); final IOException fileCreationException = new IOException(); @@ -181,6 +183,7 @@ public void takePicture_usesExpectedOnImageSavedCallback() { final SystemServicesFlutterApiImpl mockSystemServicesFlutterApiImpl = mock(SystemServicesFlutterApiImpl.class); final File mockFile = mock(File.class); + @SuppressWarnings("unchecked") final GeneratedCameraXLibrary.Result mockResult = mock(GeneratedCameraXLibrary.Result.class); final ImageCapture.OutputFileResults mockOutputFileResults = diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java index 577707b41cb6..3949645aa1fc 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java @@ -24,10 +24,11 @@ import androidx.camera.core.CameraInfo; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.CameraXProxy; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveCameraStateFlutterApi.Reply; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.SystemServicesFlutterApi.Reply; import io.flutter.plugins.camerax.LiveCameraStateFlutterApiImpl; import io.flutter.plugins.camerax.LiveCameraStateHostApiImpl; +import io.flutter.plugins.camerax.SystemServicesFlutterApiImpl; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveCameraStateFlutterApi; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.SystemServicesFlutterApi; import io.flutter.plugins.camerax.InstanceManager; import java.util.Objects; import org.junit.After; @@ -62,9 +63,11 @@ public void tearDown() { public void addObserver_addsExpectedCameraStateObesrveToLiveCameraState() { final LiveCameraStateHostApiImpl liveCameraStateHostApiImpl = new LiveCameraStateHostApiImpl(mockBinaryMessenger, testInstanceManager); final LiveCameraStateFlutterApiImpl mockLiveCameraStateFlutterApiImpl = mock(LiveCameraStateFlutterApiImpl.class); + final SystemServicesFlutterApiImpl mockSystemServicesFlutterApiImpl = mock(SystemServicesFlutterApiImpl.class); final Long liveCameraStateIdentifier = 94L; final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); final CameraXProxy mockCameraXProxy = mock(CameraXProxy.class); + @SuppressWarnings("unchecked") final ArgumentCaptor> cameraStateObserverCaptor = ArgumentCaptor.forClass(Observer.class); testInstanceManager.addDartCreatedInstance(liveCameraState, liveCameraStateIdentifier); @@ -81,12 +84,12 @@ public void addObserver_addsExpectedCameraStateObesrveToLiveCameraState() { // Test case where camera is closing. when(mockCameraXProxy.createLiveCameraStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)).thenReturn(mockLiveCameraStateFlutterApiImpl); cameraStateObserver.onChanged(CameraState.create(CameraState.Type.CLOSING)); - verify(mockLiveCameraStateFlutterApiImpl).sendCameraClosingEvent(ArgumentMatchers.>any()); + verify(mockLiveCameraStateFlutterApiImpl).sendCameraClosingEvent(ArgumentMatchers.>any()); // Test case where there is a camera state error. - when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger)); + when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger)).thenReturn(mockSystemServicesFlutterApiImpl); cameraStateObserver.onChanged(CameraState.create(CameraState.Type.OPEN, CameraState.StateError.create(CameraState.ERROR_CAMERA_IN_USE))); - verify(mockBinaryMessenger).sendCameraError(anyString(), ArgumentMatchers.>any()); + verify(mockSystemServicesFlutterApiImpl).sendCameraError(anyString(), ArgumentMatchers.>any()); } @Test From b2322d238782ff465bcf9204776083d8bb40d358 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 22 Mar 2023 09:51:48 -0700 Subject: [PATCH 24/71] Formatting --- .../camerax/CameraAndroidCameraxPlugin.java | 6 +- .../camerax/CameraInfoHostApiImpl.java | 5 +- .../flutter/plugins/camerax/CameraXProxy.java | 3 +- .../camerax/GeneratedCameraXLibrary.java | 1433 ++++++++++------- .../camerax/LiveCameraStateHostApiImpl.java | 8 +- .../plugins/camerax/CameraInfoTest.java | 13 +- .../plugins/camerax/LiveCameraStateTest.java | 55 +- .../lib/src/camera_info.dart | 3 +- .../lib/src/camerax_library.g.dart | 380 +++-- .../lib/src/live_camera_state.dart | 10 +- .../test/android_camera_camerax_test.dart | 50 +- .../test/live_camera_state_test.dart | 20 +- .../test/process_camera_provider_test.dart | 3 +- .../test/test_camerax_library.g.dart | 334 ++-- 14 files changed, 1425 insertions(+), 898 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 63eb5de33e55..0180c20c5019 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 @@ -40,7 +40,8 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex }); // Set up Host APIs. - GeneratedCameraXLibrary.CameraInfoHostApi.setup(binaryMessenger, new CameraInfoHostApiImpl(binaryMessenger, instanceManager)); + GeneratedCameraXLibrary.CameraInfoHostApi.setup( + binaryMessenger, new CameraInfoHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.CameraSelectorHostApi.setup( binaryMessenger, new CameraSelectorHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.JavaObjectHostApi.setup( @@ -58,7 +59,8 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex GeneratedCameraXLibrary.CameraHostApi.setup( binaryMessenger, new CameraHostApiImpl(binaryMessenger, instanceManager)); liveCameraStateHostApiImpl = new LiveCameraStateHostApiImpl(binaryMessenger, instanceManager); - GeneratedCameraXLibrary.LiveCameraStateHostApi.setup(binaryMessenger, liveCameraStateHostApiImpl); + GeneratedCameraXLibrary.LiveCameraStateHostApi.setup( + binaryMessenger, liveCameraStateHostApiImpl); } @Override diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index 7ccbd8a6f6a7..239da3d14d39 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -8,9 +8,7 @@ import androidx.annotation.VisibleForTesting; import androidx.camera.core.CameraInfo; import androidx.camera.core.CameraState; -import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; -import androidx.lifecycle.Observer; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraInfoHostApi; import java.util.Objects; @@ -38,7 +36,8 @@ public Long getLiveCameraState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); LiveData liveCameraState = cameraInfo.getCameraState(); - LiveCameraStateFlutterApiImpl liveCameraStateFlutterApiImpl = new LiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); + LiveCameraStateFlutterApiImpl liveCameraStateFlutterApiImpl = + new LiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); if (!instanceManager.containsInstance(liveCameraState)) { liveCameraStateFlutterApiImpl.create(liveCameraState, reply -> {}); } 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 df6593dd67c0..236f997bbde4 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 @@ -62,7 +62,8 @@ public ImageCapture.OutputFileOptions createImageCaptureOutputFileOptions(@NonNu return new ImageCapture.OutputFileOptions.Builder(file).build(); } - public LiveCameraStateFlutterApiImpl createLiveCameraStateFlutterApiImpl(@NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + public LiveCameraStateFlutterApiImpl createLiveCameraStateFlutterApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { return new LiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); } } 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 2c9704bf88eb..027ad62d6842 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,32 +154,38 @@ 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); @@ -155,263 +194,337 @@ 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 getLiveCameraState(@NonNull Long identifier); + @NonNull + Long getSensorRotationDegrees(@NonNull Long identifier); + + @NonNull + Long getLiveCameraState(@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); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", + 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.getLiveCameraState((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.getLiveCameraState( + (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. */ @@ -419,209 +532,259 @@ 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 CameraHostApiCodec extends StandardMessageCodec { public static final CameraHostApiCodec INSTANCE = new CameraHostApiCodec(); + private CameraHostApiCodec() {} } - /** 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 CameraHostApi { - @NonNull Long getCameraInfo(@NonNull Long identifier); + @NonNull + Long getCameraInfo(@NonNull Long identifier); /** The codec used by CameraHostApi. */ static MessageCodec getCodec() { @@ -632,86 +795,102 @@ static MessageCodec getCodec() { static void setup(BinaryMessenger binaryMessenger, CameraHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraHostApi.getCameraInfo", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraHostApi.getCameraInfo", 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.getCameraInfo((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.getCameraInfo((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 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. */ @@ -719,163 +898,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() { @@ -886,129 +1107,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. */ @@ -1016,106 +1259,123 @@ 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 LiveCameraStateHostApiCodec extends StandardMessageCodec { public static final LiveCameraStateHostApiCodec INSTANCE = new LiveCameraStateHostApiCodec(); + private LiveCameraStateHostApiCodec() {} } - /** 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 LiveCameraStateHostApi { void addObserver(@NonNull Long identifier); + void removeObservers(@NonNull Long identifier); /** The codec used by LiveCameraStateHostApi. */ @@ -1123,96 +1383,123 @@ static MessageCodec getCodec() { return LiveCameraStateHostApiCodec.INSTANCE; } - /** Sets up an instance of `LiveCameraStateHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `LiveCameraStateHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, LiveCameraStateHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.LiveCameraStateHostApi.addObserver", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.LiveCameraStateHostApi.addObserver", + 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.addObserver((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.addObserver((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.LiveCameraStateHostApi.removeObservers", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers", + 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.removeObservers((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.removeObservers((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 LiveCameraStateFlutterApiCodec extends StandardMessageCodec { - public static final LiveCameraStateFlutterApiCodec INSTANCE = new LiveCameraStateFlutterApiCodec(); + public static final LiveCameraStateFlutterApiCodec INSTANCE = + new LiveCameraStateFlutterApiCodec(); + private LiveCameraStateFlutterApiCodec() {} } - /** 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 LiveCameraStateFlutterApi { private final BinaryMessenger binaryMessenger; - public LiveCameraStateFlutterApi(BinaryMessenger argBinaryMessenger){ + + public LiveCameraStateFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } + public interface Reply { void reply(T reply); } + static MessageCodec getCodec() { return LiveCameraStateFlutterApiCodec.INSTANCE; } public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.LiveCameraStateFlutterApi.create", getCodec()); - channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.LiveCameraStateFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg)), + channelReply -> { + callback.reply(null); + }); } + public void onCameraClosing(Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing", getCodec()); - channel.send(null, channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing", + getCodec()); + channel.send( + null, + 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/LiveCameraStateHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java index 2215d673e68c..70df8cbf6397 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java @@ -6,7 +6,6 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; -import androidx.camera.core.CameraInfo; import androidx.camera.core.CameraState; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; @@ -22,7 +21,8 @@ public class LiveCameraStateHostApiImpl implements LiveCameraStateHostApi { @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); - public LiveCameraStateHostApiImpl(BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + public LiveCameraStateHostApiImpl( + BinaryMessenger binaryMessenger, InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; } @@ -47,7 +47,7 @@ public void onChanged(@NonNull CameraState cameraState) { if (cameraState.getType() == CameraState.Type.CLOSING) { LiveCameraStateFlutterApiImpl liveCameraStateFlutterApiImpl = cameraXProxy.createLiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); - liveCameraStateFlutterApiImpl.sendCameraClosingEvent(reply -> {}); + liveCameraStateFlutterApiImpl.sendCameraClosingEvent(reply -> {}); } CameraState.StateError cameraStateError = cameraState.getError(); if (cameraStateError != null) { @@ -95,4 +95,4 @@ public void removeObservers(@NonNull Long identifier) { (LiveData) Objects.requireNonNull(instanceManager.getInstance(identifier)); liveCameraState.removeObservers(lifecycleOwner); } -} \ No newline at end of file +} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java index bfb9314801cd..ea3c1e50f22a 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java @@ -45,7 +45,8 @@ public void tearDown() { @Test public void getSensorRotationDegrees_MakesCallToRetrieveSensorRotationDegrees() { - final CameraInfoHostApiImpl cameraInfoHostApi = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); + final CameraInfoHostApiImpl cameraInfoHostApi = + new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); testInstanceManager.addDartCreatedInstance(mockCameraInfo, 1); @@ -57,7 +58,8 @@ public void getSensorRotationDegrees_MakesCallToRetrieveSensorRotationDegrees() @Test public void getLiveCameraState_MakesCallToRetrieveLiveCameraState() { - final CameraInfoHostApiImpl cameraInfoHostApiImpl = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); + final CameraInfoHostApiImpl cameraInfoHostApiImpl = + new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); final Long mockCameraInfoIdentifier = 27L; @SuppressWarnings("unchecked") final LiveData mockLiveCameraState = mock(LiveData.class); @@ -66,8 +68,11 @@ public void getLiveCameraState_MakesCallToRetrieveLiveCameraState() { when(mockCameraInfo.getCameraState()).thenReturn(mockLiveCameraState); - final Long liveCameraStateIdentifier = cameraInfoHostApiImpl.getLiveCameraState(mockCameraInfoIdentifier); - assertEquals(liveCameraStateIdentifier, testInstanceManager.getIdentifierForStrongReference(mockLiveCameraState)); + final Long liveCameraStateIdentifier = + cameraInfoHostApiImpl.getLiveCameraState(mockCameraInfoIdentifier); + assertEquals( + liveCameraStateIdentifier, + testInstanceManager.getIdentifierForStrongReference(mockLiveCameraState)); } @Test diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java index 3949645aa1fc..ab4fba67d60e 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java @@ -8,28 +8,17 @@ import static org.mockito.ArgumentMatchers.anyString; 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 androidx.annotation.NonNull; -import androidx.annotation.VisibleForTesting; -import androidx.camera.core.CameraInfo; import androidx.camera.core.CameraState; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; -import androidx.camera.core.CameraInfo; import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.CameraXProxy; -import io.flutter.plugins.camerax.LiveCameraStateFlutterApiImpl; -import io.flutter.plugins.camerax.LiveCameraStateHostApiImpl; -import io.flutter.plugins.camerax.SystemServicesFlutterApiImpl; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveCameraStateFlutterApi; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.SystemServicesFlutterApi; -import io.flutter.plugins.camerax.InstanceManager; import java.util.Objects; import org.junit.After; import org.junit.Before; @@ -61,40 +50,52 @@ public void tearDown() { @Test public void addObserver_addsExpectedCameraStateObesrveToLiveCameraState() { - final LiveCameraStateHostApiImpl liveCameraStateHostApiImpl = new LiveCameraStateHostApiImpl(mockBinaryMessenger, testInstanceManager); - final LiveCameraStateFlutterApiImpl mockLiveCameraStateFlutterApiImpl = mock(LiveCameraStateFlutterApiImpl.class); - final SystemServicesFlutterApiImpl mockSystemServicesFlutterApiImpl = mock(SystemServicesFlutterApiImpl.class); + final LiveCameraStateHostApiImpl liveCameraStateHostApiImpl = + new LiveCameraStateHostApiImpl(mockBinaryMessenger, testInstanceManager); + final LiveCameraStateFlutterApiImpl mockLiveCameraStateFlutterApiImpl = + mock(LiveCameraStateFlutterApiImpl.class); + final SystemServicesFlutterApiImpl mockSystemServicesFlutterApiImpl = + mock(SystemServicesFlutterApiImpl.class); final Long liveCameraStateIdentifier = 94L; final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); final CameraXProxy mockCameraXProxy = mock(CameraXProxy.class); @SuppressWarnings("unchecked") - final ArgumentCaptor> cameraStateObserverCaptor = ArgumentCaptor.forClass(Observer.class); - + final ArgumentCaptor> cameraStateObserverCaptor = + ArgumentCaptor.forClass(Observer.class); + testInstanceManager.addDartCreatedInstance(liveCameraState, liveCameraStateIdentifier); liveCameraStateHostApiImpl.setLifecycleOwner(mockLifecycleOwner); liveCameraStateHostApiImpl.cameraXProxy = mockCameraXProxy; liveCameraStateHostApiImpl.addObserver(liveCameraStateIdentifier); - + verify(liveCameraState).observe(eq(mockLifecycleOwner), cameraStateObserverCaptor.capture()); // Test camera state observer handles onChanged callback as expected: Observer cameraStateObserver = cameraStateObserverCaptor.getValue(); // Test case where camera is closing. - when(mockCameraXProxy.createLiveCameraStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)).thenReturn(mockLiveCameraStateFlutterApiImpl); + when(mockCameraXProxy.createLiveCameraStateFlutterApiImpl( + mockBinaryMessenger, testInstanceManager)) + .thenReturn(mockLiveCameraStateFlutterApiImpl); cameraStateObserver.onChanged(CameraState.create(CameraState.Type.CLOSING)); - verify(mockLiveCameraStateFlutterApiImpl).sendCameraClosingEvent(ArgumentMatchers.>any()); + verify(mockLiveCameraStateFlutterApiImpl) + .sendCameraClosingEvent(ArgumentMatchers.>any()); // Test case where there is a camera state error. - when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger)).thenReturn(mockSystemServicesFlutterApiImpl); - cameraStateObserver.onChanged(CameraState.create(CameraState.Type.OPEN, CameraState.StateError.create(CameraState.ERROR_CAMERA_IN_USE))); - verify(mockSystemServicesFlutterApiImpl).sendCameraError(anyString(), ArgumentMatchers.>any()); + when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger)) + .thenReturn(mockSystemServicesFlutterApiImpl); + cameraStateObserver.onChanged( + CameraState.create( + CameraState.Type.OPEN, CameraState.StateError.create(CameraState.ERROR_CAMERA_IN_USE))); + verify(mockSystemServicesFlutterApiImpl) + .sendCameraError(anyString(), ArgumentMatchers.>any()); } @Test public void removeObservers_removesObserversFromLiveCameraState() { - final LiveCameraStateHostApiImpl liveCameraStateHostApiImpl = new LiveCameraStateHostApiImpl(mockBinaryMessenger, testInstanceManager); + final LiveCameraStateHostApiImpl liveCameraStateHostApiImpl = + new LiveCameraStateHostApiImpl(mockBinaryMessenger, testInstanceManager); final Long liveCameraStateIdentifier = 96L; final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); @@ -106,15 +107,15 @@ public void removeObservers_removesObserversFromLiveCameraState() { verify(liveCameraState).removeObservers(mockLifecycleOwner); } - @Test + @Test public void flutterApiCreate_makesCallToCreateInstanceInDart() { final LiveCameraStateFlutterApiImpl spyLiveCameraStateFlutterApiImpl = spy(new LiveCameraStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); spyLiveCameraStateFlutterApiImpl.create(liveCameraState, reply -> {}); final long liveCameraStateIdentifier = - Objects.requireNonNull( - testInstanceManager.getIdentifierForStrongReference(liveCameraState)); + Objects.requireNonNull( + testInstanceManager.getIdentifierForStrongReference(liveCameraState)); verify(spyLiveCameraStateFlutterApiImpl).create(eq(liveCameraStateIdentifier), any()); } @@ -125,4 +126,4 @@ public void flutterApiSendCameraClosingEvent_makesCallToDartCallbackMethod() { spyLiveCameraStateFlutterApiImpl.onCameraClosing(reply -> {}); verify(spyLiveCameraStateFlutterApiImpl).onCameraClosing(any()); } -} \ No newline at end of file +} diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index a99fedda8440..fa9a2a8e9c14 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -64,7 +64,8 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { assert(identifier != null, 'No CameraInfo has the identifer of that which was requested.'); int? liveCameraStateId = await getLiveCameraState(identifier!); - return instanceManager.getInstanceWithWeakReference(liveCameraStateId!)!; + return instanceManager + .getInstanceWithWeakReference(liveCameraStateId!)!; } } 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 ae3e663efd24..a3f6d900f39c 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,7 +68,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; @@ -76,7 +77,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) { @@ -85,7 +87,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?, @@ -100,22 +103,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; }); @@ -132,7 +140,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; @@ -140,7 +149,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) { @@ -149,7 +159,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?, @@ -167,7 +178,8 @@ class CameraInfoHostApi { Future getLiveCameraState(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -176,7 +188,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?, @@ -196,22 +209,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; }); @@ -228,7 +246,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; @@ -236,16 +255,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?, @@ -256,18 +278,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?, @@ -287,22 +313,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; @@ -320,15 +351,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) { @@ -337,7 +371,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?, @@ -355,7 +390,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) { @@ -364,7 +401,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?, @@ -380,18 +418,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?, @@ -409,16 +454,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?, @@ -436,16 +484,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?, @@ -458,7 +509,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) { @@ -467,7 +519,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?, @@ -482,22 +535,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; }); @@ -514,7 +573,8 @@ class CameraHostApi { /// Constructor for [CameraHostApi]. 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. - CameraHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + CameraHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -522,7 +582,8 @@ class CameraHostApi { Future getCameraInfo(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -531,7 +592,8 @@ class CameraHostApi { 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?, @@ -551,6 +613,7 @@ class CameraHostApi { class _CameraFlutterApiCodec extends StandardMessageCodec { const _CameraFlutterApiCodec(); } + abstract class CameraFlutterApi { static const MessageCodec codec = _CameraFlutterApiCodec(); @@ -558,15 +621,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; }); @@ -582,20 +648,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); - } } } @@ -604,24 +669,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?, @@ -632,18 +702,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?, @@ -656,7 +731,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) { @@ -665,7 +742,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?, @@ -680,23 +758,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; }); @@ -704,15 +788,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; }); @@ -728,27 +815,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); - } } } @@ -757,24 +842,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?, @@ -787,7 +877,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) { @@ -796,7 +887,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?, @@ -814,7 +906,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) { @@ -823,7 +916,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?, @@ -836,7 +930,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) { @@ -845,7 +940,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?, @@ -869,20 +965,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); - } } } @@ -891,24 +986,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?, @@ -921,16 +1021,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?, @@ -943,7 +1046,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) { @@ -952,7 +1056,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?, @@ -977,7 +1082,8 @@ class LiveCameraStateHostApi { /// Constructor for [LiveCameraStateHostApi]. 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. - LiveCameraStateHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + LiveCameraStateHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -985,7 +1091,8 @@ class LiveCameraStateHostApi { Future addObserver(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -994,7 +1101,8 @@ class LiveCameraStateHostApi { 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?, @@ -1007,7 +1115,8 @@ class LiveCameraStateHostApi { Future removeObservers(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -1016,7 +1125,8 @@ class LiveCameraStateHostApi { 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?, @@ -1031,23 +1141,28 @@ class LiveCameraStateHostApi { class _LiveCameraStateFlutterApiCodec extends StandardMessageCodec { const _LiveCameraStateFlutterApiCodec(); } + abstract class LiveCameraStateFlutterApi { static const MessageCodec codec = _LiveCameraStateFlutterApiCodec(); void create(int identifier); void onCameraClosing(); - static void setup(LiveCameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(LiveCameraStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateFlutterApi.create', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.LiveCameraStateFlutterApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.LiveCameraStateFlutterApi.create was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.LiveCameraStateFlutterApi.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.LiveCameraStateFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.LiveCameraStateFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); @@ -1055,7 +1170,8 @@ abstract class LiveCameraStateFlutterApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { diff --git a/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart b/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart index 29522e9af98e..23def44ccefa 100644 --- a/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart +++ b/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart @@ -11,12 +11,12 @@ import 'camerax_library.g.dart'; import 'instance_manager.dart'; import 'java_object.dart'; -class LiveCameraState extends JavaObject { +class LiveCameraState extends JavaObject { /// Creates a detached [LiveCameraState]. - LiveCameraState.detached( - {BinaryMessenger? binaryMessenger, - InstanceManager? instanceManager, - }) : super.detached( + LiveCameraState.detached({ + BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + }) : super.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager) { _api = LiveCameraStateHostApiImpl( 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 a85d4ca1af61..3ed5fafddeaf 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 @@ -117,11 +117,13 @@ void main() { when(camera.testPreview.setSurfaceProvider()) .thenAnswer((_) async => testSurfaceTextureId); - when(camera.processCameraProvider!.bindToLifecycle(camera.mockBackCameraSelector, + when(camera.processCameraProvider!.bindToLifecycle( + camera.mockBackCameraSelector, [camera.testPreview, camera.testImageCapture])) .thenAnswer((_) async => testCamera); when(testCamera.getCameraInfo()).thenAnswer((_) async => testCameraInfo); - when(testCameraInfo.getLiveCameraState()).thenAnswer((_) async => MockLiveCameraState()); + when(testCameraInfo.getLiveCameraState()) + .thenAnswer((_) async => MockLiveCameraState()); expect( await camera.createCamera(testCameraDescription, testResolutionPreset, @@ -161,11 +163,13 @@ void main() { final MockCamera testCamera = MockCamera(); final MockCameraInfo testCameraInfo = MockCameraInfo(); - when(camera.processCameraProvider!.bindToLifecycle(camera.mockBackCameraSelector, + when(camera.processCameraProvider!.bindToLifecycle( + camera.mockBackCameraSelector, [camera.testPreview, camera.testImageCapture])) .thenAnswer((_) async => testCamera); when(testCamera.getCameraInfo()).thenAnswer((_) async => testCameraInfo); - when(testCameraInfo.getLiveCameraState()).thenAnswer((_) async => MockLiveCameraState()); + when(testCameraInfo.getLiveCameraState()) + .thenAnswer((_) async => MockLiveCameraState()); await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); @@ -218,12 +222,13 @@ void main() { when(camera.testPreview.setSurfaceProvider()) .thenAnswer((_) async => cameraId); - - when(camera.processCameraProvider!.bindToLifecycle(camera.mockBackCameraSelector!, + when(camera.processCameraProvider!.bindToLifecycle( + camera.mockBackCameraSelector!, [camera.testPreview, camera.testImageCapture])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => testCameraInfo); - when(testCameraInfo.getLiveCameraState()).thenAnswer((_) async => MockLiveCameraState()); + when(testCameraInfo.getLiveCameraState()) + .thenAnswer((_) async => MockLiveCameraState()); await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); @@ -377,11 +382,12 @@ void main() { camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - when(camera.processCameraProvider!.bindToLifecycle(camera.cameraSelector!, - [camera.preview!])) - .thenAnswer((_) async => mockCamera); + when(camera.processCameraProvider!.bindToLifecycle( + camera.cameraSelector!, [camera.preview!])) + .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); - when(mockCameraInfo.getLiveCameraState()).thenAnswer((_) async => MockLiveCameraState()); + when(mockCameraInfo.getLiveCameraState()) + .thenAnswer((_) async => MockLiveCameraState()); await camera.resumePreview(78); @@ -393,7 +399,7 @@ void main() { 'buildPreview returns a FutureBuilder that does not return a Texture until the preview is bound to the lifecycle', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); - final MockCamera mockCamera = MockCamera(); + final MockCamera mockCamera = MockCamera(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); const int textureId = 75; @@ -401,11 +407,12 @@ void main() { camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - when(camera.processCameraProvider!.bindToLifecycle(camera.cameraSelector!, - [camera.preview!])) - .thenAnswer((_) async => mockCamera); + when(camera.processCameraProvider!.bindToLifecycle( + camera.cameraSelector!, [camera.preview!])) + .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); - when(mockCameraInfo.getLiveCameraState()).thenAnswer((_) async => MockLiveCameraState()); + when(mockCameraInfo.getLiveCameraState()) + .thenAnswer((_) async => MockLiveCameraState()); final FutureBuilder previewWidget = camera.buildPreview(textureId) as FutureBuilder; @@ -428,7 +435,7 @@ void main() { 'buildPreview returns a FutureBuilder that returns a Texture once the preview is bound to the lifecycle', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); - final MockCamera mockCamera = MockCamera(); + final MockCamera mockCamera = MockCamera(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); const int textureId = 75; @@ -436,11 +443,12 @@ void main() { camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - when(camera.processCameraProvider!.bindToLifecycle(camera.cameraSelector!, - [camera.preview!])) - .thenAnswer((_) async => mockCamera); + when(camera.processCameraProvider!.bindToLifecycle( + camera.cameraSelector!, [camera.preview!])) + .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); - when(mockCameraInfo.getLiveCameraState()).thenAnswer((_) async => MockLiveCameraState()); + when(mockCameraInfo.getLiveCameraState()) + .thenAnswer((_) async => MockLiveCameraState()); final FutureBuilder previewWidget = camera.buildPreview(textureId) as FutureBuilder; diff --git a/packages/camera/camera_android_camerax/test/live_camera_state_test.dart b/packages/camera/camera_android_camerax/test/live_camera_state_test.dart index 2c229b162e9d..bf932c88934a 100644 --- a/packages/camera/camera_android_camerax/test/live_camera_state_test.dart +++ b/packages/camera/camera_android_camerax/test/live_camera_state_test.dart @@ -42,7 +42,8 @@ void main() { verify(mockApi.addObserver(liveCameraStateId)); }); - test('removeObservers makes call to remove camera state observers', () async { + test('removeObservers makes call to remove camera state observers', + () async { final MockTestLiveCameraStateHostApi mockApi = MockTestLiveCameraStateHostApi(); TestLiveCameraStateHostApi.setup(mockApi); @@ -65,11 +66,13 @@ void main() { verify(mockApi.removeObservers(liveCameraStateId)); }); - test('flutter api create adds LiveCameraState instance to instance manager', () async { + test('flutter api create adds LiveCameraState instance to instance manager', + () async { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); - final LiveCameraStateFlutterApi flutterApi = LiveCameraStateFlutterApiImpl( + final LiveCameraStateFlutterApi flutterApi = + LiveCameraStateFlutterApiImpl( instanceManager: instanceManager, ); const int liveCameraStateId = 90; @@ -80,11 +83,12 @@ void main() { isA()); }); - test('flutter api onCameraClosing adds event to expected stream when called', () async { - LiveCameraState.cameraClosingStreamController.stream - .listen((bool event) { - expect(event, isTrue); - }); + test( + 'flutter api onCameraClosing adds event to expected stream when called', + () async { + LiveCameraState.cameraClosingStreamController.stream.listen((bool event) { + expect(event, isTrue); + }); LiveCameraStateFlutterApiImpl().onCameraClosing(); }); 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 b1e13213079b..f7d0470ca1e5 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 @@ -191,8 +191,7 @@ void main() { verify(mockApi.unbind(0, [1])); }); - test('unbindAll unbinds UseCases', - () async { + test('unbindAll unbinds UseCases', () async { final MockTestProcessCameraProviderHostApi mockApi = MockTestProcessCameraProviderHostApi(); TestProcessCameraProviderHostApi.setup(mockApi); 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 77953e467ebb..26bb55e351a6 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,22 +16,27 @@ 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 {}; }); @@ -43,23 +48,29 @@ abstract class TestJavaObjectHostApi { class _TestCameraInfoHostApiCodec extends StandardMessageCodec { const _TestCameraInfoHostApiCodec(); } + abstract class TestCameraInfoHostApi { static const MessageCodec codec = _TestCameraInfoHostApiCodec(); int getSensorRotationDegrees(int identifier); int getLiveCameraState(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}; }); @@ -67,15 +78,18 @@ abstract class TestCameraInfoHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState 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.getLiveCameraState was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState was null, expected non-null int.'); final int output = api.getLiveCameraState(arg_identifier!); return {'result': output}; }); @@ -87,23 +101,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 {}; @@ -112,18 +131,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}; }); } @@ -134,19 +159,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 { @@ -159,71 +189,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 {}; }); @@ -231,15 +284,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 {}; }); @@ -255,67 +311,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 { @@ -336,30 +408,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(); @@ -367,20 +438,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 {}; }); @@ -388,15 +464,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}; }); @@ -404,7 +483,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 { @@ -417,15 +498,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}; }); @@ -441,43 +525,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 {}; }); @@ -485,17 +574,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 {}; }); @@ -503,15 +596,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}; }); @@ -523,23 +619,28 @@ abstract class TestImageCaptureHostApi { class _TestLiveCameraStateHostApiCodec extends StandardMessageCodec { const _TestLiveCameraStateHostApiCodec(); } + abstract class TestLiveCameraStateHostApi { static const MessageCodec codec = _TestLiveCameraStateHostApiCodec(); void addObserver(int identifier); void removeObservers(int identifier); - static void setup(TestLiveCameraStateHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestLiveCameraStateHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.addObserver was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.addObserver 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.LiveCameraStateHostApi.addObserver was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.addObserver was null, expected non-null int.'); api.addObserver(arg_identifier!); return {}; }); @@ -547,15 +648,18 @@ abstract class TestLiveCameraStateHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers 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.LiveCameraStateHostApi.removeObservers was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers was null, expected non-null int.'); api.removeObservers(arg_identifier!); return {}; }); From e1f5bdbf027416b58795afed1f20b017f134e0de Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 22 Mar 2023 13:58:31 -0700 Subject: [PATCH 25/71] Fix flutter analyze --- .../example/lib/main.dart | 28 ++++--------------- .../lib/src/android_camera_camerax.dart | 5 ++-- .../lib/src/camera.dart | 4 +-- .../lib/src/camera_info.dart | 6 ++-- .../lib/src/live_camera_state.dart | 18 ++++++++++++ .../lib/src/process_camera_provider.dart | 16 ----------- .../test/android_camera_camerax_test.dart | 2 +- 7 files changed, 34 insertions(+), 45 deletions(-) diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index c09eebcd3b26..4814aa4a3ffc 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -54,8 +54,8 @@ class _CameraExampleHomeState extends State VideoPlayerController? videoController; VoidCallback? videoPlayerListener; bool enableAudio = true; - double _minAvailableExposureOffset = 0.0; - double _maxAvailableExposureOffset = 0.0; + const double _minAvailableExposureOffset = 0.0; + const double _maxAvailableExposureOffset = 0.0; double _currentExposureOffset = 0.0; late AnimationController _flashModeControlRowAnimationController; late Animation _flashModeControlRowAnimation; @@ -63,8 +63,8 @@ class _CameraExampleHomeState extends State late Animation _exposureModeControlRowAnimation; late AnimationController _focusModeControlRowAnimationController; late Animation _focusModeControlRowAnimation; - double _minAvailableZoom = 1.0; - double _maxAvailableZoom = 1.0; + const double _minAvailableZoom = 1.0; + const double _maxAvailableZoom = 1.0; double _currentScale = 1.0; double _baseScale = 1.0; @@ -637,24 +637,8 @@ 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), - // ]); + // TODO(camsim99): Add back functionality retrieving exposure offset + // and zoom level information. } 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 92a5551c1537..7cc3ee788a92 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 @@ -36,6 +36,7 @@ class AndroidCameraCameraX extends CameraPlatform { @visibleForTesting Camera? camera; + /// The [LiveCameraState] that represents the state of the [camera] instance. LiveCameraState? liveCameraState; /// The [Preview] instance that can be configured to present a live camera preview. @@ -169,7 +170,7 @@ class AndroidCameraCameraX extends CameraPlatform { // instance as bound but not paused. camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); - CameraInfo cameraInfo = await camera!.getCameraInfo(); + final CameraInfo cameraInfo = await camera!.getCameraInfo(); liveCameraState?.removeObservers(); liveCameraState = await cameraInfo.getLiveCameraState(); liveCameraState!.addObserver(); @@ -337,7 +338,7 @@ class AndroidCameraCameraX extends CameraPlatform { camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!]); - CameraInfo cameraInfo = await camera!.getCameraInfo(); + final CameraInfo cameraInfo = await camera!.getCameraInfo(); liveCameraState?.removeObservers(); liveCameraState = await cameraInfo.getLiveCameraState(); liveCameraState!.addObserver(); diff --git a/packages/camera/camera_android_camerax/lib/src/camera.dart b/packages/camera/camera_android_camerax/lib/src/camera.dart index 9f0e4f298f36..08be0e809c27 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera.dart @@ -48,13 +48,13 @@ class CameraHostApiImpl extends CameraHostApi { /// Gets the [CameraInfo] associated with the specified instance of [Camera]. Future getCameraInfoFromInstance(Camera instance) async { - final int? identifier = instanceManager.getIdentifier(instance); + final int identifier = instanceManager.getIdentifier(instance); assert(identifier != null, 'No Camera has the identifer of that which was requested.'); final int? cameraInfoId = await getCameraInfo(identifier!); return instanceManager - .getInstanceWithWeakReference(cameraInfoId!)! as CameraInfo; + .getInstanceWithWeakReference(cameraInfoId!)!; } } diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index fa9a2a8e9c14..43c9ae0943be 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -12,7 +12,7 @@ import 'instance_manager.dart'; import 'java_object.dart'; import 'live_camera_state.dart'; -/// Represents the metadata of a camera. +/// The metadata of a camera. /// /// See https://developer.android.com/reference/androidx/camera/core/CameraInfo. class CameraInfo extends JavaObject { @@ -58,12 +58,14 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { return sensorRotationDegrees; } + /// Gets the [LiveCameraState] that represents the state of the camera + /// to which the CameraInfo [instance] pertains. Future getLiveCameraStateFromInstance( CameraInfo instance) async { final int? identifier = instanceManager.getIdentifier(instance); assert(identifier != null, 'No CameraInfo has the identifer of that which was requested.'); - int? liveCameraStateId = await getLiveCameraState(identifier!); + int liveCameraStateId = await getLiveCameraState(identifier!); return instanceManager .getInstanceWithWeakReference(liveCameraStateId!)!; } diff --git a/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart b/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart index 23def44ccefa..08d56140afb0 100644 --- a/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart +++ b/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart @@ -11,6 +11,11 @@ import 'camerax_library.g.dart'; import 'instance_manager.dart'; import 'java_object.dart'; +/// The live state that a camera can be in. +/// +/// This is the LiveData of type CameraState that Android tracks in relation +/// to a CameraInfo instance. See +/// https://developer.android.com/reference/androidx/camera/core/CameraInfo#getCameraState(). class LiveCameraState extends JavaObject { /// Creates a detached [LiveCameraState]. LiveCameraState.detached({ @@ -31,8 +36,17 @@ class LiveCameraState extends JavaObject { late final LiveCameraStateHostApiImpl _api; + /// Adds an observer to the live camera state this instance represents. + /// + /// This observer will (i) send a notification to a previously set up + /// [LiveCameraStateFlutterApiImpl] whenever the camera begins to close + /// and (ii) send a notification to a previously set up + /// [SystemServicesFlutterApiImpl] whenever a camera error occurs while + /// transitioning between states. Future addObserver() => _api.addObserverFromInstance(this); + /// Removes any observers added to the live camera state this instance + /// represents. Future removeObservers() => _api.removeObserversFromInstance(this); } @@ -47,6 +61,8 @@ class LiveCameraStateHostApiImpl extends LiveCameraStateHostApi { /// Maintains instances stored to communicate with native language objects. late final InstanceManager instanceManager; + /// Adds an observer to the life camera state represented by the specified + /// [instance]. Future addObserverFromInstance(LiveCameraState instance) async { final int? identifier = instanceManager.getIdentifier(instance); assert(identifier != null, @@ -54,6 +70,8 @@ class LiveCameraStateHostApiImpl extends LiveCameraStateHostApi { addObserver(identifier!); } + /// Removes any observers added to the life camera state represented by the + /// specified [instance]. Future removeObserversFromInstance(LiveCameraState instance) async { final int? identifier = instanceManager.getIdentifier(instance); assert(identifier != null, 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 ee9ed3502c7e..580bebac8f4c 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 @@ -160,22 +160,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( 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 e1bc9a9615d3..8433dbfb5005 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 @@ -223,7 +223,7 @@ void main() { .thenAnswer((_) async => cameraId); when(camera.processCameraProvider!.bindToLifecycle( - camera.mockBackCameraSelector!, + camera.mockBackCameraSelector, [camera.testPreview, camera.testImageCapture])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => testCameraInfo); From 2d3409b870c5491e9dba5a94af9117291ec5c6bf Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 22 Mar 2023 14:07:50 -0700 Subject: [PATCH 26/71] Fix analyze --- .../io/flutter/plugins/camerax/CameraHostApiImpl.java | 4 ++++ .../camera_android_camerax/example/lib/main.dart | 10 +++++----- .../camera/camera_android_camerax/lib/src/camera.dart | 8 +++++--- .../camera_android_camerax/lib/src/camera_info.dart | 4 ++-- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java index 96ada1f57e24..3231f4a7b4ca 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java @@ -20,6 +20,10 @@ public CameraHostApiImpl(BinaryMessenger binaryMessenger, InstanceManager instan this.instanceManager = instanceManager; } + /** + * Retrieves the {@link CameraInfo} instance that contains information about the {@link Camera} + * instance with the specified identifier. + */ @Override public Long getCameraInfo(@NonNull Long identifier) { Camera camera = (Camera) Objects.requireNonNull(instanceManager.getInstance(identifier)); diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index 4814aa4a3ffc..a855be8b235d 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -54,8 +54,8 @@ class _CameraExampleHomeState extends State VideoPlayerController? videoController; VoidCallback? videoPlayerListener; bool enableAudio = true; - const double _minAvailableExposureOffset = 0.0; - const double _maxAvailableExposureOffset = 0.0; + final double _minAvailableExposureOffset = 0.0; + final double _maxAvailableExposureOffset = 0.0; double _currentExposureOffset = 0.0; late AnimationController _flashModeControlRowAnimationController; late Animation _flashModeControlRowAnimation; @@ -63,8 +63,8 @@ class _CameraExampleHomeState extends State late Animation _exposureModeControlRowAnimation; late AnimationController _focusModeControlRowAnimationController; late Animation _focusModeControlRowAnimation; - const double _minAvailableZoom = 1.0; - const double _maxAvailableZoom = 1.0; + final double _minAvailableZoom = 1.0; + final double _maxAvailableZoom = 1.0; double _currentScale = 1.0; double _baseScale = 1.0; @@ -421,7 +421,7 @@ class _CameraExampleHomeState extends State Text(_minAvailableExposureOffset.toString()), Slider( value: _currentExposureOffset, - min: _minAvailableExposureOffset, + // TODO(camsim99): Specify min available exposure offset here. max: _maxAvailableExposureOffset, label: _currentExposureOffset.toString(), onChanged: _minAvailableExposureOffset == diff --git a/packages/camera/camera_android_camerax/lib/src/camera.dart b/packages/camera/camera_android_camerax/lib/src/camera.dart index 08be0e809c27..ed4305d3c303 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera.dart @@ -24,6 +24,8 @@ class Camera extends JavaObject { late final CameraHostApiImpl _api; + /// Retrieve the [CameraInfo] instance that contains information about this + /// instance. Future getCameraInfo() async { return _api.getCameraInfoFromInstance(this); } @@ -48,13 +50,13 @@ class CameraHostApiImpl extends CameraHostApi { /// Gets the [CameraInfo] associated with the specified instance of [Camera]. Future getCameraInfoFromInstance(Camera instance) async { - final int identifier = instanceManager.getIdentifier(instance); + final int identifier = instanceManager.getIdentifier(instance)!; assert(identifier != null, 'No Camera has the identifer of that which was requested.'); - final int? cameraInfoId = await getCameraInfo(identifier!); + final int cameraInfoId = await getCameraInfo(identifier); return instanceManager - .getInstanceWithWeakReference(cameraInfoId!)!; + .getInstanceWithWeakReference(cameraInfoId)!; } } diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index 43c9ae0943be..ec6534da3614 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -65,9 +65,9 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { final int? identifier = instanceManager.getIdentifier(instance); assert(identifier != null, 'No CameraInfo has the identifer of that which was requested.'); - int liveCameraStateId = await getLiveCameraState(identifier!); + final int liveCameraStateId = await getLiveCameraState(identifier!); return instanceManager - .getInstanceWithWeakReference(liveCameraStateId!)!; + .getInstanceWithWeakReference(liveCameraStateId)!; } } From 1f40f47edf8179c31bccb514f3d72154c81c38b5 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 22 Mar 2023 16:00:23 -0700 Subject: [PATCH 27/71] Review --- .../plugins/camerax/CameraHostApiImpl.java | 2 +- .../camerax/CameraInfoHostApiImpl.java | 9 + .../flutter/plugins/camerax/CameraXProxy.java | 9 +- .../camerax/GeneratedCameraXLibrary.java | 1467 ++++++++++------- .../LiveCameraStateFlutterApiImpl.java | 5 +- .../camerax/LiveCameraStateHostApiImpl.java | 52 +- .../flutter/plugins/camerax/CameraTest.java | 18 +- .../example/lib/main.dart | 13 +- .../lib/src/android_camera_camerax.dart | 25 +- .../lib/src/camera.dart | 2 +- .../lib/src/camerax_library.g.dart | 389 +++-- .../test/test_camerax_library.g.dart | 341 ++-- 12 files changed, 1443 insertions(+), 889 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java index 3231f4a7b4ca..f21c0b520a34 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java @@ -22,7 +22,7 @@ public CameraHostApiImpl(BinaryMessenger binaryMessenger, InstanceManager instan /** * Retrieves the {@link CameraInfo} instance that contains information about the {@link Camera} - * instance with the specified identifier. + * instance with the specified identifier. */ @Override public Long getCameraInfo(@NonNull Long identifier) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index 239da3d14d39..796996321883 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -24,6 +24,10 @@ public CameraInfoHostApiImpl(BinaryMessenger binaryMessenger, InstanceManager in this.instanceManager = instanceManager; } + /** + * Retrieves the sensor rotation degrees of the {@link androidx.camera.core.Camera} that is + * represented by the {@link CameraInfo} with the specified identifier. + */ @Override public Long getSensorRotationDegrees(@NonNull Long identifier) { CameraInfo cameraInfo = @@ -31,6 +35,11 @@ public Long getSensorRotationDegrees(@NonNull Long identifier) { return Long.valueOf(cameraInfo.getSensorRotationDegrees()); } + /** + * Retrieves the {@link LiveData} of the {@link CameraState} that is tied to the {@link + * androidx.camera.core.Camera} that is represented by the {@link CameraInfo} with the specified + * identifier. + */ @Override public Long getLiveCameraState(@NonNull Long identifier) { CameraInfo cameraInfo = 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 236f997bbde4..35804b978302 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 @@ -16,14 +16,17 @@ /** Utility class used to create CameraX-related objects primarily for testing purposes. */ public class CameraXProxy { + /** Creates a builder for a {@link CameraSelector}. */ public CameraSelector.Builder createCameraSelectorBuilder() { return new CameraSelector.Builder(); } + /** Creates an instance of {@link CameraPermissionsManager}. */ public CameraPermissionsManager createCameraPermissionsManager() { return new CameraPermissionsManager(); } + /** Creates an instance of the {@link DeviceOrientationManager}. */ public DeviceOrientationManager createDeviceOrientationManager( @NonNull Activity activity, @NonNull Boolean isFrontFacing, @@ -32,16 +35,18 @@ public DeviceOrientationManager createDeviceOrientationManager( return new DeviceOrientationManager(activity, isFrontFacing, sensorOrientation, callback); } + /** Creates a builder for an instance of the {@link Preview} use case. */ public Preview.Builder createPreviewBuilder() { return new Preview.Builder(); } + /** Creates a {@link Surface} instance from the specified {@link SurfaceTexture}. */ public Surface createSurface(@NonNull SurfaceTexture surfaceTexture) { return new Surface(surfaceTexture); } /** - * Creates an instance of the {@code SystemServicesFlutterApiImpl}. + * Creates an instance of the {@link SystemServicesFlutterApiImpl}. * *

Included in this class to utilize the callback methods it provides, e.g. {@code * onCameraError(String)}. @@ -51,6 +56,7 @@ public SystemServicesFlutterApiImpl createSystemServicesFlutterApiImpl( return new SystemServicesFlutterApiImpl(binaryMessenger); } + /** Creates a builder for an instance of the {@link ImageCapture} use case. */ public ImageCapture.Builder createImageCaptureBuilder() { return new ImageCapture.Builder(); } @@ -62,6 +68,7 @@ public ImageCapture.OutputFileOptions createImageCaptureOutputFileOptions(@NonNu return new ImageCapture.OutputFileOptions.Builder(file).build(); } + /** Creates an instance of the {@link LiveCameraStateFlutterApiImpl}. */ public LiveCameraStateFlutterApiImpl createLiveCameraStateFlutterApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { return new LiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); 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 c676b5057402..8d3ac588eb32 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,32 +154,38 @@ 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 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(); @@ -155,35 +194,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); @@ -192,263 +237,337 @@ 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 getLiveCameraState(@NonNull Long identifier); + @NonNull + Long getSensorRotationDegrees(@NonNull Long identifier); + + @NonNull + Long getLiveCameraState(@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); } } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", + 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.getLiveCameraState((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.getLiveCameraState( + (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. */ @@ -456,209 +575,259 @@ 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 CameraHostApiCodec extends StandardMessageCodec { public static final CameraHostApiCodec INSTANCE = new CameraHostApiCodec(); + private CameraHostApiCodec() {} } - /** 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 CameraHostApi { - @NonNull Long getCameraInfo(@NonNull Long identifier); + @NonNull + Long getCameraInfo(@NonNull Long identifier); /** The codec used by CameraHostApi. */ static MessageCodec getCodec() { @@ -669,86 +838,102 @@ static MessageCodec getCodec() { static void setup(BinaryMessenger binaryMessenger, CameraHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CameraHostApi.getCameraInfo", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraHostApi.getCameraInfo", 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.getCameraInfo((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.getCameraInfo((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 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. */ @@ -756,163 +941,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() { @@ -923,129 +1150,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. */ @@ -1053,106 +1302,123 @@ 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 LiveCameraStateHostApiCodec extends StandardMessageCodec { public static final LiveCameraStateHostApiCodec INSTANCE = new LiveCameraStateHostApiCodec(); + private LiveCameraStateHostApiCodec() {} } - /** 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 LiveCameraStateHostApi { void addObserver(@NonNull Long identifier); + void removeObservers(@NonNull Long identifier); /** The codec used by LiveCameraStateHostApi. */ @@ -1160,96 +1426,123 @@ static MessageCodec getCodec() { return LiveCameraStateHostApiCodec.INSTANCE; } - /** Sets up an instance of `LiveCameraStateHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `LiveCameraStateHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, LiveCameraStateHostApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.LiveCameraStateHostApi.addObserver", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.LiveCameraStateHostApi.addObserver", + 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.addObserver((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.addObserver((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.LiveCameraStateHostApi.removeObservers", getCodec()); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers", + 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.removeObservers((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.removeObservers((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 LiveCameraStateFlutterApiCodec extends StandardMessageCodec { - public static final LiveCameraStateFlutterApiCodec INSTANCE = new LiveCameraStateFlutterApiCodec(); + public static final LiveCameraStateFlutterApiCodec INSTANCE = + new LiveCameraStateFlutterApiCodec(); + private LiveCameraStateFlutterApiCodec() {} } - /** 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 LiveCameraStateFlutterApi { private final BinaryMessenger binaryMessenger; - public LiveCameraStateFlutterApi(BinaryMessenger argBinaryMessenger){ + + public LiveCameraStateFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } + public interface Reply { void reply(T reply); } + static MessageCodec getCodec() { return LiveCameraStateFlutterApiCodec.INSTANCE; } public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.LiveCameraStateFlutterApi.create", getCodec()); - channel.send(new ArrayList(Arrays.asList(identifierArg)), channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.LiveCameraStateFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg)), + channelReply -> { + callback.reply(null); + }); } + public void onCameraClosing(Reply callback) { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing", getCodec()); - channel.send(null, channelReply -> { - callback.reply(null); - }); + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing", + getCodec()); + channel.send( + null, + 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/LiveCameraStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateFlutterApiImpl.java index b2333d049629..c5a7b8e9c09f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateFlutterApiImpl.java @@ -4,6 +4,7 @@ package io.flutter.plugins.camerax; +import androidx.annotation.NonNull; import androidx.camera.core.CameraState; import androidx.lifecycle.LiveData; import io.flutter.plugin.common.BinaryMessenger; @@ -18,11 +19,11 @@ public LiveCameraStateFlutterApiImpl( private final InstanceManager instanceManager; - void create(LiveData liveCameraState, Reply reply) { + void create(@NonNull LiveData liveCameraState, @NonNull Reply reply) { create(instanceManager.addHostCreatedInstance(liveCameraState), reply); } - void sendCameraClosingEvent(Reply reply) { + void sendCameraClosingEvent(@NonNull Reply reply) { onCameraClosing(reply); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java index 70df8cbf6397..8984a3717905 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java @@ -32,6 +32,14 @@ public void setLifecycleOwner(LifecycleOwner lifecycleOwner) { this.lifecycleOwner = lifecycleOwner; } + /** + * Adds an observer to the {@link LiveData} of the {@link CameraState} that is represented by the + * specified identifier. + * + *

This observer is created with {@link + * LiveCameraStateHostApiImpl#getCameraStateErrorDescription(int)}, and it will only observe + * within the lifetime of the {@link LiveCameraStateHostApiImpl#lifecycleOwner}. + */ @Override public void addObserver(@NonNull Long identifier) { @SuppressWarnings("unchecked") @@ -40,6 +48,14 @@ public void addObserver(@NonNull Long identifier) { liveCameraState.observe(lifecycleOwner, createCameraStateObserver()); } + /** + * Creates an {@link Observer} of the different {@link CameraState}s that a camera may + * encountered. + * + *

This observer notifies the Dart side when the camera is closing with an instance of {@link + * LiveCameraStateFlutterApiImpl}, and notifies the Dart side when the camera encounters a error + * when transitioning between states with an intance of {@link SystemServicesFlutterApiImpl}. + */ private Observer createCameraStateObserver() { return new Observer() { @Override @@ -54,40 +70,22 @@ public void onChanged(@NonNull CameraState cameraState) { SystemServicesFlutterApiImpl systemServicesFlutterApi = cameraXProxy.createSystemServicesFlutterApiImpl(binaryMessenger); systemServicesFlutterApi.sendCameraError( - getCameraStateErrorDescription(cameraStateError.getCode()), reply -> {}); + getCameraStateErrorDescription(cameraStateError), reply -> {}); } } }; } - private String getCameraStateErrorDescription(@NonNull int cameraStateErrorCode) { - // See CameraState errors: https://developer.android.com/reference/androidx/camera/core/CameraState#constants_1. - switch (cameraStateErrorCode) { - case CameraState.ERROR_CAMERA_IN_USE: - return cameraStateErrorCode - + ": The camera was already in use, possibly by a higher-priority camera client."; - case CameraState.ERROR_MAX_CAMERAS_IN_USE: - return cameraStateErrorCode - + ": The limit number of open cameras has been reached, and more cameras cannot be opened until other instances are closed."; - case CameraState.ERROR_OTHER_RECOVERABLE_ERROR: - return cameraStateErrorCode - + ": The camera device has encountered a recoverable error. CameraX will attempt to recover from the error."; - case CameraState.ERROR_STREAM_CONFIG: - return cameraStateErrorCode + ": Configuring the camera has failed."; - case CameraState.ERROR_CAMERA_DISABLED: - return cameraStateErrorCode - + ": The camera device could not be opened due to a device policy. Thia may be caused by a client from a background process attempting to open the camera."; - case CameraState.ERROR_CAMERA_FATAL_ERROR: - return cameraStateErrorCode - + ": The camera was closed due to a fatal error. This may require the Android device be shut down and restarted to restore camera function or may indicate a persistent camera hardware problem."; - case CameraState.ERROR_DO_NOT_DISTURB_MODE_ENABLED: - return cameraStateErrorCode - + ": The camera could not be opened because 'Do Not Disturb' mode is enabled. Please disable this mode, and try opening the camera again."; - default: - return "There was an undefined issue with the camera state."; - } + /** Returns an error message corresponding to the specified {@link CameraState.StateError}. */ + private String getCameraStateErrorDescription(@NonNull CameraState.StateError cameraStateError) { + return cameraStateError.getCode() + ": " + cameraStateError.getCause().getMessage(); } + /** + * Removes any observers of the {@link LiveData} of the {@link CameraState} that is represented by + * the specified identifier within the lifetime of the {@link + * LiveCameraStateHostApiImpl#lifecycleOwner}. + */ @Override @SuppressWarnings("unchecked") public void removeObservers(@NonNull Long identifier) { diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraTest.java index e2135b3945b0..828c6ce04d7f 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraTest.java @@ -6,6 +6,7 @@ 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; @@ -39,7 +40,22 @@ public void tearDown() { } @Test - public void flutterApiCreateTest() { + public void getCameraInfo_makesCallToGetCameraInfo() { + final CameraHostApiImpl cameraHostApiImpl = + CameraHostApiImpl(mockBinaryMessenger, testInstanceManager); + final Long cameraIdentifier = 65L; + CameraInfo mockCameraInfo = mock(CameraInfo.class); + + testInstanceManager.addDartCreatedInstance(camera, cameraIdentifier); + Long mockCameraInfoIdentifier = testInstanceManager.addHostCreatedInstance(mockCameraInfo); + + when(camera.getCameraInfo()).thenReturn(mockCameraInfo); + + assertEquals(cameraHostApiImpl.getCameraInfo(cameraIdentifier), mockCameraInfoIdentifier); + } + + @Test + public void flutterApiCreate_makesCallToCreateInstance() { final CameraFlutterApiImpl spyFlutterApi = spy(new CameraFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index a855be8b235d..d0e79fba1050 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -54,8 +54,6 @@ class _CameraExampleHomeState extends State VideoPlayerController? videoController; VoidCallback? videoPlayerListener; bool enableAudio = true; - final double _minAvailableExposureOffset = 0.0; - final double _maxAvailableExposureOffset = 0.0; double _currentExposureOffset = 0.0; late AnimationController _flashModeControlRowAnimationController; late Animation _flashModeControlRowAnimation; @@ -63,11 +61,16 @@ class _CameraExampleHomeState extends State late Animation _exposureModeControlRowAnimation; late AnimationController _focusModeControlRowAnimationController; late Animation _focusModeControlRowAnimation; - final double _minAvailableZoom = 1.0; - final double _maxAvailableZoom = 1.0; + double _currentScale = 1.0; double _baseScale = 1.0; + // TODO(camsim99): Make these configuration values variable. + final double _minAvailableZoom = 1.0; + final double _maxAvailableZoom = 1.0; + final double _minAvailableExposureOffset = 0.0; + final double _maxAvailableExposureOffset = 0.0; + // Counting pointers (number of user fingers on screen) int _pointers = 0; @@ -421,7 +424,7 @@ class _CameraExampleHomeState extends State Text(_minAvailableExposureOffset.toString()), Slider( value: _currentExposureOffset, - // TODO(camsim99): Specify min available exposure offset here. + // TODO(camsim99): Specify minimum available exposure offset here. max: _maxAvailableExposureOffset, label: _currentExposureOffset.toString(), onChanged: _minAvailableExposureOffset == 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 7cc3ee788a92..8433d94d495d 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 @@ -126,9 +126,6 @@ class AndroidCameraCameraX extends CameraPlatform { /// To return the camera ID, which is equivalent to the ID of the surface texture /// that a camera preview can be drawn to, a [Preview] instance is configured /// and bound to the [ProcessCameraProvider] instance. - // TODO(camsim99): Merge changes for image capture implementation, and ensure - // onCameraClosing is not called when the processCameraProvider has its - // UseCases cleared here if it was not previously null. @override Future createCamera( CameraDescription cameraDescription, @@ -170,10 +167,7 @@ class AndroidCameraCameraX extends CameraPlatform { // instance as bound but not paused. camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); - final CameraInfo cameraInfo = await camera!.getCameraInfo(); - liveCameraState?.removeObservers(); - liveCameraState = await cameraInfo.getLiveCameraState(); - liveCameraState!.addObserver(); + _updateLiveCameraState(); _previewIsPaused = false; return flutterSurfaceTextureId; @@ -322,7 +316,7 @@ class AndroidCameraCameraX extends CameraPlatform { // Methods for binding/unbinding UseCases to the lifecycle of the camera // controlled by a ProcessCameraProvider instance: - + /// Binds [preview] instance to the camera lifecycle controlled by the /// [processCameraProvider]. Future _bindPreviewToLifecycle() async { @@ -338,10 +332,7 @@ class AndroidCameraCameraX extends CameraPlatform { camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!]); - final CameraInfo cameraInfo = await camera!.getCameraInfo(); - liveCameraState?.removeObservers(); - liveCameraState = await cameraInfo.getLiveCameraState(); - liveCameraState!.addObserver(); + _updateLiveCameraState(); } /// Unbinds [preview] instance to camera lifecycle controlled by the @@ -357,6 +348,16 @@ class AndroidCameraCameraX extends CameraPlatform { processCameraProvider!.unbind([preview!]); } + // Methods concerning camera information: + + /// Adds fresh observers to the [LiveCameraState] of the current [camera]. + Future _updateLiveCameraState() async { + final CameraInfo cameraInfo = await camera!.getCameraInfo(); + liveCameraState?.removeObservers(); + liveCameraState = await cameraInfo.getLiveCameraState(); + liveCameraState!.addObserver(); + } + // 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/camera.dart b/packages/camera/camera_android_camerax/lib/src/camera.dart index ed4305d3c303..10783de2477e 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera.dart @@ -24,7 +24,7 @@ class Camera extends JavaObject { late final CameraHostApiImpl _api; - /// Retrieve the [CameraInfo] instance that contains information about this + /// Retrieves the [CameraInfo] instance that contains information about this /// instance. Future getCameraInfo() async { return _api.getCameraInfoFromInstance(this); 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 751eaeee9834..e31ea5aa811c 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,7 +68,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; @@ -76,7 +77,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) { @@ -85,7 +87,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?, @@ -105,7 +108,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; @@ -113,7 +117,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) { @@ -122,7 +127,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?, @@ -137,22 +143,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; }); @@ -169,7 +180,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; @@ -177,7 +189,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) { @@ -186,7 +199,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?, @@ -204,7 +218,8 @@ class CameraInfoHostApi { Future getLiveCameraState(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -213,7 +228,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?, @@ -233,22 +249,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; }); @@ -265,7 +286,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; @@ -273,16 +295,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?, @@ -293,18 +318,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?, @@ -324,22 +353,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; @@ -357,15 +391,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) { @@ -374,7 +411,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?, @@ -392,7 +430,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) { @@ -401,7 +441,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?, @@ -417,18 +458,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?, @@ -446,16 +494,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?, @@ -473,16 +524,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?, @@ -495,7 +549,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) { @@ -504,7 +559,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?, @@ -519,22 +575,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; }); @@ -551,7 +613,8 @@ class CameraHostApi { /// Constructor for [CameraHostApi]. 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. - CameraHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + CameraHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -559,7 +622,8 @@ class CameraHostApi { Future getCameraInfo(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -568,7 +632,8 @@ class CameraHostApi { 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?, @@ -588,6 +653,7 @@ class CameraHostApi { class _CameraFlutterApiCodec extends StandardMessageCodec { const _CameraFlutterApiCodec(); } + abstract class CameraFlutterApi { static const MessageCodec codec = _CameraFlutterApiCodec(); @@ -595,15 +661,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; }); @@ -619,20 +688,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); - } } } @@ -641,24 +709,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?, @@ -669,18 +742,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?, @@ -693,7 +771,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) { @@ -702,7 +782,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?, @@ -717,23 +798,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; }); @@ -741,15 +828,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; }); @@ -765,27 +855,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); - } } } @@ -794,24 +882,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?, @@ -824,7 +917,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) { @@ -833,7 +927,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?, @@ -851,7 +946,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) { @@ -860,7 +956,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?, @@ -873,7 +970,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) { @@ -882,7 +980,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?, @@ -906,20 +1005,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); - } } } @@ -928,24 +1026,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?, @@ -958,16 +1061,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?, @@ -980,7 +1086,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) { @@ -989,7 +1096,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?, @@ -1014,7 +1122,8 @@ class LiveCameraStateHostApi { /// Constructor for [LiveCameraStateHostApi]. 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. - LiveCameraStateHostApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + LiveCameraStateHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; @@ -1022,7 +1131,8 @@ class LiveCameraStateHostApi { Future addObserver(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -1031,7 +1141,8 @@ class LiveCameraStateHostApi { 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?, @@ -1044,7 +1155,8 @@ class LiveCameraStateHostApi { Future removeObservers(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', codec, + binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_identifier]) as Map?; if (replyMap == null) { @@ -1053,7 +1165,8 @@ class LiveCameraStateHostApi { 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?, @@ -1068,23 +1181,28 @@ class LiveCameraStateHostApi { class _LiveCameraStateFlutterApiCodec extends StandardMessageCodec { const _LiveCameraStateFlutterApiCodec(); } + abstract class LiveCameraStateFlutterApi { static const MessageCodec codec = _LiveCameraStateFlutterApiCodec(); void create(int identifier); void onCameraClosing(); - static void setup(LiveCameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(LiveCameraStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateFlutterApi.create', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.LiveCameraStateFlutterApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.LiveCameraStateFlutterApi.create was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.LiveCameraStateFlutterApi.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.LiveCameraStateFlutterApi.create was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.LiveCameraStateFlutterApi.create was null, expected non-null int.'); api.create(arg_identifier!); return; }); @@ -1092,7 +1210,8 @@ abstract class LiveCameraStateFlutterApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { 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 9d72e4206450..1de5875eceb0 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,23 +75,29 @@ abstract class TestJavaObjectHostApi { class _TestCameraInfoHostApiCodec extends StandardMessageCodec { const _TestCameraInfoHostApiCodec(); } + abstract class TestCameraInfoHostApi { static const MessageCodec codec = _TestCameraInfoHostApiCodec(); int getSensorRotationDegrees(int identifier); int getLiveCameraState(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}; }); @@ -91,15 +105,18 @@ abstract class TestCameraInfoHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState 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.getLiveCameraState was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState was null, expected non-null int.'); final int output = api.getLiveCameraState(arg_identifier!); return {'result': output}; }); @@ -111,23 +128,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 {}; @@ -136,18 +158,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}; }); } @@ -158,19 +186,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 { @@ -183,71 +216,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 {}; }); @@ -255,15 +311,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 {}; }); @@ -279,67 +338,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 { @@ -360,30 +435,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(); @@ -391,20 +465,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 {}; }); @@ -412,15 +491,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}; }); @@ -428,7 +510,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 { @@ -441,15 +525,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}; }); @@ -465,43 +552,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 {}; }); @@ -509,17 +601,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 {}; }); @@ -527,15 +623,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}; }); @@ -547,23 +646,28 @@ abstract class TestImageCaptureHostApi { class _TestLiveCameraStateHostApiCodec extends StandardMessageCodec { const _TestLiveCameraStateHostApiCodec(); } + abstract class TestLiveCameraStateHostApi { static const MessageCodec codec = _TestLiveCameraStateHostApiCodec(); void addObserver(int identifier); void removeObservers(int identifier); - static void setup(TestLiveCameraStateHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestLiveCameraStateHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.addObserver was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.addObserver 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.LiveCameraStateHostApi.addObserver was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.addObserver was null, expected non-null int.'); api.addObserver(arg_identifier!); return {}; }); @@ -571,15 +675,18 @@ abstract class TestLiveCameraStateHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers 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.LiveCameraStateHostApi.removeObservers was null, expected non-null int.'); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers was null, expected non-null int.'); api.removeObservers(arg_identifier!); return {}; }); From 6c9b04ed09547ebd9dea8d714417f1ac62c6b3e5 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 23 Mar 2023 14:10:29 -0700 Subject: [PATCH 28/71] Fix tests, review 2 --- .../camerax/LiveCameraStateHostApiImpl.java | 38 +++++++++++++++++-- .../camerax/SystemServicesFlutterApiImpl.java | 1 + .../flutter/plugins/camerax/CameraTest.java | 5 ++- .../test/live_camera_state_test.dart | 5 ++- .../test/live_camera_state_test.mocks.dart | 19 ++++++++++ 5 files changed, 62 insertions(+), 6 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java index 8984a3717905..e47cbd6580ad 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java @@ -67,18 +67,48 @@ public void onChanged(@NonNull CameraState cameraState) { } CameraState.StateError cameraStateError = cameraState.getError(); if (cameraStateError != null) { - SystemServicesFlutterApiImpl systemServicesFlutterApi = + SystemServicesFlutterApiImpl systemServicesFlutterApiImpl = cameraXProxy.createSystemServicesFlutterApiImpl(binaryMessenger); - systemServicesFlutterApi.sendCameraError( + systemServicesFlutterApiImpl.sendCameraError( getCameraStateErrorDescription(cameraStateError), reply -> {}); } } }; } - /** Returns an error message corresponding to the specified {@link CameraState.StateError}. */ + /** + * Returns an error message corresponding to the specified {@link CameraState.StateError}. + * + *

See https://developer.android.com/reference/androidx/camera/core/CameraState#constants_1 for + * more information on the different {@link CameraState.StateError} types. + */ private String getCameraStateErrorDescription(@NonNull CameraState.StateError cameraStateError) { - return cameraStateError.getCode() + ": " + cameraStateError.getCause().getMessage(); + final int cameraStateErrorCode = cameraStateError.getCode(); + final String cameraStateErrorDescription = cameraStateErrorCode + ": "; + switch (cameraStateErrorCode) { + case CameraState.ERROR_CAMERA_IN_USE: + return cameraStateErrorDescription + + "The camera was already in use, possibly by a higher-priority camera client."; + case CameraState.ERROR_MAX_CAMERAS_IN_USE: + return cameraStateErrorDescription + + "The limit number of open cameras has been reached, and more cameras cannot be opened until other instances are closed."; + case CameraState.ERROR_OTHER_RECOVERABLE_ERROR: + return cameraStateErrorDescription + + "The camera device has encountered a recoverable error. CameraX will attempt to recover from the error."; + case CameraState.ERROR_STREAM_CONFIG: + return cameraStateErrorDescription + "Configuring the camera has failed."; + case CameraState.ERROR_CAMERA_DISABLED: + return cameraStateErrorDescription + + "The camera device could not be opened due to a device policy. Thia may be caused by a client from a background process attempting to open the camera."; + case CameraState.ERROR_CAMERA_FATAL_ERROR: + return cameraStateErrorDescription + + "The camera was closed due to a fatal error. This may require the Android device be shut down and restarted to restore camera function or may indicate a persistent camera hardware problem."; + case CameraState.ERROR_DO_NOT_DISTURB_MODE_ENABLED: + return cameraStateErrorDescription + + "The camera could not be opened because 'Do Not Disturb' mode is enabled. Please disable this mode, and try opening the camera again."; + default: + return "There was an undefined issue with the camera state."; + } } /** diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/SystemServicesFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/SystemServicesFlutterApiImpl.java index 63158974f43a..00524b3c6743 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/SystemServicesFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/SystemServicesFlutterApiImpl.java @@ -19,6 +19,7 @@ public void sendDeviceOrientationChangedEvent( } public void sendCameraError(@NonNull String errorDescription, @NonNull Reply reply) { + System.out.println("HELLO?!?!?!"); super.onCameraError(errorDescription, reply); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraTest.java index 828c6ce04d7f..9132df0d4237 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraTest.java @@ -4,13 +4,16 @@ 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.spy; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import androidx.camera.core.Camera; +import androidx.camera.core.CameraInfo; import io.flutter.plugin.common.BinaryMessenger; import java.util.Objects; import org.junit.After; @@ -42,7 +45,7 @@ public void tearDown() { @Test public void getCameraInfo_makesCallToGetCameraInfo() { final CameraHostApiImpl cameraHostApiImpl = - CameraHostApiImpl(mockBinaryMessenger, testInstanceManager); + new CameraHostApiImpl(mockBinaryMessenger, testInstanceManager); final Long cameraIdentifier = 65L; CameraInfo mockCameraInfo = mock(CameraInfo.class); diff --git a/packages/camera/camera_android_camerax/test/live_camera_state_test.dart b/packages/camera/camera_android_camerax/test/live_camera_state_test.dart index bf932c88934a..6574365fd75c 100644 --- a/packages/camera/camera_android_camerax/test/live_camera_state_test.dart +++ b/packages/camera/camera_android_camerax/test/live_camera_state_test.dart @@ -12,10 +12,13 @@ import 'package:mockito/mockito.dart'; import 'live_camera_state_test.mocks.dart'; import 'test_camerax_library.g.dart'; -@GenerateMocks([TestLiveCameraStateHostApi]) +@GenerateMocks([TestLiveCameraStateHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); + // Mocks the call to clear the native InstanceManager. + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + group('LiveCameraState', () { tearDown(() => TestLiveCameraStateHostApi.setup(null)); diff --git a/packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart b/packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart index 700a72c07efb..7c07458cdd95 100644 --- a/packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart @@ -44,3 +44,22 @@ class MockTestLiveCameraStateHostApi 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 6c6cbb4e2badf3ee141c78c2a9e461e6c378e1e0 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 23 Mar 2023 14:41:52 -0700 Subject: [PATCH 29/71] review 3 --- .../camerax/SystemServicesFlutterApiImpl.java | 1 - .../lib/src/camera.dart | 12 ++-- .../lib/src/camera_info.dart | 1 + .../lib/src/live_camera_state.dart | 2 +- .../test/android_camera_camerax_test.dart | 58 +++++++++++-------- 5 files changed, 43 insertions(+), 31 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/SystemServicesFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/SystemServicesFlutterApiImpl.java index 00524b3c6743..63158974f43a 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/SystemServicesFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/SystemServicesFlutterApiImpl.java @@ -19,7 +19,6 @@ public void sendDeviceOrientationChangedEvent( } public void sendCameraError(@NonNull String errorDescription, @NonNull Reply reply) { - System.out.println("HELLO?!?!?!"); super.onCameraError(errorDescription, reply); } } diff --git a/packages/camera/camera_android_camerax/lib/src/camera.dart b/packages/camera/camera_android_camerax/lib/src/camera.dart index 10783de2477e..7101be36e8c0 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera.dart @@ -16,15 +16,19 @@ import 'java_object.dart'; /// See https://developer.android.com/reference/androidx/camera/core/Camera. class Camera extends JavaObject { /// Constructs a [Camera] that is not automatically attached to a native object. - Camera.detached({super.binaryMessenger, super.instanceManager}) - : super.detached() { - _api = CameraHostApiImpl(); + Camera.detached( + {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = CameraHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } late final CameraHostApiImpl _api; - /// Retrieves the [CameraInfo] instance that contains information about this + /// Retrieve the [CameraInfo] instance that contains information about this /// instance. Future getCameraInfo() async { return _api.getCameraInfoFromInstance(this); diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index ec6534da3614..6f9ee26546b5 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -65,6 +65,7 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { final int? identifier = instanceManager.getIdentifier(instance); assert(identifier != null, 'No CameraInfo has the identifer of that which was requested.'); + final int liveCameraStateId = await getLiveCameraState(identifier!); return instanceManager .getInstanceWithWeakReference(liveCameraStateId)!; diff --git a/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart b/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart index 08d56140afb0..08e67549e7f0 100644 --- a/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart +++ b/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart @@ -11,7 +11,7 @@ import 'camerax_library.g.dart'; import 'instance_manager.dart'; import 'java_object.dart'; -/// The live state that a camera can be in. +/// The live state of the camera. /// /// This is the LiveData of type CameraState that Android tracks in relation /// to a CameraInfo instance. See 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 8433dbfb5005..c1f22451434f 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 @@ -102,7 +102,8 @@ void main() { 'createCamera requests permissions, starts listening for device orientation changes, and returns flutter surface texture ID', () async { final MockAndroidCameraCamerax camera = MockAndroidCameraCamerax(); - camera.processCameraProvider = MockProcessCameraProvider(); + final MockProcessCameraProvider processCameraProvider = + MockProcessCameraProvider(); const CameraLensDirection testLensDirection = CameraLensDirection.back; const int testSensorOrientation = 90; const CameraDescription testCameraDescription = CameraDescription( @@ -112,18 +113,18 @@ void main() { const ResolutionPreset testResolutionPreset = ResolutionPreset.veryHigh; const bool enableAudio = true; const int testSurfaceTextureId = 6; - final MockCamera testCamera = MockCamera(); - final MockCameraInfo testCameraInfo = MockCameraInfo(); + final MockCamera mockCamera = MockCamera(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); when(camera.testPreview.setSurfaceProvider()) .thenAnswer((_) async => testSurfaceTextureId); - when(camera.processCameraProvider!.bindToLifecycle( - camera.mockBackCameraSelector, + when(processCameraProvider.bindToLifecycle(camera.mockBackCameraSelector, [camera.testPreview, camera.testImageCapture])) - .thenAnswer((_) async => testCamera); - when(testCamera.getCameraInfo()).thenAnswer((_) async => testCameraInfo); - when(testCameraInfo.getLiveCameraState()) + .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); + when(mockCameraInfo.getLiveCameraState()) .thenAnswer((_) async => MockLiveCameraState()); + camera.processCameraProvider = processCameraProvider; expect( await camera.createCamera(testCameraDescription, testResolutionPreset, @@ -151,7 +152,8 @@ void main() { 'createCamera binds Preview and ImageCapture use cases to ProcessCameraProvider instance', () async { final MockAndroidCameraCamerax camera = MockAndroidCameraCamerax(); - camera.processCameraProvider = MockProcessCameraProvider(); + final ProcessCameraProvider processCameraProvider = + MockProcessCameraProvider(); const CameraLensDirection testLensDirection = CameraLensDirection.back; const int testSensorOrientation = 90; const CameraDescription testCameraDescription = CameraDescription( @@ -160,16 +162,16 @@ void main() { sensorOrientation: testSensorOrientation); const ResolutionPreset testResolutionPreset = ResolutionPreset.veryHigh; const bool enableAudio = true; - final MockCamera testCamera = MockCamera(); - final MockCameraInfo testCameraInfo = MockCameraInfo(); + final MockCamera mockCamera = MockCamera(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); - when(camera.processCameraProvider!.bindToLifecycle( - camera.mockBackCameraSelector, + when(processCameraProvider.bindToLifecycle(camera.mockBackCameraSelector, [camera.testPreview, camera.testImageCapture])) - .thenAnswer((_) async => testCamera); - when(testCamera.getCameraInfo()).thenAnswer((_) async => testCameraInfo); - when(testCameraInfo.getLiveCameraState()) + .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); + when(mockCameraInfo.getLiveCameraState()) .thenAnswer((_) async => MockLiveCameraState()); + camera.processCameraProvider = processCameraProvider; await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); @@ -202,7 +204,7 @@ void main() { final Camera mockCamera = MockCamera(); final ResolutionInfo testResolutionInfo = ResolutionInfo(width: resolutionWidth, height: resolutionHeight); - final CameraInfo testCameraInfo = MockCameraInfo(); + final CameraInfo mockCameraInfo = MockCameraInfo(); // TODO(camsim99): Modify this when camera configuration is supported and // defualt values no longer being used. @@ -226,8 +228,8 @@ void main() { camera.mockBackCameraSelector, [camera.testPreview, camera.testImageCapture])) .thenAnswer((_) async => mockCamera); - when(mockCamera.getCameraInfo()).thenAnswer((_) async => testCameraInfo); - when(testCameraInfo.getLiveCameraState()) + when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); + when(mockCameraInfo.getLiveCameraState()) .thenAnswer((_) async => MockLiveCameraState()); await camera.createCamera(testCameraDescription, testResolutionPreset, @@ -378,14 +380,16 @@ void main() { test('resumePreview binds preview to lifecycle if not already bound', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockProcessCameraProvider mockProcessCameraProvider = + MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); - camera.processCameraProvider = MockProcessCameraProvider(); + camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - when(camera.processCameraProvider!.bindToLifecycle( + when(mockProcessCameraProvider.bindToLifecycle( camera.cameraSelector!, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); @@ -402,15 +406,17 @@ void main() { 'buildPreview returns a FutureBuilder that does not return a Texture until the preview is bound to the lifecycle', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockProcessCameraProvider mockProcessCameraProvider = + MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); const int textureId = 75; - camera.processCameraProvider = MockProcessCameraProvider(); + camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - when(camera.processCameraProvider!.bindToLifecycle( + when(mockProcessCameraProvider.bindToLifecycle( camera.cameraSelector!, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); @@ -438,15 +444,17 @@ void main() { 'buildPreview returns a FutureBuilder that returns a Texture once the preview is bound to the lifecycle', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockProcessCameraProvider mockProcessCameraProvider = + MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); const int textureId = 75; - camera.processCameraProvider = MockProcessCameraProvider(); + camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - when(camera.processCameraProvider!.bindToLifecycle( + when(mockProcessCameraProvider.bindToLifecycle( camera.cameraSelector!, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); From 06c15453634c578f7ee84c17c6c8a0f4f2aae9c1 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 23 Mar 2023 14:47:41 -0700 Subject: [PATCH 30/71] fix analyze --- .../test/android_camera_camerax_test.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 c1f22451434f..798654414c6f 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 @@ -390,7 +390,7 @@ void main() { camera.preview = MockPreview(); when(mockProcessCameraProvider.bindToLifecycle( - camera.cameraSelector!, [camera.preview!])) + camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getLiveCameraState()) @@ -417,7 +417,7 @@ void main() { camera.preview = MockPreview(); when(mockProcessCameraProvider.bindToLifecycle( - camera.cameraSelector!, [camera.preview!])) + camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getLiveCameraState()) @@ -455,7 +455,7 @@ void main() { camera.preview = MockPreview(); when(mockProcessCameraProvider.bindToLifecycle( - camera.cameraSelector!, [camera.preview!])) + camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getLiveCameraState()) From 681a117ca12828fa7b3988458185b6a4fd10cad4 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 23 Mar 2023 15:24:39 -0700 Subject: [PATCH 31/71] Fix cast --- .../camera/camera_android_camerax/lib/src/camera_selector.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f1d3c5fdb663..aa7ee88023c1 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_selector.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_selector.dart @@ -152,7 +152,7 @@ class CameraSelectorHostApiImpl extends CameraSelectorHostApi { } return filteredCameraInfoIds .map((int? id) => - instanceManager.getInstanceWithWeakReference(id!)! as CameraInfo) + instanceManager.getInstanceWithWeakReference(id!)!) .toList(); } } From 1143a039a77921bf4c8602714676bd47475df3a0 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 23 Mar 2023 15:31:29 -0700 Subject: [PATCH 32/71] 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 f315d4cd967b..e802aab30868 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 @@ -420,7 +420,7 @@ class MockBuildContext extends _i1.Mock implements _i6.BuildContext { ), ) as _i6.InheritedWidget); @override - void visitAncestorElements(_i6.ConditionalElementVisitor? visitor) => + void visitAncestorElements(bool Function(_i6.Element)? visitor) => super.noSuchMethod( Invocation.method( #visitAncestorElements, From d4315110053e3bcd5dc65f086b857d6d9dd26c91 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 24 Mar 2023 12:44:04 -0700 Subject: [PATCH 33/71] Formatting --- .../test/android_camera_camerax_test.dart | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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 798654414c6f..8eb1864a37c9 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 @@ -389,8 +389,8 @@ void main() { camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - when(mockProcessCameraProvider.bindToLifecycle( - camera.cameraSelector, [camera.preview!])) + when(mockProcessCameraProvider + .bindToLifecycle(camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getLiveCameraState()) @@ -416,8 +416,8 @@ void main() { camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - when(mockProcessCameraProvider.bindToLifecycle( - camera.cameraSelector, [camera.preview!])) + when(mockProcessCameraProvider + .bindToLifecycle(camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getLiveCameraState()) @@ -454,8 +454,8 @@ void main() { camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - when(mockProcessCameraProvider.bindToLifecycle( - camera.cameraSelector, [camera.preview!])) + when(mockProcessCameraProvider + .bindToLifecycle(camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getLiveCameraState()) From ab3c0853b3b13a22558edcc27cdb7ad0b832f8a8 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 24 Mar 2023 13:38:21 -0700 Subject: [PATCH 34/71] Add missing tests --- .../pigeons/camerax_library.dart | 2 +- .../test/camera_info_test.dart | 35 ++++++++++++ .../test/camera_test.dart | 47 +++++++++++++++- .../test/camera_test.mocks.dart | 56 +++++++++++++++++++ .../test/test_camerax_library.g.dart | 32 +++++++++++ 5 files changed, 170 insertions(+), 2 deletions(-) create mode 100644 packages/camera/camera_android_camerax/test/camera_test.mocks.dart diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 13590efa9831..c001c915e70f 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -110,7 +110,7 @@ abstract class ProcessCameraProviderFlutterApi { void create(int identifier); } -@HostApi() +@HostApi(dartHostTestHandler: 'TestCameraHostApi') abstract class CameraHostApi { int getCameraInfo(int identifier); } diff --git a/packages/camera/camera_android_camerax/test/camera_info_test.dart b/packages/camera/camera_android_camerax/test/camera_info_test.dart index f0527bd1f944..0b23e1d86276 100644 --- a/packages/camera/camera_android_camerax/test/camera_info_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_info_test.dart @@ -5,6 +5,7 @@ import 'package:camera_android_camerax/src/camera_info.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:camera_android_camerax/src/live_camera_state.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; @@ -46,6 +47,40 @@ void main() { verify(mockApi.getSensorRotationDegrees(0)); }); + test('getLiveCameraState makes call to retrieve live camera state', + () async { + final MockTestCameraInfoHostApi mockApi = MockTestCameraInfoHostApi(); + TestCameraInfoHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final CameraInfo cameraInfo = CameraInfo.detached( + instanceManager: instanceManager, + ); + final int cameraIdentifier = 55; + final LiveCameraState liveCameraState = LiveCameraState.detached( + instanceManager: instanceManager, + ); + final int liveCameraStateIdentifier = 73; + instanceManager.addHostCreatedInstance( + cameraInfo, + cameraIdentifier, + onCopy: (_) => CameraInfo.detached(), + ); + instanceManager.addHostCreatedInstance( + liveCameraState, + liveCameraStateIdentifier, + onCopy: (_) => LiveCameraState.detached(), + ); + + when(mockApi.getLiveCameraState(cameraIdentifier)) + .thenReturn(liveCameraStateIdentifier); + + expect(await cameraInfo.getLiveCameraState(), equals(liveCameraState)); + verify(mockApi.getLiveCameraState(cameraIdentifier)); + }); + test('flutterApiCreateTest', () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, diff --git a/packages/camera/camera_android_camerax/test/camera_test.dart b/packages/camera/camera_android_camerax/test/camera_test.dart index c2948282dcf1..f74c9711f2c2 100644 --- a/packages/camera/camera_android_camerax/test/camera_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_test.dart @@ -3,14 +3,59 @@ // found in the LICENSE file. import 'package:camera_android_camerax/src/camera.dart'; +import 'package:camera_android_camerax/src/camera_info.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 'camera_test.mocks.dart'; +import 'test_camerax_library.g.dart'; + +@GenerateMocks([TestCameraHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); + // Mocks the call to clear the native InstanceManager. + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + group('Camera', () { - test('flutterApiCreateTest', () { + tearDown(() => TestCameraHostApi.setup(null)); + + test('getCameraInfo makes call to retrieve CameraInfo', () async { + final MockTestCameraHostApi mockApi = MockTestCameraHostApi(); + TestCameraHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final Camera camera = Camera.detached( + instanceManager: instanceManager, + ); + final int cameraIdentifier = 34; + final CameraInfo cameraInfo = CameraInfo.detached( + instanceManager: instanceManager, + ); + final int cameraInfoIdentifier = 28; + instanceManager.addHostCreatedInstance( + camera, + cameraIdentifier, + onCopy: (_) => CameraInfo.detached(), + ); + instanceManager.addHostCreatedInstance( + cameraInfo, + cameraInfoIdentifier, + onCopy: (_) => CameraInfo.detached(), + ); + + when(mockApi.getCameraInfo(cameraIdentifier)) + .thenReturn(cameraInfoIdentifier); + + expect(await camera.getCameraInfo(), equals(cameraInfo)); + verify(mockApi.getCameraInfo(cameraIdentifier)); + }); + + test('create makes call to add instance to instance manager', () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); 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..4de82739c8b6 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/camera_test.mocks.dart @@ -0,0 +1,56 @@ +// Mocks generated by Mockito 5.3.2 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 [TestCameraHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestCameraHostApi extends _i1.Mock implements _i2.TestCameraHostApi { + MockTestCameraHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + int getCameraInfo(int? identifier) => (super.noSuchMethod( + Invocation.method( + #getCameraInfo, + [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, + ); +} 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 1de5875eceb0..0853077931b2 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 @@ -331,6 +331,38 @@ abstract class TestProcessCameraProviderHostApi { } } +class _TestCameraHostApiCodec extends StandardMessageCodec { + const _TestCameraHostApiCodec(); +} + +abstract class TestCameraHostApi { + static const MessageCodec codec = _TestCameraHostApiCodec(); + + int getCameraInfo(int identifier); + static void setup(TestCameraHostApi? api, + {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraHostApi.getCameraInfo 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.CameraHostApi.getCameraInfo was null, expected non-null int.'); + final int output = api.getCameraInfo(arg_identifier!); + return {'result': output}; + }); + } + } + } +} + class _TestSystemServicesHostApiCodec extends StandardMessageCodec { const _TestSystemServicesHostApiCodec(); @override From 70c817a72c73fc09c75625899d45f41cc410522a Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 24 Mar 2023 13:45:08 -0700 Subject: [PATCH 35/71] Fix analyze --- .../camera/camera_android_camerax/test/camera_info_test.dart | 4 ++-- packages/camera/camera_android_camerax/test/camera_test.dart | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/camera/camera_android_camerax/test/camera_info_test.dart b/packages/camera/camera_android_camerax/test/camera_info_test.dart index 0b23e1d86276..f9a9f1fa665e 100644 --- a/packages/camera/camera_android_camerax/test/camera_info_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_info_test.dart @@ -58,11 +58,11 @@ void main() { final CameraInfo cameraInfo = CameraInfo.detached( instanceManager: instanceManager, ); - final int cameraIdentifier = 55; + const int cameraIdentifier = 55; final LiveCameraState liveCameraState = LiveCameraState.detached( instanceManager: instanceManager, ); - final int liveCameraStateIdentifier = 73; + const int liveCameraStateIdentifier = 73; instanceManager.addHostCreatedInstance( cameraInfo, cameraIdentifier, diff --git a/packages/camera/camera_android_camerax/test/camera_test.dart b/packages/camera/camera_android_camerax/test/camera_test.dart index f74c9711f2c2..e47e104843f3 100644 --- a/packages/camera/camera_android_camerax/test/camera_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_test.dart @@ -32,11 +32,11 @@ void main() { final Camera camera = Camera.detached( instanceManager: instanceManager, ); - final int cameraIdentifier = 34; + const int cameraIdentifier = 34; final CameraInfo cameraInfo = CameraInfo.detached( instanceManager: instanceManager, ); - final int cameraInfoIdentifier = 28; + const int cameraInfoIdentifier = 28; instanceManager.addHostCreatedInstance( camera, cameraIdentifier, From 426b43881d5cbbb5dfaaffc1a72f46d224221198 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 27 Mar 2023 08:44:04 -0700 Subject: [PATCH 36/71] Bump camerax version --- packages/camera/camera_android_camerax/CHANGELOG.md | 2 +- packages/camera/camera_android_camerax/android/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index 580a13b5e335..2de375a001c6 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -15,4 +15,4 @@ * Bump CameraX version to 1.3.0-alpha04. * Fixes instance manager hot restart behavior and fixes Java casting issue. * Implements image capture. -* Implements onCameraClosing callback method for indicating the camera is closing. +* Implements onCameraClosing callback method for indicating the camera is closing and bumps CameraX version to 1.3.0-alpha05. diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle index 336e16009893..d01059c0954a 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle +++ b/packages/camera/camera_android_camerax/android/build.gradle @@ -56,7 +56,7 @@ android { dependencies { // CameraX core library using the camera2 implementation must use same version number. - def camerax_version = "1.3.0-alpha04" + def camerax_version = "1.3.0-alpha05" implementation "androidx.camera:camera-core:${camerax_version}" implementation "androidx.camera:camera-camera2:${camerax_version}" implementation "androidx.camera:camera-lifecycle:${camerax_version}" From 6c49bd9e18da5cf2913bc30644cf94d73564bd66 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 29 Mar 2023 09:06:55 -0700 Subject: [PATCH 37/71] Formatting --- .../camerax/GeneratedCameraXLibrary.java | 346 ++++++++++++------ .../lib/src/camerax_library.g.dart | 129 ++++--- .../test/test_camerax_library.g.dart | 143 +++++--- 3 files changed, 386 insertions(+), 232 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 8cdc6a2aec54..05d4e506ba05 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; } } @@ -216,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(); @@ -224,7 +225,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 = @@ -237,8 +241,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; } @@ -259,7 +262,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 = @@ -274,8 +279,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; } @@ -295,13 +299,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<>( @@ -314,22 +320,26 @@ 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); - @NonNull + @NonNull Long getLiveCameraState(@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) -> { @@ -337,10 +347,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; } @@ -353,7 +364,9 @@ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -361,10 +374,11 @@ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getLiveCameraState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getLiveCameraState( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -384,13 +398,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<>( @@ -405,14 +421,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 = @@ -426,10 +445,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; } @@ -451,10 +471,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; } @@ -474,14 +496,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()); @@ -495,13 +520,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); @@ -512,12 +540,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) -> { @@ -544,7 +577,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) -> { @@ -552,10 +587,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; } @@ -568,7 +604,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) -> { @@ -578,10 +616,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; } @@ -594,7 +637,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) -> { @@ -603,10 +648,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; } @@ -619,7 +666,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) -> { @@ -628,10 +677,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; } @@ -644,7 +693,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) -> { @@ -654,8 +705,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; } @@ -675,17 +725,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)); @@ -694,14 +748,14 @@ public void create(@NonNull Long identifierArg, Reply callback) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraHostApi { - @NonNull + @NonNull Long getCameraInfo(@NonNull Long identifier); /** The codec used by CameraHostApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ + /** Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, CameraHostApi api) { { BasicMessageChannel channel = @@ -714,10 +768,10 @@ static void setup(BinaryMessenger binaryMessenger, CameraHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -737,13 +791,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<>( @@ -783,9 +839,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(); @@ -793,12 +851,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) -> { @@ -827,7 +890,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) -> { @@ -836,10 +901,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; } @@ -852,7 +918,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) -> { @@ -860,8 +928,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; } @@ -881,25 +948,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)); @@ -940,21 +1014,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 = @@ -969,10 +1046,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; } @@ -985,7 +1064,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) -> { @@ -993,10 +1074,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; } @@ -1009,7 +1091,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) -> { @@ -1017,8 +1101,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; } @@ -1039,10 +1122,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; } @@ -1084,7 +1168,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); @@ -1094,7 +1181,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 = @@ -1109,10 +1199,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; } @@ -1134,10 +1226,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; } @@ -1170,7 +1263,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); @@ -1189,12 +1283,17 @@ public interface LiveCameraStateHostApi { static MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `LiveCameraStateHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `LiveCameraStateHostApi` to handle messages through the + * `binaryMessenger`. + */ static void setup(BinaryMessenger binaryMessenger, LiveCameraStateHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.LiveCameraStateHostApi.addObserver", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.LiveCameraStateHostApi.addObserver", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1204,8 +1303,7 @@ static void setup(BinaryMessenger binaryMessenger, LiveCameraStateHostApi api) { try { api.addObserver((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1218,7 +1316,9 @@ static void setup(BinaryMessenger binaryMessenger, LiveCameraStateHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1228,8 +1328,7 @@ static void setup(BinaryMessenger binaryMessenger, LiveCameraStateHostApi api) { try { api.removeObservers((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1249,13 +1348,15 @@ public LiveCameraStateFlutterApi(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 LiveCameraStateFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1264,13 +1365,14 @@ public void create(@NonNull Long identifierArg, Reply callback) { new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); } + public void onCameraClosing(Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing", getCodec()); - channel.send( - null, - channelReply -> callback.reply(null)); + binaryMessenger, + "dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing", + getCodec()); + channel.send(null, channelReply -> callback.reply(null)); } } } 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 78b97b47e4e5..5c5e863b001c 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, @@ -230,7 +230,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, @@ -240,7 +241,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, @@ -267,8 +268,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', @@ -285,12 +286,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', @@ -318,7 +320,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, @@ -328,7 +331,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, @@ -356,8 +359,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', @@ -381,7 +383,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?; @@ -406,12 +409,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', @@ -438,7 +446,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', @@ -464,8 +473,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', @@ -510,7 +519,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, @@ -520,7 +530,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, @@ -586,7 +596,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, @@ -614,7 +624,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); @@ -632,9 +642,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?; @@ -654,12 +666,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', @@ -678,10 +693,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', @@ -706,17 +721,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, @@ -735,7 +752,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, @@ -766,9 +783,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); @@ -786,12 +803,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', @@ -839,8 +858,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', @@ -900,7 +918,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); @@ -918,12 +936,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', @@ -944,8 +964,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', @@ -1052,7 +1072,8 @@ abstract class LiveCameraStateFlutterApi { void onCameraClosing(); - static void setup(LiveCameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(LiveCameraStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveCameraStateFlutterApi.create', codec, @@ -1062,7 +1083,7 @@ abstract class LiveCameraStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.LiveCameraStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.LiveCameraStateFlutterApi.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 63c22b7c916a..7c961a11bbbc 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, @@ -74,17 +76,19 @@ abstract class TestCameraInfoHostApi { int getLiveCameraState(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, @@ -103,7 +107,7 @@ abstract class TestCameraInfoHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -123,7 +127,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, @@ -133,7 +138,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, @@ -153,15 +158,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]; }); } @@ -176,7 +183,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); @@ -184,7 +192,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, @@ -201,33 +210,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, @@ -235,10 +247,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]; }); } @@ -252,7 +266,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, @@ -260,7 +274,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]; }); } @@ -274,12 +289,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!); @@ -296,7 +312,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, @@ -314,7 +330,8 @@ abstract class TestCameraHostApi { int getCameraInfo(int identifier); - static void setup(TestCameraHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', codec, @@ -324,7 +341,7 @@ abstract class TestCameraHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraHostApi.getCameraInfo was null.'); + 'Argument for dev.flutter.pigeon.CameraHostApi.getCameraInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -352,7 +369,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); @@ -363,42 +380,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, @@ -406,14 +429,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); @@ -446,9 +471,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); @@ -467,7 +492,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, @@ -477,13 +503,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 []; }); @@ -498,7 +525,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, @@ -510,7 +537,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); @@ -531,7 +559,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, @@ -559,7 +587,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); @@ -576,7 +604,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, @@ -586,13 +615,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 []; }); @@ -607,7 +637,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, @@ -629,7 +659,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, @@ -649,7 +679,8 @@ abstract class TestLiveCameraStateHostApi { void removeObservers(int identifier); - static void setup(TestLiveCameraStateHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestLiveCameraStateHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', codec, @@ -659,7 +690,7 @@ abstract class TestLiveCameraStateHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.addObserver was null.'); + 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.addObserver was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -678,7 +709,7 @@ abstract class TestLiveCameraStateHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers was null.'); + 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, From b9daeb1b50b8d8857453d3cb341bf0d8296942ca Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 11 Apr 2023 16:50:14 -0700 Subject: [PATCH 38/71] pair programming w/maurice --- .../CameraStateErrorFlutterApiWrapper.java | 69 ++ .../camerax/CameraStateFlutterApiWrapper.java | 89 ++ .../camerax/GeneratedCameraXLibrary.java | 862 ++++++++++++------ .../camerax/LiveDataFlutterApiWrapper.java | 65 ++ .../plugins/camerax/LiveDataHostApiImpl.java | 66 ++ .../camerax/ObserverFlutterApiWrapper.java | 79 ++ .../plugins/camerax/ObserverHostApiImpl.java | 113 +++ .../plugins/camerax/CameraStateErrorTest.java | 66 ++ .../plugins/camerax/CameraStateTest.java | 73 ++ .../flutter/plugins/camerax/LiveDataTest.java | 104 +++ .../flutter/plugins/camerax/ObserverTest.java | 97 ++ .../lib/src/camera_state.dart | 74 ++ .../lib/src/camera_state_error.dart | 69 ++ .../lib/src/camerax_library.g.dart | 485 ++++++++-- .../lib/src/live_data.dart | 100 ++ .../lib/src/observer.dart | 106 +++ .../lib/src/observer.simple_ast.json | 396 ++++++++ .../pigeons/camerax_library.dart | 149 +++ .../camera_android_camerax/pubspec.yaml | 23 +- .../android_camera_camerax_test.mocks.dart | 4 +- .../test/camera_info_test.mocks.dart | 2 +- .../test/camera_selector_test.mocks.dart | 2 +- .../test/camera_state_error_test.dart | 53 ++ .../test/camera_state_error_test.mocks.dart | 48 + .../test/camera_state_test.dart | 67 ++ .../test/camera_state_test.mocks.dart | 48 + .../test/camera_test.mocks.dart | 2 +- .../test/image_capture_test.mocks.dart | 2 +- .../test/live_camera_state_test.mocks.dart | 2 +- .../test/live_data_test.dart | 131 +++ .../test/live_data_test.mocks.dart | 72 ++ .../test/observer_test.dart | 116 +++ .../test/observer_test.mocks.dart | 57 ++ .../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 | 384 +++++--- 37 files changed, 3580 insertions(+), 501 deletions(-) create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java create mode 100644 packages/camera/camera_android_camerax/lib/src/camera_state.dart create mode 100644 packages/camera/camera_android_camerax/lib/src/camera_state_error.dart create mode 100644 packages/camera/camera_android_camerax/lib/src/live_data.dart create mode 100644 packages/camera/camera_android_camerax/lib/src/observer.dart create mode 100644 packages/camera/camera_android_camerax/lib/src/observer.simple_ast.json create mode 100644 packages/camera/camera_android_camerax/test/camera_state_error_test.dart create mode 100644 packages/camera/camera_android_camerax/test/camera_state_error_test.mocks.dart create mode 100644 packages/camera/camera_android_camerax/test/camera_state_test.dart create mode 100644 packages/camera/camera_android_camerax/test/camera_state_test.mocks.dart create mode 100644 packages/camera/camera_android_camerax/test/live_data_test.dart create mode 100644 packages/camera/camera_android_camerax/test/live_data_test.mocks.dart create mode 100644 packages/camera/camera_android_camerax/test/observer_test.dart create mode 100644 packages/camera/camera_android_camerax/test/observer_test.mocks.dart diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java new file mode 100644 index 000000000000..b181536f42f6 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java @@ -0,0 +1,69 @@ + +// 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 androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; +import androidx.camera.core.CameraState; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateErrorFlutterApi; + +/** + * Flutter API implementation for `CameraStateError`. + * + *

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 CameraStateErrorFlutterApiWrapper { + + // To ease adding additional methods, this value is added prematurely. + @SuppressWarnings({"unused", "FieldCanBeLocal"}) + private final BinaryMessenger binaryMessenger; + + private final InstanceManager instanceManager; + private CameraStateErrorFlutterApi api; + + /** + * Constructs a {@link CameraStateErrorFlutterApiWrapper}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public CameraStateErrorFlutterApiWrapper( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + api = new CameraStateErrorFlutterApi(binaryMessenger); + } + + /** + * Stores the `CameraStateError` instance and notifies Dart to create and store a new + * `CameraStateError` instance that is attached to this one. If `instance` has already been added, + * this method does nothing. + */ + public void create( + @NonNull CameraState.StateError instance, + @NonNull Long code, + @NonNull String description, + @NonNull CameraStateErrorFlutterApi.Reply callback) { + if (!instanceManager.containsInstance(instance)) { + api.create(instanceManager.addHostCreatedInstance(instance), code, description, callback); + } + } + + /** + * Sets the Flutter API used to send messages to Dart. + * + *

This is only visible for testing. + */ + @VisibleForTesting + void setApi(@NonNull CameraStateErrorFlutterApi api) { + this.api = api; + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java new file mode 100644 index 000000000000..baf0617ee59c --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java @@ -0,0 +1,89 @@ + +// 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 androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; +import androidx.camera.core.CameraState; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateFlutterApi; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateType; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateTypeData; + + +/** + * Flutter API implementation for `CameraState`. + * + *

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 CameraStateFlutterApiWrapper { + + // To ease adding additional methods, this value is added prematurely. + @SuppressWarnings({"unused", "FieldCanBeLocal"}) + private final BinaryMessenger binaryMessenger; + + private final InstanceManager instanceManager; + private CameraStateFlutterApi api; + + /** + * Constructs a {@link CameraStateFlutterApiWrapper}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public CameraStateFlutterApiWrapper( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + api = new CameraStateFlutterApi(binaryMessenger); + } + + /** + * Stores the `CameraState` instance and notifies Dart to create and store a new `CameraState` + * instance that is attached to this one. If `instance` has already been added, this method does + * nothing. + */ + public void create( + @NonNull CameraState instance, + @NonNull CameraState.Type type, + @Nullable CameraState.StateError error, + @NonNull CameraStateFlutterApi.Reply callback) { + + // TODO(camsim99): actually fix this + CameraStateType cameraStateType; + switch (type) { + default: + cameraStateType = CameraStateType.CLOSED; + } + + if (error != null) { + new CameraStateErrorFlutterApiWrapper(binaryMessenger, instanceManager).create(error, Long.valueOf(error.getCode()), "TODO(camsim99)", reply -> {}); + } + + if (!instanceManager.containsInstance(instance)) { + api.create( + instanceManager.addHostCreatedInstance(instance), + new CameraStateTypeData.Builder().setValue(cameraStateType).build(), + instanceManager.getIdentifierForStrongReference(error), + callback); + } + } + + /** + * Sets the Flutter API used to send messages to Dart. + * + *

This is only visible for testing. + */ + @VisibleForTesting + void setApi(@NonNull CameraStateFlutterApi api) { + this.api = api; + } +} 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 05d4e506ba05..0c3c8db92176 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; @@ -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; @@ -41,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; @@ -52,11 +55,25 @@ 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; } + public enum CameraStateType { + CLOSED(0), + CLOSING(1), + OPEN(2), + OPENING(3), + PENDING_OPEN(4); + + final int index; + + private CameraStateType(final int index) { + this.index = index; + } + } + /** Generated class from Pigeon that represents data sent in messages. */ public static final class ResolutionInfo { private @NonNull Long width; @@ -85,8 +102,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 { @@ -123,13 +140,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; } } @@ -162,8 +175,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,29 +220,76 @@ ArrayList toList() { } } + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class CameraStateTypeData { + private @NonNull CameraStateType value; + + public @NonNull CameraStateType getValue() { + return value; + } + + public void setValue(@NonNull CameraStateType setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"value\" is null."); + } + this.value = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + CameraStateTypeData() {} + + public static final class Builder { + + private @Nullable CameraStateType value; + + public @NonNull Builder setValue(@NonNull CameraStateType setterArg) { + this.value = setterArg; + return this; + } + + public @NonNull CameraStateTypeData build() { + CameraStateTypeData pigeonReturn = new CameraStateTypeData(); + pigeonReturn.setValue(value); + return pigeonReturn; + } + } + + @NonNull + ArrayList toList() { + ArrayList toListResult = new ArrayList(1); + toListResult.add(value == null ? null : value.index); + return toListResult; + } + + static @NonNull CameraStateTypeData fromList(@NonNull ArrayList list) { + CameraStateTypeData pigeonResult = new CameraStateTypeData(); + Object value = list.get(0); + pigeonResult.setValue(value == null ? null : CameraStateType.values()[(int) value]); + return pigeonResult; + } + } + 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 { /** * Clear the native `InstanceManager`. * - *

This is typically only used after a hot restart. + * This is typically only used after a hot restart. */ 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) { + /**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<>( @@ -241,7 +301,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; } @@ -259,13 +320,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) { + /**Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable JavaObjectHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -279,7 +338,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; } @@ -293,22 +353,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 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()); @@ -320,26 +380,22 @@ 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); - @NonNull + @NonNull Long getLiveCameraState(@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) { + /**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 +403,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; } @@ -364,9 +419,7 @@ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -374,11 +427,10 @@ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = - api.getLiveCameraState( - (identifierArg == null) ? null : identifierArg.longValue()); + Long output = api.getLiveCameraState((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -392,22 +444,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 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()); @@ -421,18 +473,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 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) { + /**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<>( @@ -445,11 +494,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; } @@ -471,12 +519,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; } @@ -490,23 +536,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 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()); @@ -518,18 +563,15 @@ public void create( /** 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 + @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); @@ -537,20 +579,15 @@ Long bindToLifecycle( 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) { + /**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) -> { @@ -577,9 +614,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) -> { @@ -587,11 +622,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; } @@ -604,9 +638,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) -> { @@ -616,15 +648,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; } @@ -637,9 +664,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) -> { @@ -648,12 +673,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; } @@ -666,9 +689,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) -> { @@ -677,10 +698,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; } @@ -693,9 +714,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) -> { @@ -705,7 +724,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; } @@ -719,27 +739,25 @@ 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 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()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", getCodec()); channel.send( new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); @@ -748,15 +766,15 @@ public void create(@NonNull Long identifierArg, Reply callback) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraHostApi { - @NonNull + @NonNull Long getCameraInfo(@NonNull Long identifier); /** The codec used by CameraHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, CameraHostApi api) { + /**Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -768,10 +786,10 @@ static void setup(BinaryMessenger binaryMessenger, CameraHostApi api) { ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = - api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); + Long output = api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -785,22 +803,22 @@ static void setup(BinaryMessenger binaryMessenger, CameraHostApi api) { } /** 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 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()); @@ -839,29 +857,22 @@ 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 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) { + /**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) -> { @@ -890,9 +901,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) -> { @@ -901,11 +910,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; } @@ -918,9 +926,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) -> { @@ -928,7 +934,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; } @@ -942,38 +949,33 @@ 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 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()); + 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) { + 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)); @@ -1014,25 +1016,22 @@ 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() { + 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) { + /**Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1046,12 +1045,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; } @@ -1064,9 +1061,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) -> { @@ -1074,11 +1069,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; } @@ -1091,9 +1085,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) -> { @@ -1101,7 +1093,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; } @@ -1122,11 +1115,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; } @@ -1168,24 +1160,18 @@ 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); - 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) { + /**Sets up an instance of `ImageCaptureHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageCaptureHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1199,12 +1185,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; } @@ -1226,11 +1210,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; } @@ -1263,8 +1246,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); @@ -1280,20 +1262,15 @@ public interface LiveCameraStateHostApi { void removeObservers(@NonNull Long identifier); /** The codec used by LiveCameraStateHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `LiveCameraStateHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setup(BinaryMessenger binaryMessenger, LiveCameraStateHostApi api) { + /**Sets up an instance of `LiveCameraStateHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveCameraStateHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.LiveCameraStateHostApi.addObserver", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.LiveCameraStateHostApi.addObserver", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1303,7 +1280,8 @@ static void setup(BinaryMessenger binaryMessenger, LiveCameraStateHostApi api) { try { api.addObserver((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1316,9 +1294,7 @@ static void setup(BinaryMessenger binaryMessenger, LiveCameraStateHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -1328,7 +1304,8 @@ static void setup(BinaryMessenger binaryMessenger, LiveCameraStateHostApi api) { try { api.removeObservers((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1342,22 +1319,22 @@ static void setup(BinaryMessenger binaryMessenger, LiveCameraStateHostApi api) { } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class LiveCameraStateFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public LiveCameraStateFlutterApi(BinaryMessenger argBinaryMessenger) { + public LiveCameraStateFlutterApi(@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); } /** The codec used by LiveCameraStateFlutterApi. */ - 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.LiveCameraStateFlutterApi.create", getCodec()); @@ -1365,14 +1342,351 @@ public void create(@NonNull Long identifierArg, Reply callback) { new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); } + public void onCameraClosing(@NonNull Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing", getCodec()); + channel.send( + null, + channelReply -> callback.reply(null)); + } + } + /** + * Host API for `CameraState`. + * + * 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. + * + * See . + * + * Generated interface from Pigeon that represents a handler of messages from Flutter. + */ + public interface CameraStateHostApi { + + /** The codec used by CameraStateHostApi. */ + static @NonNull MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /**Sets up an instance of `CameraStateHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraStateHostApi api) { + } + } + + private static class CameraStateFlutterApiCodec extends StandardMessageCodec { + public static final CameraStateFlutterApiCodec INSTANCE = new CameraStateFlutterApiCodec(); + + private CameraStateFlutterApiCodec() {} + + @Override + protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { + switch (type) { + case (byte) 128: + return CameraStateTypeData.fromList((ArrayList) readValue(buffer)); + default: + return super.readValueOfType(type, buffer); + } + } + + @Override + protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { + if (value instanceof CameraStateTypeData) { + stream.write(128); + writeValue(stream, ((CameraStateTypeData) value).toList()); + } else { + super.writeValue(stream, value); + } + } + } + + /** + * Flutter API for `CameraState`. + * + * 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. + * + * See . + * + * Generated class from Pigeon that represents Flutter messages that can be called from Java. + */ + public static class CameraStateFlutterApi { + private final @NonNull BinaryMessenger binaryMessenger; + + public CameraStateFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { + void reply(T reply); + } + /** The codec used by CameraStateFlutterApi. */ + static @NonNull MessageCodec getCodec() { + return CameraStateFlutterApiCodec.INSTANCE; + } + /** Create a new Dart instance and add it to the `InstanceManager`. */ + public void create(@NonNull Long identifierArg, @NonNull CameraStateTypeData typeArg, @NonNull Long errorIdentifierArg, @NonNull Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraStateFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg, typeArg, errorIdentifierArg)), + channelReply -> callback.reply(null)); + } + } + /** + * Host API for `Observer`. + * + * 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. + * + * See . + * + * Generated interface from Pigeon that represents a handler of messages from Flutter. + */ + public interface ObserverHostApi { + /** Create a new native instance and add it to the `InstanceManager`. */ + void create(@NonNull Long identifier); + + /** The codec used by ObserverHostApi. */ + static @NonNull MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /**Sets up an instance of `ObserverHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ObserverHostApi.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); + } + } + } + } + /** + * Flutter API for `Observer`. + * + * 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. + * + * See . + * + * Generated class from Pigeon that represents Flutter messages that can be called from Java. + */ + public static class ObserverFlutterApi { + private final @NonNull BinaryMessenger binaryMessenger; + + public ObserverFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { + void reply(T reply); + } + /** The codec used by ObserverFlutterApi. */ + static @NonNull MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /** Callback to Dart function `Observer.onChanged`. */ + public void onChanged(@NonNull Long identifierArg, @NonNull Long valueIdentifierArg, @NonNull Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ObserverFlutterApi.onChanged", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg, valueIdentifierArg)), + channelReply -> callback.reply(null)); + } + } + /** + * Host API for `CameraStateError`. + * + * 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. + * + * See . + * + * Generated interface from Pigeon that represents a handler of messages from Flutter. + */ + public interface CameraStateErrorHostApi { + + /** The codec used by CameraStateErrorHostApi. */ + static @NonNull MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /**Sets up an instance of `CameraStateErrorHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraStateErrorHostApi api) { + } + } + /** + * Flutter API for `CameraStateError`. + * + * 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. + * + * See . + * + * Generated class from Pigeon that represents Flutter messages that can be called from Java. + */ + public static class CameraStateErrorFlutterApi { + private final @NonNull BinaryMessenger binaryMessenger; + + public CameraStateErrorFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { + void reply(T reply); + } + /** The codec used by CameraStateErrorFlutterApi. */ + 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 codeArg, @NonNull String descriptionArg, @NonNull Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraStateErrorFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg, codeArg, descriptionArg)), + channelReply -> callback.reply(null)); + } + } + /** + * Host API for `LiveData`. + * + * 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. + * + * See . + * + * Generated interface from Pigeon that represents a handler of messages from Flutter. + */ + public interface LiveDataHostApi { + /** Handles Dart method `LiveData.observe`. */ + void observe(@NonNull Long identifier, @NonNull Long observerIdentifier); + /** Handles Dart method `LiveData.removeObservers`. */ + void removeObservers(@NonNull Long identifier); + + /** The codec used by LiveDataHostApi. */ + static @NonNull MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /**Sets up an instance of `LiveDataHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.LiveDataHostApi.observe", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + Number observerIdentifierArg = (Number) args.get(1); + try { + api.observe((identifierArg == null) ? null : identifierArg.longValue(), (observerIdentifierArg == null) ? null : observerIdentifierArg.longValue()); + wrapped.add(0, null); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.LiveDataHostApi.removeObservers", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + api.removeObservers((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); + } + } + } + } + /** + * Flutter API for `LiveData`. + * + * 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. + * + * See . + * + * Generated class from Pigeon that represents Flutter messages that can be called from Java. + */ + public static class LiveDataFlutterApi { + private final @NonNull BinaryMessenger binaryMessenger; + + public LiveDataFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } - public void onCameraClosing(Reply callback) { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { + void reply(T reply); + } + /** The codec used by LiveDataFlutterApi. */ + 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 Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing", - getCodec()); - channel.send(null, channelReply -> callback.reply(null)); + binaryMessenger, "dev.flutter.pigeon.LiveDataFlutterApi.create", getCodec()); + channel.send( + 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/LiveDataFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java new file mode 100644 index 000000000000..5ed5dcde0f1f --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java @@ -0,0 +1,65 @@ + +// 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 androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; +import androidx.lifecycle.LiveData; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataFlutterApi; + +/** + * Flutter API implementation for `LiveData`. + * + *

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 LiveDataFlutterApiWrapper { + + // To ease adding additional methods, this value is added prematurely. + @SuppressWarnings({"unused", "FieldCanBeLocal"}) + private final BinaryMessenger binaryMessenger; + + private final InstanceManager instanceManager; + private LiveDataFlutterApi api; + + /** + * Constructs a {@link LiveDataFlutterApiWrapper}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public LiveDataFlutterApiWrapper( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + api = new LiveDataFlutterApi(binaryMessenger); + } + + /** + * Stores the `LiveData` instance and notifies Dart to create and store a new `LiveData` instance + * that is attached to this one. If `instance` has already been added, this method does nothing. + */ + public void create(@NonNull LiveData instance, @NonNull LiveDataFlutterApi.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 LiveDataFlutterApi api) { + this.api = api; + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java new file mode 100644 index 000000000000..8555021299dd --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java @@ -0,0 +1,66 @@ + +// 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 androidx.annotation.NonNull; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.LiveData; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataHostApi; +import java.util.Objects; + +/** + * Host API implementation for `LiveData`. + * + *

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 LiveDataHostApiImpl implements LiveDataHostApi { + + // To ease adding additional methods, this value is added prematurely. + @SuppressWarnings({"unused", "FieldCanBeLocal"}) + private final BinaryMessenger binaryMessenger; + + private final InstanceManager instanceManager; + + public LifecycleOwner fakeLifecycleOwner; + + /** + * Constructs a {@link LiveDataHostApiImpl}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public LiveDataHostApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + } + + @Override + @SuppressWarnings("unchecked") + public void observe(@NonNull Long identifier, @NonNull Long observerIdentifier) { + + // tODO(camsim99): get lifecycleowner + getLiveDataInstance(identifier) + .observe(fakeLifecycleOwner, Objects.requireNonNull(instanceManager.getInstance(observerIdentifier))); + } + + @Override + public void removeObservers(@NonNull Long identifier) { + + // tODO(camsim99): get lifecycleowner + getLiveDataInstance(identifier).removeObservers(fakeLifecycleOwner); + } + + private LiveData getLiveDataInstance(@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/ObserverFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java new file mode 100644 index 000000000000..e567f2fb18a9 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java @@ -0,0 +1,79 @@ + +// 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 androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; +import androidx.camera.core.CameraState; +import androidx.lifecycle.Observer; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ObserverFlutterApi; +import java.util.Objects; + +/** + * Flutter API implementation for `Observer`. + * + *

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 ObserverFlutterApiWrapper { + + // To ease adding additional methods, this value is added prematurely. + @SuppressWarnings({"unused", "FieldCanBeLocal"}) + private final BinaryMessenger binaryMessenger; + + private final InstanceManager instanceManager; + private ObserverFlutterApi api; + + /** + * Constructs a {@link ObserverFlutterApiWrapper}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public ObserverFlutterApiWrapper( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + api = new ObserverFlutterApi(binaryMessenger); + } + + /** + * Sends a message to Dart to call `Observer.onChanged` on the Dart object representing + * `instance`. + */ + public void onChanged( + @NonNull Observer instance, + @NonNull Object value, + @NonNull ObserverFlutterApi.Reply callback) { + + if (value instanceof CameraState) { + CameraState state = (CameraState) value; + new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager).create(state, state.getType(), state.getError(), reply -> {}); + } else { + // TODO(camsim99): make this more specific + throw new UnsupportedOperationException(); + } + + api.onChanged( + Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(instance)), + instanceManager.getIdentifierForStrongReference(value), + callback); + } + + /** + * Sets the Flutter API used to send messages to Dart. + * + *

This is only visible for testing. + */ + @VisibleForTesting + void setApi(@NonNull ObserverFlutterApi api) { + this.api = api; + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java new file mode 100644 index 000000000000..5e06c8378e59 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java @@ -0,0 +1,113 @@ + +// 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 androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; +import androidx.lifecycle.Observer; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ObserverHostApi; +import java.util.Objects; + +/** + * Host API implementation for `Observer`. + * + *

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 ObserverHostApiImpl implements ObserverHostApi { + + // To ease adding additional methods, this value is added prematurely. + @SuppressWarnings({"unused", "FieldCanBeLocal"}) + private final BinaryMessenger binaryMessenger; + + private final InstanceManager instanceManager; + + private final ObserverProxy proxy; + + /** Proxy for constructors and static method of `Observer`. */ + @VisibleForTesting + public static class ObserverProxy { + + /** Creates an instance of `Observer`. */ + public ObserverImpl create( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + return new ObserverImpl(binaryMessenger, instanceManager); + } + } + + /** Implementation of `Observer` that passes arguments of callback methods to Dart. */ + public static class ObserverImpl implements Observer { + private ObserverFlutterApiWrapper api; + + /** Constructs an instance of `Observer` that passes arguments of callbacks methods to Dart. */ + public ObserverImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + super(); + api = new ObserverFlutterApiWrapper(binaryMessenger, instanceManager); + } + + // TODO(bparrishMines): Need to handle inherited callback methods + + @Override + public void onChanged(T value) { + api.onChanged(this, value, reply -> {}); + } + + /** + * Flutter API used to send messages back to Dart. + * + *

This is only visible for testing. + */ + @SuppressWarnings("unused") + @VisibleForTesting + void setApi(@NonNull ObserverFlutterApiWrapper api) { + this.api = api; + } + } + + /** + * Constructs a {@link ObserverHostApiImpl}. + * + * @param binaryMessenger used to communicate with Dart over asynchronous messages + * @param instanceManager maintains instances stored to communicate with attached Dart objects + */ + public ObserverHostApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + + this(binaryMessenger, instanceManager, new ObserverProxy()); + } + + /** + * Constructs a {@link ObserverHostApiImpl}. + * + * @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 `Observer` + */ + @VisibleForTesting + ObserverHostApiImpl( + @NonNull BinaryMessenger binaryMessenger, + @NonNull InstanceManager instanceManager, + @NonNull ObserverProxy 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 Observer getObserverInstance(@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/CameraStateErrorTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java new file mode 100644 index 000000000000..b1c0812ee7bd --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java @@ -0,0 +1,66 @@ + +// 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.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; + +import androidx.camera.core.CameraState; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateErrorFlutterApi; +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 CameraStateErrorTest { + + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public CameraState.StateError mockCameraStateError; + + @Mock public BinaryMessenger mockBinaryMessenger; + + @Mock public CameraStateErrorFlutterApi mockFlutterApi; + + InstanceManager instanceManager; + + @Before + public void setUp() { + instanceManager = InstanceManager.open(identifier -> {}); + } + + @After + public void tearDown() { + instanceManager.close(); + } + + @Test + public void flutterApiCreate() { + final CameraStateErrorFlutterApiWrapper flutterApi = + new CameraStateErrorFlutterApiWrapper(mockBinaryMessenger, instanceManager); + flutterApi.setApi(mockFlutterApi); + + final Long code = 0L; + + final String description = "testString"; + + flutterApi.create(mockCameraStateError, code, description, reply -> {}); + + final long instanceIdentifier = + Objects.requireNonNull( + instanceManager.getIdentifierForStrongReference(mockCameraStateError)); + verify(mockFlutterApi).create(eq(instanceIdentifier), eq(code), eq(description), any()); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java new file mode 100644 index 000000000000..18ae2e22759a --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.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): Import native classes +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 androidx.camera.core.CameraState; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateFlutterApi; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateType; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateTypeData; +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 CameraStateTest { + + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public CameraState mockCameraState; + + @Mock public BinaryMessenger mockBinaryMessenger; + + @Mock public CameraStateFlutterApi mockFlutterApi; + + InstanceManager instanceManager; + + @Before + public void setUp() { + instanceManager = InstanceManager.open(identifier -> {}); + } + + @After + public void tearDown() { + instanceManager.close(); + } + + @Test + public void flutterApiCreate() { + final CameraStateFlutterApiWrapper flutterApi = + new CameraStateFlutterApiWrapper(mockBinaryMessenger, instanceManager); + flutterApi.setApi(mockFlutterApi); + + final CameraState.Type type = CameraState.Type.CLOSED; + + final CameraState.StateError mockError = mock(CameraState.StateError.class); + + flutterApi.create(mockCameraState, type, mockError, reply -> {}); + + final long instanceIdentifier = + Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockCameraState)); + verify(mockFlutterApi) + .create( + eq(instanceIdentifier), + any(CameraStateTypeData.class), + eq(Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockError))), + any()); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java new file mode 100644 index 000000000000..2cf5f833fb87 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -0,0 +1,104 @@ + +// 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.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.Observer; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataFlutterApi; +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 LiveDataTest { + + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @SuppressWarnings("rawtypes") + @Mock public LiveData mockLiveData; + + @Mock public BinaryMessenger mockBinaryMessenger; + + @Mock public LiveDataFlutterApi mockFlutterApi; + + InstanceManager instanceManager; + + @Before + public void setUp() { + instanceManager = InstanceManager.open(identifier -> {}); + } + + @After + public void tearDown() { + instanceManager.close(); + } + + @Test + @SuppressWarnings({"unchecked", "rawtypes"}) + public void observe() { + + final Observer mockObserver = mock(Observer.class); + final long observerIdentifier = 20; + instanceManager.addDartCreatedInstance(mockObserver, observerIdentifier); + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); + + final LiveDataHostApiImpl hostApi = + new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); + + LifecycleOwner fakeLifecycleOwner = mock(LifecycleOwner.class); + hostApi.fakeLifecycleOwner = fakeLifecycleOwner; + + hostApi.observe(instanceIdentifier, observerIdentifier); + + verify(mockLiveData).observe(fakeLifecycleOwner, mockObserver); + } + + @Test + public void removeObservers() { + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); + + final LiveDataHostApiImpl hostApi = + new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); + + LifecycleOwner fakeLifecycleOwner = mock(LifecycleOwner.class); + hostApi.fakeLifecycleOwner = fakeLifecycleOwner; + + hostApi.removeObservers(instanceIdentifier); + + verify(mockLiveData).removeObservers(fakeLifecycleOwner); + } + + @Test + public void flutterApiCreate() { + final LiveDataFlutterApiWrapper flutterApi = + new LiveDataFlutterApiWrapper(mockBinaryMessenger, instanceManager); + flutterApi.setApi(mockFlutterApi); + + flutterApi.create(mockLiveData, reply -> {}); + + final long instanceIdentifier = + Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockLiveData)); + verify(mockFlutterApi).create(eq(instanceIdentifier), any()); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java new file mode 100644 index 000000000000..2e06440bf08c --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java @@ -0,0 +1,97 @@ + +// 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.lifecycle.Observer; +import androidx.camera.core.CameraState; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ObserverFlutterApi; +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 ObserverTest { + + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @SuppressWarnings("rawtypes") + @Mock public ObserverHostApiImpl.ObserverImpl mockObserver; + + @Mock public BinaryMessenger mockBinaryMessenger; + + @Mock public ObserverFlutterApi mockFlutterApi; + + @Mock public ObserverHostApiImpl.ObserverProxy mockProxy; + + InstanceManager instanceManager; + + @Before + public void setUp() { + instanceManager = InstanceManager.open(identifier -> {}); + } + + @After + public void tearDown() { + instanceManager.close(); + } + + @Test + @SuppressWarnings({"rawtypes", "unchecked"}) + + public void hostApiCreate() { + + when(mockProxy.create(mockBinaryMessenger, instanceManager)).thenReturn(mockObserver); + + final ObserverHostApiImpl hostApi = + new ObserverHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); + + final long instanceIdentifier = 0; + hostApi.create(instanceIdentifier); + + assertEquals(instanceManager.getInstance(instanceIdentifier), mockObserver); + } + + @Test + public void onChanged() { + final ObserverFlutterApiWrapper flutterApi = + new ObserverFlutterApiWrapper(mockBinaryMessenger, instanceManager); + flutterApi.setApi(mockFlutterApi); + + final ObserverHostApiImpl.ObserverImpl instance = + new ObserverHostApiImpl.ObserverImpl(mockBinaryMessenger, instanceManager); + + instance.setApi(flutterApi); + + final long instanceIdentifier = 0; + instanceManager.addDartCreatedInstance(instance, instanceIdentifier); + + final CameraState mockValue = CameraState.create(CameraState.Type.CLOSED); + Long mockValueIdentifier = instanceManager.addHostCreatedInstance(mockValue); + + instance.onChanged(mockValue); + + verify(mockFlutterApi) + .onChanged( + eq(instanceIdentifier), + eq(Objects.requireNonNull(mockValueIdentifier)), + any()); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/camera_state.dart b/packages/camera/camera_android_camerax/lib/src/camera_state.dart new file mode 100644 index 000000000000..28e16be4fe0e --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/camera_state.dart @@ -0,0 +1,74 @@ +import 'camera_state_error.dart'; +import 'package:simple_ast/annotations.dart'; +import 'package:meta/meta.dart'; +import 'package:flutter/services.dart'; + +import 'observer.dart'; +import 'java_object.dart'; +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camerax_library.g.dart'; +import 'instance_manager.dart'; + +class CameraState extends JavaObject { + CameraState.detached( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + required this.type, + this.error}) + : super.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + + final CameraStateType type; + + final CameraStateError? error; +} + +/// Flutter API implementation for [CameraState]. +/// +/// 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 CameraStateFlutterApiImpl implements CameraStateFlutterApi { + /// Constructs a [CameraStateFlutterApiImpl]. + CameraStateFlutterApiImpl({ + 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, + CameraStateTypeData type, + int? errorIdentifier, + ) { + instanceManager.addHostCreatedInstance( + CameraState.detached( + type: type.value, + error: errorIdentifier == null + ? null + : instanceManager.getInstanceWithWeakReference( + errorIdentifier, + ), + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + identifier, + onCopy: (CameraState original) => CameraState.detached( + type: original.type, + error: original.error, + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + ); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart b/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart new file mode 100644 index 000000000000..bc33263a060a --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart @@ -0,0 +1,69 @@ +import 'package:simple_ast/annotations.dart'; +import 'package:flutter/services.dart'; +import 'package:meta/meta.dart'; + +import 'observer.dart'; +import 'java_object.dart'; +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camerax_library.g.dart'; +import 'instance_manager.dart'; + +class CameraStateError extends JavaObject { + CameraStateError.detached( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + required this.code, + required this.description}) + : super.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + + final int code; + + final String description; +} + +/// Flutter API implementation for [CameraStateError]. +/// +/// 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 CameraStateErrorFlutterApiImpl implements CameraStateErrorFlutterApi { + /// Constructs a [CameraStateErrorFlutterApiImpl]. + CameraStateErrorFlutterApiImpl({ + 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 code, + String description, + ) { + instanceManager.addHostCreatedInstance( + CameraStateError.detached( + code: code, + description: description, + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + identifier, + onCopy: (CameraStateError original) => CameraStateError.detached( + code: original.code, + description: original.description, + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + ); + } +} 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 5c5e863b001c..6869970cb9cd 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 @@ -11,6 +11,14 @@ import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; +enum CameraStateType { + closed, + closing, + open, + opening, + pendingOpen, +} + class ResolutionInfo { ResolutionInfo({ required this.width, @@ -63,6 +71,27 @@ class CameraPermissionsErrorData { } } +class CameraStateTypeData { + CameraStateTypeData({ + required this.value, + }); + + CameraStateType value; + + Object encode() { + return [ + value.index, + ]; + } + + static CameraStateTypeData decode(Object result) { + result as List; + return CameraStateTypeData( + value: CameraStateType.values[result[0]! as int], + ); + } +} + class InstanceManagerHostApi { /// Constructor for [InstanceManagerHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -80,7 +109,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 +166,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 +176,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, @@ -230,8 +259,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, @@ -241,7 +269,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, @@ -268,8 +296,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', @@ -286,13 +314,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', @@ -320,8 +347,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, @@ -331,7 +357,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, @@ -359,7 +385,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', @@ -383,8 +410,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?; @@ -409,17 +435,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', @@ -446,8 +467,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', @@ -473,8 +493,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', @@ -519,8 +539,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, @@ -530,7 +549,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, @@ -596,7 +615,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, @@ -624,7 +643,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); @@ -642,11 +661,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?; @@ -666,15 +683,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', @@ -693,10 +707,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', @@ -721,19 +735,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, @@ -752,7 +764,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, @@ -783,9 +795,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); @@ -803,14 +815,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', @@ -858,7 +868,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', @@ -918,7 +929,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); @@ -936,14 +947,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', @@ -964,8 +973,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', @@ -1072,8 +1081,7 @@ abstract class LiveCameraStateFlutterApi { void onCameraClosing(); - static void setup(LiveCameraStateFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(LiveCameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveCameraStateFlutterApi.create', codec, @@ -1083,7 +1091,7 @@ abstract class LiveCameraStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.LiveCameraStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.LiveCameraStateFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1109,3 +1117,328 @@ abstract class LiveCameraStateFlutterApi { } } } + +/// Host API for `CameraState`. +/// +/// 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. +/// +/// See . +class CameraStateHostApi { + /// Constructor for [CameraStateHostApi]. 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. + CameraStateHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = StandardMessageCodec(); + +} + +class _CameraStateFlutterApiCodec extends StandardMessageCodec { + const _CameraStateFlutterApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is CameraStateTypeData) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return CameraStateTypeData.decode(readValue(buffer)!); + default: + return super.readValueOfType(type, buffer); + } + } +} + +/// Flutter API for `CameraState`. +/// +/// 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. +/// +/// See . +abstract class CameraStateFlutterApi { + static const MessageCodec codec = _CameraStateFlutterApiCodec(); + + /// Create a new Dart instance and add it to the `InstanceManager`. + void create(int identifier, CameraStateTypeData type, int errorIdentifier); + + static void setup(CameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraStateFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.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.CameraStateFlutterApi.create was null, expected non-null int.'); + final CameraStateTypeData? arg_type = (args[1] as CameraStateTypeData?); + assert(arg_type != null, + 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null, expected non-null CameraStateTypeData.'); + final int? arg_errorIdentifier = (args[2] as int?); + assert(arg_errorIdentifier != null, + 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!, arg_type!, arg_errorIdentifier!); + return; + }); + } + } + } +} + +/// Host API for `Observer`. +/// +/// 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. +/// +/// See . +class ObserverHostApi { + /// Constructor for [ObserverHostApi]. 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. + ObserverHostApi({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) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ObserverHostApi.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; + } + } +} + +/// Flutter API for `Observer`. +/// +/// 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. +/// +/// See . +abstract class ObserverFlutterApi { + static const MessageCodec codec = StandardMessageCodec(); + + /// Callback to Dart function `Observer.onChanged`. + void onChanged(int identifier, int valueIdentifier); + + static void setup(ObserverFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ObserverFlutterApi.onChanged', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ObserverFlutterApi.onChanged 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.ObserverFlutterApi.onChanged was null, expected non-null int.'); + final int? arg_valueIdentifier = (args[1] as int?); + assert(arg_valueIdentifier != null, + 'Argument for dev.flutter.pigeon.ObserverFlutterApi.onChanged was null, expected non-null int.'); + api.onChanged(arg_identifier!, arg_valueIdentifier!); + return; + }); + } + } + } +} + +/// Host API for `CameraStateError`. +/// +/// 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. +/// +/// See . +class CameraStateErrorHostApi { + /// Constructor for [CameraStateErrorHostApi]. 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. + CameraStateErrorHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = StandardMessageCodec(); + +} + +/// Flutter API for `CameraStateError`. +/// +/// 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. +/// +/// See . +abstract class CameraStateErrorFlutterApi { + static const MessageCodec codec = StandardMessageCodec(); + + /// Create a new Dart instance and add it to the `InstanceManager`. + void create(int identifier, int code, String description); + + static void setup(CameraStateErrorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraStateErrorFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.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.CameraStateErrorFlutterApi.create was null, expected non-null int.'); + final int? arg_code = (args[1] as int?); + assert(arg_code != null, + 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null, expected non-null int.'); + final String? arg_description = (args[2] as String?); + assert(arg_description != null, + 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null, expected non-null String.'); + api.create(arg_identifier!, arg_code!, arg_description!); + return; + }); + } + } + } +} + +/// Host API for `LiveData`. +/// +/// 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. +/// +/// See . +class LiveDataHostApi { + /// Constructor for [LiveDataHostApi]. 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. + LiveDataHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = StandardMessageCodec(); + + /// Handles Dart method `LiveData.observe`. + Future observe(int arg_identifier, int arg_observerIdentifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveDataHostApi.observe', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier, arg_observerIdentifier]) 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 `LiveData.removeObservers`. + Future removeObservers(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveDataHostApi.removeObservers', 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; + } + } +} + +/// Flutter API for `LiveData`. +/// +/// 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. +/// +/// See . +abstract class LiveDataFlutterApi { + static const MessageCodec codec = StandardMessageCodec(); + + /// Create a new Dart instance and add it to the `InstanceManager`. + void create(int identifier); + + static void setup(LiveDataFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveDataFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.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.LiveDataFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!); + return; + }); + } + } + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/live_data.dart b/packages/camera/camera_android_camerax/lib/src/live_data.dart new file mode 100644 index 000000000000..4d6828fdd69b --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/live_data.dart @@ -0,0 +1,100 @@ +import 'package:simple_ast/annotations.dart'; +import 'package:flutter/services.dart'; +import 'package:meta/meta.dart'; + +import 'observer.dart'; +import 'java_object.dart'; +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camerax_library.g.dart'; +import 'instance_manager.dart'; + +class LiveData extends JavaObject { + LiveData.detached( + {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) + : _api = _LiveDataHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager), + super.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + + final _LiveDataHostApiImpl _api; + + Future observe(Observer observer) { + return _api.observeFromInstances(this, observer); + } + + Future removeObservers() { + return _api.removeObserversFromInstances(this); + } +} + +// TODO(bparrishMines): Move these classes or desired methods into `live_data.dart` + +class _LiveDataHostApiImpl extends LiveDataHostApi { + _LiveDataHostApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager, + super(binaryMessenger: binaryMessenger); + + final BinaryMessenger? binaryMessenger; + + final InstanceManager instanceManager; + + Future observeFromInstances( + LiveData instance, + Observer observer, + ) { + return observe( + instanceManager.getIdentifier(instance)!, + instanceManager.getIdentifier(observer)!, + ); + } + + Future removeObserversFromInstances( + LiveData instance, + ) { + return removeObservers( + instanceManager.getIdentifier(instance)!, + ); + } +} + +/// Flutter API implementation for [LiveData]. +/// +/// 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 LiveDataFlutterApiImpl implements LiveDataFlutterApi { + /// Constructs a [LiveDataFlutterApiImpl]. + LiveDataFlutterApiImpl({ + 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( + LiveData.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + identifier, + onCopy: (LiveData original) => LiveData.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + ); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/observer.dart b/packages/camera/camera_android_camerax/lib/src/observer.dart new file mode 100644 index 000000000000..2b054b9aa0fd --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/observer.dart @@ -0,0 +1,106 @@ +import 'package:simple_ast/annotations.dart'; +import 'package:flutter/services.dart'; +import 'package:meta/meta.dart'; + +import 'observer.dart'; +import 'java_object.dart'; +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camera_state.dart'; +import 'camerax_library.g.dart'; +import 'instance_manager.dart'; + +@SimpleClassAnnotation() +class Observer extends JavaObject { + Observer( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + required this.onChanged}) + : _api = _ObserverHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager), + super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + _api.createFromInstances(this); + } + + Observer.detached( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + required this.onChanged}) + : _api = _ObserverHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager), + super.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + + final _ObserverHostApiImpl _api; + + final void Function(Observer instance, T value) onChanged; +} + +// TODO(bparrishMines): Move these classes or desired methods into `observer.dart` + +class _ObserverHostApiImpl extends ObserverHostApi { + _ObserverHostApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager, + super(binaryMessenger: binaryMessenger); + + final BinaryMessenger? binaryMessenger; + + final InstanceManager instanceManager; + + Future createFromInstances( + Observer instance, + ) { + return create( + instanceManager.addDartCreatedInstance( + instance, + onCopy: (Observer original) => Observer.detached( + onChanged: original.onChanged, + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + ), + ); + } +} + +/// Flutter API implementation for [Observer]. +/// +/// 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 ObserverFlutterApiImpl implements ObserverFlutterApi { + /// Constructs a [ObserverFlutterApiImpl]. + ObserverFlutterApiImpl({ + 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 onChanged( + int identifier, + int valueIdentifier, + ) { + final dynamic instance = + instanceManager.getInstanceWithWeakReference(identifier)!; + + // ignore: avoid_dynamic_calls, void_checks + return instance.onChanged( + instance, + instanceManager.getInstanceWithWeakReference(valueIdentifier)!, + ); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/observer.simple_ast.json b/packages/camera/camera_android_camerax/lib/src/observer.simple_ast.json new file mode 100644 index 000000000000..336ff7a32d9f --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/observer.simple_ast.json @@ -0,0 +1,396 @@ +{ + "classes": [ + { + "name": "Observer", + "private": false, + "methods": [], + "constructors": [ + { + "name": "", + "private": false, + "parameters": [ + { + "name": "binaryMessenger", + "type": { + "name": "BinaryMessenger", + "nullable": true, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": true, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": false, + "customValues": {} + }, + "isNamed": true, + "index": 0, + "customValues": {} + }, + { + "name": "instanceManager", + "type": { + "name": "InstanceManager", + "nullable": true, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": true, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": false, + "customValues": {} + }, + "isNamed": true, + "index": 1, + "customValues": {} + }, + { + "name": "onChanged", + "type": { + "name": "void Function(Observer, T)", + "nullable": false, + "typeArguments": [], + "functionParameters": [ + { + "name": "instance", + "type": { + "name": "Observer", + "nullable": false, + "typeArguments": [ + { + "name": "T", + "nullable": false, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": false, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": true, + "customValues": {} + } + ], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": true, + "isFunction": false, + "isEnum": false, + "isSimpleClass": true, + "isUnknownOrUnsupportedType": false, + "customValues": {} + }, + "isNamed": false, + "index": 0, + "customValues": {} + }, + { + "name": "value", + "type": { + "name": "T", + "nullable": false, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": false, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": true, + "customValues": {} + }, + "isNamed": false, + "index": 1, + "customValues": {} + } + ], + "functionReturnType": { + "name": "void", + "nullable": false, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": true, + "isClass": false, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": false, + "customValues": {} + }, + "isVoid": false, + "isClass": false, + "isFunction": true, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": false, + "customValues": {} + }, + "isNamed": true, + "index": 2, + "customValues": {} + } + ], + "customValues": {} + }, + { + "name": "detached", + "private": false, + "parameters": [ + { + "name": "binaryMessenger", + "type": { + "name": "BinaryMessenger", + "nullable": true, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": true, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": false, + "customValues": {} + }, + "isNamed": true, + "index": 0, + "customValues": {} + }, + { + "name": "instanceManager", + "type": { + "name": "InstanceManager", + "nullable": true, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": true, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": false, + "customValues": {} + }, + "isNamed": true, + "index": 1, + "customValues": {} + }, + { + "name": "onChanged", + "type": { + "name": "void Function(Observer, T)", + "nullable": false, + "typeArguments": [], + "functionParameters": [ + { + "name": "instance", + "type": { + "name": "Observer", + "nullable": false, + "typeArguments": [ + { + "name": "T", + "nullable": false, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": false, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": true, + "customValues": {} + } + ], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": true, + "isFunction": false, + "isEnum": false, + "isSimpleClass": true, + "isUnknownOrUnsupportedType": false, + "customValues": {} + }, + "isNamed": false, + "index": 0, + "customValues": {} + }, + { + "name": "value", + "type": { + "name": "T", + "nullable": false, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": false, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": true, + "customValues": {} + }, + "isNamed": false, + "index": 1, + "customValues": {} + } + ], + "functionReturnType": { + "name": "void", + "nullable": false, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": true, + "isClass": false, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": false, + "customValues": {} + }, + "isVoid": false, + "isClass": false, + "isFunction": true, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": false, + "customValues": {} + }, + "isNamed": true, + "index": 2, + "customValues": {} + } + ], + "customValues": {} + } + ], + "fields": [ + { + "name": "_api", + "private": true, + "static": false, + "type": { + "name": "_ObserverHostApiImpl", + "nullable": false, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": true, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": false, + "customValues": {} + } + }, + { + "name": "onChanged", + "private": false, + "static": false, + "type": { + "name": "void Function(Observer, T)", + "nullable": false, + "typeArguments": [], + "functionParameters": [ + { + "name": "instance", + "type": { + "name": "Observer", + "nullable": false, + "typeArguments": [ + { + "name": "T", + "nullable": false, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": false, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": true, + "customValues": {} + } + ], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": true, + "isFunction": false, + "isEnum": false, + "isSimpleClass": true, + "isUnknownOrUnsupportedType": false, + "customValues": {} + }, + "isNamed": false, + "index": 0, + "customValues": {} + }, + { + "name": "value", + "type": { + "name": "T", + "nullable": false, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": false, + "isClass": false, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": true, + "customValues": {} + }, + "isNamed": false, + "index": 1, + "customValues": {} + } + ], + "functionReturnType": { + "name": "void", + "nullable": false, + "typeArguments": [], + "functionParameters": [], + "functionReturnType": null, + "isVoid": true, + "isClass": false, + "isFunction": false, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": false, + "customValues": {} + }, + "isVoid": false, + "isClass": false, + "isFunction": true, + "isEnum": false, + "isSimpleClass": false, + "isUnknownOrUnsupportedType": false, + "customValues": {} + } + } + ], + "customValues": {} + } + ], + "functions": [], + "enums": [], + "customValues": {} +} \ No newline at end of file diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index c001c915e70f..a7ce2c567213 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -46,6 +46,18 @@ class CameraPermissionsErrorData { String description; } +enum CameraStateType { + closed, + closing, + open, + opening, + pendingOpen, +} + +class CameraStateTypeData { + late CameraStateType value; +} + @HostApi(dartHostTestHandler: 'TestInstanceManagerHostApi') abstract class InstanceManagerHostApi { /// Clear the native `InstanceManager`. @@ -172,3 +184,140 @@ abstract class LiveCameraStateFlutterApi { void onCameraClosing(); } + +/// Host API for `CameraState`. +/// +/// 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. +/// +/// See . +@HostApi(dartHostTestHandler: 'TestCameraStateHostApi') +abstract class CameraStateHostApi {} + +/// Flutter API for `CameraState`. +/// +/// 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. +/// +/// See . +@FlutterApi() +abstract class CameraStateFlutterApi { + /// Create a new Dart instance and add it to the `InstanceManager`. + + void create( + int identifier, + CameraStateTypeData type, + int errorIdentifier, + ); +} + +// TODO(bparrishMines): Copy these classes into pigeon file and run pigeon +// TODO(bparrishMines): Fix documentation spacing over class methods if this is for iOS + +/// Host API for `Observer`. +/// +/// 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. +/// +/// See . +@HostApi(dartHostTestHandler: 'TestObserverHostApi') +abstract class ObserverHostApi { + /// Create a new native instance and add it to the `InstanceManager`. + + void create( + int identifier, + ); +} + +/// Flutter API for `Observer`. +/// +/// 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. +/// +/// See . +@FlutterApi() +abstract class ObserverFlutterApi { + /// Callback to Dart function `Observer.onChanged`. + + void onChanged( + int identifier, + int valueIdentifier, + ); +} + +// TODO(bparrishMines): Copy these classes into pigeon file and run pigeon +// TODO(bparrishMines): Fix documentation spacing over class methods if this is for iOS + +/// Host API for `CameraStateError`. +/// +/// 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. +/// +/// See . +@HostApi(dartHostTestHandler: 'TestCameraStateErrorHostApi') +abstract class CameraStateErrorHostApi {} + +/// Flutter API for `CameraStateError`. +/// +/// 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. +/// +/// See . +@FlutterApi() +abstract class CameraStateErrorFlutterApi { + /// Create a new Dart instance and add it to the `InstanceManager`. + + void create( + int identifier, + int code, + String description, + ); +} + +// TODO(bparrishMines): Copy these classes into pigeon file and run pigeon +// TODO(bparrishMines): Fix documentation spacing over class methods if this is for iOS + +/// Host API for `LiveData`. +/// +/// 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. +/// +/// See . +@HostApi(dartHostTestHandler: 'TestLiveDataHostApi') +abstract class LiveDataHostApi { + /// Handles Dart method `LiveData.observe`. + + void observe( + int identifier, + int observerIdentifier, + ); + + /// Handles Dart method `LiveData.removeObservers`. + + void removeObservers( + int identifier, + ); +} + +/// Flutter API for `LiveData`. +/// +/// 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. +/// +/// See . +@FlutterApi() +abstract class LiveDataFlutterApi { + /// 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..4da9c3f07cb6 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 - pigeon: ^9.1.0 + gen_api_impls: + git: + url: git@github.com:bparrishMines/penguin.git + path: packages/gen_api_impls + mockito: ^5.3.0 + pedantic: ^1.10.0 + pigeon: ^9.0.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 e802aab30868..4bfe55917c9f 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. @@ -420,7 +420,7 @@ class MockBuildContext extends _i1.Mock implements _i6.BuildContext { ), ) as _i6.InheritedWidget); @override - void visitAncestorElements(bool Function(_i6.Element)? visitor) => + void visitAncestorElements(_i6.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 5a2412e8968d..4461e9d9d743 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/camera_state_error_test.dart b/packages/camera/camera_android_camerax/test/camera_state_error_test.dart new file mode 100644 index 000000000000..8df0ed50d61e --- /dev/null +++ b/packages/camera/camera_android_camerax/test/camera_state_error_test.dart @@ -0,0 +1,53 @@ +// 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/camera_state_error.dart'; +import 'package:camera_android_camerax/src/camerax_library.g.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; + +import 'camera_state_error_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([TestCameraStateErrorHostApi, TestInstanceManagerHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('CameraStateError', () { + tearDown(() { + TestCameraStateErrorHostApi.setup(null); + TestInstanceManagerHostApi.setup(null); + }); + + test('FlutterAPI create', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final CameraStateErrorFlutterApiImpl api = CameraStateErrorFlutterApiImpl( + instanceManager: instanceManager, + ); + + const int instanceIdentifier = 0; + + api.create( + instanceIdentifier, + 0, + 'testString', + ); + + expect( + instanceManager.getInstanceWithWeakReference(instanceIdentifier), + isA(), + ); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/camera_state_error_test.mocks.dart b/packages/camera/camera_android_camerax/test/camera_state_error_test.mocks.dart new file mode 100644 index 000000000000..d84b67c9fff7 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/camera_state_error_test.mocks.dart @@ -0,0 +1,48 @@ +// Mocks generated by Mockito 5.4.0 from annotations +// in camera_android_camerax/test/camera_state_error_test.gen_api_impls.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 [TestCameraStateErrorHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestCameraStateErrorHostApi extends _i1.Mock + implements _i2.TestCameraStateErrorHostApi { + MockTestCameraStateErrorHostApi() { + _i1.throwOnMissingStub(this); + } +} + +/// 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/camera_state_test.dart b/packages/camera/camera_android_camerax/test/camera_state_test.dart new file mode 100644 index 000000000000..e7b3a39d7f46 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/camera_state_test.dart @@ -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. + +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:camera_android_camerax/src/camera_state_error.dart'; +import 'package:camera_android_camerax/src/camera_state.dart'; +import 'package:camera_android_camerax/src/camerax_library.g.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; + +import 'camera_state_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([TestCameraStateHostApi, TestInstanceManagerHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('CameraState', () { + tearDown(() { + TestCameraStateHostApi.setup(null); + TestInstanceManagerHostApi.setup(null); + }); + + test('FlutterAPI create', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final CameraStateFlutterApiImpl api = CameraStateFlutterApiImpl( + instanceManager: instanceManager, + ); + + const int code = 23; + const String description = "test description"; + final int cameraStateIdentifier = instanceManager.addDartCreatedInstance( + CameraStateError.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + code: code, + description: description, + ), onCopy: (_) { + return CameraStateError.detached(code: code, description: description); + }); + + const int instanceIdentifier = 46; + + api.create( + instanceIdentifier, + CameraStateTypeData(value: CameraStateType.closed), + cameraStateIdentifier, + ); + + expect( + instanceManager.getInstanceWithWeakReference(instanceIdentifier), + isA(), + ); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/camera_state_test.mocks.dart b/packages/camera/camera_android_camerax/test/camera_state_test.mocks.dart new file mode 100644 index 000000000000..62dda5d52c03 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/camera_state_test.mocks.dart @@ -0,0 +1,48 @@ +// Mocks generated by Mockito 5.4.0 from annotations +// in camera_android_camerax/test/camera_state_test.gen_api_impls.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 [TestCameraStateHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestCameraStateHostApi extends _i1.Mock + implements _i2.TestCameraStateHostApi { + MockTestCameraStateHostApi() { + _i1.throwOnMissingStub(this); + } +} + +/// 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/camera_test.mocks.dart b/packages/camera/camera_android_camerax/test/camera_test.mocks.dart index 4de82739c8b6..7f3af283f1a3 100644 --- a/packages/camera/camera_android_camerax/test/camera_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/camera_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_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/live_camera_state_test.mocks.dart b/packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart index 7c07458cdd95..71ba35d141b6 100644 --- a/packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/live_camera_state_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/live_camera_state_test.dart. // Do not manually edit this file. diff --git a/packages/camera/camera_android_camerax/test/live_data_test.dart b/packages/camera/camera_android_camerax/test/live_data_test.dart new file mode 100644 index 000000000000..fe077f0d797f --- /dev/null +++ b/packages/camera/camera_android_camerax/test/live_data_test.dart @@ -0,0 +1,131 @@ +// 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/camerax_library.g.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:camera_android_camerax/src/live_data.dart'; +import 'package:camera_android_camerax/src/observer.dart'; + +import 'live_data_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([TestLiveDataHostApi, TestInstanceManagerHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('LiveData', () { + tearDown(() { + TestLiveDataHostApi.setup(null); + TestInstanceManagerHostApi.setup(null); + }); + + test('observe', () async { + final MockTestLiveDataHostApi mockApi = MockTestLiveDataHostApi(); + TestLiveDataHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final LiveData instance = LiveData.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (LiveData original) => LiveData.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + final Observer observer = Observer.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + onChanged: (Observer instance, value) {}, + ); + const int observerIdentifier = 20; + instanceManager.addHostCreatedInstance( + observer, + observerIdentifier, + onCopy: (_) => Observer.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + onChanged: (Observer instance, value) {}, + ), + ); + + await instance.observe( + observer, + ); + + verify(mockApi.observe( + instanceIdentifier, + observerIdentifier, + )); + }); + + test('removeObservers', () async { + final MockTestLiveDataHostApi mockApi = MockTestLiveDataHostApi(); + TestLiveDataHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final LiveData instance = LiveData.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ); + const int instanceIdentifier = 0; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (LiveData original) => LiveData.detached( + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + await instance.removeObservers(); + + verify(mockApi.removeObservers( + instanceIdentifier, + )); + }); + + test('FlutterAPI create', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final LiveDataFlutterApiImpl api = LiveDataFlutterApiImpl( + instanceManager: instanceManager, + ); + + const int instanceIdentifier = 0; + + api.create( + instanceIdentifier, + ); + + expect( + instanceManager.getInstanceWithWeakReference(instanceIdentifier), + isA(), + ); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/live_data_test.mocks.dart b/packages/camera/camera_android_camerax/test/live_data_test.mocks.dart new file mode 100644 index 000000000000..6970fbdbfdd5 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/live_data_test.mocks.dart @@ -0,0 +1,72 @@ +// Mocks generated by Mockito 5.4.0 from annotations +// in camera_android_camerax/test/live_data_test.gen_api_impls.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 [TestLiveDataHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestLiveDataHostApi extends _i1.Mock + implements _i2.TestLiveDataHostApi { + MockTestLiveDataHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void observe( + int? identifier, + int? observerIdentifier, + ) => + super.noSuchMethod( + Invocation.method( + #observe, + [ + identifier, + observerIdentifier, + ], + ), + returnValueForMissingStub: null, + ); + @override + void removeObservers(int? identifier) => super.noSuchMethod( + Invocation.method( + #removeObservers, + [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/observer_test.dart b/packages/camera/camera_android_camerax/test/observer_test.dart new file mode 100644 index 000000000000..e7d8e06f62a9 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/observer_test.dart @@ -0,0 +1,116 @@ +// 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/camera_state.dart'; +import 'package:camera_android_camerax/src/camerax_library.g.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:camera_android_camerax/src/observer.dart'; + +import 'observer_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([TestObserverHostApi, TestInstanceManagerHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('Observer', () { + tearDown(() { + TestObserverHostApi.setup(null); + TestInstanceManagerHostApi.setup(null); + }); + + test('HostApi create', () { + final MockTestObserverHostApi mockApi = MockTestObserverHostApi(); + TestObserverHostApi.setup(mockApi); + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final Observer instance = Observer( + instanceManager: instanceManager, + onChanged: (Observer instance, value) {}, + ); + + verify(mockApi.create( + instanceManager.getIdentifier(instance), + )); + }); + + test('onChanged', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + const int instanceIdentifier = 0; + late final List callbackParameters; + final Observer instance = Observer.detached( + onChanged: ( + Observer instance, + CameraState value, + ) { + callbackParameters = [ + instance, + value, + ]; + }, + binaryMessenger: null, + instanceManager: instanceManager, + ); + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (Observer original) => + Observer.detached( + onChanged: original.onChanged, + binaryMessenger: null, + instanceManager: instanceManager, + ), + ); + + final ObserverFlutterApiImpl flutterApi = ObserverFlutterApiImpl( + instanceManager: instanceManager, + ); + + final CameraStateType cameraStateType = CameraStateType.closed; + + final CameraState value = CameraState.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + type: cameraStateType, + ); + const int valueIdentifier = 11; + instanceManager.addHostCreatedInstance( + value, + valueIdentifier, + onCopy: (_) => CameraState.detached( + // TODO(bparrishMines): This should include the missing params. + binaryMessenger: null, + instanceManager: instanceManager, + type: cameraStateType, + ), + ); + + flutterApi.onChanged( + instanceIdentifier, + valueIdentifier, + ); + + expect(callbackParameters, [ + instance, + value, + ]); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/observer_test.mocks.dart b/packages/camera/camera_android_camerax/test/observer_test.mocks.dart new file mode 100644 index 000000000000..ac8d4934cc04 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/observer_test.mocks.dart @@ -0,0 +1,57 @@ +// Mocks generated by Mockito 5.4.0 from annotations +// in camera_android_camerax/test/observer_test.gen_api_impls.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 [TestObserverHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestObserverHostApi extends _i1.Mock + implements _i2.TestObserverHostApi { + MockTestObserverHostApi() { + _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/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 7c961a11bbbc..d31f7a0d0f00 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`. @@ -21,16 +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) { - 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 []; @@ -41,22 +41,22 @@ abstract class TestInstanceManagerHostApi { } abstract class TestJavaObjectHostApi { + 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) { - 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.'); + '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,25 +70,24 @@ abstract class TestJavaObjectHostApi { } abstract class TestCameraInfoHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getSensorRotationDegrees(int identifier); int getLiveCameraState(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); + _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.'); + '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, @@ -103,11 +102,11 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', 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.getLiveCameraState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -121,24 +120,24 @@ abstract class TestCameraInfoHostApi { } abstract class TestCameraSelectorHostApi { + 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) { - 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.'); + '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, @@ -154,21 +153,19 @@ 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.'); + '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]; }); } @@ -177,14 +174,14 @@ abstract class TestCameraSelectorHostApi { } abstract class TestProcessCameraProviderHostApi { + 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); @@ -192,16 +189,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) { - 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]; @@ -210,36 +206,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); + _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.'); + '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); + _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.'); + '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, @@ -247,12 +240,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]; }); } @@ -262,11 +253,11 @@ 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.'); + '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, @@ -274,8 +265,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]; }); } @@ -285,17 +275,16 @@ 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.'); + '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!); @@ -308,11 +297,11 @@ 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.'); + '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, @@ -326,22 +315,22 @@ abstract class TestProcessCameraProviderHostApi { } abstract class TestCameraHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getCameraInfo(int identifier); - static void setup(TestCameraHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', 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.CameraHostApi.getCameraInfo was null.'); + 'Argument for dev.flutter.pigeon.CameraHostApi.getCameraInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -369,7 +358,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); @@ -378,50 +367,45 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { } abstract class TestSystemServicesHostApi { + 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) { - 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.'); + '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); + _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.'); + '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, @@ -429,21 +413,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) { - 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 []; @@ -471,9 +453,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); @@ -482,6 +464,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); @@ -492,25 +475,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) { - 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.'); + '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 []; }); @@ -521,11 +502,11 @@ 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.'); + '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, @@ -537,13 +518,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) { - 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 []; @@ -555,11 +535,11 @@ 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.'); + '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, @@ -587,7 +567,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); @@ -596,6 +576,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); @@ -604,25 +585,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) { - 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.'); + '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 []; }); @@ -633,11 +612,11 @@ 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.'); + '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, @@ -655,11 +634,11 @@ 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.'); + '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, @@ -673,24 +652,24 @@ abstract class TestImageCaptureHostApi { } abstract class TestLiveCameraStateHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void addObserver(int identifier); void removeObservers(int identifier); - static void setup(TestLiveCameraStateHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestLiveCameraStateHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', 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.LiveCameraStateHostApi.addObserver was null.'); + 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.addObserver was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -705,11 +684,11 @@ abstract class TestLiveCameraStateHostApi { 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', 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.LiveCameraStateHostApi.removeObservers was null.'); + 'Argument for dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -721,3 +700,132 @@ abstract class TestLiveCameraStateHostApi { } } } + +/// Host API for `CameraState`. +/// +/// 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. +/// +/// See . +abstract class TestCameraStateHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static const MessageCodec codec = StandardMessageCodec(); + + static void setup(TestCameraStateHostApi? api, {BinaryMessenger? binaryMessenger}) { + } +} + +/// Host API for `Observer`. +/// +/// 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. +/// +/// See . +abstract class TestObserverHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static const MessageCodec codec = StandardMessageCodec(); + + /// Create a new native instance and add it to the `InstanceManager`. + void create(int identifier); + + static void setup(TestObserverHostApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ObserverHostApi.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.ObserverHostApi.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.ObserverHostApi.create was null, expected non-null int.'); + api.create(arg_identifier!); + return []; + }); + } + } + } +} + +/// Host API for `CameraStateError`. +/// +/// 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. +/// +/// See . +abstract class TestCameraStateErrorHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static const MessageCodec codec = StandardMessageCodec(); + + static void setup(TestCameraStateErrorHostApi? api, {BinaryMessenger? binaryMessenger}) { + } +} + +/// Host API for `LiveData`. +/// +/// 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. +/// +/// See . +abstract class TestLiveDataHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static const MessageCodec codec = StandardMessageCodec(); + + /// Handles Dart method `LiveData.observe`. + void observe(int identifier, int observerIdentifier); + + /// Handles Dart method `LiveData.removeObservers`. + void removeObservers(int identifier); + + static void setup(TestLiveDataHostApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveDataHostApi.observe', 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.LiveDataHostApi.observe 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.LiveDataHostApi.observe was null, expected non-null int.'); + final int? arg_observerIdentifier = (args[1] as int?); + assert(arg_observerIdentifier != null, + 'Argument for dev.flutter.pigeon.LiveDataHostApi.observe was null, expected non-null int.'); + api.observe(arg_identifier!, arg_observerIdentifier!); + return []; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveDataHostApi.removeObservers', 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.LiveDataHostApi.removeObservers 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.LiveDataHostApi.removeObservers was null, expected non-null int.'); + api.removeObservers(arg_identifier!); + return []; + }); + } + } + } +} From 33458787870f08d70523443c11d8421bc9f3238e Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 12 Apr 2023 10:30:28 -0700 Subject: [PATCH 39/71] Fixing plugin --- .../camerax/CameraAndroidCameraxPlugin.java | 35 +++++++----- .../camerax/CameraStateFlutterApiWrapper.java | 55 ++++++++++++++++-- .../plugins/camerax/LiveDataHostApiImpl.java | 17 +++--- .../camerax/ObserverFlutterApiWrapper.java | 3 +- .../flutter/plugins/camerax/LiveDataTest.java | 4 +- .../lib/src/android_camera_camerax.dart | 57 ++++++++++++------- ...roid_camera_camerax_flutter_api_impls.dart | 35 +++++++++--- .../lib/src/camera_info.dart | 13 +++-- .../lib/src/observer.dart | 3 +- 9 files changed, 156 insertions(+), 66 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 6d33b210a050..8fd84fc7ea04 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 @@ -4,6 +4,8 @@ package io.flutter.plugins.camerax; +import javax.annotation.processing.Generated; + import android.app.Activity; import android.content.Context; import androidx.annotation.NonNull; @@ -19,8 +21,10 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, Activity private InstanceManager instanceManager; private FlutterPluginBinding pluginBinding; private LiveCameraStateHostApiImpl liveCameraStateHostApiImpl; - private ProcessCameraProviderHostApiImpl processCameraProviderHostApi; - private ImageCaptureHostApiImpl imageCaptureHostApi; + private ProcessCameraProviderHostApiImpl processCameraProviderHostApiImpl; + private ImageCaptureHostApiImpl imageCaptureHostApiImpl; + private LiveDataHostApiImpl liveDataHostApiImpl; + public SystemServicesHostApiImpl systemServicesHostApi; /** @@ -48,21 +52,22 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex binaryMessenger, new CameraSelectorHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.JavaObjectHostApi.setup( binaryMessenger, new JavaObjectHostApiImpl(instanceManager)); - processCameraProviderHostApi = + processCameraProviderHostApiImpl = new ProcessCameraProviderHostApiImpl(binaryMessenger, instanceManager, context); GeneratedCameraXLibrary.ProcessCameraProviderHostApi.setup( - binaryMessenger, processCameraProviderHostApi); + binaryMessenger, processCameraProviderHostApiImpl); systemServicesHostApi = new SystemServicesHostApiImpl(binaryMessenger, instanceManager); 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); + imageCaptureHostApiImpl = new ImageCaptureHostApiImpl(binaryMessenger, instanceManager, context); + GeneratedCameraXLibrary.ImageCaptureHostApi.setup(binaryMessenger, imageCaptureHostApiImpl); GeneratedCameraXLibrary.CameraHostApi.setup( binaryMessenger, new CameraHostApiImpl(binaryMessenger, instanceManager)); - liveCameraStateHostApiImpl = new LiveCameraStateHostApiImpl(binaryMessenger, instanceManager); - GeneratedCameraXLibrary.LiveCameraStateHostApi.setup( - binaryMessenger, liveCameraStateHostApiImpl); + liveDataHostApiImpl = new LiveDataHostApiImpl(binaryMessenger, instanceManager); + GeneratedCameraXLibrary.LiveDataHostApi.setup(binaryMessenger, liveDataHostApiImpl); + GeneratedCameraXLibrary.ObserverHostApi.setup( + binaryMessenger, new ObserverHostApiImpl(binaryMessenger, instanceManager)); } @Override @@ -88,8 +93,8 @@ public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBi updateContext(pluginBinding.getApplicationContext()); Activity activity = activityPluginBinding.getActivity(); - processCameraProviderHostApi.setLifecycleOwner((LifecycleOwner) activity); - liveCameraStateHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); + processCameraProviderHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); + liveDataHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); systemServicesHostApi.setActivity(activity); systemServicesHostApi.setPermissionsRegistry( activityPluginBinding::addRequestPermissionsResultListener); @@ -116,11 +121,11 @@ public void onDetachedFromActivity() { * ProcessCameraProvider}. */ public void updateContext(Context context) { - if (processCameraProviderHostApi != null) { - processCameraProviderHostApi.setContext(context); + if (processCameraProviderHostApiImpl != null) { + processCameraProviderHostApiImpl.setContext(context); } - if (imageCaptureHostApi != null) { - processCameraProviderHostApi.setContext(context); + if (imageCaptureHostApiImpl != null) { + processCameraProviderHostApiImpl.setContext(context); } } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java index baf0617ee59c..3c86a13cd29c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java @@ -57,15 +57,27 @@ public void create( @Nullable CameraState.StateError error, @NonNull CameraStateFlutterApi.Reply callback) { - // TODO(camsim99): actually fix this CameraStateType cameraStateType; switch (type) { - default: - cameraStateType = CameraStateType.CLOSED; + case CameraState.Type.CLOSED: + cameraStateType = CameraState.Type.CLOSED; + break; + case CameraState.Type.CLOSING: + cameraStateType = CameraState.Type.CLOSING; + break; + case CameraState.Type.OPEN: + cameraStateType = CameraState.Type.CLOSED; + break; + case CameraState.Type.OPENING: + cameraStateType = CameraState.Type.CLOSED; + break; + case CameraState.Type.PENDING_OPEN: + cameraStateType = CameraState.Type.CLOSED; + break; } if (error != null) { - new CameraStateErrorFlutterApiWrapper(binaryMessenger, instanceManager).create(error, Long.valueOf(error.getCode()), "TODO(camsim99)", reply -> {}); + new CameraStateErrorFlutterApiWrapper(binaryMessenger, instanceManager).create(error, Long.valueOf(error.getCode()), getCameraStateErrorDescription(error), reply -> {}); } if (!instanceManager.containsInstance(instance)) { @@ -77,6 +89,41 @@ public void create( } } + /** + * Returns an error message corresponding to the specified {@link CameraState.StateError}. + * + *

See https://developer.android.com/reference/androidx/camera/core/CameraState#constants_1 for + * more information on the different {@link CameraState.StateError} types. + */ + private String getCameraStateErrorDescription(@NonNull CameraState.StateError cameraStateError) { + final int cameraStateErrorCode = cameraStateError.getCode(); + final String cameraStateErrorDescription = cameraStateErrorCode + ": "; + switch (cameraStateErrorCode) { + case CameraState.ERROR_CAMERA_IN_USE: + return cameraStateErrorDescription + + "The camera was already in use, possibly by a higher-priority camera client."; + case CameraState.ERROR_MAX_CAMERAS_IN_USE: + return cameraStateErrorDescription + + "The limit number of open cameras has been reached, and more cameras cannot be opened until other instances are closed."; + case CameraState.ERROR_OTHER_RECOVERABLE_ERROR: + return cameraStateErrorDescription + + "The camera device has encountered a recoverable error. CameraX will attempt to recover from the error."; + case CameraState.ERROR_STREAM_CONFIG: + return cameraStateErrorDescription + "Configuring the camera has failed."; + case CameraState.ERROR_CAMERA_DISABLED: + return cameraStateErrorDescription + + "The camera device could not be opened due to a device policy. Thia may be caused by a client from a background process attempting to open the camera."; + case CameraState.ERROR_CAMERA_FATAL_ERROR: + return cameraStateErrorDescription + + "The camera was closed due to a fatal error. This may require the Android device be shut down and restarted to restore camera function or may indicate a persistent camera hardware problem."; + case CameraState.ERROR_DO_NOT_DISTURB_MODE_ENABLED: + return cameraStateErrorDescription + + "The camera could not be opened because 'Do Not Disturb' mode is enabled. Please disable this mode, and try opening the camera again."; + default: + return "There was an undefined issue with the camera state."; + } + } + /** * Sets the Flutter API used to send messages to Dart. * diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java index 8555021299dd..c6b398946c7b 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java @@ -26,10 +26,8 @@ public class LiveDataHostApiImpl implements LiveDataHostApi { // To ease adding additional methods, this value is added prematurely. @SuppressWarnings({"unused", "FieldCanBeLocal"}) private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; - - public LifecycleOwner fakeLifecycleOwner; + private LifecycleOwner lifecycleOwner; /** * Constructs a {@link LiveDataHostApiImpl}. @@ -44,20 +42,21 @@ public LiveDataHostApiImpl( this.instanceManager = instanceManager; } + /** Sets {@link LifecycleOwner} used to observe the camera state if so requested. */ + public void setLifecycleOwner(LifecycleOwner lifecycleOwner) { + this.lifecycleOwner = lifecycleOwner; + } + @Override @SuppressWarnings("unchecked") public void observe(@NonNull Long identifier, @NonNull Long observerIdentifier) { - - // tODO(camsim99): get lifecycleowner getLiveDataInstance(identifier) - .observe(fakeLifecycleOwner, Objects.requireNonNull(instanceManager.getInstance(observerIdentifier))); + .observe(lifecycleOwner, Objects.requireNonNull(instanceManager.getInstance(observerIdentifier))); } @Override public void removeObservers(@NonNull Long identifier) { - - // tODO(camsim99): get lifecycleowner - getLiveDataInstance(identifier).removeObservers(fakeLifecycleOwner); + getLiveDataInstance(identifier).removeObservers(lifecycleOwner); } private LiveData getLiveDataInstance(@NonNull Long identifier) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java index e567f2fb18a9..f26bd92f59ca 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java @@ -57,8 +57,7 @@ public void onChanged( CameraState state = (CameraState) value; new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager).create(state, state.getType(), state.getError(), reply -> {}); } else { - // TODO(camsim99): make this more specific - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException("The type of value in observance is not wrapped by this plugin."); } api.onChanged( diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java index 2cf5f833fb87..fdfe7d3db83e 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -65,7 +65,7 @@ public void observe() { new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); LifecycleOwner fakeLifecycleOwner = mock(LifecycleOwner.class); - hostApi.fakeLifecycleOwner = fakeLifecycleOwner; + hostApi.setLifecycleOwner(fakeLifecycleOwner); hostApi.observe(instanceIdentifier, observerIdentifier); @@ -82,7 +82,7 @@ public void removeObservers() { new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); LifecycleOwner fakeLifecycleOwner = mock(LifecycleOwner.class); - hostApi.fakeLifecycleOwner = fakeLifecycleOwner; + hostApi.setLifecycleOwner(fakeLifecycleOwner); hostApi.removeObservers(instanceIdentifier); 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 8433d94d495d..5414ce442baa 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 @@ -4,6 +4,7 @@ import 'dart:async'; +import 'package:async/async.dart'; import 'package:camera_platform_interface/camera_platform_interface.dart'; import 'package:flutter/widgets.dart'; import 'package:stream_transform/stream_transform.dart'; @@ -11,9 +12,12 @@ import 'package:stream_transform/stream_transform.dart'; import 'camera.dart'; import 'camera_info.dart'; import 'camera_selector.dart'; +import 'camera_state.dart'; +import 'camera_state_error.dart'; import 'camerax_library.g.dart'; import 'image_capture.dart'; -import 'live_camera_state.dart'; +import 'live_data.dart'; +import 'observer.dart'; import 'preview.dart'; import 'process_camera_provider.dart'; import 'surface.dart'; @@ -37,7 +41,7 @@ class AndroidCameraCameraX extends CameraPlatform { Camera? camera; /// The [LiveCameraState] that represents the state of the [camera] instance. - LiveCameraState? liveCameraState; + LiveData? liveCameraState; /// The [Preview] instance that can be configured to present a live camera preview. @visibleForTesting @@ -167,7 +171,7 @@ class AndroidCameraCameraX extends CameraPlatform { // instance as bound but not paused. camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); - _updateLiveCameraState(); + _updateLiveCameraState(flutterSurfaceTextureId); _previewIsPaused = false; return flutterSurfaceTextureId; @@ -228,6 +232,7 @@ class AndroidCameraCameraX extends CameraPlatform { @override Future dispose(int cameraId) async { preview?.releaseFlutterSurfaceTexture(); + liveCameraState?.removeObservers(); processCameraProvider?.unbindAll(); } @@ -240,20 +245,20 @@ class AndroidCameraCameraX extends CameraPlatform { /// The camera started to close. @override Stream onCameraClosing(int cameraId) { - return LiveCameraState.cameraClosingStreamController.stream - .map((bool isCameraClosing) { - assert(isCameraClosing); - return CameraClosingEvent(cameraId); - }); + return _cameraEvents(cameraId).whereType(); } /// The camera experienced an error. @override Stream onCameraError(int cameraId) { - return SystemServices.cameraErrorStreamController.stream - .map((String errorDescription) { - return CameraErrorEvent(cameraId, errorDescription); - }); + return StreamGroup.mergeBroadcast< + CameraErrorEvent>(>[ + SystemServices.cameraErrorStreamController.stream + .map((String errorDescription) { + return CameraErrorEvent(cameraId, errorDescription); + }), + _cameraEvents(cameraId).whereType() + ]); } /// The ui orientation changed. @@ -276,7 +281,7 @@ class AndroidCameraCameraX extends CameraPlatform { /// [cameraId] not used. @override Future resumePreview(int cameraId) async { - await _bindPreviewToLifecycle(); + await _bindPreviewToLifecycle(cameraId); _previewIsPaused = false; } @@ -284,7 +289,7 @@ class AndroidCameraCameraX extends CameraPlatform { @override Widget buildPreview(int cameraId) { return FutureBuilder( - future: _bindPreviewToLifecycle(), + future: _bindPreviewToLifecycle(cameraId), builder: (BuildContext context, AsyncSnapshot snapshot) { switch (snapshot.connectionState) { case ConnectionState.none: @@ -319,7 +324,7 @@ class AndroidCameraCameraX extends CameraPlatform { /// Binds [preview] instance to the camera lifecycle controlled by the /// [processCameraProvider]. - Future _bindPreviewToLifecycle() async { + Future _bindPreviewToLifecycle(int cameraId) async { assert(processCameraProvider != null); assert(cameraSelector != null); assert(preview != null); @@ -332,7 +337,7 @@ class AndroidCameraCameraX extends CameraPlatform { camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!]); - _updateLiveCameraState(); + _updateLiveCameraState(cameraId); } /// Unbinds [preview] instance to camera lifecycle controlled by the @@ -350,12 +355,26 @@ class AndroidCameraCameraX extends CameraPlatform { // Methods concerning camera information: - /// Adds fresh observers to the [LiveCameraState] of the current [camera]. - Future _updateLiveCameraState() async { + /// Adds fresh observers to the [LiveData] of the [CameraState] of the + /// current [camera]. + Future _updateLiveCameraState(int cameraId) async { final CameraInfo cameraInfo = await camera!.getCameraInfo(); liveCameraState?.removeObservers(); liveCameraState = await cameraInfo.getLiveCameraState(); - liveCameraState!.addObserver(); + liveCameraState!.observe(_createCameraClosingObserver(cameraId)); + } + + Observer _createCameraClosingObserver(int cameraId) { + return Observer(onChanged: (CameraState state) { + if (state.type == CameraStateType.closing) { + cameraEventStreamController.add(CameraClosingEvent(cameraId)); + } + + if (state.error != null) { + cameraEventStreamController + .add(CameraErrorEvent(cameraId, state.error!.description)); + } + }); } // Methods for mapping Flutter camera constants to CameraX constants: 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 71de48813e27..3a1d2525ce96 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 @@ -5,9 +5,12 @@ import 'camera.dart'; import 'camera_info.dart'; import 'camera_selector.dart'; +import 'camera_state.dart'; +import 'camera_state_error.dart'; import 'camerax_library.g.dart'; import 'java_object.dart'; -import 'live_camera_state.dart'; +import 'live_data.dart'; +import 'observer.dart'; import 'process_camera_provider.dart'; import 'system_services.dart'; @@ -21,7 +24,10 @@ class AndroidCameraXCameraFlutterApis { CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi, ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi, SystemServicesFlutterApiImpl? systemServicesFlutterApi, - LiveCameraStateFlutterApiImpl? liveCameraStateFlutterApiImpl, + CameraStateErrorFlutterApiImpl? cameraStateErrorFlutterApiImpl, + CameraStateFlutterApiImpl? cameraStateFlutterApiImpl, + LiveDataFlutterApiImpl? liveDataFlutterApiImpl, + ObserverFlutterApiImpl? observerFlutterApiImpl, }) { this.javaObjectFlutterApi = javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); @@ -34,8 +40,14 @@ class AndroidCameraXCameraFlutterApis { this.cameraFlutterApi = cameraFlutterApi ?? CameraFlutterApiImpl(); this.systemServicesFlutterApi = systemServicesFlutterApi ?? SystemServicesFlutterApiImpl(); - this.liveCameraStateFlutterApiImpl = - liveCameraStateFlutterApiImpl ?? LiveCameraStateFlutterApiImpl(); + this.cameraStateErrorFlutterApiImpl = + cameraStateErrorFlutterApiImpl ?? CameraStateErrorFlutterApiImpl(); + this.cameraStateFlutterApiImpl = + cameraStateFlutterApiImpl ?? CameraStateFlutterApiImpl(); + this.liveDataFlutterApiImpl = + liveDataFlutterApiImpl ?? LiveDataFlutterApiImpl(); + this.observerFlutterApiImpl = + observerFlutterApiImpl ?? ObserverFlutterApiImpl(); } static bool _haveBeenSetUp = false; @@ -65,8 +77,17 @@ class AndroidCameraXCameraFlutterApis { /// Flutter Api for [SystemServices]. late final SystemServicesFlutterApiImpl systemServicesFlutterApi; - /// Flutter Api for [LiveCameraState]. - late final LiveCameraStateFlutterApiImpl liveCameraStateFlutterApiImpl; + /// Flutter Api implementation for [CameraStateError]. + late final CameraStateErrorFlutterApiImpl? cameraStateErrorFlutterApiImpl; + + /// Flutter Api implementation for [CameraState]. + late final CameraStateFlutterApiImpl? cameraStateFlutterApiImpl; + + /// Flutter Api implementation for [LiveData]. + late final LiveDataFlutterApiImpl? liveDataFlutterApiImpl; + + /// Flutter Api implementation for [Observer]. + late final ObserverFlutterApiImpl? observerFlutterApiImpl; /// Ensures all the Flutter APIs have been setup to receive calls from native code. void ensureSetUp() { @@ -77,7 +98,7 @@ class AndroidCameraXCameraFlutterApis { ProcessCameraProviderFlutterApi.setup(processCameraProviderFlutterApi); CameraFlutterApi.setup(cameraFlutterApi); SystemServicesFlutterApi.setup(systemServicesFlutterApi); - LiveCameraStateFlutterApi.setup(liveCameraStateFlutterApiImpl); + CameraStateErrorFlutterApi.setup(cameraStateErrorFlutterApiImpl); _haveBeenSetUp = true; } } diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index 6f9ee26546b5..1ce72762eac5 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -7,10 +7,11 @@ import 'dart:async'; import 'package:flutter/services.dart' show BinaryMessenger; import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camera_state.dart'; import 'camerax_library.g.dart'; import 'instance_manager.dart'; import 'java_object.dart'; -import 'live_camera_state.dart'; +import 'live_data.dart'; /// The metadata of a camera. /// @@ -34,7 +35,7 @@ class CameraInfo extends JavaObject { _api.getSensorRotationDegreesFromInstance(this); /// Starts listening for the camera closing. - Future getLiveCameraState() => + Future> getLiveCameraState() => _api.getLiveCameraStateFromInstance(this); } @@ -58,17 +59,17 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { return sensorRotationDegrees; } - /// Gets the [LiveCameraState] that represents the state of the camera + /// Gets the [LiveData] that represents the state of the camera /// to which the CameraInfo [instance] pertains. - Future getLiveCameraStateFromInstance( + Future> getLiveCameraStateFromInstance( CameraInfo instance) async { final int? identifier = instanceManager.getIdentifier(instance); assert(identifier != null, 'No CameraInfo has the identifer of that which was requested.'); final int liveCameraStateId = await getLiveCameraState(identifier!); - return instanceManager - .getInstanceWithWeakReference(liveCameraStateId)!; + return instanceManager.getInstanceWithWeakReference>( + liveCameraStateId)!; } } diff --git a/packages/camera/camera_android_camerax/lib/src/observer.dart b/packages/camera/camera_android_camerax/lib/src/observer.dart index 2b054b9aa0fd..0f227841a4a1 100644 --- a/packages/camera/camera_android_camerax/lib/src/observer.dart +++ b/packages/camera/camera_android_camerax/lib/src/observer.dart @@ -35,7 +35,7 @@ class Observer extends JavaObject { final _ObserverHostApiImpl _api; - final void Function(Observer instance, T value) onChanged; + final void Function(T value) onChanged; } // TODO(bparrishMines): Move these classes or desired methods into `observer.dart` @@ -99,7 +99,6 @@ class ObserverFlutterApiImpl implements ObserverFlutterApi { // ignore: avoid_dynamic_calls, void_checks return instance.onChanged( - instance, instanceManager.getInstanceWithWeakReference(valueIdentifier)!, ); } From 9f6646f1b8a938deae96e56d9917e609c4fb4506 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 13 Apr 2023 14:23:22 -0700 Subject: [PATCH 40/71] Current status --- .../camerax/CameraAndroidCameraxPlugin.java | 3 - .../camerax/CameraInfoHostApiImpl.java | 7 +- .../camerax/CameraStateFlutterApiWrapper.java | 22 +-- .../flutter/plugins/camerax/CameraXProxy.java | 6 - .../camerax/GeneratedCameraXLibrary.java | 126 ++++------------- .../LiveCameraStateFlutterApiImpl.java | 29 ---- .../camerax/LiveCameraStateHostApiImpl.java | 126 ----------------- .../camerax/LiveDataFlutterApiWrapper.java | 4 - .../plugins/camerax/LiveDataHostApiImpl.java | 5 + .../plugins/camerax/ObserverHostApiImpl.java | 1 + .../plugins/camerax/LiveCameraStateTest.java | 129 ------------------ .../example/android/build.gradle | 2 +- .../example/lib/camera_controller.dart | 6 + .../example/lib/main.dart | 6 +- .../lib/src/android_camera_camerax.dart | 8 +- ...roid_camera_camerax_flutter_api_impls.dart | 4 + .../lib/src/camera_info.dart | 6 +- .../lib/src/camerax_library.g.dart | 127 ++++------------- .../lib/src/instance_manager.dart | 7 +- .../lib/src/live_camera_state.dart | 117 ---------------- .../lib/src/live_data.dart | 27 +++- .../lib/src/observer.dart | 34 +++-- .../pigeons/camerax_library.dart | 21 +-- .../test/live_camera_state_test.dart | 99 -------------- .../test/live_camera_state_test.mocks.dart | 65 --------- .../test/test_camerax_library.g.dart | 74 ++++------ 26 files changed, 171 insertions(+), 890 deletions(-) delete mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateFlutterApiImpl.java delete mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java delete mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java delete mode 100644 packages/camera/camera_android_camerax/lib/src/live_camera_state.dart delete mode 100644 packages/camera/camera_android_camerax/test/live_camera_state_test.dart delete mode 100644 packages/camera/camera_android_camerax/test/live_camera_state_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 8fd84fc7ea04..0ff665c80045 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 @@ -4,8 +4,6 @@ package io.flutter.plugins.camerax; -import javax.annotation.processing.Generated; - import android.app.Activity; import android.content.Context; import androidx.annotation.NonNull; @@ -20,7 +18,6 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, ActivityAware { private InstanceManager instanceManager; private FlutterPluginBinding pluginBinding; - private LiveCameraStateHostApiImpl liveCameraStateHostApiImpl; private ProcessCameraProviderHostApiImpl processCameraProviderHostApiImpl; private ImageCaptureHostApiImpl imageCaptureHostApiImpl; private LiveDataHostApiImpl liveDataHostApiImpl; diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index 796996321883..39360dc12526 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -45,11 +45,8 @@ public Long getLiveCameraState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); LiveData liveCameraState = cameraInfo.getCameraState(); - LiveCameraStateFlutterApiImpl liveCameraStateFlutterApiImpl = - new LiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); - if (!instanceManager.containsInstance(liveCameraState)) { - liveCameraStateFlutterApiImpl.create(liveCameraState, reply -> {}); - } + LiveDataFlutterApiWrapper liveDataFlutterApiWrapper = new LiveDataFlutterApiWrapper(binaryMessenger, instanceManager); + liveDataFlutterApiWrapper.create(liveCameraState, reply -> {}); return instanceManager.getIdentifierForStrongReference(liveCameraState); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java index 3c86a13cd29c..0b4058ab122a 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java @@ -57,22 +57,22 @@ public void create( @Nullable CameraState.StateError error, @NonNull CameraStateFlutterApi.Reply callback) { - CameraStateType cameraStateType; + CameraStateType cameraStateType = CameraStateType.CLOSED; switch (type) { - case CameraState.Type.CLOSED: - cameraStateType = CameraState.Type.CLOSED; + case CLOSED: + cameraStateType = CameraStateType.CLOSED; break; - case CameraState.Type.CLOSING: - cameraStateType = CameraState.Type.CLOSING; + case CLOSING: + cameraStateType = CameraStateType.CLOSING; break; - case CameraState.Type.OPEN: - cameraStateType = CameraState.Type.CLOSED; + case OPEN: + cameraStateType = CameraStateType.OPEN; break; - case CameraState.Type.OPENING: - cameraStateType = CameraState.Type.CLOSED; + case OPENING: + cameraStateType = CameraStateType.OPENING; break; - case CameraState.Type.PENDING_OPEN: - cameraStateType = CameraState.Type.CLOSED; + case PENDING_OPEN: + cameraStateType = CameraStateType.PENDING_OPEN; break; } 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 35804b978302..ef00a4f0f722 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 @@ -67,10 +67,4 @@ public ImageCapture.Builder createImageCaptureBuilder() { public ImageCapture.OutputFileOptions createImageCaptureOutputFileOptions(@NonNull File file) { return new ImageCapture.OutputFileOptions.Builder(file).build(); } - - /** Creates an instance of the {@link LiveCameraStateFlutterApiImpl}. */ - public LiveCameraStateFlutterApiImpl createLiveCameraStateFlutterApiImpl( - @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { - return new LiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); - } } 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 0c3c8db92176..d4d87d87102f 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 @@ -1254,103 +1254,6 @@ public void error(Throwable error) { } } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface LiveCameraStateHostApi { - - void addObserver(@NonNull Long identifier); - - void removeObservers(@NonNull Long identifier); - - /** The codec used by LiveCameraStateHostApi. */ - static @NonNull MessageCodec getCodec() { - return new StandardMessageCodec(); - } - /**Sets up an instance of `LiveCameraStateHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveCameraStateHostApi api) { - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.LiveCameraStateHostApi.addObserver", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - try { - api.addObserver((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); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - try { - api.removeObservers((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 LiveCameraStateFlutterApi { - private final @NonNull BinaryMessenger binaryMessenger; - - public LiveCameraStateFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { - this.binaryMessenger = argBinaryMessenger; - } - - /** Public interface for sending reply. */ - @SuppressWarnings("UnknownNullness") - public interface Reply { - void reply(T reply); - } - /** The codec used by LiveCameraStateFlutterApi. */ - static @NonNull MessageCodec getCodec() { - return new StandardMessageCodec(); - } - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.LiveCameraStateFlutterApi.create", getCodec()); - channel.send( - new ArrayList(Collections.singletonList(identifierArg)), - channelReply -> callback.reply(null)); - } - public void onCameraClosing(@NonNull Reply callback) { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing", getCodec()); - channel.send( - null, - channelReply -> callback.reply(null)); - } - } /** * Host API for `CameraState`. * @@ -1427,7 +1330,7 @@ public interface Reply { return CameraStateFlutterApiCodec.INSTANCE; } /** Create a new Dart instance and add it to the `InstanceManager`. */ - public void create(@NonNull Long identifierArg, @NonNull CameraStateTypeData typeArg, @NonNull Long errorIdentifierArg, @NonNull Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull CameraStateTypeData typeArg, @Nullable Long errorIdentifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraStateFlutterApi.create", getCodec()); @@ -1595,6 +1498,8 @@ public interface LiveDataHostApi { /** Handles Dart method `LiveData.removeObservers`. */ void removeObservers(@NonNull Long identifier); + void cast(@NonNull Long oldIdentifier, @NonNull Long newIdentifier); + /** The codec used by LiveDataHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); @@ -1640,6 +1545,31 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo api.removeObservers((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); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.LiveDataHostApi.cast", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number oldIdentifierArg = (Number) args.get(0); + Number newIdentifierArg = (Number) args.get(1); + try { + api.cast((oldIdentifierArg == null) ? null : oldIdentifierArg.longValue(), (newIdentifierArg == null) ? null : newIdentifierArg.longValue()); + wrapped.add(0, null); + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateFlutterApiImpl.java deleted file mode 100644 index c5a7b8e9c09f..000000000000 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateFlutterApiImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package io.flutter.plugins.camerax; - -import androidx.annotation.NonNull; -import androidx.camera.core.CameraState; -import androidx.lifecycle.LiveData; -import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveCameraStateFlutterApi; - -public class LiveCameraStateFlutterApiImpl extends LiveCameraStateFlutterApi { - public LiveCameraStateFlutterApiImpl( - BinaryMessenger binaryMessenger, InstanceManager instanceManager) { - super(binaryMessenger); - this.instanceManager = instanceManager; - } - - private final InstanceManager instanceManager; - - void create(@NonNull LiveData liveCameraState, @NonNull Reply reply) { - create(instanceManager.addHostCreatedInstance(liveCameraState), reply); - } - - void sendCameraClosingEvent(@NonNull Reply reply) { - onCameraClosing(reply); - } -} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java deleted file mode 100644 index e47cbd6580ad..000000000000 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveCameraStateHostApiImpl.java +++ /dev/null @@ -1,126 +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.CameraState; -import androidx.lifecycle.LifecycleOwner; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.Observer; -import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveCameraStateHostApi; -import java.util.Objects; - -public class LiveCameraStateHostApiImpl implements LiveCameraStateHostApi { - private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; - private LifecycleOwner lifecycleOwner; - - @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); - - public LiveCameraStateHostApiImpl( - BinaryMessenger binaryMessenger, InstanceManager instanceManager) { - this.binaryMessenger = binaryMessenger; - this.instanceManager = instanceManager; - } - - /** Sets {@link LifecycleOwner} used to observe the camera state if so requested. */ - public void setLifecycleOwner(LifecycleOwner lifecycleOwner) { - this.lifecycleOwner = lifecycleOwner; - } - - /** - * Adds an observer to the {@link LiveData} of the {@link CameraState} that is represented by the - * specified identifier. - * - *

This observer is created with {@link - * LiveCameraStateHostApiImpl#getCameraStateErrorDescription(int)}, and it will only observe - * within the lifetime of the {@link LiveCameraStateHostApiImpl#lifecycleOwner}. - */ - @Override - public void addObserver(@NonNull Long identifier) { - @SuppressWarnings("unchecked") - LiveData liveCameraState = - (LiveData) Objects.requireNonNull(instanceManager.getInstance(identifier)); - liveCameraState.observe(lifecycleOwner, createCameraStateObserver()); - } - - /** - * Creates an {@link Observer} of the different {@link CameraState}s that a camera may - * encountered. - * - *

This observer notifies the Dart side when the camera is closing with an instance of {@link - * LiveCameraStateFlutterApiImpl}, and notifies the Dart side when the camera encounters a error - * when transitioning between states with an intance of {@link SystemServicesFlutterApiImpl}. - */ - private Observer createCameraStateObserver() { - return new Observer() { - @Override - public void onChanged(@NonNull CameraState cameraState) { - if (cameraState.getType() == CameraState.Type.CLOSING) { - LiveCameraStateFlutterApiImpl liveCameraStateFlutterApiImpl = - cameraXProxy.createLiveCameraStateFlutterApiImpl(binaryMessenger, instanceManager); - liveCameraStateFlutterApiImpl.sendCameraClosingEvent(reply -> {}); - } - CameraState.StateError cameraStateError = cameraState.getError(); - if (cameraStateError != null) { - SystemServicesFlutterApiImpl systemServicesFlutterApiImpl = - cameraXProxy.createSystemServicesFlutterApiImpl(binaryMessenger); - systemServicesFlutterApiImpl.sendCameraError( - getCameraStateErrorDescription(cameraStateError), reply -> {}); - } - } - }; - } - - /** - * Returns an error message corresponding to the specified {@link CameraState.StateError}. - * - *

See https://developer.android.com/reference/androidx/camera/core/CameraState#constants_1 for - * more information on the different {@link CameraState.StateError} types. - */ - private String getCameraStateErrorDescription(@NonNull CameraState.StateError cameraStateError) { - final int cameraStateErrorCode = cameraStateError.getCode(); - final String cameraStateErrorDescription = cameraStateErrorCode + ": "; - switch (cameraStateErrorCode) { - case CameraState.ERROR_CAMERA_IN_USE: - return cameraStateErrorDescription - + "The camera was already in use, possibly by a higher-priority camera client."; - case CameraState.ERROR_MAX_CAMERAS_IN_USE: - return cameraStateErrorDescription - + "The limit number of open cameras has been reached, and more cameras cannot be opened until other instances are closed."; - case CameraState.ERROR_OTHER_RECOVERABLE_ERROR: - return cameraStateErrorDescription - + "The camera device has encountered a recoverable error. CameraX will attempt to recover from the error."; - case CameraState.ERROR_STREAM_CONFIG: - return cameraStateErrorDescription + "Configuring the camera has failed."; - case CameraState.ERROR_CAMERA_DISABLED: - return cameraStateErrorDescription - + "The camera device could not be opened due to a device policy. Thia may be caused by a client from a background process attempting to open the camera."; - case CameraState.ERROR_CAMERA_FATAL_ERROR: - return cameraStateErrorDescription - + "The camera was closed due to a fatal error. This may require the Android device be shut down and restarted to restore camera function or may indicate a persistent camera hardware problem."; - case CameraState.ERROR_DO_NOT_DISTURB_MODE_ENABLED: - return cameraStateErrorDescription - + "The camera could not be opened because 'Do Not Disturb' mode is enabled. Please disable this mode, and try opening the camera again."; - default: - return "There was an undefined issue with the camera state."; - } - } - - /** - * Removes any observers of the {@link LiveData} of the {@link CameraState} that is represented by - * the specified identifier within the lifetime of the {@link - * LiveCameraStateHostApiImpl#lifecycleOwner}. - */ - @Override - @SuppressWarnings("unchecked") - public void removeObservers(@NonNull Long identifier) { - LiveData liveCameraState = - (LiveData) Objects.requireNonNull(instanceManager.getInstance(identifier)); - liveCameraState.removeObservers(lifecycleOwner); - } -} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java index 5ed5dcde0f1f..17b54b71c5f9 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java @@ -3,11 +3,8 @@ // 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 androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.lifecycle.LiveData; @@ -47,7 +44,6 @@ public LiveDataFlutterApiWrapper( * that is attached to this one. If `instance` has already been added, this method does nothing. */ public void create(@NonNull LiveData instance, @NonNull LiveDataFlutterApi.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/LiveDataHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java index c6b398946c7b..f0cbec85f169 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java @@ -59,6 +59,11 @@ public void removeObservers(@NonNull Long identifier) { getLiveDataInstance(identifier).removeObservers(lifecycleOwner); } + @Override + public void cast(Long identifier, Long newInstanceIdentifier) { + instanceManager.addDartCreatedInstance(instanceManager.getInstance(identifier), newInstanceIdentifier); + } + private LiveData getLiveDataInstance(@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/ObserverHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java index 5e06c8378e59..facaa81c73de 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java @@ -57,6 +57,7 @@ public ObserverImpl( @Override public void onChanged(T value) { + System.out.println("CAMILLE, GETTING CALLED"); api.onChanged(this, value, reply -> {}); } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java deleted file mode 100644 index ab4fba67d60e..000000000000 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveCameraStateTest.java +++ /dev/null @@ -1,129 +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 static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -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.CameraState; -import androidx.lifecycle.LifecycleOwner; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.Observer; -import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveCameraStateFlutterApi; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.SystemServicesFlutterApi; -import java.util.Objects; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.ArgumentMatchers; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - -public class LiveCameraStateTest { - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - - @Mock public LiveData liveCameraState; - @Mock public BinaryMessenger mockBinaryMessenger; - - InstanceManager testInstanceManager; - - @Before - public void setUp() { - testInstanceManager = InstanceManager.open(identifier -> {}); - } - - @After - public void tearDown() { - testInstanceManager.close(); - } - - @Test - public void addObserver_addsExpectedCameraStateObesrveToLiveCameraState() { - final LiveCameraStateHostApiImpl liveCameraStateHostApiImpl = - new LiveCameraStateHostApiImpl(mockBinaryMessenger, testInstanceManager); - final LiveCameraStateFlutterApiImpl mockLiveCameraStateFlutterApiImpl = - mock(LiveCameraStateFlutterApiImpl.class); - final SystemServicesFlutterApiImpl mockSystemServicesFlutterApiImpl = - mock(SystemServicesFlutterApiImpl.class); - final Long liveCameraStateIdentifier = 94L; - final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); - final CameraXProxy mockCameraXProxy = mock(CameraXProxy.class); - @SuppressWarnings("unchecked") - final ArgumentCaptor> cameraStateObserverCaptor = - ArgumentCaptor.forClass(Observer.class); - - testInstanceManager.addDartCreatedInstance(liveCameraState, liveCameraStateIdentifier); - liveCameraStateHostApiImpl.setLifecycleOwner(mockLifecycleOwner); - liveCameraStateHostApiImpl.cameraXProxy = mockCameraXProxy; - - liveCameraStateHostApiImpl.addObserver(liveCameraStateIdentifier); - - verify(liveCameraState).observe(eq(mockLifecycleOwner), cameraStateObserverCaptor.capture()); - - // Test camera state observer handles onChanged callback as expected: - Observer cameraStateObserver = cameraStateObserverCaptor.getValue(); - - // Test case where camera is closing. - when(mockCameraXProxy.createLiveCameraStateFlutterApiImpl( - mockBinaryMessenger, testInstanceManager)) - .thenReturn(mockLiveCameraStateFlutterApiImpl); - cameraStateObserver.onChanged(CameraState.create(CameraState.Type.CLOSING)); - verify(mockLiveCameraStateFlutterApiImpl) - .sendCameraClosingEvent(ArgumentMatchers.>any()); - - // Test case where there is a camera state error. - when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger)) - .thenReturn(mockSystemServicesFlutterApiImpl); - cameraStateObserver.onChanged( - CameraState.create( - CameraState.Type.OPEN, CameraState.StateError.create(CameraState.ERROR_CAMERA_IN_USE))); - verify(mockSystemServicesFlutterApiImpl) - .sendCameraError(anyString(), ArgumentMatchers.>any()); - } - - @Test - public void removeObservers_removesObserversFromLiveCameraState() { - final LiveCameraStateHostApiImpl liveCameraStateHostApiImpl = - new LiveCameraStateHostApiImpl(mockBinaryMessenger, testInstanceManager); - final Long liveCameraStateIdentifier = 96L; - final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); - - testInstanceManager.addDartCreatedInstance(liveCameraState, liveCameraStateIdentifier); - liveCameraStateHostApiImpl.setLifecycleOwner(mockLifecycleOwner); - - liveCameraStateHostApiImpl.removeObservers(liveCameraStateIdentifier); - - verify(liveCameraState).removeObservers(mockLifecycleOwner); - } - - @Test - public void flutterApiCreate_makesCallToCreateInstanceInDart() { - final LiveCameraStateFlutterApiImpl spyLiveCameraStateFlutterApiImpl = - spy(new LiveCameraStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); - spyLiveCameraStateFlutterApiImpl.create(liveCameraState, reply -> {}); - - final long liveCameraStateIdentifier = - Objects.requireNonNull( - testInstanceManager.getIdentifierForStrongReference(liveCameraState)); - verify(spyLiveCameraStateFlutterApiImpl).create(eq(liveCameraStateIdentifier), any()); - } - - @Test - public void flutterApiSendCameraClosingEvent_makesCallToDartCallbackMethod() { - final LiveCameraStateFlutterApiImpl spyLiveCameraStateFlutterApiImpl = - spy(new LiveCameraStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); - spyLiveCameraStateFlutterApiImpl.onCameraClosing(reply -> {}); - verify(spyLiveCameraStateFlutterApiImpl).onCameraClosing(any()); - } -} diff --git a/packages/camera/camera_android_camerax/example/android/build.gradle b/packages/camera/camera_android_camerax/example/android/build.gradle index 7c909c6116c0..45cb407e8d03 100644 --- a/packages/camera/camera_android_camerax/example/android/build.gradle +++ b/packages/camera/camera_android_camerax/example/android/build.gradle @@ -26,7 +26,7 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/packages/camera/camera_android_camerax/example/lib/camera_controller.dart b/packages/camera/camera_android_camerax/example/lib/camera_controller.dart index b1b5e9d4ceb9..4af433b66b5d 100644 --- a/packages/camera/camera_android_camerax/example/lib/camera_controller.dart +++ b/packages/camera/camera_android_camerax/example/lib/camera_controller.dart @@ -306,6 +306,12 @@ class CameraController extends ValueNotifier { initializeCompleter.complete(event); })); + CameraPlatform.instance + .onCameraClosing(_cameraId) + .listen((CameraClosingEvent event) { + print('woohoo!!! camera closing'); + }); + await CameraPlatform.instance.initializeCamera( _cameraId, imageFormatGroup: imageFormatGroup ?? ImageFormatGroup.unknown, diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index d0e79fba1050..0f66ffb8d175 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -477,7 +477,7 @@ class _CameraExampleHomeState extends State () {}, // TODO(camsim99): Add functionality back here. onLongPress: () { if (controller != null) { - controller!.setFocusPoint(null); + // controller!.setFocusPoint(null); } showInSnackBar('Resetting focus point'); }, @@ -602,8 +602,8 @@ class _CameraExampleHomeState extends State details.localPosition.dx / constraints.maxWidth, details.localPosition.dy / constraints.maxHeight, ); - cameraController.setExposurePoint(offset); - cameraController.setFocusPoint(offset); + // cameraController.setExposurePoint(offset); + // cameraController.setFocusPoint(offset); } Future onNewCameraSelected(CameraDescription cameraDescription) async { 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 5414ce442baa..005dcae66b16 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 @@ -40,7 +40,7 @@ class AndroidCameraCameraX extends CameraPlatform { @visibleForTesting Camera? camera; - /// The [LiveCameraState] that represents the state of the [camera] instance. + /// The [LiveData] of the [CameraState] that represents the state of the [camera] instance. LiveData? liveCameraState; /// The [Preview] instance that can be configured to present a live camera preview. @@ -360,13 +360,17 @@ class AndroidCameraCameraX extends CameraPlatform { Future _updateLiveCameraState(int cameraId) async { final CameraInfo cameraInfo = await camera!.getCameraInfo(); liveCameraState?.removeObservers(); + print('CAMILLE NEW LIVE CAMERA STATE COMING THROUGH TO RUIN THINGS UP'); liveCameraState = await cameraInfo.getLiveCameraState(); liveCameraState!.observe(_createCameraClosingObserver(cameraId)); } Observer _createCameraClosingObserver(int cameraId) { - return Observer(onChanged: (CameraState state) { + return Observer(onChanged: (Object stateAsObject) { + CameraState state = stateAsObject as CameraState; + print('CAMILLE STATE: ${state.type}'); if (state.type == CameraStateType.closing) { + print('HELLO!??!?!?!?!?!?!?'); cameraEventStreamController.add(CameraClosingEvent(cameraId)); } 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 3a1d2525ce96..5976d59d9f30 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 @@ -99,6 +99,10 @@ class AndroidCameraXCameraFlutterApis { CameraFlutterApi.setup(cameraFlutterApi); SystemServicesFlutterApi.setup(systemServicesFlutterApi); CameraStateErrorFlutterApi.setup(cameraStateErrorFlutterApiImpl); + CameraStateFlutterApi.setup(cameraStateFlutterApiImpl); + LiveDataFlutterApi.setup(liveDataFlutterApiImpl); + ObserverFlutterApi.setup(observerFlutterApiImpl); + _haveBeenSetUp = true; } } diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index 1ce72762eac5..9ae10c4655c2 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -68,8 +68,10 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { 'No CameraInfo has the identifer of that which was requested.'); final int liveCameraStateId = await getLiveCameraState(identifier!); - return instanceManager.getInstanceWithWeakReference>( - liveCameraStateId)!; + final LiveData liveData = instanceManager + .getInstanceWithWeakReference>(liveCameraStateId)!; + final LiveData liveCameraState = liveData.cast(); + return liveCameraState; } } 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 6869970cb9cd..fe1731aba552 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 @@ -1019,105 +1019,6 @@ class ImageCaptureHostApi { } } -class LiveCameraStateHostApi { - /// Constructor for [LiveCameraStateHostApi]. 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. - LiveCameraStateHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = StandardMessageCodec(); - - Future addObserver(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', 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; - } - } - - Future removeObservers(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', 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 LiveCameraStateFlutterApi { - static const MessageCodec codec = StandardMessageCodec(); - - void create(int identifier); - - void onCameraClosing(); - - static void setup(LiveCameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateFlutterApi.create', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMessageHandler(null); - } else { - channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.LiveCameraStateFlutterApi.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.LiveCameraStateFlutterApi.create was null, expected non-null int.'); - api.create(arg_identifier!); - return; - }); - } - } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateFlutterApi.onCameraClosing', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMessageHandler(null); - } else { - channel.setMessageHandler((Object? message) async { - // ignore message - api.onCameraClosing(); - return; - }); - } - } - } -} - /// Host API for `CameraState`. /// /// This class may handle instantiating and adding native object instances that @@ -1171,7 +1072,7 @@ abstract class CameraStateFlutterApi { static const MessageCodec codec = _CameraStateFlutterApiCodec(); /// Create a new Dart instance and add it to the `InstanceManager`. - void create(int identifier, CameraStateTypeData type, int errorIdentifier); + void create(int identifier, CameraStateTypeData type, int? errorIdentifier); static void setup(CameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { @@ -1192,9 +1093,7 @@ abstract class CameraStateFlutterApi { assert(arg_type != null, 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null, expected non-null CameraStateTypeData.'); final int? arg_errorIdentifier = (args[2] as int?); - assert(arg_errorIdentifier != null, - 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null, expected non-null int.'); - api.create(arg_identifier!, arg_type!, arg_errorIdentifier!); + api.create(arg_identifier!, arg_type!, arg_errorIdentifier); return; }); } @@ -1405,6 +1304,28 @@ class LiveDataHostApi { return; } } + + Future cast(int arg_oldIdentifier, int arg_newIdentifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveDataHostApi.cast', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_oldIdentifier, arg_newIdentifier]) 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; + } + } } /// Flutter API for `LiveData`. diff --git a/packages/camera/camera_android_camerax/lib/src/instance_manager.dart b/packages/camera/camera_android_camerax/lib/src/instance_manager.dart index ac9856a63670..59fb83cd04fb 100644 --- a/packages/camera/camera_android_camerax/lib/src/instance_manager.dart +++ b/packages/camera/camera_android_camerax/lib/src/instance_manager.dart @@ -126,9 +126,10 @@ class InstanceManager { // This cast is safe since it matches the argument type for // _addInstanceWithIdentifier, which is the only place _copyCallbacks // is populated. - final T Function(T) copyCallback = - _copyCallbacks[identifier]! as T Function(T); - final T copy = copyCallback(strongInstance); + // final T Function(T) copyCallback = + // _copyCallbacks[identifier]! as T Function(T); + final Function copyCallback = _copyCallbacks[identifier]!; + final T copy = copyCallback(strongInstance) as T; _identifiers[copy] = identifier; _weakInstances[identifier] = WeakReference(copy); _finalizer.attach(copy, identifier, detach: copy); diff --git a/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart b/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart deleted file mode 100644 index 08e67549e7f0..000000000000 --- a/packages/camera/camera_android_camerax/lib/src/live_camera_state.dart +++ /dev/null @@ -1,117 +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 'dart:async'; - -import 'package:flutter/services.dart'; - -import 'android_camera_camerax_flutter_api_impls.dart'; -import 'camerax_library.g.dart'; -import 'instance_manager.dart'; -import 'java_object.dart'; - -/// The live state of the camera. -/// -/// This is the LiveData of type CameraState that Android tracks in relation -/// to a CameraInfo instance. See -/// https://developer.android.com/reference/androidx/camera/core/CameraInfo#getCameraState(). -class LiveCameraState extends JavaObject { - /// Creates a detached [LiveCameraState]. - LiveCameraState.detached({ - BinaryMessenger? binaryMessenger, - InstanceManager? instanceManager, - }) : super.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager) { - _api = LiveCameraStateHostApiImpl( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); - AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); - } - - /// Stream that emits an event when the related [Camera] instance starts - /// to close. - static final StreamController cameraClosingStreamController = - StreamController.broadcast(); - - late final LiveCameraStateHostApiImpl _api; - - /// Adds an observer to the live camera state this instance represents. - /// - /// This observer will (i) send a notification to a previously set up - /// [LiveCameraStateFlutterApiImpl] whenever the camera begins to close - /// and (ii) send a notification to a previously set up - /// [SystemServicesFlutterApiImpl] whenever a camera error occurs while - /// transitioning between states. - Future addObserver() => _api.addObserverFromInstance(this); - - /// Removes any observers added to the live camera state this instance - /// represents. - Future removeObservers() => _api.removeObserversFromInstance(this); -} - -/// Host API implementation of [LiveCameraState]. -class LiveCameraStateHostApiImpl extends LiveCameraStateHostApi { - /// Constructs a [LiveCameraStateHostApiImpl]. - LiveCameraStateHostApiImpl( - {super.binaryMessenger, InstanceManager? instanceManager}) { - this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; - } - - /// Maintains instances stored to communicate with native language objects. - late final InstanceManager instanceManager; - - /// Adds an observer to the life camera state represented by the specified - /// [instance]. - Future addObserverFromInstance(LiveCameraState instance) async { - final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No LiveCameraState has the identifer of that which was requested.'); - addObserver(identifier!); - } - - /// Removes any observers added to the life camera state represented by the - /// specified [instance]. - Future removeObserversFromInstance(LiveCameraState instance) async { - final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No LiveCameraState has the identifer of that which was requested.'); - removeObservers(identifier!); - } -} - -/// Flutter API implementation of [LiveCameraState]. -class LiveCameraStateFlutterApiImpl extends LiveCameraStateFlutterApi { - /// Constructs a [LiveCameraStateFlutterApiImpl]. - LiveCameraStateFlutterApiImpl({ - 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( - LiveCameraState.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager), - identifier, - onCopy: (LiveCameraState original) { - return LiveCameraState.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); - }, - ); - } - - @override - void onCameraClosing() { - LiveCameraState.cameraClosingStreamController.add(true); - } -} diff --git a/packages/camera/camera_android_camerax/lib/src/live_data.dart b/packages/camera/camera_android_camerax/lib/src/live_data.dart index 4d6828fdd69b..a3dbeb5a8bde 100644 --- a/packages/camera/camera_android_camerax/lib/src/live_data.dart +++ b/packages/camera/camera_android_camerax/lib/src/live_data.dart @@ -9,8 +9,7 @@ import 'camerax_library.g.dart'; import 'instance_manager.dart'; class LiveData extends JavaObject { - LiveData.detached( - {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) + LiveData.detached({this.binaryMessenger, this.instanceManager}) : _api = _LiveDataHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager), super.detached( @@ -18,6 +17,9 @@ class LiveData extends JavaObject { final _LiveDataHostApiImpl _api; + final BinaryMessenger? binaryMessenger; + final InstanceManager? instanceManager; + Future observe(Observer observer) { return _api.observeFromInstances(this, observer); } @@ -25,9 +27,15 @@ class LiveData extends JavaObject { Future removeObservers() { return _api.removeObserversFromInstances(this); } -} -// TODO(bparrishMines): Move these classes or desired methods into `live_data.dart` + // @protected + LiveData cast() { + final LiveData newInstance = LiveData.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + _api.castFromInstances(this, newInstance); + return newInstance; + } +} class _LiveDataHostApiImpl extends LiveDataHostApi { _LiveDataHostApiImpl({ @@ -57,6 +65,17 @@ class _LiveDataHostApiImpl extends LiveDataHostApi { instanceManager.getIdentifier(instance)!, ); } + + Future castFromInstances( + LiveData instance, LiveData newInstance) { + return cast( + instanceManager.getIdentifier(instance)!, + instanceManager.addDartCreatedInstance(newInstance, + onCopy: (LiveData original) => LiveData.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ))); + } } /// Flutter API implementation for [LiveData]. diff --git a/packages/camera/camera_android_camerax/lib/src/observer.dart b/packages/camera/camera_android_camerax/lib/src/observer.dart index 0f227841a4a1..5fb4490826a4 100644 --- a/packages/camera/camera_android_camerax/lib/src/observer.dart +++ b/packages/camera/camera_android_camerax/lib/src/observer.dart @@ -11,35 +11,45 @@ import 'instance_manager.dart'; @SimpleClassAnnotation() class Observer extends JavaObject { + /// Constructor for [Observer]. Observer( {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - required this.onChanged}) + required void Function(Object value) onChanged}) : _api = _ObserverHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager), super.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager) { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + this.onChanged = (Object value) { + assert(value is T); + onChanged(value); + }; _api.createFromInstances(this); } Observer.detached( {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - required this.onChanged}) + required void Function(Object value) onChanged}) : _api = _ObserverHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager), super.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + this.onChanged = (Object value) { + assert(value is T); + onChanged(value); + }; + } final _ObserverHostApiImpl _api; - final void Function(T value) onChanged; + // TODO(camsim99): Cite Dart issue + late final void Function(Object value) onChanged; } -// TODO(bparrishMines): Move these classes or desired methods into `observer.dart` - class _ObserverHostApiImpl extends ObserverHostApi { _ObserverHostApiImpl({ this.binaryMessenger, @@ -51,13 +61,13 @@ class _ObserverHostApiImpl extends ObserverHostApi { final InstanceManager instanceManager; - Future createFromInstances( - Observer instance, + Future createFromInstances( + Observer instance, ) { return create( instanceManager.addDartCreatedInstance( instance, - onCopy: (Observer original) => Observer.detached( + onCopy: (Observer original) => Observer.detached( onChanged: original.onChanged, binaryMessenger: binaryMessenger, instanceManager: instanceManager, @@ -94,12 +104,12 @@ class ObserverFlutterApiImpl implements ObserverFlutterApi { int identifier, int valueIdentifier, ) { - final dynamic instance = + final Observer instance = instanceManager.getInstanceWithWeakReference(identifier)!; // ignore: avoid_dynamic_calls, void_checks - return instance.onChanged( - instanceManager.getInstanceWithWeakReference(valueIdentifier)!, + instance.onChanged( + instanceManager.getInstanceWithWeakReference(valueIdentifier)!, ); } } diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index a7ce2c567213..f8b89659a782 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -171,20 +171,6 @@ abstract class ImageCaptureHostApi { String takePicture(int identifier); } -@HostApi(dartHostTestHandler: 'TestLiveCameraStateHostApi') -abstract class LiveCameraStateHostApi { - void addObserver(int identifier); - - void removeObservers(int identifier); -} - -@FlutterApi() -abstract class LiveCameraStateFlutterApi { - void create(int identifier); - - void onCameraClosing(); -} - /// Host API for `CameraState`. /// /// This class may handle instantiating and adding native object instances that @@ -209,13 +195,10 @@ abstract class CameraStateFlutterApi { void create( int identifier, CameraStateTypeData type, - int errorIdentifier, + int? errorIdentifier, ); } -// TODO(bparrishMines): Copy these classes into pigeon file and run pigeon -// TODO(bparrishMines): Fix documentation spacing over class methods if this is for iOS - /// Host API for `Observer`. /// /// This class may handle instantiating and adding native object instances that @@ -304,6 +287,8 @@ abstract class LiveDataHostApi { void removeObservers( int identifier, ); + + void cast(int oldIdentifier, int newIdentifier); } /// Flutter API for `LiveData`. diff --git a/packages/camera/camera_android_camerax/test/live_camera_state_test.dart b/packages/camera/camera_android_camerax/test/live_camera_state_test.dart deleted file mode 100644 index 6574365fd75c..000000000000 --- a/packages/camera/camera_android_camerax/test/live_camera_state_test.dart +++ /dev/null @@ -1,99 +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:camera_android_camerax/src/camerax_library.g.dart'; -import 'package:camera_android_camerax/src/instance_manager.dart'; -import 'package:camera_android_camerax/src/live_camera_state.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; - -import 'live_camera_state_test.mocks.dart'; -import 'test_camerax_library.g.dart'; - -@GenerateMocks([TestLiveCameraStateHostApi, TestInstanceManagerHostApi]) -void main() { - TestWidgetsFlutterBinding.ensureInitialized(); - - // Mocks the call to clear the native InstanceManager. - TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); - - group('LiveCameraState', () { - tearDown(() => TestLiveCameraStateHostApi.setup(null)); - - test('addObserver makes call to add camera state observer', () async { - final MockTestLiveCameraStateHostApi mockApi = - MockTestLiveCameraStateHostApi(); - TestLiveCameraStateHostApi.setup(mockApi); - const int liveCameraStateId = 28; - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - final LiveCameraState liveCameraState = LiveCameraState.detached( - instanceManager: instanceManager, - ); - - instanceManager.addHostCreatedInstance( - liveCameraState, - liveCameraStateId, - onCopy: (_) => LiveCameraState.detached(), - ); - - liveCameraState.addObserver(); - - verify(mockApi.addObserver(liveCameraStateId)); - }); - - test('removeObservers makes call to remove camera state observers', - () async { - final MockTestLiveCameraStateHostApi mockApi = - MockTestLiveCameraStateHostApi(); - TestLiveCameraStateHostApi.setup(mockApi); - const int liveCameraStateId = 33; - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - final LiveCameraState liveCameraState = LiveCameraState.detached( - instanceManager: instanceManager, - ); - - instanceManager.addHostCreatedInstance( - liveCameraState, - liveCameraStateId, - onCopy: (_) => LiveCameraState.detached(), - ); - - liveCameraState.removeObservers(); - - verify(mockApi.removeObservers(liveCameraStateId)); - }); - - test('flutter api create adds LiveCameraState instance to instance manager', - () async { - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - final LiveCameraStateFlutterApi flutterApi = - LiveCameraStateFlutterApiImpl( - instanceManager: instanceManager, - ); - const int liveCameraStateId = 90; - - flutterApi.create(liveCameraStateId); - - expect(instanceManager.getInstanceWithWeakReference(liveCameraStateId), - isA()); - }); - - test( - 'flutter api onCameraClosing adds event to expected stream when called', - () async { - LiveCameraState.cameraClosingStreamController.stream.listen((bool event) { - expect(event, isTrue); - }); - - LiveCameraStateFlutterApiImpl().onCameraClosing(); - }); - }); -} diff --git a/packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart b/packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart deleted file mode 100644 index 71ba35d141b6..000000000000 --- a/packages/camera/camera_android_camerax/test/live_camera_state_test.mocks.dart +++ /dev/null @@ -1,65 +0,0 @@ -// Mocks generated by Mockito 5.4.0 from annotations -// in camera_android_camerax/test/live_camera_state_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 [TestLiveCameraStateHostApi]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockTestLiveCameraStateHostApi extends _i1.Mock - implements _i2.TestLiveCameraStateHostApi { - MockTestLiveCameraStateHostApi() { - _i1.throwOnMissingStub(this); - } - - @override - void addObserver(int? identifier) => super.noSuchMethod( - Invocation.method( - #addObserver, - [identifier], - ), - returnValueForMissingStub: null, - ); - @override - void removeObservers(int? identifier) => super.noSuchMethod( - Invocation.method( - #removeObservers, - [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/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index d31f7a0d0f00..72cc160414b0 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 @@ -651,56 +651,6 @@ abstract class TestImageCaptureHostApi { } } -abstract class TestLiveCameraStateHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); - - void addObserver(int identifier); - - void removeObservers(int identifier); - - static void setup(TestLiveCameraStateHostApi? api, {BinaryMessenger? binaryMessenger}) { - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateHostApi.addObserver', 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.LiveCameraStateHostApi.addObserver 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.LiveCameraStateHostApi.addObserver was null, expected non-null int.'); - api.addObserver(arg_identifier!); - return []; - }); - } - } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveCameraStateHostApi.removeObservers', 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.LiveCameraStateHostApi.removeObservers 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.LiveCameraStateHostApi.removeObservers was null, expected non-null int.'); - api.removeObservers(arg_identifier!); - return []; - }); - } - } - } -} - /// Host API for `CameraState`. /// /// This class may handle instantiating and adding native object instances that @@ -785,6 +735,8 @@ abstract class TestLiveDataHostApi { /// Handles Dart method `LiveData.removeObservers`. void removeObservers(int identifier); + void cast(int oldIdentifier, int newIdentifier); + static void setup(TestLiveDataHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( @@ -827,5 +779,27 @@ abstract class TestLiveDataHostApi { }); } } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveDataHostApi.cast', 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.LiveDataHostApi.cast was null.'); + final List args = (message as List?)!; + final int? arg_oldIdentifier = (args[0] as int?); + assert(arg_oldIdentifier != null, + 'Argument for dev.flutter.pigeon.LiveDataHostApi.cast was null, expected non-null int.'); + final int? arg_newIdentifier = (args[1] as int?); + assert(arg_newIdentifier != null, + 'Argument for dev.flutter.pigeon.LiveDataHostApi.cast was null, expected non-null int.'); + api.cast(arg_oldIdentifier!, arg_newIdentifier!); + return []; + }); + } + } } } From 265eb1e5996c62564fcf043f0f613555fd457df9 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 14 Apr 2023 08:29:11 -0700 Subject: [PATCH 41/71] Remove print statements --- .../lib/src/android_camera_camerax.dart | 5 +---- 1 file changed, 1 insertion(+), 4 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 005dcae66b16..1d7c78572514 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 @@ -360,17 +360,14 @@ class AndroidCameraCameraX extends CameraPlatform { Future _updateLiveCameraState(int cameraId) async { final CameraInfo cameraInfo = await camera!.getCameraInfo(); liveCameraState?.removeObservers(); - print('CAMILLE NEW LIVE CAMERA STATE COMING THROUGH TO RUIN THINGS UP'); liveCameraState = await cameraInfo.getLiveCameraState(); liveCameraState!.observe(_createCameraClosingObserver(cameraId)); } Observer _createCameraClosingObserver(int cameraId) { return Observer(onChanged: (Object stateAsObject) { - CameraState state = stateAsObject as CameraState; - print('CAMILLE STATE: ${state.type}'); + final CameraState state = stateAsObject as CameraState; if (state.type == CameraStateType.closing) { - print('HELLO!??!?!?!?!?!?!?'); cameraEventStreamController.add(CameraClosingEvent(cameraId)); } From bfc4b5eb82bd1d9607986c7d0598fa287c4ce190 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 14 Apr 2023 12:48:44 -0700 Subject: [PATCH 42/71] Add print --- .../io/flutter/plugins/camerax/ObserverHostApiImpl.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java index facaa81c73de..41fff0184d8b 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java @@ -3,11 +3,8 @@ // 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 androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.lifecycle.Observer; @@ -53,12 +50,11 @@ public ObserverImpl( api = new ObserverFlutterApiWrapper(binaryMessenger, instanceManager); } - // TODO(bparrishMines): Need to handle inherited callback methods @Override public void onChanged(T value) { - System.out.println("CAMILLE, GETTING CALLED"); - api.onChanged(this, value, reply -> {}); + System.out.println("CAMILLE, GETTING CALLED: " + value.toString()); + // api.onChanged(this, value, reply -> {}); } /** From 4f3c342484aad4e39c5d72522c7554a53790fc9d Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 14 Apr 2023 13:42:39 -0700 Subject: [PATCH 43/71] remove comments --- .../java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java index f0cbec85f169..5660eaec8af2 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java @@ -3,11 +3,8 @@ // 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 androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; From e3c7a5b6b7072bf912be6c2e3727004ea02c5a1f Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 17 Apr 2023 11:12:16 -0700 Subject: [PATCH 44/71] Review 2 --- .../camerax/CameraAndroidCameraxPlugin.java | 5 +- .../camerax/CameraInfoHostApiImpl.java | 3 +- .../CameraStateErrorFlutterApiWrapper.java | 25 +- .../camerax/CameraStateFlutterApiWrapper.java | 37 +- .../camerax/GeneratedCameraXLibrary.java | 468 +++++++++++------- .../camerax/LiveDataFlutterApiWrapper.java | 22 +- .../plugins/camerax/LiveDataHostApiImpl.java | 31 +- .../camerax/ObserverFlutterApiWrapper.java | 29 +- .../plugins/camerax/ObserverHostApiImpl.java | 55 +- .../plugins/camerax/CameraInfoTest.java | 6 +- .../plugins/camerax/CameraStateErrorTest.java | 10 +- .../plugins/camerax/CameraStateTest.java | 15 +- .../flutter/plugins/camerax/LiveDataTest.java | 58 ++- .../flutter/plugins/camerax/ObserverTest.java | 42 +- .../example/android/build.gradle | 2 +- .../lib/src/camerax_library.g.dart | 157 +++--- .../lib/src/live_data.dart | 2 - .../test/test_camerax_library.g.dart | 386 ++++++++++----- 18 files changed, 784 insertions(+), 569 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 0ff665c80045..32c2cbab0972 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 @@ -57,7 +57,8 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex GeneratedCameraXLibrary.SystemServicesHostApi.setup(binaryMessenger, systemServicesHostApi); GeneratedCameraXLibrary.PreviewHostApi.setup( binaryMessenger, new PreviewHostApiImpl(binaryMessenger, instanceManager, textureRegistry)); - imageCaptureHostApiImpl = new ImageCaptureHostApiImpl(binaryMessenger, instanceManager, context); + imageCaptureHostApiImpl = + new ImageCaptureHostApiImpl(binaryMessenger, instanceManager, context); GeneratedCameraXLibrary.ImageCaptureHostApi.setup(binaryMessenger, imageCaptureHostApiImpl); GeneratedCameraXLibrary.CameraHostApi.setup( binaryMessenger, new CameraHostApiImpl(binaryMessenger, instanceManager)); @@ -122,7 +123,7 @@ public void updateContext(Context context) { processCameraProviderHostApiImpl.setContext(context); } if (imageCaptureHostApiImpl != null) { - processCameraProviderHostApiImpl.setContext(context); + imageCaptureHostApiImpl.setContext(context); } } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index 39360dc12526..a515f4de156f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -45,7 +45,8 @@ public Long getLiveCameraState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); LiveData liveCameraState = cameraInfo.getCameraState(); - LiveDataFlutterApiWrapper liveDataFlutterApiWrapper = new LiveDataFlutterApiWrapper(binaryMessenger, instanceManager); + LiveDataFlutterApiWrapper liveDataFlutterApiWrapper = + new LiveDataFlutterApiWrapper(binaryMessenger, instanceManager); liveDataFlutterApiWrapper.create(liveCameraState, reply -> {}); return instanceManager.getIdentifierForStrongReference(liveCameraState); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java index b181536f42f6..af56f0037f42 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java @@ -1,13 +1,9 @@ - // 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 androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.camera.core.CameraState; @@ -15,19 +11,15 @@ import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateErrorFlutterApi; /** - * Flutter API implementation for `CameraStateError`. + * Flutter API implementation for {@link CameraStateError}. * *

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 CameraStateErrorFlutterApiWrapper { - - // To ease adding additional methods, this value is added prematurely. - @SuppressWarnings({"unused", "FieldCanBeLocal"}) private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; - private CameraStateErrorFlutterApi api; + private CameraStateErrorFlutterApi cameraStateErrorFlutterApi; /** * Constructs a {@link CameraStateErrorFlutterApiWrapper}. @@ -39,13 +31,13 @@ public CameraStateErrorFlutterApiWrapper( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; - api = new CameraStateErrorFlutterApi(binaryMessenger); + cameraStateErrorFlutterApi = new CameraStateErrorFlutterApi(binaryMessenger); } /** - * Stores the `CameraStateError` instance and notifies Dart to create and store a new - * `CameraStateError` instance that is attached to this one. If `instance` has already been added, - * this method does nothing. + * Stores the {@link CameraStateError} instance and notifies Dart to create and store a new {@link + * CameraStateError} instance that is attached to this one. If {@code instance} has already been + * added, this method does nothing. */ public void create( @NonNull CameraState.StateError instance, @@ -53,7 +45,8 @@ public void create( @NonNull String description, @NonNull CameraStateErrorFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { - api.create(instanceManager.addHostCreatedInstance(instance), code, description, callback); + cameraStateErrorFlutterApi.create( + instanceManager.addHostCreatedInstance(instance), code, description, callback); } } @@ -64,6 +57,6 @@ public void create( */ @VisibleForTesting void setApi(@NonNull CameraStateErrorFlutterApi api) { - this.api = api; + this.cameraStateErrorFlutterApi = api; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java index 0b4058ab122a..b1c91d265f69 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java @@ -1,13 +1,9 @@ - // 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 androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; @@ -17,21 +13,16 @@ import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateType; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateTypeData; - /** - * Flutter API implementation for `CameraState`. + * Flutter API implementation for {@link CameraState}. * *

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 CameraStateFlutterApiWrapper { - - // To ease adding additional methods, this value is added prematurely. - @SuppressWarnings({"unused", "FieldCanBeLocal"}) private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; - private CameraStateFlutterApi api; + private CameraStateFlutterApi cameraStateFlutterApi; /** * Constructs a {@link CameraStateFlutterApiWrapper}. @@ -43,13 +34,13 @@ public CameraStateFlutterApiWrapper( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; - api = new CameraStateFlutterApi(binaryMessenger); + cameraStateFlutterApi = new CameraStateFlutterApi(binaryMessenger); } /** - * Stores the `CameraState` instance and notifies Dart to create and store a new `CameraState` - * instance that is attached to this one. If `instance` has already been added, this method does - * nothing. + * Stores the {@link CameraState} instance and notifies Dart to create and store a new {@link + * CameraState} instance that is attached to this one. If {@code instance} has already been added, + * this method does nothing. */ public void create( @NonNull CameraState instance, @@ -57,6 +48,7 @@ public void create( @Nullable CameraState.StateError error, @NonNull CameraStateFlutterApi.Reply callback) { + // Convert CameraX CameraState.Type to CameraStateType that the Dart side understands. CameraStateType cameraStateType = CameraStateType.CLOSED; switch (type) { case CLOSED: @@ -77,11 +69,18 @@ public void create( } if (error != null) { - new CameraStateErrorFlutterApiWrapper(binaryMessenger, instanceManager).create(error, Long.valueOf(error.getCode()), getCameraStateErrorDescription(error), reply -> {}); + // We need to create a CameraStateError if there is a problem with the current camera + // state to send to the Dart side. + new CameraStateErrorFlutterApiWrapper(binaryMessenger, instanceManager) + .create( + error, + Long.valueOf(error.getCode()), + getCameraStateErrorDescription(error), + reply -> {}); } if (!instanceManager.containsInstance(instance)) { - api.create( + cameraStateFlutterApi.create( instanceManager.addHostCreatedInstance(instance), new CameraStateTypeData.Builder().setValue(cameraStateType).build(), instanceManager.getIdentifierForStrongReference(error), @@ -120,7 +119,7 @@ private String getCameraStateErrorDescription(@NonNull CameraState.StateError ca return cameraStateErrorDescription + "The camera could not be opened because 'Do Not Disturb' mode is enabled. Please disable this mode, and try opening the camera again."; default: - return "There was an undefined issue with the camera state."; + return "There was an unspecified issue with the current camera state."; } } @@ -131,6 +130,6 @@ private String getCameraStateErrorDescription(@NonNull CameraState.StateError ca */ @VisibleForTesting void setApi(@NonNull CameraStateFlutterApi api) { - this.api = api; + this.cameraStateFlutterApi = api; } } 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 d4d87d87102f..4bea82a9c425 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; } @@ -140,9 +137,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; } } @@ -280,7 +281,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(); @@ -288,8 +289,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<>( @@ -301,8 +306,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; } @@ -323,7 +327,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 = @@ -338,8 +344,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; } @@ -359,7 +364,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); @@ -368,6 +373,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -380,22 +386,26 @@ 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); - @NonNull + @NonNull Long getLiveCameraState(@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) -> { @@ -403,10 +413,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; } @@ -419,7 +430,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -427,10 +440,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getLiveCameraState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getLiveCameraState( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -450,7 +464,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); @@ -459,6 +473,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -473,15 +488,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<>( @@ -494,10 +513,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; } @@ -519,10 +539,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; } @@ -542,7 +564,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); @@ -551,7 +573,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()); @@ -565,13 +589,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); @@ -582,12 +609,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) -> { @@ -614,7 +647,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) -> { @@ -622,10 +657,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; } @@ -638,7 +674,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) -> { @@ -648,10 +686,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; } @@ -664,7 +707,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) -> { @@ -673,10 +718,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; } @@ -689,7 +736,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) -> { @@ -698,10 +747,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; } @@ -714,7 +763,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) -> { @@ -724,8 +775,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; } @@ -745,7 +795,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); @@ -754,10 +804,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)); @@ -766,14 +819,14 @@ public void create(@NonNull Long identifierArg, @NonNull Reply callback) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraHostApi { - @NonNull + @NonNull Long getCameraInfo(@NonNull Long identifier); /** The codec used by CameraHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ + /** Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHostApi api) { { BasicMessageChannel channel = @@ -786,10 +839,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHost ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -809,7 +862,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); @@ -818,6 +871,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -857,9 +911,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(); @@ -867,12 +923,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) -> { @@ -901,7 +963,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) -> { @@ -910,10 +974,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; } @@ -926,7 +991,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) -> { @@ -934,8 +1001,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; } @@ -955,7 +1021,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); @@ -964,18 +1030,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)); @@ -1016,21 +1089,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 = @@ -1045,10 +1121,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; } @@ -1061,7 +1139,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) -> { @@ -1069,10 +1149,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; } @@ -1085,7 +1166,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) -> { @@ -1093,8 +1176,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; } @@ -1115,10 +1197,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; } @@ -1160,7 +1243,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); @@ -1170,7 +1256,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 = @@ -1185,10 +1274,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; } @@ -1210,10 +1301,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; } @@ -1246,7 +1338,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); @@ -1257,13 +1350,13 @@ public void error(Throwable error) { /** * Host API for `CameraState`. * - * 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. + *

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. * - * See . + *

See . * - * 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 CameraStateHostApi { @@ -1271,9 +1364,10 @@ public interface CameraStateHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraStateHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraStateHostApi api) { - } + /** + * Sets up an instance of `CameraStateHostApi` to handle messages through the `binaryMessenger`. + */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraStateHostApi api) {} } private static class CameraStateFlutterApiCodec extends StandardMessageCodec { @@ -1305,13 +1399,12 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** * Flutter API for `CameraState`. * - * 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. + *

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. * - * See . + *

See . * - * 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 CameraStateFlutterApi { private final @NonNull BinaryMessenger binaryMessenger; @@ -1320,7 +1413,7 @@ public CameraStateFlutterApi(@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); @@ -1330,7 +1423,11 @@ public interface Reply { return CameraStateFlutterApiCodec.INSTANCE; } /** Create a new Dart instance and add it to the `InstanceManager`. */ - public void create(@NonNull Long identifierArg, @NonNull CameraStateTypeData typeArg, @Nullable Long errorIdentifierArg, @NonNull Reply callback) { + public void create( + @NonNull Long identifierArg, + @NonNull CameraStateTypeData typeArg, + @Nullable Long errorIdentifierArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraStateFlutterApi.create", getCodec()); @@ -1342,13 +1439,13 @@ public void create(@NonNull Long identifierArg, @NonNull CameraStateTypeData typ /** * Host API for `Observer`. * - * 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. + *

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. * - * See . + *

See . * - * 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 ObserverHostApi { /** Create a new native instance and add it to the `InstanceManager`. */ @@ -1358,7 +1455,9 @@ public interface ObserverHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `ObserverHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ObserverHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHostApi api) { { BasicMessageChannel channel = @@ -1373,8 +1472,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHo try { api.create((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1389,13 +1487,12 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHo /** * Flutter API for `Observer`. * - * 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. + *

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. * - * See . + *

See . * - * 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 ObserverFlutterApi { private final @NonNull BinaryMessenger binaryMessenger; @@ -1404,7 +1501,7 @@ public ObserverFlutterApi(@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); @@ -1414,7 +1511,10 @@ public interface Reply { return new StandardMessageCodec(); } /** Callback to Dart function `Observer.onChanged`. */ - public void onChanged(@NonNull Long identifierArg, @NonNull Long valueIdentifierArg, @NonNull Reply callback) { + public void onChanged( + @NonNull Long identifierArg, + @NonNull Long valueIdentifierArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ObserverFlutterApi.onChanged", getCodec()); @@ -1426,13 +1526,13 @@ public void onChanged(@NonNull Long identifierArg, @NonNull Long valueIdentifier /** * Host API for `CameraStateError`. * - * 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. + *

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. * - * See . + *

See . * - * 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 CameraStateErrorHostApi { @@ -1440,20 +1540,22 @@ public interface CameraStateErrorHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraStateErrorHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraStateErrorHostApi api) { - } + /** + * Sets up an instance of `CameraStateErrorHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup( + @NonNull BinaryMessenger binaryMessenger, @Nullable CameraStateErrorHostApi api) {} } /** * Flutter API for `CameraStateError`. * - * 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. + *

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. * - * See . + *

See . * - * 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 CameraStateErrorFlutterApi { private final @NonNull BinaryMessenger binaryMessenger; @@ -1462,7 +1564,7 @@ public CameraStateErrorFlutterApi(@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); @@ -1472,7 +1574,11 @@ public interface Reply { return new StandardMessageCodec(); } /** Create a new Dart instance and add it to the `InstanceManager`. */ - public void create(@NonNull Long identifierArg, @NonNull Long codeArg, @NonNull String descriptionArg, @NonNull Reply callback) { + public void create( + @NonNull Long identifierArg, + @NonNull Long codeArg, + @NonNull String descriptionArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraStateErrorFlutterApi.create", getCodec()); @@ -1484,13 +1590,13 @@ public void create(@NonNull Long identifierArg, @NonNull Long codeArg, @NonNull /** * Host API for `LiveData`. * - * 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. + *

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. * - * See . + *

See . * - * 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 LiveDataHostApi { /** Handles Dart method `LiveData.observe`. */ @@ -1504,7 +1610,9 @@ public interface LiveDataHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `LiveDataHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `LiveDataHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHostApi api) { { BasicMessageChannel channel = @@ -1518,10 +1626,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo Number identifierArg = (Number) args.get(0); Number observerIdentifierArg = (Number) args.get(1); try { - api.observe((identifierArg == null) ? null : identifierArg.longValue(), (observerIdentifierArg == null) ? null : observerIdentifierArg.longValue()); + api.observe( + (identifierArg == null) ? null : identifierArg.longValue(), + (observerIdentifierArg == null) ? null : observerIdentifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1544,8 +1653,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo try { api.removeObservers((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1567,10 +1675,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo Number oldIdentifierArg = (Number) args.get(0); Number newIdentifierArg = (Number) args.get(1); try { - api.cast((oldIdentifierArg == null) ? null : oldIdentifierArg.longValue(), (newIdentifierArg == null) ? null : newIdentifierArg.longValue()); + api.cast( + (oldIdentifierArg == null) ? null : oldIdentifierArg.longValue(), + (newIdentifierArg == null) ? null : newIdentifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1585,13 +1694,12 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo /** * Flutter API for `LiveData`. * - * 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. + *

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. * - * See . + *

See . * - * 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 LiveDataFlutterApi { private final @NonNull BinaryMessenger binaryMessenger; @@ -1600,7 +1708,7 @@ public LiveDataFlutterApi(@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); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java index 17b54b71c5f9..277026a2f886 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java @@ -1,4 +1,3 @@ - // 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. @@ -12,19 +11,15 @@ import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataFlutterApi; /** - * Flutter API implementation for `LiveData`. + * Flutter API implementation for {@link LiveData}. * *

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 LiveDataFlutterApiWrapper { - - // To ease adding additional methods, this value is added prematurely. - @SuppressWarnings({"unused", "FieldCanBeLocal"}) private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; - private LiveDataFlutterApi api; + private LiveDataFlutterApi liveDataFlutterApi; /** * Constructs a {@link LiveDataFlutterApiWrapper}. @@ -36,16 +31,17 @@ public LiveDataFlutterApiWrapper( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; - api = new LiveDataFlutterApi(binaryMessenger); + liveDataFlutterApi = new LiveDataFlutterApi(binaryMessenger); } /** - * Stores the `LiveData` instance and notifies Dart to create and store a new `LiveData` instance - * that is attached to this one. If `instance` has already been added, this method does nothing. + * Stores the {@link LiveData} instance and notifies Dart to create and store a new {@link LiveData} instance + * that is attached to this one. If {@code instance} has already been added, this method does nothing. */ - public void create(@NonNull LiveData instance, @NonNull LiveDataFlutterApi.Reply callback) { + public void create( + @NonNull LiveData instance, @NonNull LiveDataFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { - api.create(instanceManager.addHostCreatedInstance(instance), callback); + liveDataFlutterApi.create(instanceManager.addHostCreatedInstance(instance), callback); } } @@ -56,6 +52,6 @@ public void create(@NonNull LiveData instance, @NonNull LiveDataFlutterApi.Re */ @VisibleForTesting void setApi(@NonNull LiveDataFlutterApi api) { - this.api = api; + this.liveDataFlutterApi = api; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java index 5660eaec8af2..dda52d4f615f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java @@ -1,4 +1,3 @@ - // 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. @@ -13,15 +12,12 @@ import java.util.Objects; /** - * Host API implementation for `LiveData`. + * Host API implementation for {@link LiveData}. * *

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 LiveDataHostApiImpl implements LiveDataHostApi { - - // To ease adding additional methods, this value is added prematurely. - @SuppressWarnings({"unused", "FieldCanBeLocal"}) private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; private LifecycleOwner lifecycleOwner; @@ -34,7 +30,6 @@ public class LiveDataHostApiImpl implements LiveDataHostApi { */ public LiveDataHostApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { - this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; } @@ -44,23 +39,43 @@ public void setLifecycleOwner(LifecycleOwner lifecycleOwner) { this.lifecycleOwner = lifecycleOwner; } + /** + * Adds an {@link Observer} with the specified identifier to the observers list of this instance + * within the lifespan of the {@link lifecycleOwner}. + */ @Override @SuppressWarnings("unchecked") public void observe(@NonNull Long identifier, @NonNull Long observerIdentifier) { getLiveDataInstance(identifier) - .observe(lifecycleOwner, Objects.requireNonNull(instanceManager.getInstance(observerIdentifier))); + .observe( + lifecycleOwner, + Objects.requireNonNull(instanceManager.getInstance(observerIdentifier))); } + /** + * Removes all observers of this instance that are tied to the {@link lifecycleOwner}. + */ @Override public void removeObservers(@NonNull Long identifier) { getLiveDataInstance(identifier).removeObservers(lifecycleOwner); } + /** + * Re-creates an instance of {@link LiveData} that has been created on the Java side, + * stored in the Dart {@link InstanceManager} as a generic type, and casted to a + * specific type on the Dart side. + * + *

This method is necessary in order for the Dart wrapped version of this class + * to be generic since the type of {@link LiveData} created on the Java side is + * unknown to the Dart side. + */ @Override public void cast(Long identifier, Long newInstanceIdentifier) { - instanceManager.addDartCreatedInstance(instanceManager.getInstance(identifier), newInstanceIdentifier); + instanceManager.addDartCreatedInstance( + instanceManager.getInstance(identifier), newInstanceIdentifier); } + /** Retrieves the {@link LiveData} instance that has the specified identifier. */ private LiveData getLiveDataInstance(@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/ObserverFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java index f26bd92f59ca..12fc3ed06765 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java @@ -1,13 +1,9 @@ - // 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 androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.camera.core.CameraState; @@ -17,19 +13,15 @@ import java.util.Objects; /** - * Flutter API implementation for `Observer`. + * Flutter API implementation for {@link Observer}. * *

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 ObserverFlutterApiWrapper { - - // To ease adding additional methods, this value is added prematurely. - @SuppressWarnings({"unused", "FieldCanBeLocal"}) private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; - private ObserverFlutterApi api; + private ObserverFlutterApi observerFlutterApi; /** * Constructs a {@link ObserverFlutterApiWrapper}. @@ -41,26 +33,29 @@ public ObserverFlutterApiWrapper( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; - api = new ObserverFlutterApi(binaryMessenger); + observerFlutterApi = new ObserverFlutterApi(binaryMessenger); } /** - * Sends a message to Dart to call `Observer.onChanged` on the Dart object representing - * `instance`. + * Sends a message to Dart to call {@link Observer.onChanged} on the Dart object representing + * {@code instance}. */ public void onChanged( @NonNull Observer instance, @NonNull Object value, @NonNull ObserverFlutterApi.Reply callback) { + // Cast value to type of data that is being observed if supported by this plugin. if (value instanceof CameraState) { CameraState state = (CameraState) value; - new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager).create(state, state.getType(), state.getError(), reply -> {}); + new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager) + .create(state, state.getType(), state.getError(), reply -> {}); } else { - throw new UnsupportedOperationException("The type of value in observance is not wrapped by this plugin."); + throw new UnsupportedOperationException( + "The type of value in observance is not wrapped by this plugin."); } - api.onChanged( + observerFlutterApi.onChanged( Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(instance)), instanceManager.getIdentifierForStrongReference(value), callback); @@ -73,6 +68,6 @@ public void onChanged( */ @VisibleForTesting void setApi(@NonNull ObserverFlutterApi api) { - this.api = api; + this.observerFlutterApi = api; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java index 41fff0184d8b..d51a3c801abc 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java @@ -1,4 +1,3 @@ - // 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. @@ -13,59 +12,44 @@ import java.util.Objects; /** - * Host API implementation for `Observer`. + * Host API implementation for {@link Observer}. * *

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 ObserverHostApiImpl implements ObserverHostApi { - - // To ease adding additional methods, this value is added prematurely. - @SuppressWarnings({"unused", "FieldCanBeLocal"}) private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; + private final ObserverProxy observerProxy; - private final ObserverProxy proxy; - - /** Proxy for constructors and static method of `Observer`. */ + /** Proxy for constructors and static method of {@link Observer}. */ @VisibleForTesting public static class ObserverProxy { - /** Creates an instance of `Observer`. */ - public ObserverImpl create( + /** Creates an instance of {@link Observer}. */ + public ObserverImpl create( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { - return new ObserverImpl(binaryMessenger, instanceManager); + return new ObserverImpl(binaryMessenger, instanceManager); } } - /** Implementation of `Observer` that passes arguments of callback methods to Dart. */ + /** Implementation of {@link Observer} that passes arguments of callback methods to Dart. */ public static class ObserverImpl implements Observer { - private ObserverFlutterApiWrapper api; + private ObserverFlutterApiWrapper observerFlutterApiWrapper; - /** Constructs an instance of `Observer` that passes arguments of callbacks methods to Dart. */ + /** Constructs an instance of {@link Observer} that passes arguments of callbacks methods to Dart. */ public ObserverImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { super(); - api = new ObserverFlutterApiWrapper(binaryMessenger, instanceManager); - } - - - @Override - public void onChanged(T value) { - System.out.println("CAMILLE, GETTING CALLED: " + value.toString()); - // api.onChanged(this, value, reply -> {}); + observerFlutterApiWrapper = new ObserverFlutterApiWrapper(binaryMessenger, instanceManager); } /** - * Flutter API used to send messages back to Dart. - * - *

This is only visible for testing. + * Method called when the data in observance is changed to {@code value}. */ - @SuppressWarnings("unused") - @VisibleForTesting - void setApi(@NonNull ObserverFlutterApiWrapper api) { - this.api = api; + @Override + public void onChanged(T value) { + observerFlutterApiWrapper.onChanged(this, value, reply -> {}); } } @@ -86,22 +70,25 @@ public ObserverHostApiImpl( * * @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 `Observer` + * @param proxy proxy for constructors and static method of {@link Observer} */ @VisibleForTesting ObserverHostApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager, - @NonNull ObserverProxy proxy) { + @NonNull ObserverProxy observerProxy) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; - this.proxy = proxy; + this.observerProxy = observerProxy; } + /** + * Creates an {@link Observer} instance with the specified identifier. + */ @Override public void create(@NonNull Long identifier) { instanceManager.addDartCreatedInstance( - proxy.create(binaryMessenger, instanceManager), identifier); + observerProxy.create(binaryMessenger, instanceManager), identifier); } private Observer getObserverInstance(@NonNull Long identifier) { diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java index ea3c1e50f22a..7b4b1a01f0a6 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java @@ -44,7 +44,7 @@ public void tearDown() { } @Test - public void getSensorRotationDegrees_MakesCallToRetrieveSensorRotationDegrees() { + public void getSensorRotationDegrees_makesCallToRetrieveSensorRotationDegrees() { final CameraInfoHostApiImpl cameraInfoHostApi = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); @@ -57,7 +57,7 @@ public void getSensorRotationDegrees_MakesCallToRetrieveSensorRotationDegrees() } @Test - public void getLiveCameraState_MakesCallToRetrieveLiveCameraState() { + public void getLiveCameraState_makesCallToRetrieveLiveCameraState() { final CameraInfoHostApiImpl cameraInfoHostApiImpl = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); final Long mockCameraInfoIdentifier = 27L; @@ -76,7 +76,7 @@ public void getLiveCameraState_MakesCallToRetrieveLiveCameraState() { } @Test - public void flutterApi_MakesCallToDartToCreateInstance() { + public void flutterApi_makesCallToDartToCreateInstance() { final CameraInfoFlutterApiImpl spyFlutterApi = spy(new CameraInfoFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java index b1c0812ee7bd..3c50556991ba 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java @@ -1,13 +1,9 @@ - // 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.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.verify; @@ -25,13 +21,10 @@ import org.mockito.junit.MockitoRule; public class CameraStateErrorTest { - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @Mock public CameraState.StateError mockCameraStateError; - @Mock public BinaryMessenger mockBinaryMessenger; - @Mock public CameraStateErrorFlutterApi mockFlutterApi; InstanceManager instanceManager; @@ -47,13 +40,12 @@ public void tearDown() { } @Test - public void flutterApiCreate() { + public void flutterApiCreate_makesCallToDartToCreateInstance() { final CameraStateErrorFlutterApiWrapper flutterApi = new CameraStateErrorFlutterApiWrapper(mockBinaryMessenger, instanceManager); flutterApi.setApi(mockFlutterApi); final Long code = 0L; - final String description = "testString"; flutterApi.create(mockCameraStateError, code, description, reply -> {}); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java index 18ae2e22759a..f1d8ee3d89e3 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java @@ -1,13 +1,9 @@ - // 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.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -16,7 +12,6 @@ import androidx.camera.core.CameraState; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateFlutterApi; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateType; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateTypeData; import java.util.Objects; import org.junit.After; @@ -28,13 +23,10 @@ import org.mockito.junit.MockitoRule; public class CameraStateTest { - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @Mock public CameraState mockCameraState; - @Mock public BinaryMessenger mockBinaryMessenger; - @Mock public CameraStateFlutterApi mockFlutterApi; InstanceManager instanceManager; @@ -50,13 +42,12 @@ public void tearDown() { } @Test - public void flutterApiCreate() { + public void flutterApiCreate_makesCallToDartToCreateInstance() { final CameraStateFlutterApiWrapper flutterApi = new CameraStateFlutterApiWrapper(mockBinaryMessenger, instanceManager); flutterApi.setApi(mockFlutterApi); - final CameraState.Type type = CameraState.Type.CLOSED; - + final CameraState.Type type = CameraState.Type.OPEN; final CameraState.StateError mockError = mock(CameraState.StateError.class); flutterApi.create(mockCameraState, type, mockError, reply -> {}); @@ -66,7 +57,7 @@ public void flutterApiCreate() { verify(mockFlutterApi) .create( eq(instanceIdentifier), - any(CameraStateTypeData.class), + eq(CameraStateType.OPEN), eq(Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockError))), any()); } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java index fdfe7d3db83e..8eb2bfd6307d 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -1,13 +1,9 @@ - // 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.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -28,14 +24,12 @@ import org.mockito.junit.MockitoRule; public class LiveDataTest { - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @SuppressWarnings("rawtypes") - @Mock public LiveData mockLiveData; - + @Mock + public LiveData mockLiveData; @Mock public BinaryMessenger mockBinaryMessenger; - @Mock public LiveDataFlutterApi mockFlutterApi; InstanceManager instanceManager; @@ -52,49 +46,59 @@ public void tearDown() { @Test @SuppressWarnings({"unchecked", "rawtypes"}) - public void observe() { - + public void observe_addsExpectedObserverToLiveDataInstance() { + final LiveDataHostApiImpl hostApi = + new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); final Observer mockObserver = mock(Observer.class); final long observerIdentifier = 20; - instanceManager.addDartCreatedInstance(mockObserver, observerIdentifier); - final long instanceIdentifier = 0; - instanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); + final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); - final LiveDataHostApiImpl hostApi = - new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); - - LifecycleOwner fakeLifecycleOwner = mock(LifecycleOwner.class); - hostApi.setLifecycleOwner(fakeLifecycleOwner); + instanceManager.addDartCreatedInstance(mockObserver, observerIdentifier); + instanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); + hostApi.setLifecycleOwner(mockLifecycleOwner); hostApi.observe(instanceIdentifier, observerIdentifier); - verify(mockLiveData).observe(fakeLifecycleOwner, mockObserver); + verify(mockLiveData).observe(mockLifecycleOwner, mockObserver); } @Test - public void removeObservers() { - + public void removeObservers_makesCallToRemoveObserversFromLiveDataInstance() { + final LiveDataHostApiImpl hostApi = + new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); final long instanceIdentifier = 0; + final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); + instanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); + hostApi.setLifecycleOwner(mockLifecycleOwner); + hostApi.removeObservers(instanceIdentifier); + + verify(mockLiveData).removeObservers(mockLifecycleOwner); + } + + @Test + public void cast_addsOldInstanceWithNewIdentifier() { final LiveDataHostApiImpl hostApi = new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); + final long instanceIdentifier = 56; + final long newIdentifier = 98; + final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); - LifecycleOwner fakeLifecycleOwner = mock(LifecycleOwner.class); - hostApi.setLifecycleOwner(fakeLifecycleOwner); + instanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); - hostApi.removeObservers(instanceIdentifier); + hostApi.cast(instanceIdentifier, newIdentifier); - verify(mockLiveData).removeObservers(fakeLifecycleOwner); + verify(instanceManager).addDartCreatedInstance(mockLiveData, newIdentifier); } @Test - public void flutterApiCreate() { + public void flutterApiCreate_makesCallToDartToCreateInstance() { final LiveDataFlutterApiWrapper flutterApi = new LiveDataFlutterApiWrapper(mockBinaryMessenger, instanceManager); - flutterApi.setApi(mockFlutterApi); + flutterApi.setApi(mockFlutterApi); flutterApi.create(mockLiveData, reply -> {}); final long instanceIdentifier = diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java index 2e06440bf08c..3484f5abadf8 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java @@ -1,21 +1,15 @@ - // 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.lifecycle.Observer; import androidx.camera.core.CameraState; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ObserverFlutterApi; @@ -29,16 +23,13 @@ import org.mockito.junit.MockitoRule; public class ObserverTest { - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @SuppressWarnings("rawtypes") - @Mock public ObserverHostApiImpl.ObserverImpl mockObserver; - + @Mock + public ObserverHostApiImpl.ObserverImpl mockObserver; @Mock public BinaryMessenger mockBinaryMessenger; - @Mock public ObserverFlutterApi mockFlutterApi; - @Mock public ObserverHostApiImpl.ObserverProxy mockProxy; InstanceManager instanceManager; @@ -55,43 +46,36 @@ public void tearDown() { @Test @SuppressWarnings({"rawtypes", "unchecked"}) - - public void hostApiCreate() { - - when(mockProxy.create(mockBinaryMessenger, instanceManager)).thenReturn(mockObserver); - + public void create_createsObserverInstance() { final ObserverHostApiImpl hostApi = new ObserverHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); - final long instanceIdentifier = 0; + + when(mockProxy.create(mockBinaryMessenger, instanceManager)).thenReturn(mockObserver); + hostApi.create(instanceIdentifier); assertEquals(instanceManager.getInstance(instanceIdentifier), mockObserver); } @Test - public void onChanged() { + public void onChanged_makesCallToDartCallback() { final ObserverFlutterApiWrapper flutterApi = new ObserverFlutterApiWrapper(mockBinaryMessenger, instanceManager); - flutterApi.setApi(mockFlutterApi); - final ObserverHostApiImpl.ObserverImpl instance = new ObserverHostApiImpl.ObserverImpl(mockBinaryMessenger, instanceManager); + final long instanceIdentifier = 0; + final CameraState mockCameraState = CameraState.create(CameraState.Type.CLOSED); + Long mockCameraStateIdentifier = instanceManager.addHostCreatedInstance(mockCameraState); + flutterApi.setApi(mockFlutterApi); instance.setApi(flutterApi); - final long instanceIdentifier = 0; instanceManager.addDartCreatedInstance(instance, instanceIdentifier); - final CameraState mockValue = CameraState.create(CameraState.Type.CLOSED); - Long mockValueIdentifier = instanceManager.addHostCreatedInstance(mockValue); - - instance.onChanged(mockValue); + instance.onChanged(mockCameraState); verify(mockFlutterApi) - .onChanged( - eq(instanceIdentifier), - eq(Objects.requireNonNull(mockValueIdentifier)), - any()); + .onChanged(eq(instanceIdentifier), eq(Objects.requireNonNull(mockCameraStateIdentifier)), any()); } } diff --git a/packages/camera/camera_android_camerax/example/android/build.gradle b/packages/camera/camera_android_camerax/example/android/build.gradle index 45cb407e8d03..7c909c6116c0 100644 --- a/packages/camera/camera_android_camerax/example/android/build.gradle +++ b/packages/camera/camera_android_camerax/example/android/build.gradle @@ -26,7 +26,7 @@ subprojects { project.evaluationDependsOn(':app') } -tasks.register("clean", Delete) { +task clean(type: Delete) { delete rootProject.buildDir } 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 fe1731aba552..b7c559602ddc 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 @@ -109,8 +109,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', @@ -166,7 +165,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, @@ -176,7 +176,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, @@ -259,7 +259,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, @@ -269,7 +270,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, @@ -296,8 +297,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', @@ -314,12 +315,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', @@ -347,7 +349,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, @@ -357,7 +360,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, @@ -385,8 +388,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', @@ -410,7 +412,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?; @@ -435,12 +438,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', @@ -467,7 +475,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', @@ -493,8 +502,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', @@ -539,7 +548,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, @@ -549,7 +559,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, @@ -615,7 +625,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, @@ -643,7 +653,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); @@ -661,9 +671,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?; @@ -683,12 +695,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', @@ -707,10 +722,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', @@ -735,17 +750,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, @@ -764,7 +781,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, @@ -795,9 +812,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); @@ -815,12 +832,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', @@ -868,8 +887,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', @@ -929,7 +947,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); @@ -947,12 +965,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', @@ -973,8 +993,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', @@ -1035,7 +1055,6 @@ class CameraStateHostApi { final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = StandardMessageCodec(); - } class _CameraStateFlutterApiCodec extends StandardMessageCodec { @@ -1053,7 +1072,7 @@ class _CameraStateFlutterApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraStateTypeData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1074,7 +1093,8 @@ abstract class CameraStateFlutterApi { /// Create a new Dart instance and add it to the `InstanceManager`. void create(int identifier, CameraStateTypeData type, int? errorIdentifier); - static void setup(CameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraStateFlutterApi.create', codec, @@ -1084,12 +1104,13 @@ abstract class CameraStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.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.CameraStateFlutterApi.create was null, expected non-null int.'); - final CameraStateTypeData? arg_type = (args[1] as CameraStateTypeData?); + final CameraStateTypeData? arg_type = + (args[1] as CameraStateTypeData?); assert(arg_type != null, 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null, expected non-null CameraStateTypeData.'); final int? arg_errorIdentifier = (args[2] as int?); @@ -1155,7 +1176,8 @@ abstract class ObserverFlutterApi { /// Callback to Dart function `Observer.onChanged`. void onChanged(int identifier, int valueIdentifier); - static void setup(ObserverFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ObserverFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ObserverFlutterApi.onChanged', codec, @@ -1165,7 +1187,7 @@ abstract class ObserverFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ObserverFlutterApi.onChanged was null.'); + 'Argument for dev.flutter.pigeon.ObserverFlutterApi.onChanged was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1197,7 +1219,6 @@ class CameraStateErrorHostApi { final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = StandardMessageCodec(); - } /// Flutter API for `CameraStateError`. @@ -1213,7 +1234,8 @@ abstract class CameraStateErrorFlutterApi { /// Create a new Dart instance and add it to the `InstanceManager`. void create(int identifier, int code, String description); - static void setup(CameraStateErrorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraStateErrorFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraStateErrorFlutterApi.create', codec, @@ -1223,7 +1245,7 @@ abstract class CameraStateErrorFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1265,7 +1287,8 @@ class LiveDataHostApi { 'dev.flutter.pigeon.LiveDataHostApi.observe', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_observerIdentifier]) as List?; + await channel.send([arg_identifier, arg_observerIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1310,7 +1333,8 @@ class LiveDataHostApi { 'dev.flutter.pigeon.LiveDataHostApi.cast', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_oldIdentifier, arg_newIdentifier]) as List?; + await channel.send([arg_oldIdentifier, arg_newIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1341,7 +1365,8 @@ abstract class LiveDataFlutterApi { /// Create a new Dart instance and add it to the `InstanceManager`. void create(int identifier); - static void setup(LiveDataFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(LiveDataFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveDataFlutterApi.create', codec, @@ -1351,7 +1376,7 @@ abstract class LiveDataFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.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/lib/src/live_data.dart b/packages/camera/camera_android_camerax/lib/src/live_data.dart index a3dbeb5a8bde..c9d45d001e6f 100644 --- a/packages/camera/camera_android_camerax/lib/src/live_data.dart +++ b/packages/camera/camera_android_camerax/lib/src/live_data.dart @@ -1,4 +1,3 @@ -import 'package:simple_ast/annotations.dart'; import 'package:flutter/services.dart'; import 'package:meta/meta.dart'; @@ -28,7 +27,6 @@ class LiveData extends JavaObject { return _api.removeObserversFromInstances(this); } - // @protected LiveData cast() { final LiveData newInstance = LiveData.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager); 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 72cc160414b0..1bff8614700f 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,24 +80,30 @@ 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); int getLiveCameraState(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, @@ -102,11 +118,14 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', 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.getLiveCameraState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -120,24 +139,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, @@ -153,19 +177,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]; }); } @@ -174,14 +203,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); @@ -189,15 +220,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]; @@ -206,33 +241,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, @@ -240,10 +284,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]; }); } @@ -253,11 +299,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, @@ -265,7 +314,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]; }); } @@ -275,16 +325,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!); @@ -297,11 +351,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, @@ -315,22 +372,27 @@ abstract class TestProcessCameraProviderHostApi { } abstract class TestCameraHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getCameraInfo(int identifier); - static void setup(TestCameraHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', 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.CameraHostApi.getCameraInfo was null.'); + 'Argument for dev.flutter.pigeon.CameraHostApi.getCameraInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -358,7 +420,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); @@ -367,45 +429,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, @@ -413,19 +488,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 []; @@ -453,9 +533,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); @@ -464,7 +544,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); @@ -475,23 +556,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 []; }); @@ -502,11 +588,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, @@ -518,12 +607,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 []; @@ -535,11 +628,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, @@ -567,7 +663,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); @@ -576,7 +672,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); @@ -585,23 +682,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 []; }); @@ -612,11 +714,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, @@ -634,11 +739,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, @@ -659,11 +767,12 @@ abstract class TestImageCaptureHostApi { /// /// See . abstract class TestCameraStateHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); - static void setup(TestCameraStateHostApi? api, {BinaryMessenger? binaryMessenger}) { - } + static void setup(TestCameraStateHostApi? api, + {BinaryMessenger? binaryMessenger}) {} } /// Host API for `Observer`. @@ -674,23 +783,28 @@ abstract class TestCameraStateHostApi { /// /// See . abstract class TestObserverHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); /// Create a new native instance and add it to the `InstanceManager`. void create(int identifier); - static void setup(TestObserverHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestObserverHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ObserverHostApi.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.ObserverHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ObserverHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -711,11 +825,12 @@ abstract class TestObserverHostApi { /// /// See . abstract class TestCameraStateErrorHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); - static void setup(TestCameraStateErrorHostApi? api, {BinaryMessenger? binaryMessenger}) { - } + static void setup(TestCameraStateErrorHostApi? api, + {BinaryMessenger? binaryMessenger}) {} } /// Host API for `LiveData`. @@ -726,7 +841,8 @@ abstract class TestCameraStateErrorHostApi { /// /// See . abstract class TestLiveDataHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); /// Handles Dart method `LiveData.observe`. @@ -737,17 +853,21 @@ abstract class TestLiveDataHostApi { void cast(int oldIdentifier, int newIdentifier); - static void setup(TestLiveDataHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestLiveDataHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveDataHostApi.observe', 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.LiveDataHostApi.observe was null.'); + 'Argument for dev.flutter.pigeon.LiveDataHostApi.observe was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -765,11 +885,14 @@ abstract class TestLiveDataHostApi { 'dev.flutter.pigeon.LiveDataHostApi.removeObservers', 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.LiveDataHostApi.removeObservers was null.'); + 'Argument for dev.flutter.pigeon.LiveDataHostApi.removeObservers was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -784,11 +907,14 @@ abstract class TestLiveDataHostApi { 'dev.flutter.pigeon.LiveDataHostApi.cast', 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.LiveDataHostApi.cast was null.'); + 'Argument for dev.flutter.pigeon.LiveDataHostApi.cast was null.'); final List args = (message as List?)!; final int? arg_oldIdentifier = (args[0] as int?); assert(arg_oldIdentifier != null, From f341f7f687fbfd76adca932f81f8f63a71330cc9 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 17 Apr 2023 20:10:14 -0700 Subject: [PATCH 45/71] Fixing tests --- .../camerax/GeneratedCameraXLibrary.java | 502 ++++++------------ .../plugins/camerax/ObserverHostApiImpl.java | 12 +- .../plugins/camerax/CameraStateTest.java | 12 +- .../plugins/camerax/ImageCaptureTest.java | 2 - .../flutter/plugins/camerax/LiveDataTest.java | 8 +- .../flutter/plugins/camerax/ObserverTest.java | 4 +- .../example/android/build.gradle | 2 +- .../example/lib/camera_controller.dart | 6 - .../example/lib/main.dart | 13 +- .../lib/src/android_camera_camerax.dart | 33 +- ...roid_camera_camerax_flutter_api_impls.dart | 72 +-- .../lib/src/camera_state.dart | 26 +- .../lib/src/camera_state_error.dart | 27 +- .../lib/src/camerax_library.g.dart | 233 +++----- .../lib/src/instance_manager.dart | 4 +- .../lib/src/live_data.dart | 36 +- .../lib/src/observer.dart | 30 +- .../lib/src/observer.simple_ast.json | 396 -------------- .../lib/src/process_camera_provider.dart | 2 - .../pigeons/camerax_library.dart | 116 +--- .../camera_android_camerax/pubspec.yaml | 18 +- .../test/android_camera_camerax_test.dart | 129 ++++- .../android_camera_camerax_test.mocks.dart | 98 +++- .../test/camera_state_error_test.dart | 3 +- .../test/camera_state_error_test.mocks.dart | 12 +- .../test/camera_state_test.mocks.dart | 2 +- .../test/live_data_test.mocks.dart | 17 +- .../test/observer_test.mocks.dart | 2 +- .../test/test_camerax_library.g.dart | 40 -- 29 files changed, 611 insertions(+), 1246 deletions(-) delete mode 100644 packages/camera/camera_android_camerax/lib/src/observer.simple_ast.json 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 4bea82a9c425..99aebf609d10 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,11 +55,16 @@ 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; } + /** + * The states the camera can be in. + * + * See https://developer.android.com/reference/androidx/camera/core/CameraState.Type. + */ public enum CameraStateType { CLOSED(0), CLOSING(1), @@ -137,13 +145,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; } } @@ -281,7 +285,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(); @@ -289,12 +293,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<>( @@ -306,7 +306,8 @@ static void setup( try { api.clear(); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -327,9 +328,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 = @@ -344,7 +343,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; } @@ -364,7 +364,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); @@ -373,7 +373,6 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -386,26 +385,22 @@ 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); - @NonNull + @NonNull Long getLiveCameraState(@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) -> { @@ -413,11 +408,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; } @@ -430,9 +424,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -440,11 +432,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = - api.getLiveCameraState( - (identifierArg == null) ? null : identifierArg.longValue()); + Long output = api.getLiveCameraState((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -464,7 +455,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); @@ -473,7 +464,6 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -488,19 +478,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<>( @@ -513,11 +499,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; } @@ -539,12 +524,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; } @@ -564,7 +547,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); @@ -573,9 +556,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()); @@ -589,16 +570,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); @@ -609,18 +587,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) -> { @@ -647,9 +619,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) -> { @@ -657,11 +627,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; } @@ -674,9 +643,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) -> { @@ -686,15 +653,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; } @@ -707,9 +669,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) -> { @@ -718,12 +678,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; } @@ -736,9 +694,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) -> { @@ -747,10 +703,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; } @@ -763,9 +719,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) -> { @@ -775,7 +729,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; } @@ -795,7 +750,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); @@ -804,13 +759,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)); @@ -819,14 +771,14 @@ public void create(@NonNull Long identifierArg, @NonNull Reply callback) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraHostApi { - @NonNull + @NonNull Long getCameraInfo(@NonNull Long identifier); /** The codec used by CameraHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ + /**Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHostApi api) { { BasicMessageChannel channel = @@ -839,10 +791,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHost ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = - api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); + Long output = api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -862,7 +814,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); @@ -871,7 +823,6 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -911,11 +862,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(); @@ -923,18 +872,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) -> { @@ -963,9 +906,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) -> { @@ -974,11 +915,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; } @@ -991,9 +931,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) -> { @@ -1001,7 +939,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; } @@ -1021,7 +960,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); @@ -1030,25 +969,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)); @@ -1089,24 +1021,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 = @@ -1121,12 +1050,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; } @@ -1139,9 +1066,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) -> { @@ -1149,11 +1074,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; } @@ -1166,9 +1090,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) -> { @@ -1176,7 +1098,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; } @@ -1197,11 +1120,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; } @@ -1243,10 +1165,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); @@ -1256,10 +1175,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 = @@ -1274,12 +1190,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; } @@ -1301,11 +1215,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; } @@ -1338,8 +1251,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); @@ -1347,27 +1259,16 @@ public void error(Throwable error) { } } } - /** - * Host API for `CameraState`. - * - *

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. - * - *

See . - * - *

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 CameraStateHostApi { /** The codec used by CameraStateHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `CameraStateHostApi` to handle messages through the `binaryMessenger`. - */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraStateHostApi api) {} + /**Sets up an instance of `CameraStateHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraStateHostApi api) { + } } private static class CameraStateFlutterApiCodec extends StandardMessageCodec { @@ -1396,16 +1297,7 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { } } - /** - * Flutter API for `CameraState`. - * - *

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. - * - *

See . - * - *

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 CameraStateFlutterApi { private final @NonNull BinaryMessenger binaryMessenger; @@ -1413,7 +1305,7 @@ public CameraStateFlutterApi(@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 +1314,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return CameraStateFlutterApiCodec.INSTANCE; } - /** Create a new Dart instance and add it to the `InstanceManager`. */ - public void create( - @NonNull Long identifierArg, - @NonNull CameraStateTypeData typeArg, - @Nullable Long errorIdentifierArg, - @NonNull Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull CameraStateTypeData typeArg, @Nullable Long errorIdentifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraStateFlutterApi.create", getCodec()); @@ -1436,28 +1323,16 @@ public void create( channelReply -> callback.reply(null)); } } - /** - * Host API for `Observer`. - * - *

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. - * - *

See . - * - *

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 ObserverHostApi { - /** Create a new native instance and add it to the `InstanceManager`. */ + void create(@NonNull Long identifier); /** The codec used by ObserverHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `ObserverHostApi` to handle messages through the `binaryMessenger`. - */ + /**Sets up an instance of `ObserverHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHostApi api) { { BasicMessageChannel channel = @@ -1472,7 +1347,8 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHo try { api.create((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1484,16 +1360,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHo } } } - /** - * Flutter API for `Observer`. - * - *

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. - * - *

See . - * - *

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 ObserverFlutterApi { private final @NonNull BinaryMessenger binaryMessenger; @@ -1501,7 +1368,7 @@ public ObserverFlutterApi(@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); @@ -1510,11 +1377,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** Callback to Dart function `Observer.onChanged`. */ - public void onChanged( - @NonNull Long identifierArg, - @NonNull Long valueIdentifierArg, - @NonNull Reply callback) { + public void onChanged(@NonNull Long identifierArg, @NonNull Long valueIdentifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ObserverFlutterApi.onChanged", getCodec()); @@ -1523,40 +1386,7 @@ public void onChanged( channelReply -> callback.reply(null)); } } - /** - * Host API for `CameraStateError`. - * - *

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. - * - *

See . - * - *

Generated interface from Pigeon that represents a handler of messages from Flutter. - */ - public interface CameraStateErrorHostApi { - - /** The codec used by CameraStateErrorHostApi. */ - static @NonNull MessageCodec getCodec() { - return new StandardMessageCodec(); - } - /** - * Sets up an instance of `CameraStateErrorHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setup( - @NonNull BinaryMessenger binaryMessenger, @Nullable CameraStateErrorHostApi api) {} - } - /** - * Flutter API for `CameraStateError`. - * - *

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. - * - *

See . - * - *

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 CameraStateErrorFlutterApi { private final @NonNull BinaryMessenger binaryMessenger; @@ -1564,7 +1394,7 @@ public CameraStateErrorFlutterApi(@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); @@ -1573,12 +1403,7 @@ public interface Reply { 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 codeArg, - @NonNull String descriptionArg, - @NonNull Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull Long codeArg, @NonNull String descriptionArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraStateErrorFlutterApi.create", getCodec()); @@ -1587,21 +1412,11 @@ public void create( channelReply -> callback.reply(null)); } } - /** - * Host API for `LiveData`. - * - *

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. - * - *

See . - * - *

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 LiveDataHostApi { - /** Handles Dart method `LiveData.observe`. */ + void observe(@NonNull Long identifier, @NonNull Long observerIdentifier); - /** Handles Dart method `LiveData.removeObservers`. */ + void removeObservers(@NonNull Long identifier); void cast(@NonNull Long oldIdentifier, @NonNull Long newIdentifier); @@ -1610,9 +1425,7 @@ public interface LiveDataHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `LiveDataHostApi` to handle messages through the `binaryMessenger`. - */ + /**Sets up an instance of `LiveDataHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHostApi api) { { BasicMessageChannel channel = @@ -1626,11 +1439,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo Number identifierArg = (Number) args.get(0); Number observerIdentifierArg = (Number) args.get(1); try { - api.observe( - (identifierArg == null) ? null : identifierArg.longValue(), - (observerIdentifierArg == null) ? null : observerIdentifierArg.longValue()); + api.observe((identifierArg == null) ? null : identifierArg.longValue(), (observerIdentifierArg == null) ? null : observerIdentifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1653,7 +1465,8 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo try { api.removeObservers((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1675,11 +1488,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo Number oldIdentifierArg = (Number) args.get(0); Number newIdentifierArg = (Number) args.get(1); try { - api.cast( - (oldIdentifierArg == null) ? null : oldIdentifierArg.longValue(), - (newIdentifierArg == null) ? null : newIdentifierArg.longValue()); + api.cast((oldIdentifierArg == null) ? null : oldIdentifierArg.longValue(), (newIdentifierArg == null) ? null : newIdentifierArg.longValue()); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1691,16 +1503,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo } } } - /** - * Flutter API for `LiveData`. - * - *

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. - * - *

See . - * - *

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 LiveDataFlutterApi { private final @NonNull BinaryMessenger binaryMessenger; @@ -1708,7 +1511,7 @@ public LiveDataFlutterApi(@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); @@ -1717,7 +1520,6 @@ public interface Reply { 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 Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java index d51a3c801abc..66005fc57de4 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java @@ -51,6 +51,16 @@ public ObserverImpl( public void onChanged(T value) { observerFlutterApiWrapper.onChanged(this, value, reply -> {}); } + + /** + * Flutter API used to send messages back to Dart. + * + *

This is only visible for testing. + */ + @VisibleForTesting + void setApi(@NonNull ObserverFlutterApiWrapper api) { + this.observerFlutterApiWrapper = api; + } } /** @@ -83,7 +93,7 @@ public ObserverHostApiImpl( } /** - * Creates an {@link Observer} instance with the specified identifier. + * Creates an {@link Observer} instance with the specified observer. */ @Override public void create(@NonNull Long identifier) { diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java index f1d8ee3d89e3..c99145ebc14d 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java @@ -4,6 +4,7 @@ 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; @@ -12,12 +13,14 @@ import androidx.camera.core.CameraState; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateFlutterApi; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateType; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateTypeData; import java.util.Objects; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; @@ -53,12 +56,17 @@ public void flutterApiCreate_makesCallToDartToCreateInstance() { flutterApi.create(mockCameraState, type, mockError, reply -> {}); final long instanceIdentifier = - Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockCameraState)); + Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockCameraState)); + final ArgumentCaptor cameraStateTypeDataCaptor = + ArgumentCaptor.forClass(CameraStateTypeData.class); + verify(mockFlutterApi) .create( eq(instanceIdentifier), - eq(CameraStateType.OPEN), + cameraStateTypeDataCaptor.capture(), eq(Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockError))), any()); + + assertEquals(cameraStateTypeDataCaptor.getValue().getValue(), CameraStateType.OPEN); } } 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 e5c81be3a1ef..73778d7418f5 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 @@ -192,8 +192,6 @@ public void takePicture_usesExpectedOnImageSavedCallback() { final ImageCaptureException mockException = mock(ImageCaptureException.class); imageCaptureHostApiImpl.cameraXProxy = mockCameraXProxy; - when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger)) - .thenReturn(mockSystemServicesFlutterApiImpl); when(mockFile.getAbsolutePath()).thenReturn(mockFileAbsolutePath); ImageCapture.OnImageSavedCallback onImageSavedCallback = diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java index 8eb2bfd6307d..f22918f98fdb 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -7,6 +7,7 @@ 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 androidx.lifecycle.LifecycleOwner; @@ -80,17 +81,18 @@ public void removeObservers_makesCallToRemoveObserversFromLiveDataInstance() { @Test public void cast_addsOldInstanceWithNewIdentifier() { + final InstanceManager spyInstanceManager = spy(instanceManager); final LiveDataHostApiImpl hostApi = - new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); + new LiveDataHostApiImpl(mockBinaryMessenger, spyInstanceManager); final long instanceIdentifier = 56; final long newIdentifier = 98; final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); - instanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); + spyInstanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); hostApi.cast(instanceIdentifier, newIdentifier); - verify(instanceManager).addDartCreatedInstance(mockLiveData, newIdentifier); + verify(spyInstanceManager).addDartCreatedInstance(mockLiveData, newIdentifier); } @Test diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java index 3484f5abadf8..c9f97b4b645b 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java @@ -62,8 +62,8 @@ public void create_createsObserverInstance() { public void onChanged_makesCallToDartCallback() { final ObserverFlutterApiWrapper flutterApi = new ObserverFlutterApiWrapper(mockBinaryMessenger, instanceManager); - final ObserverHostApiImpl.ObserverImpl instance = - new ObserverHostApiImpl.ObserverImpl(mockBinaryMessenger, instanceManager); + final ObserverHostApiImpl.ObserverImpl instance = + new ObserverHostApiImpl.ObserverImpl(mockBinaryMessenger, instanceManager); final long instanceIdentifier = 0; final CameraState mockCameraState = CameraState.create(CameraState.Type.CLOSED); Long mockCameraStateIdentifier = instanceManager.addHostCreatedInstance(mockCameraState); diff --git a/packages/camera/camera_android_camerax/example/android/build.gradle b/packages/camera/camera_android_camerax/example/android/build.gradle index 7c909c6116c0..45cb407e8d03 100644 --- a/packages/camera/camera_android_camerax/example/android/build.gradle +++ b/packages/camera/camera_android_camerax/example/android/build.gradle @@ -26,7 +26,7 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/packages/camera/camera_android_camerax/example/lib/camera_controller.dart b/packages/camera/camera_android_camerax/example/lib/camera_controller.dart index 4af433b66b5d..b1b5e9d4ceb9 100644 --- a/packages/camera/camera_android_camerax/example/lib/camera_controller.dart +++ b/packages/camera/camera_android_camerax/example/lib/camera_controller.dart @@ -306,12 +306,6 @@ class CameraController extends ValueNotifier { initializeCompleter.complete(event); })); - CameraPlatform.instance - .onCameraClosing(_cameraId) - .listen((CameraClosingEvent event) { - print('woohoo!!! camera closing'); - }); - await CameraPlatform.instance.initializeCamera( _cameraId, imageFormatGroup: imageFormatGroup ?? ImageFormatGroup.unknown, diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index 0f66ffb8d175..918e768b85e8 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -475,12 +475,8 @@ class _CameraExampleHomeState extends State style: styleAuto, onPressed: () {}, // TODO(camsim99): Add functionality back here. - onLongPress: () { - if (controller != null) { - // controller!.setFocusPoint(null); - } - showInSnackBar('Resetting focus point'); - }, + onLongPress: + () {}, // TODO(camsim99): Add functionality back here. child: const Text('AUTO'), ), TextButton( @@ -602,8 +598,9 @@ class _CameraExampleHomeState extends State details.localPosition.dx / constraints.maxWidth, details.localPosition.dy / constraints.maxHeight, ); - // cameraController.setExposurePoint(offset); - // cameraController.setFocusPoint(offset); + + // TODO(camsim99): Add functionality back here for setting exposure and + // focus point. } Future onNewCameraSelected(CameraDescription cameraDescription) async { 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 1d7c78572514..e6d550dd9fcc 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 @@ -13,7 +13,6 @@ import 'camera.dart'; import 'camera_info.dart'; import 'camera_selector.dart'; import 'camera_state.dart'; -import 'camera_state_error.dart'; import 'camerax_library.g.dart'; import 'image_capture.dart'; import 'live_data.dart'; @@ -40,7 +39,8 @@ class AndroidCameraCameraX extends CameraPlatform { @visibleForTesting Camera? camera; - /// The [LiveData] of the [CameraState] that represents the state of the [camera] instance. + /// The [LiveData] of the [CameraState] that represents the state of the + /// [camera] instance. LiveData? liveCameraState; /// The [Preview] instance that can be configured to present a live camera preview. @@ -77,6 +77,11 @@ class AndroidCameraCameraX extends CameraPlatform { cameraEventStreamController.stream .where((CameraEvent event) => event.cameraId == cameraId); + /// Conditional used to create detached [Observer]s for testing their + /// callback methods. + @visibleForTesting + bool createDetachedObservers = false; + /// Returns list of all available cameras and their descriptions. @override Future> availableCameras() async { @@ -171,7 +176,7 @@ class AndroidCameraCameraX extends CameraPlatform { // instance as bound but not paused. camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); - _updateLiveCameraState(flutterSurfaceTextureId); + await _updateLiveCameraState(flutterSurfaceTextureId); _previewIsPaused = false; return flutterSurfaceTextureId; @@ -337,7 +342,7 @@ class AndroidCameraCameraX extends CameraPlatform { camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!]); - _updateLiveCameraState(cameraId); + await _updateLiveCameraState(cameraId); } /// Unbinds [preview] instance to camera lifecycle controlled by the @@ -353,7 +358,7 @@ class AndroidCameraCameraX extends CameraPlatform { processCameraProvider!.unbind([preview!]); } - // Methods concerning camera information: + // Methods concerning camera state: /// Adds fresh observers to the [LiveData] of the [CameraState] of the /// current [camera]. @@ -361,21 +366,31 @@ class AndroidCameraCameraX extends CameraPlatform { final CameraInfo cameraInfo = await camera!.getCameraInfo(); liveCameraState?.removeObservers(); liveCameraState = await cameraInfo.getLiveCameraState(); - liveCameraState!.observe(_createCameraClosingObserver(cameraId)); + await liveCameraState!.observe(_createCameraClosingObserver(cameraId)); } + /// Creates [Observer] of the [CameraState] that will: + /// + /// * Send a [CameraClosingEvent] if the [CameraState] indicates that the + /// camera has begun to close. + /// * Send a [CameraErrorEvent] if the [CameraState] indicates that the + /// camera is in error state. Observer _createCameraClosingObserver(int cameraId) { - return Observer(onChanged: (Object stateAsObject) { + // Callback method used to implement the behavior described above: + void onChanged(Object stateAsObject) { final CameraState state = stateAsObject as CameraState; if (state.type == CameraStateType.closing) { cameraEventStreamController.add(CameraClosingEvent(cameraId)); } - if (state.error != null) { cameraEventStreamController .add(CameraErrorEvent(cameraId, state.error!.description)); } - }); + } + + return createDetachedObservers + ? Observer.detached(onChanged: onChanged) + : Observer(onChanged: onChanged); } // Methods for mapping Flutter camera constants to CameraX constants: 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 5976d59d9f30..9b06a53865ef 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 @@ -18,28 +18,29 @@ import 'system_services.dart'; class AndroidCameraXCameraFlutterApis { /// Creates a [AndroidCameraXCameraFlutterApis]. AndroidCameraXCameraFlutterApis({ - JavaObjectFlutterApiImpl? javaObjectFlutterApi, - CameraFlutterApiImpl? cameraFlutterApi, - CameraInfoFlutterApiImpl? cameraInfoFlutterApi, - CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi, - ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi, - SystemServicesFlutterApiImpl? systemServicesFlutterApi, + JavaObjectFlutterApiImpl? javaObjectFlutterApiImpl, + CameraFlutterApiImpl? cameraFlutterApiImpl, + CameraInfoFlutterApiImpl? cameraInfoFlutterApiImpl, + CameraSelectorFlutterApiImpl? cameraSelectorFlutterApiImpl, + ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApiImpl, + SystemServicesFlutterApiImpl? systemServicesFlutterApiImpl, CameraStateErrorFlutterApiImpl? cameraStateErrorFlutterApiImpl, CameraStateFlutterApiImpl? cameraStateFlutterApiImpl, LiveDataFlutterApiImpl? liveDataFlutterApiImpl, ObserverFlutterApiImpl? observerFlutterApiImpl, }) { - this.javaObjectFlutterApi = - javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); - this.cameraInfoFlutterApi = - cameraInfoFlutterApi ?? CameraInfoFlutterApiImpl(); - this.cameraSelectorFlutterApi = - cameraSelectorFlutterApi ?? CameraSelectorFlutterApiImpl(); - this.processCameraProviderFlutterApi = processCameraProviderFlutterApi ?? - ProcessCameraProviderFlutterApiImpl(); - this.cameraFlutterApi = cameraFlutterApi ?? CameraFlutterApiImpl(); - this.systemServicesFlutterApi = - systemServicesFlutterApi ?? SystemServicesFlutterApiImpl(); + this.javaObjectFlutterApiImpl = + javaObjectFlutterApiImpl ?? JavaObjectFlutterApiImpl(); + this.cameraInfoFlutterApiImpl = + cameraInfoFlutterApiImpl ?? CameraInfoFlutterApiImpl(); + this.cameraSelectorFlutterApiImpl = + cameraSelectorFlutterApiImpl ?? CameraSelectorFlutterApiImpl(); + this.processCameraProviderFlutterApiImpl = + processCameraProviderFlutterApiImpl ?? + ProcessCameraProviderFlutterApiImpl(); + this.cameraFlutterApiImpl = cameraFlutterApiImpl ?? CameraFlutterApiImpl(); + this.systemServicesFlutterApiImpl = + systemServicesFlutterApiImpl ?? SystemServicesFlutterApiImpl(); this.cameraStateErrorFlutterApiImpl = cameraStateErrorFlutterApiImpl ?? CameraStateErrorFlutterApiImpl(); this.cameraStateFlutterApiImpl = @@ -59,28 +60,28 @@ class AndroidCameraXCameraFlutterApis { AndroidCameraXCameraFlutterApis(); /// Handles callbacks methods for the native Java Object class. - late final JavaObjectFlutterApi javaObjectFlutterApi; + late final JavaObjectFlutterApi javaObjectFlutterApiImpl; - /// Flutter Api for [CameraInfo]. - late final CameraInfoFlutterApiImpl cameraInfoFlutterApi; + /// Flutter Api implementation for [CameraInfo]. + late final CameraInfoFlutterApiImpl cameraInfoFlutterApiImpl; - /// Flutter Api for [CameraSelector]. - late final CameraSelectorFlutterApiImpl cameraSelectorFlutterApi; + /// Flutter Api implementation for [CameraSelector]. + late final CameraSelectorFlutterApiImpl cameraSelectorFlutterApiImpl; - /// Flutter Api for [ProcessCameraProvider]. + /// Flutter Api implementation for [ProcessCameraProvider]. late final ProcessCameraProviderFlutterApiImpl - processCameraProviderFlutterApi; + processCameraProviderFlutterApiImpl; - /// Flutter Api for [Camera]. - late final CameraFlutterApiImpl cameraFlutterApi; + /// Flutter Api implementation for [Camera]. + late final CameraFlutterApiImpl cameraFlutterApiImpl; - /// Flutter Api for [SystemServices]. - late final SystemServicesFlutterApiImpl systemServicesFlutterApi; + /// Flutter Api implementation for [SystemServices]. + late final SystemServicesFlutterApiImpl systemServicesFlutterApiImpl; /// Flutter Api implementation for [CameraStateError]. late final CameraStateErrorFlutterApiImpl? cameraStateErrorFlutterApiImpl; - /// Flutter Api implementation for [CameraState]. + /// Flutter Api implementation for [CameraState]. late final CameraStateFlutterApiImpl? cameraStateFlutterApiImpl; /// Flutter Api implementation for [LiveData]. @@ -92,12 +93,13 @@ class AndroidCameraXCameraFlutterApis { /// Ensures all the Flutter APIs have been setup to receive calls from native code. void ensureSetUp() { if (!_haveBeenSetUp) { - JavaObjectFlutterApi.setup(javaObjectFlutterApi); - CameraInfoFlutterApi.setup(cameraInfoFlutterApi); - CameraSelectorFlutterApi.setup(cameraSelectorFlutterApi); - ProcessCameraProviderFlutterApi.setup(processCameraProviderFlutterApi); - CameraFlutterApi.setup(cameraFlutterApi); - SystemServicesFlutterApi.setup(systemServicesFlutterApi); + JavaObjectFlutterApi.setup(javaObjectFlutterApiImpl); + CameraInfoFlutterApi.setup(cameraInfoFlutterApiImpl); + CameraSelectorFlutterApi.setup(cameraSelectorFlutterApiImpl); + ProcessCameraProviderFlutterApi.setup( + processCameraProviderFlutterApiImpl); + CameraFlutterApi.setup(cameraFlutterApiImpl); + SystemServicesFlutterApi.setup(systemServicesFlutterApiImpl); CameraStateErrorFlutterApi.setup(cameraStateErrorFlutterApiImpl); CameraStateFlutterApi.setup(cameraStateFlutterApiImpl); LiveDataFlutterApi.setup(liveDataFlutterApiImpl); diff --git a/packages/camera/camera_android_camerax/lib/src/camera_state.dart b/packages/camera/camera_android_camerax/lib/src/camera_state.dart index 28e16be4fe0e..0fc0c05ba43c 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_state.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_state.dart @@ -1,25 +1,31 @@ -import 'camera_state_error.dart'; -import 'package:simple_ast/annotations.dart'; -import 'package:meta/meta.dart'; +// 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'; +import 'package:meta/meta.dart'; -import 'observer.dart'; -import 'java_object.dart'; -import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camera_state_error.dart'; import 'camerax_library.g.dart'; import 'instance_manager.dart'; +import 'java_object.dart'; +/// The state of a camera. +/// +/// See https://developer.android.com/reference/androidx/camera/core/CameraState. class CameraState extends JavaObject { + /// Constructs a [CameraState] that is not automatically attached to a native object. CameraState.detached( - {BinaryMessenger? binaryMessenger, - InstanceManager? instanceManager, + {super.binaryMessenger, + super.instanceManager, required this.type, this.error}) - : super.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); + : super.detached(); + /// The type of state that the camera is in. final CameraStateType type; + /// The error that the camera has encountered, if any. final CameraStateError? error; } diff --git a/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart b/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart index bc33263a060a..6a9c9a3f81b7 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart @@ -1,24 +1,33 @@ -import 'package:simple_ast/annotations.dart'; +// 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'; import 'package:meta/meta.dart'; -import 'observer.dart'; -import 'java_object.dart'; -import 'android_camera_camerax_flutter_api_impls.dart'; import 'camerax_library.g.dart'; import 'instance_manager.dart'; +import 'java_object.dart'; -class CameraStateError extends JavaObject { +/// The error that a camera has encountered. +/// +/// See https://developer.android.com/reference/androidx/camera/core/CameraState.StateError. +class CameraStateError extends JavaObject { + /// Constructs a [CameraStateError] that is not automatically attached to a native object. CameraStateError.detached( - {BinaryMessenger? binaryMessenger, - InstanceManager? instanceManager, + {super.binaryMessenger, + super.instanceManager, required this.code, required this.description}) - : super.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); + : super.detached(); + /// The code of this error. final int code; + /// The description of this error corresponding to its [code]. + /// + /// This is not directly provided by the CameraX library, but is determined on + /// the Java side based on the error type. final String description; } 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 b7c559602ddc..dd6f82e3c3c7 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 @@ -11,6 +11,9 @@ import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; +/// The states the camera can be in. +/// +/// See https://developer.android.com/reference/androidx/camera/core/CameraState.Type. enum CameraStateType { closed, closing, @@ -109,7 +112,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', @@ -165,8 +169,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, @@ -176,7 +179,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, @@ -259,8 +262,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, @@ -270,7 +272,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, @@ -297,8 +299,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', @@ -315,13 +317,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', @@ -349,8 +350,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, @@ -360,7 +360,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, @@ -388,7 +388,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', @@ -412,8 +413,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?; @@ -438,17 +438,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', @@ -475,8 +470,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', @@ -502,8 +496,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', @@ -548,8 +542,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, @@ -559,7 +552,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, @@ -625,7 +618,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, @@ -653,7 +646,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); @@ -671,11 +664,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?; @@ -695,15 +686,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', @@ -722,10 +710,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', @@ -750,19 +738,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, @@ -781,7 +767,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, @@ -812,9 +798,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); @@ -832,14 +818,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', @@ -887,7 +871,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', @@ -947,7 +932,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); @@ -965,14 +950,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', @@ -993,8 +976,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', @@ -1039,13 +1022,6 @@ class ImageCaptureHostApi { } } -/// Host API for `CameraState`. -/// -/// 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. -/// -/// See . class CameraStateHostApi { /// Constructor for [CameraStateHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -1055,6 +1031,7 @@ class CameraStateHostApi { final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = StandardMessageCodec(); + } class _CameraStateFlutterApiCodec extends StandardMessageCodec { @@ -1072,7 +1049,7 @@ class _CameraStateFlutterApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraStateTypeData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1080,21 +1057,12 @@ class _CameraStateFlutterApiCodec extends StandardMessageCodec { } } -/// Flutter API for `CameraState`. -/// -/// 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. -/// -/// See . abstract class CameraStateFlutterApi { static const MessageCodec codec = _CameraStateFlutterApiCodec(); - /// Create a new Dart instance and add it to the `InstanceManager`. void create(int identifier, CameraStateTypeData type, int? errorIdentifier); - static void setup(CameraStateFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(CameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraStateFlutterApi.create', codec, @@ -1104,13 +1072,12 @@ abstract class CameraStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.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.CameraStateFlutterApi.create was null, expected non-null int.'); - final CameraStateTypeData? arg_type = - (args[1] as CameraStateTypeData?); + final CameraStateTypeData? arg_type = (args[1] as CameraStateTypeData?); assert(arg_type != null, 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null, expected non-null CameraStateTypeData.'); final int? arg_errorIdentifier = (args[2] as int?); @@ -1122,13 +1089,6 @@ abstract class CameraStateFlutterApi { } } -/// Host API for `Observer`. -/// -/// 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. -/// -/// See . class ObserverHostApi { /// Constructor for [ObserverHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -1139,7 +1099,6 @@ class ObserverHostApi { static const MessageCodec codec = StandardMessageCodec(); - /// Create a new native instance and add it to the `InstanceManager`. Future create(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ObserverHostApi.create', codec, @@ -1163,21 +1122,12 @@ class ObserverHostApi { } } -/// Flutter API for `Observer`. -/// -/// 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. -/// -/// See . abstract class ObserverFlutterApi { static const MessageCodec codec = StandardMessageCodec(); - /// Callback to Dart function `Observer.onChanged`. void onChanged(int identifier, int valueIdentifier); - static void setup(ObserverFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(ObserverFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ObserverFlutterApi.onChanged', codec, @@ -1187,7 +1137,7 @@ abstract class ObserverFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ObserverFlutterApi.onChanged was null.'); + 'Argument for dev.flutter.pigeon.ObserverFlutterApi.onChanged was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1203,39 +1153,12 @@ abstract class ObserverFlutterApi { } } -/// Host API for `CameraStateError`. -/// -/// 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. -/// -/// See . -class CameraStateErrorHostApi { - /// Constructor for [CameraStateErrorHostApi]. 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. - CameraStateErrorHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = StandardMessageCodec(); -} - -/// Flutter API for `CameraStateError`. -/// -/// 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. -/// -/// See . abstract class CameraStateErrorFlutterApi { static const MessageCodec codec = StandardMessageCodec(); - /// Create a new Dart instance and add it to the `InstanceManager`. void create(int identifier, int code, String description); - static void setup(CameraStateErrorFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(CameraStateErrorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraStateErrorFlutterApi.create', codec, @@ -1245,7 +1168,7 @@ abstract class CameraStateErrorFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1264,13 +1187,6 @@ abstract class CameraStateErrorFlutterApi { } } -/// Host API for `LiveData`. -/// -/// 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. -/// -/// See . class LiveDataHostApi { /// Constructor for [LiveDataHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -1281,14 +1197,12 @@ class LiveDataHostApi { static const MessageCodec codec = StandardMessageCodec(); - /// Handles Dart method `LiveData.observe`. Future observe(int arg_identifier, int arg_observerIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveDataHostApi.observe', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_observerIdentifier]) - as List?; + await channel.send([arg_identifier, arg_observerIdentifier]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1305,7 +1219,6 @@ class LiveDataHostApi { } } - /// Handles Dart method `LiveData.removeObservers`. Future removeObservers(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveDataHostApi.removeObservers', codec, @@ -1333,8 +1246,7 @@ class LiveDataHostApi { 'dev.flutter.pigeon.LiveDataHostApi.cast', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_oldIdentifier, arg_newIdentifier]) - as List?; + await channel.send([arg_oldIdentifier, arg_newIdentifier]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1352,21 +1264,12 @@ class LiveDataHostApi { } } -/// Flutter API for `LiveData`. -/// -/// 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. -/// -/// See . abstract class LiveDataFlutterApi { static const MessageCodec codec = StandardMessageCodec(); - /// Create a new Dart instance and add it to the `InstanceManager`. void create(int identifier); - static void setup(LiveDataFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(LiveDataFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveDataFlutterApi.create', codec, @@ -1376,7 +1279,7 @@ abstract class LiveDataFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.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/lib/src/instance_manager.dart b/packages/camera/camera_android_camerax/lib/src/instance_manager.dart index 59fb83cd04fb..b44ea272927e 100644 --- a/packages/camera/camera_android_camerax/lib/src/instance_manager.dart +++ b/packages/camera/camera_android_camerax/lib/src/instance_manager.dart @@ -123,12 +123,10 @@ class InstanceManager { if (weakInstance == null) { final T? strongInstance = _strongInstances[identifier] as T?; if (strongInstance != null) { + final Function copyCallback = _copyCallbacks[identifier]!; // This cast is safe since it matches the argument type for // _addInstanceWithIdentifier, which is the only place _copyCallbacks // is populated. - // final T Function(T) copyCallback = - // _copyCallbacks[identifier]! as T Function(T); - final Function copyCallback = _copyCallbacks[identifier]!; final T copy = copyCallback(strongInstance) as T; _identifiers[copy] = identifier; _weakInstances[identifier] = WeakReference(copy); diff --git a/packages/camera/camera_android_camerax/lib/src/live_data.dart b/packages/camera/camera_android_camerax/lib/src/live_data.dart index c9d45d001e6f..1917cfd172eb 100644 --- a/packages/camera/camera_android_camerax/lib/src/live_data.dart +++ b/packages/camera/camera_android_camerax/lib/src/live_data.dart @@ -1,13 +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. + import 'package:flutter/services.dart'; import 'package:meta/meta.dart'; -import 'observer.dart'; -import 'java_object.dart'; -import 'android_camera_camerax_flutter_api_impls.dart'; import 'camerax_library.g.dart'; import 'instance_manager.dart'; +import 'java_object.dart'; +import 'observer.dart'; +/// A data holder class that can be observed. +/// +/// For this wrapped class, observance can only fall within the lifecycle of the +/// Android Activity to which this plugin is attached. +/// +/// See https://developer.android.com/reference/androidx/lifecycle/LiveData. class LiveData extends JavaObject { + /// Constructs a [LiveData] that is not automatically attached to a native object. LiveData.detached({this.binaryMessenger, this.instanceManager}) : _api = _LiveDataHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager), @@ -16,17 +26,25 @@ class LiveData extends JavaObject { final _LiveDataHostApiImpl _api; + /// Receives binary data across the Flutter platform barrier. final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. final InstanceManager? instanceManager; + /// Adds specified [Observer] to the list of observers of this instance. Future observe(Observer observer) { return _api.observeFromInstances(this, observer); } + /// Removes all observers of this instance. Future removeObservers() { return _api.removeObserversFromInstances(this); } + /// Creates a new instance of [LiveData] with a specified type [S] that will + /// act as the casted version of the generic typed instance created from the + /// Java side. LiveData cast() { final LiveData newInstance = LiveData.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager); @@ -35,6 +53,7 @@ class LiveData extends JavaObject { } } +/// Host API implementation of [LiveData]. class _LiveDataHostApiImpl extends LiveDataHostApi { _LiveDataHostApiImpl({ this.binaryMessenger, @@ -42,10 +61,17 @@ class _LiveDataHostApiImpl extends LiveDataHostApi { }) : 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. final InstanceManager instanceManager; + /// Adds specified [Observer] to the list of observers of the specified + /// [LiveData] instance. Future observeFromInstances( LiveData instance, Observer observer, @@ -56,6 +82,7 @@ class _LiveDataHostApiImpl extends LiveDataHostApi { ); } + /// Removes all observers of the specified [LiveData] instance. Future removeObserversFromInstances( LiveData instance, ) { @@ -64,6 +91,9 @@ class _LiveDataHostApiImpl extends LiveDataHostApi { ); } + /// Creates a new instance of [LiveData] with a specified type [S] that will + /// act as the casted version of the typed [T] instance created from the + /// Java side. Future castFromInstances( LiveData instance, LiveData newInstance) { return cast( diff --git a/packages/camera/camera_android_camerax/lib/src/observer.dart b/packages/camera/camera_android_camerax/lib/src/observer.dart index 5fb4490826a4..4a231dcd639b 100644 --- a/packages/camera/camera_android_camerax/lib/src/observer.dart +++ b/packages/camera/camera_android_camerax/lib/src/observer.dart @@ -1,26 +1,28 @@ -import 'package:simple_ast/annotations.dart'; +// 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'; import 'package:meta/meta.dart'; -import 'observer.dart'; -import 'java_object.dart'; import 'android_camera_camerax_flutter_api_impls.dart'; -import 'camera_state.dart'; import 'camerax_library.g.dart'; import 'instance_manager.dart'; +import 'java_object.dart'; +import 'live_data.dart'; -@SimpleClassAnnotation() +/// Callback that can receive from [LiveData]. +/// +/// See https://developer.android.com/reference/androidx/lifecycle/Observer. class Observer extends JavaObject { /// Constructor for [Observer]. Observer( - {BinaryMessenger? binaryMessenger, - InstanceManager? instanceManager, + {super.binaryMessenger, + super.instanceManager, required void Function(Object value) onChanged}) : _api = _ObserverHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager), - super.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager) { + super.detached() { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); this.onChanged = (Object value) { assert(value is T); @@ -29,6 +31,7 @@ class Observer extends JavaObject { _api.createFromInstances(this); } + /// Constructs a [Observer] that is not automatically attached to a native object. Observer.detached( {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, @@ -46,7 +49,10 @@ class Observer extends JavaObject { final _ObserverHostApiImpl _api; - // TODO(camsim99): Cite Dart issue + /// Callback used when the observed data is changed to a new value. + /// + /// The callback parameter cannot take type [T] directly due to the issue + /// described in https://github.com/dart-lang/sdk/issues/51461. late final void Function(Object value) onChanged; } @@ -61,6 +67,8 @@ class _ObserverHostApiImpl extends ObserverHostApi { final InstanceManager instanceManager; + /// Adds specified [Observer] instance to instance manager and makes call + /// to native side to create the instance. Future createFromInstances( Observer instance, ) { diff --git a/packages/camera/camera_android_camerax/lib/src/observer.simple_ast.json b/packages/camera/camera_android_camerax/lib/src/observer.simple_ast.json deleted file mode 100644 index 336ff7a32d9f..000000000000 --- a/packages/camera/camera_android_camerax/lib/src/observer.simple_ast.json +++ /dev/null @@ -1,396 +0,0 @@ -{ - "classes": [ - { - "name": "Observer", - "private": false, - "methods": [], - "constructors": [ - { - "name": "", - "private": false, - "parameters": [ - { - "name": "binaryMessenger", - "type": { - "name": "BinaryMessenger", - "nullable": true, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": true, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": false, - "customValues": {} - }, - "isNamed": true, - "index": 0, - "customValues": {} - }, - { - "name": "instanceManager", - "type": { - "name": "InstanceManager", - "nullable": true, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": true, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": false, - "customValues": {} - }, - "isNamed": true, - "index": 1, - "customValues": {} - }, - { - "name": "onChanged", - "type": { - "name": "void Function(Observer, T)", - "nullable": false, - "typeArguments": [], - "functionParameters": [ - { - "name": "instance", - "type": { - "name": "Observer", - "nullable": false, - "typeArguments": [ - { - "name": "T", - "nullable": false, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": false, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": true, - "customValues": {} - } - ], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": true, - "isFunction": false, - "isEnum": false, - "isSimpleClass": true, - "isUnknownOrUnsupportedType": false, - "customValues": {} - }, - "isNamed": false, - "index": 0, - "customValues": {} - }, - { - "name": "value", - "type": { - "name": "T", - "nullable": false, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": false, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": true, - "customValues": {} - }, - "isNamed": false, - "index": 1, - "customValues": {} - } - ], - "functionReturnType": { - "name": "void", - "nullable": false, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": true, - "isClass": false, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": false, - "customValues": {} - }, - "isVoid": false, - "isClass": false, - "isFunction": true, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": false, - "customValues": {} - }, - "isNamed": true, - "index": 2, - "customValues": {} - } - ], - "customValues": {} - }, - { - "name": "detached", - "private": false, - "parameters": [ - { - "name": "binaryMessenger", - "type": { - "name": "BinaryMessenger", - "nullable": true, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": true, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": false, - "customValues": {} - }, - "isNamed": true, - "index": 0, - "customValues": {} - }, - { - "name": "instanceManager", - "type": { - "name": "InstanceManager", - "nullable": true, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": true, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": false, - "customValues": {} - }, - "isNamed": true, - "index": 1, - "customValues": {} - }, - { - "name": "onChanged", - "type": { - "name": "void Function(Observer, T)", - "nullable": false, - "typeArguments": [], - "functionParameters": [ - { - "name": "instance", - "type": { - "name": "Observer", - "nullable": false, - "typeArguments": [ - { - "name": "T", - "nullable": false, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": false, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": true, - "customValues": {} - } - ], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": true, - "isFunction": false, - "isEnum": false, - "isSimpleClass": true, - "isUnknownOrUnsupportedType": false, - "customValues": {} - }, - "isNamed": false, - "index": 0, - "customValues": {} - }, - { - "name": "value", - "type": { - "name": "T", - "nullable": false, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": false, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": true, - "customValues": {} - }, - "isNamed": false, - "index": 1, - "customValues": {} - } - ], - "functionReturnType": { - "name": "void", - "nullable": false, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": true, - "isClass": false, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": false, - "customValues": {} - }, - "isVoid": false, - "isClass": false, - "isFunction": true, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": false, - "customValues": {} - }, - "isNamed": true, - "index": 2, - "customValues": {} - } - ], - "customValues": {} - } - ], - "fields": [ - { - "name": "_api", - "private": true, - "static": false, - "type": { - "name": "_ObserverHostApiImpl", - "nullable": false, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": true, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": false, - "customValues": {} - } - }, - { - "name": "onChanged", - "private": false, - "static": false, - "type": { - "name": "void Function(Observer, T)", - "nullable": false, - "typeArguments": [], - "functionParameters": [ - { - "name": "instance", - "type": { - "name": "Observer", - "nullable": false, - "typeArguments": [ - { - "name": "T", - "nullable": false, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": false, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": true, - "customValues": {} - } - ], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": true, - "isFunction": false, - "isEnum": false, - "isSimpleClass": true, - "isUnknownOrUnsupportedType": false, - "customValues": {} - }, - "isNamed": false, - "index": 0, - "customValues": {} - }, - { - "name": "value", - "type": { - "name": "T", - "nullable": false, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": false, - "isClass": false, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": true, - "customValues": {} - }, - "isNamed": false, - "index": 1, - "customValues": {} - } - ], - "functionReturnType": { - "name": "void", - "nullable": false, - "typeArguments": [], - "functionParameters": [], - "functionReturnType": null, - "isVoid": true, - "isClass": false, - "isFunction": false, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": false, - "customValues": {} - }, - "isVoid": false, - "isClass": false, - "isFunction": true, - "isEnum": false, - "isSimpleClass": false, - "isUnknownOrUnsupportedType": false, - "customValues": {} - } - } - ], - "customValues": {} - } - ], - "functions": [], - "enums": [], - "customValues": {} -} \ No newline at end of file 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 580bebac8f4c..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 @@ -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 'dart:async'; - import 'package:flutter/services.dart'; import 'android_camera_camerax_flutter_api_impls.dart'; diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index f8b89659a782..6301ff7fbe72 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -46,6 +46,9 @@ class CameraPermissionsErrorData { String description; } +/// The states the camera can be in. +/// +/// See https://developer.android.com/reference/androidx/camera/core/CameraState.Type. enum CameraStateType { closed, closing, @@ -171,138 +174,39 @@ abstract class ImageCaptureHostApi { String takePicture(int identifier); } -/// Host API for `CameraState`. -/// -/// 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. -/// -/// See . @HostApi(dartHostTestHandler: 'TestCameraStateHostApi') abstract class CameraStateHostApi {} -/// Flutter API for `CameraState`. -/// -/// 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. -/// -/// See . @FlutterApi() abstract class CameraStateFlutterApi { - /// Create a new Dart instance and add it to the `InstanceManager`. - - void create( - int identifier, - CameraStateTypeData type, - int? errorIdentifier, - ); + void create(int identifier, CameraStateTypeData type, int? errorIdentifier); } -/// Host API for `Observer`. -/// -/// 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. -/// -/// See . @HostApi(dartHostTestHandler: 'TestObserverHostApi') abstract class ObserverHostApi { - /// Create a new native instance and add it to the `InstanceManager`. - - void create( - int identifier, - ); + void create(int identifier); } -/// Flutter API for `Observer`. -/// -/// 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. -/// -/// See . @FlutterApi() abstract class ObserverFlutterApi { - /// Callback to Dart function `Observer.onChanged`. - - void onChanged( - int identifier, - int valueIdentifier, - ); + void onChanged(int identifier, int valueIdentifier); } -// TODO(bparrishMines): Copy these classes into pigeon file and run pigeon -// TODO(bparrishMines): Fix documentation spacing over class methods if this is for iOS - -/// Host API for `CameraStateError`. -/// -/// 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. -/// -/// See . -@HostApi(dartHostTestHandler: 'TestCameraStateErrorHostApi') -abstract class CameraStateErrorHostApi {} - -/// Flutter API for `CameraStateError`. -/// -/// 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. -/// -/// See . @FlutterApi() abstract class CameraStateErrorFlutterApi { - /// Create a new Dart instance and add it to the `InstanceManager`. - - void create( - int identifier, - int code, - String description, - ); + void create(int identifier, int code, String description); } -// TODO(bparrishMines): Copy these classes into pigeon file and run pigeon -// TODO(bparrishMines): Fix documentation spacing over class methods if this is for iOS - -/// Host API for `LiveData`. -/// -/// 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. -/// -/// See . @HostApi(dartHostTestHandler: 'TestLiveDataHostApi') abstract class LiveDataHostApi { - /// Handles Dart method `LiveData.observe`. - - void observe( - int identifier, - int observerIdentifier, - ); + void observe(int identifier, int observerIdentifier); - /// Handles Dart method `LiveData.removeObservers`. - - void removeObservers( - int identifier, - ); + void removeObservers(int identifier); void cast(int oldIdentifier, int newIdentifier); } -/// Flutter API for `LiveData`. -/// -/// 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. -/// -/// See . @FlutterApi() abstract class LiveDataFlutterApi { - /// Create a new Dart instance and add it to the `InstanceManager`. - - void create( - int identifier, - ); + void create(int identifier); } diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index 4da9c3f07cb6..fac6ddceec06 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -23,29 +23,13 @@ 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.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 + meta: ^1.7.0 mockito: ^5.3.0 - pedantic: ^1.10.0 pigeon: ^9.0.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.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index 8eb1864a37c9..11f69a0067d6 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 @@ -9,9 +9,12 @@ import 'package:camera_android_camerax/camera_android_camerax.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/camera_state.dart'; +import 'package:camera_android_camerax/src/camera_state_error.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/live_camera_state.dart'; +import 'package:camera_android_camerax/src/live_data.dart'; +import 'package:camera_android_camerax/src/observer.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'; @@ -24,19 +27,52 @@ 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(), 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()); + + Future testCameraClosingObserver( + AndroidCameraCameraX camera, int cameraId, Observer observer) async { + const String testErrorDescription = 'Test error description'; + final Stream cameraClosingEventStream = + camera.onCameraClosing(cameraId); + final StreamQueue cameraClosingStreamQueue = + StreamQueue(cameraClosingEventStream); + final Stream cameraErrorEventStream = + camera.onCameraError(cameraId); + final StreamQueue cameraErrorStreamQueue = + StreamQueue(cameraErrorEventStream); + + observer.onChanged(CameraState.detached( + type: CameraStateType.closing, + error: CameraStateError.detached( + code: 0, description: testErrorDescription))); + + final bool cameraClosingEventSent = + await cameraClosingStreamQueue.next == CameraClosingEvent(cameraId); + final bool cameraErrorSent = await cameraErrorStreamQueue.next == + CameraErrorEvent(cameraId, testErrorDescription); + + await cameraClosingStreamQueue.cancel(); + await cameraErrorStreamQueue.cancel(); + + return cameraClosingEventSent && cameraErrorSent; + } test('Should fetch CameraDescription instances for available cameras', () async { @@ -99,7 +135,7 @@ void main() { }); test( - 'createCamera requests permissions, starts listening for device orientation changes, and returns flutter surface texture ID', + 'createCamera requests permissions, starts listening for device orientation changes, updates camera state observers, and returns flutter surface texture ID', () async { final MockAndroidCameraCamerax camera = MockAndroidCameraCamerax(); final MockProcessCameraProvider processCameraProvider = @@ -115,6 +151,7 @@ void main() { const int testSurfaceTextureId = 6; final MockCamera mockCamera = MockCamera(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); + final MockLiveData mockLiveCameraState = MockLiveData(); when(camera.testPreview.setSurfaceProvider()) .thenAnswer((_) async => testSurfaceTextureId); @@ -123,8 +160,9 @@ void main() { .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getLiveCameraState()) - .thenAnswer((_) async => MockLiveCameraState()); + .thenAnswer((_) async => mockLiveCameraState); camera.processCameraProvider = processCameraProvider; + camera.createDetachedObservers = true; expect( await camera.createCamera(testCameraDescription, testResolutionPreset, @@ -146,6 +184,15 @@ void main() { // Verify the camera's Preview instance has its surface provider set. verify(camera.preview!.setSurfaceProvider()); + + // Verify the camera state observer is updated. + // expect( + // await testCameraClosingObserver( + // camera, + // testSurfaceTextureId, + // verify(mockLiveCameraState.observe(captureAny)).captured.single + // as Observer), + // isTrue); }); test( @@ -170,8 +217,9 @@ void main() { .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getLiveCameraState()) - .thenAnswer((_) async => MockLiveCameraState()); + .thenAnswer((_) async => MockLiveData()); camera.processCameraProvider = processCameraProvider; + camera.createDetachedObservers = true; await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); @@ -230,7 +278,8 @@ void main() { .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getLiveCameraState()) - .thenAnswer((_) async => MockLiveCameraState()); + .thenAnswer((_) async => MockLiveData()); + camera.createDetachedObservers = true; await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); @@ -253,16 +302,19 @@ void main() { expect(camera.camera, isNotNull); }); - test('dispose releases Flutter surface texture and unbinds all use cases', + test( + 'dispose releases Flutter surface texture, removes camera state observers, and unbinds all use cases', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); camera.preview = MockPreview(); camera.processCameraProvider = MockProcessCameraProvider(); + camera.liveCameraState = MockLiveData(); camera.dispose(3); verify(camera.preview!.releaseFlutterSurfaceTexture()); + verify(camera.liveCameraState!.removeObservers()); verify(camera.processCameraProvider!.unbindAll()); }); @@ -283,33 +335,42 @@ void main() { }); test( - 'onCameraClosing stream emits camera closing event when detected by LiveCameraState', + 'onCameraClosing stream emits camera closing event when cameraEventStreamController emits a camera closing event', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); const int cameraId = 99; + const CameraClosingEvent cameraClosingEvent = CameraClosingEvent(cameraId); final Stream eventStream = camera.onCameraClosing(cameraId); final StreamQueue streamQueue = StreamQueue(eventStream); - LiveCameraState.cameraClosingStreamController.add(true); + camera.cameraEventStreamController.add(cameraClosingEvent); - expect(await streamQueue.next, equals(const CameraClosingEvent(cameraId))); + expect(await streamQueue.next, equals(cameraClosingEvent)); await streamQueue.cancel(); }); - test('onCameraError stream emits errors caught by system services', () async { + test( + 'onCameraError stream emits errors caught by system services or added to stream within plugin', + () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); const int cameraId = 27; - const String testErrorDescription = 'Test error description!'; + const String firstTestErrorDescription = 'Test error description 1!'; + const String secondTestErrorDescription = 'Test error description 2!'; + const CameraErrorEvent secondCameraErrorEvent = + CameraErrorEvent(cameraId, secondTestErrorDescription); final Stream eventStream = camera.onCameraError(cameraId); final StreamQueue streamQueue = StreamQueue(eventStream); - SystemServices.cameraErrorStreamController.add(testErrorDescription); - + SystemServices.cameraErrorStreamController.add(firstTestErrorDescription); expect(await streamQueue.next, - equals(const CameraErrorEvent(cameraId, testErrorDescription))); + equals(const CameraErrorEvent(cameraId, firstTestErrorDescription))); + + camera.cameraEventStreamController.add(secondCameraErrorEvent); + expect(await streamQueue.next, equals(secondCameraErrorEvent)); + await streamQueue.cancel(); }); @@ -360,46 +421,70 @@ void main() { camera.processCameraProvider!.unbind([camera.preview!])); }); - test('resumePreview does not bind preview to lifecycle if already bound', + test( + 'resumePreview does not bind preview to lifecycle or update camera state observers if already bound', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockProcessCameraProvider mockProcessCameraProvider = + MockProcessCameraProvider(); + final MockCamera mockCamera = MockCamera(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); + final MockLiveData mockLiveCameraState = MockLiveData(); - camera.processCameraProvider = MockProcessCameraProvider(); + camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); when(camera.processCameraProvider!.isBound(camera.preview!)) .thenAnswer((_) async => true); + when(mockProcessCameraProvider + .bindToLifecycle(camera.cameraSelector, [camera.preview!])) + .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); + when(mockCameraInfo.getLiveCameraState()) + .thenAnswer((_) async => mockLiveCameraState); + await camera.resumePreview(78); verifyNever(camera.processCameraProvider! .bindToLifecycle(camera.cameraSelector!, [camera.preview!])); + verifyNever(mockLiveCameraState.observe(any)); }); - test('resumePreview binds preview to lifecycle if not already bound', + test( + 'resumePreview binds preview to lifecycle and updates camera state observers if not already bound', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); + final MockLiveData mockLiveCameraState = MockLiveData(); camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); + camera.createDetachedObservers = true; when(mockProcessCameraProvider .bindToLifecycle(camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getLiveCameraState()) - .thenAnswer((_) async => MockLiveCameraState()); + .thenAnswer((_) async => mockLiveCameraState); await camera.resumePreview(78); verify(camera.processCameraProvider! .bindToLifecycle(camera.cameraSelector!, [camera.preview!])); + expect( + await testCameraClosingObserver( + camera, + 78, + verify(mockLiveCameraState.observe(captureAny)).captured.single + as Observer), + isTrue); }); test( @@ -415,13 +500,14 @@ void main() { camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); + camera.createDetachedObservers = true; when(mockProcessCameraProvider .bindToLifecycle(camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getLiveCameraState()) - .thenAnswer((_) async => MockLiveCameraState()); + .thenAnswer((_) async => MockLiveData()); final FutureBuilder previewWidget = camera.buildPreview(textureId) as FutureBuilder; @@ -453,13 +539,14 @@ void main() { camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); + camera.createDetachedObservers = true; when(mockProcessCameraProvider .bindToLifecycle(camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getLiveCameraState()) - .thenAnswer((_) async => MockLiveCameraState()); + .thenAnswer((_) async => MockLiveData()); final FutureBuilder previewWidget = camera.buildPreview(textureId) as FutureBuilder; 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 4bfe55917c9f..2a3af3fa87a3 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 @@ -7,19 +7,23 @@ import 'dart:async' as _i9; import 'package:camera_android_camerax/src/camera.dart' as _i5; import 'package:camera_android_camerax/src/camera_info.dart' as _i2; -import 'package:camera_android_camerax/src/camera_selector.dart' as _i10; +import 'package:camera_android_camerax/src/camera_selector.dart' as _i11; +import 'package:camera_android_camerax/src/camera_state.dart' as _i10; import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i4; -import 'package:camera_android_camerax/src/image_capture.dart' as _i11; -import 'package:camera_android_camerax/src/live_camera_state.dart' as _i3; -import 'package:camera_android_camerax/src/preview.dart' as _i12; +import 'package:camera_android_camerax/src/image_capture.dart' as _i12; +import 'package:camera_android_camerax/src/live_data.dart' as _i3; +import 'package:camera_android_camerax/src/observer.dart' as _i13; +import 'package:camera_android_camerax/src/preview.dart' as _i14; import 'package:camera_android_camerax/src/process_camera_provider.dart' - as _i13; -import 'package:camera_android_camerax/src/use_case.dart' as _i14; + as _i15; +import 'package:camera_android_camerax/src/use_case.dart' as _i16; import 'package:flutter/foundation.dart' as _i8; import 'package:flutter/services.dart' as _i7; import 'package:flutter/widgets.dart' as _i6; import 'package:mockito/mockito.dart' as _i1; +import 'test_camerax_library.g.dart' as _i17; + // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values // ignore_for_file: avoid_setters_without_getters @@ -41,9 +45,8 @@ class _FakeCameraInfo_0 extends _i1.SmartFake implements _i2.CameraInfo { ); } -class _FakeLiveCameraState_1 extends _i1.SmartFake - implements _i3.LiveCameraState { - _FakeLiveCameraState_1( +class _FakeLiveData_1 extends _i1.SmartFake implements _i3.LiveData { + _FakeLiveData_1( Object parent, Invocation parentInvocation, ) : super( @@ -162,13 +165,14 @@ class MockCameraInfo extends _i1.Mock implements _i2.CameraInfo { returnValueForMissingStub: _i9.Future.value(0), ) as _i9.Future); @override - _i9.Future<_i3.LiveCameraState> getLiveCameraState() => (super.noSuchMethod( + _i9.Future<_i3.LiveData<_i10.CameraState>> getLiveCameraState() => + (super.noSuchMethod( Invocation.method( #getLiveCameraState, [], ), - returnValue: - _i9.Future<_i3.LiveCameraState>.value(_FakeLiveCameraState_1( + returnValue: _i9.Future<_i3.LiveData<_i10.CameraState>>.value( + _FakeLiveData_1<_i10.CameraState>( this, Invocation.method( #getLiveCameraState, @@ -176,20 +180,21 @@ class MockCameraInfo extends _i1.Mock implements _i2.CameraInfo { ), )), returnValueForMissingStub: - _i9.Future<_i3.LiveCameraState>.value(_FakeLiveCameraState_1( + _i9.Future<_i3.LiveData<_i10.CameraState>>.value( + _FakeLiveData_1<_i10.CameraState>( this, Invocation.method( #getLiveCameraState, [], ), )), - ) as _i9.Future<_i3.LiveCameraState>); + ) as _i9.Future<_i3.LiveData<_i10.CameraState>>); } /// A class which mocks [CameraSelector]. /// /// See the documentation for Mockito's code generation for more information. -class MockCameraSelector extends _i1.Mock implements _i10.CameraSelector { +class MockCameraSelector extends _i1.Mock implements _i11.CameraSelector { @override _i9.Future> filter(List<_i2.CameraInfo>? cameraInfos) => (super.noSuchMethod( @@ -206,7 +211,7 @@ class MockCameraSelector extends _i1.Mock implements _i10.CameraSelector { /// A class which mocks [ImageCapture]. /// /// See the documentation for Mockito's code generation for more information. -class MockImageCapture extends _i1.Mock implements _i11.ImageCapture { +class MockImageCapture extends _i1.Mock implements _i12.ImageCapture { @override _i9.Future setFlashMode(int? newFlashMode) => (super.noSuchMethod( Invocation.method( @@ -227,15 +232,16 @@ class MockImageCapture extends _i1.Mock implements _i11.ImageCapture { ) as _i9.Future); } -/// A class which mocks [LiveCameraState]. +/// A class which mocks [LiveData]. /// /// See the documentation for Mockito's code generation for more information. -class MockLiveCameraState extends _i1.Mock implements _i3.LiveCameraState { +class MockLiveData extends _i1.Mock implements _i3.LiveData<_i10.CameraState> { @override - _i9.Future addObserver() => (super.noSuchMethod( + _i9.Future observe(_i13.Observer<_i10.CameraState>? observer) => + (super.noSuchMethod( Invocation.method( - #addObserver, - [], + #observe, + [observer], ), returnValue: _i9.Future.value(), returnValueForMissingStub: _i9.Future.value(), @@ -249,12 +255,33 @@ class MockLiveCameraState extends _i1.Mock implements _i3.LiveCameraState { returnValue: _i9.Future.value(), returnValueForMissingStub: _i9.Future.value(), ) as _i9.Future); + @override + _i3.LiveData cast() => (super.noSuchMethod( + Invocation.method( + #cast, + [], + ), + returnValue: _FakeLiveData_1( + this, + Invocation.method( + #cast, + [], + ), + ), + returnValueForMissingStub: _FakeLiveData_1( + this, + Invocation.method( + #cast, + [], + ), + ), + ) as _i3.LiveData); } /// A class which mocks [Preview]. /// /// See the documentation for Mockito's code generation for more information. -class MockPreview extends _i1.Mock implements _i12.Preview { +class MockPreview extends _i1.Mock implements _i14.Preview { @override _i9.Future setSurfaceProvider() => (super.noSuchMethod( Invocation.method( @@ -300,7 +327,7 @@ class MockPreview extends _i1.Mock implements _i12.Preview { /// /// See the documentation for Mockito's code generation for more information. class MockProcessCameraProvider extends _i1.Mock - implements _i13.ProcessCameraProvider { + implements _i15.ProcessCameraProvider { @override _i9.Future> getAvailableCameraInfos() => (super.noSuchMethod( @@ -314,8 +341,8 @@ class MockProcessCameraProvider extends _i1.Mock ) as _i9.Future>); @override _i9.Future<_i5.Camera> bindToLifecycle( - _i10.CameraSelector? cameraSelector, - List<_i14.UseCase>? useCases, + _i11.CameraSelector? cameraSelector, + List<_i16.UseCase>? useCases, ) => (super.noSuchMethod( Invocation.method( @@ -347,7 +374,7 @@ class MockProcessCameraProvider extends _i1.Mock )), ) as _i9.Future<_i5.Camera>); @override - _i9.Future isBound(_i14.UseCase? useCase) => (super.noSuchMethod( + _i9.Future isBound(_i16.UseCase? useCase) => (super.noSuchMethod( Invocation.method( #isBound, [useCase], @@ -356,7 +383,7 @@ class MockProcessCameraProvider extends _i1.Mock returnValueForMissingStub: _i9.Future.value(false), ) as _i9.Future); @override - void unbind(List<_i14.UseCase>? useCases) => super.noSuchMethod( + void unbind(List<_i16.UseCase>? useCases) => super.noSuchMethod( Invocation.method( #unbind, [useCases], @@ -373,6 +400,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 _i17.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. @@ -420,7 +462,7 @@ class MockBuildContext extends _i1.Mock implements _i6.BuildContext { ), ) as _i6.InheritedWidget); @override - void visitAncestorElements(_i6.ConditionalElementVisitor? visitor) => + void visitAncestorElements(bool Function(_i6.Element)? visitor) => super.noSuchMethod( Invocation.method( #visitAncestorElements, diff --git a/packages/camera/camera_android_camerax/test/camera_state_error_test.dart b/packages/camera/camera_android_camerax/test/camera_state_error_test.dart index 8df0ed50d61e..3d7d6ba0794a 100644 --- a/packages/camera/camera_android_camerax/test/camera_state_error_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_state_error_test.dart @@ -17,13 +17,12 @@ import 'test_camerax_library.g.dart'; // TODO(bparrishMines): Import generated pigeon files (the one in lib and test) // TODO(bparrishMines): Run build runner -@GenerateMocks([TestCameraStateErrorHostApi, TestInstanceManagerHostApi]) +@GenerateMocks([TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); group('CameraStateError', () { tearDown(() { - TestCameraStateErrorHostApi.setup(null); TestInstanceManagerHostApi.setup(null); }); diff --git a/packages/camera/camera_android_camerax/test/camera_state_error_test.mocks.dart b/packages/camera/camera_android_camerax/test/camera_state_error_test.mocks.dart index d84b67c9fff7..0590cd5b44d7 100644 --- a/packages/camera/camera_android_camerax/test/camera_state_error_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/camera_state_error_test.mocks.dart @@ -1,5 +1,5 @@ // Mocks generated by Mockito 5.4.0 from annotations -// in camera_android_camerax/test/camera_state_error_test.gen_api_impls.dart. +// in camera_android_camerax/test/camera_state_error_test.dart. // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes @@ -18,16 +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 [TestCameraStateErrorHostApi]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockTestCameraStateErrorHostApi extends _i1.Mock - implements _i2.TestCameraStateErrorHostApi { - MockTestCameraStateErrorHostApi() { - _i1.throwOnMissingStub(this); - } -} - /// 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/camera_state_test.mocks.dart b/packages/camera/camera_android_camerax/test/camera_state_test.mocks.dart index 62dda5d52c03..347e2b1e92d7 100644 --- a/packages/camera/camera_android_camerax/test/camera_state_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/camera_state_test.mocks.dart @@ -1,5 +1,5 @@ // Mocks generated by Mockito 5.4.0 from annotations -// in camera_android_camerax/test/camera_state_test.gen_api_impls.dart. +// in camera_android_camerax/test/camera_state_test.dart. // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes diff --git a/packages/camera/camera_android_camerax/test/live_data_test.mocks.dart b/packages/camera/camera_android_camerax/test/live_data_test.mocks.dart index 6970fbdbfdd5..b07dbc0d1657 100644 --- a/packages/camera/camera_android_camerax/test/live_data_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/live_data_test.mocks.dart @@ -1,5 +1,5 @@ // Mocks generated by Mockito 5.4.0 from annotations -// in camera_android_camerax/test/live_data_test.gen_api_impls.dart. +// in camera_android_camerax/test/live_data_test.dart. // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes @@ -50,6 +50,21 @@ class MockTestLiveDataHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override + void cast( + int? oldIdentifier, + int? newIdentifier, + ) => + super.noSuchMethod( + Invocation.method( + #cast, + [ + oldIdentifier, + newIdentifier, + ], + ), + returnValueForMissingStub: null, + ); } /// A class which mocks [TestInstanceManagerHostApi]. diff --git a/packages/camera/camera_android_camerax/test/observer_test.mocks.dart b/packages/camera/camera_android_camerax/test/observer_test.mocks.dart index ac8d4934cc04..9880bde0ae9a 100644 --- a/packages/camera/camera_android_camerax/test/observer_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/observer_test.mocks.dart @@ -1,5 +1,5 @@ // Mocks generated by Mockito 5.4.0 from annotations -// in camera_android_camerax/test/observer_test.gen_api_impls.dart. +// in camera_android_camerax/test/observer_test.dart. // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes 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 1bff8614700f..39a4e99dba74 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 @@ -759,13 +759,6 @@ abstract class TestImageCaptureHostApi { } } -/// Host API for `CameraState`. -/// -/// 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. -/// -/// See . abstract class TestCameraStateHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; @@ -775,19 +768,11 @@ abstract class TestCameraStateHostApi { {BinaryMessenger? binaryMessenger}) {} } -/// Host API for `Observer`. -/// -/// 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. -/// -/// See . abstract class TestObserverHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); - /// Create a new native instance and add it to the `InstanceManager`. void create(int identifier); static void setup(TestObserverHostApi? api, @@ -817,38 +802,13 @@ abstract class TestObserverHostApi { } } -/// Host API for `CameraStateError`. -/// -/// 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. -/// -/// See . -abstract class TestCameraStateErrorHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); - - static void setup(TestCameraStateErrorHostApi? api, - {BinaryMessenger? binaryMessenger}) {} -} - -/// Host API for `LiveData`. -/// -/// 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. -/// -/// See . abstract class TestLiveDataHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); - /// Handles Dart method `LiveData.observe`. void observe(int identifier, int observerIdentifier); - /// Handles Dart method `LiveData.removeObservers`. void removeObservers(int identifier); void cast(int oldIdentifier, int newIdentifier); From 0d4b0210342d29eca2f5cef6f9017ff76ef10063 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 18 Apr 2023 11:08:30 -0700 Subject: [PATCH 46/71] Fix tests, format --- .../camerax/GeneratedCameraXLibrary.java | 389 +++++++++++------- .../camerax/LiveDataFlutterApiWrapper.java | 5 +- .../plugins/camerax/LiveDataHostApiImpl.java | 17 +- .../plugins/camerax/ObserverHostApiImpl.java | 13 +- .../plugins/camerax/CameraStateTest.java | 6 +- .../flutter/plugins/camerax/LiveDataTest.java | 1 + .../flutter/plugins/camerax/ObserverTest.java | 4 +- .../example/lib/main.dart | 7 - .../lib/src/camerax_library.g.dart | 156 ++++--- .../lib/src/instance_manager.dart | 1 + .../lib/src/live_data.dart | 12 +- .../lib/src/observer.dart | 8 +- .../camera_android_camerax/pubspec.yaml | 4 +- .../test/android_camera_camerax_test.dart | 6 +- .../test/camera_info_test.dart | 23 +- .../test/camera_info_test.mocks.dart | 62 ++- .../test/camera_state_error_test.dart | 32 +- .../test/camera_state_test.dart | 50 +-- .../test/live_data_test.dart | 79 ++-- .../test/observer_test.dart | 62 ++- 20 files changed, 578 insertions(+), 359 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 99aebf609d10..8b593ae17856 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; } @@ -63,7 +60,7 @@ protected static ArrayList wrapError(@NonNull Throwable exception) { /** * The states the camera can be in. * - * See https://developer.android.com/reference/androidx/camera/core/CameraState.Type. + *

See https://developer.android.com/reference/androidx/camera/core/CameraState.Type. */ public enum CameraStateType { CLOSED(0), @@ -145,9 +142,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; } } @@ -285,7 +286,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(); @@ -293,8 +294,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<>( @@ -306,8 +311,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; } @@ -328,7 +332,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 = @@ -343,8 +349,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; } @@ -364,7 +369,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); @@ -373,6 +378,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -385,22 +391,26 @@ 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); - @NonNull + @NonNull Long getLiveCameraState(@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) -> { @@ -408,10 +418,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; } @@ -424,7 +435,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -432,10 +445,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getLiveCameraState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getLiveCameraState( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -455,7 +469,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); @@ -464,6 +478,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -478,15 +493,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<>( @@ -499,10 +518,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; } @@ -524,10 +544,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; } @@ -547,7 +569,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); @@ -556,7 +578,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()); @@ -570,13 +594,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); @@ -587,12 +614,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) -> { @@ -619,7 +652,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) -> { @@ -627,10 +662,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; } @@ -643,7 +679,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) -> { @@ -653,10 +691,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; } @@ -669,7 +712,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) -> { @@ -678,10 +723,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; } @@ -694,7 +741,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) -> { @@ -703,10 +752,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; } @@ -719,7 +768,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) -> { @@ -729,8 +780,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; } @@ -750,7 +800,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); @@ -759,10 +809,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)); @@ -771,14 +824,14 @@ public void create(@NonNull Long identifierArg, @NonNull Reply callback) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraHostApi { - @NonNull + @NonNull Long getCameraInfo(@NonNull Long identifier); /** The codec used by CameraHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ + /** Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHostApi api) { { BasicMessageChannel channel = @@ -791,10 +844,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHost ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -814,7 +867,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); @@ -823,6 +876,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -862,9 +916,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(); @@ -872,12 +928,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) -> { @@ -906,7 +968,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) -> { @@ -915,10 +979,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; } @@ -931,7 +996,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) -> { @@ -939,8 +1006,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; } @@ -960,7 +1026,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); @@ -969,18 +1035,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)); @@ -1021,21 +1094,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 = @@ -1050,10 +1126,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; } @@ -1066,7 +1144,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) -> { @@ -1074,10 +1154,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; } @@ -1090,7 +1171,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) -> { @@ -1098,8 +1181,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; } @@ -1120,10 +1202,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; } @@ -1165,7 +1248,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); @@ -1175,7 +1261,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 = @@ -1190,10 +1279,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; } @@ -1215,10 +1306,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; } @@ -1251,7 +1343,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); @@ -1266,9 +1359,10 @@ public interface CameraStateHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraStateHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraStateHostApi api) { - } + /** + * Sets up an instance of `CameraStateHostApi` to handle messages through the `binaryMessenger`. + */ + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraStateHostApi api) {} } private static class CameraStateFlutterApiCodec extends StandardMessageCodec { @@ -1305,7 +1399,7 @@ public CameraStateFlutterApi(@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); @@ -1314,7 +1408,12 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return CameraStateFlutterApiCodec.INSTANCE; } - public void create(@NonNull Long identifierArg, @NonNull CameraStateTypeData typeArg, @Nullable Long errorIdentifierArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull CameraStateTypeData typeArg, + @Nullable Long errorIdentifierArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraStateFlutterApi.create", getCodec()); @@ -1332,7 +1431,9 @@ public interface ObserverHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `ObserverHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ObserverHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHostApi api) { { BasicMessageChannel channel = @@ -1347,8 +1448,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHo try { api.create((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1368,7 +1468,7 @@ public ObserverFlutterApi(@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); @@ -1377,7 +1477,11 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void onChanged(@NonNull Long identifierArg, @NonNull Long valueIdentifierArg, @NonNull Reply callback) { + + public void onChanged( + @NonNull Long identifierArg, + @NonNull Long valueIdentifierArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ObserverFlutterApi.onChanged", getCodec()); @@ -1394,7 +1498,7 @@ public CameraStateErrorFlutterApi(@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); @@ -1403,7 +1507,12 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Long codeArg, @NonNull String descriptionArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull Long codeArg, + @NonNull String descriptionArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraStateErrorFlutterApi.create", getCodec()); @@ -1425,7 +1534,9 @@ public interface LiveDataHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `LiveDataHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `LiveDataHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHostApi api) { { BasicMessageChannel channel = @@ -1439,10 +1550,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo Number identifierArg = (Number) args.get(0); Number observerIdentifierArg = (Number) args.get(1); try { - api.observe((identifierArg == null) ? null : identifierArg.longValue(), (observerIdentifierArg == null) ? null : observerIdentifierArg.longValue()); + api.observe( + (identifierArg == null) ? null : identifierArg.longValue(), + (observerIdentifierArg == null) ? null : observerIdentifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1465,8 +1577,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo try { api.removeObservers((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1488,10 +1599,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo Number oldIdentifierArg = (Number) args.get(0); Number newIdentifierArg = (Number) args.get(1); try { - api.cast((oldIdentifierArg == null) ? null : oldIdentifierArg.longValue(), (newIdentifierArg == null) ? null : newIdentifierArg.longValue()); + api.cast( + (oldIdentifierArg == null) ? null : oldIdentifierArg.longValue(), + (newIdentifierArg == null) ? null : newIdentifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1511,7 +1623,7 @@ public LiveDataFlutterApi(@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); @@ -1520,6 +1632,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/LiveDataFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java index 277026a2f886..8ae072cfebc6 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java @@ -35,8 +35,9 @@ public LiveDataFlutterApiWrapper( } /** - * Stores the {@link LiveData} instance and notifies Dart to create and store a new {@link LiveData} instance - * that is attached to this one. If {@code instance} has already been added, this method does nothing. + * Stores the {@link LiveData} instance and notifies Dart to create and store a new {@link + * LiveData} instance that is attached to this one. If {@code instance} has already been added, + * this method does nothing. */ public void create( @NonNull LiveData instance, @NonNull LiveDataFlutterApi.Reply callback) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java index dda52d4f615f..198e52656926 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java @@ -52,22 +52,19 @@ public void observe(@NonNull Long identifier, @NonNull Long observerIdentifier) Objects.requireNonNull(instanceManager.getInstance(observerIdentifier))); } - /** - * Removes all observers of this instance that are tied to the {@link lifecycleOwner}. - */ + /** Removes all observers of this instance that are tied to the {@link lifecycleOwner}. */ @Override public void removeObservers(@NonNull Long identifier) { getLiveDataInstance(identifier).removeObservers(lifecycleOwner); } /** - * Re-creates an instance of {@link LiveData} that has been created on the Java side, - * stored in the Dart {@link InstanceManager} as a generic type, and casted to a - * specific type on the Dart side. - * - *

This method is necessary in order for the Dart wrapped version of this class - * to be generic since the type of {@link LiveData} created on the Java side is - * unknown to the Dart side. + * Re-creates an instance of {@link LiveData} that has been created on the Java side, stored in + * the Dart {@link InstanceManager} as a generic type, and casted to a specific type on the Dart + * side. + * + *

This method is necessary in order for the Dart wrapped version of this class to be generic + * since the type of {@link LiveData} created on the Java side is unknown to the Dart side. */ @Override public void cast(Long identifier, Long newInstanceIdentifier) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java index 66005fc57de4..7f6e1de08950 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java @@ -37,16 +37,17 @@ public ObserverImpl create( public static class ObserverImpl implements Observer { private ObserverFlutterApiWrapper observerFlutterApiWrapper; - /** Constructs an instance of {@link Observer} that passes arguments of callbacks methods to Dart. */ + /** + * Constructs an instance of {@link Observer} that passes arguments of callbacks methods to + * Dart. + */ public ObserverImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { super(); observerFlutterApiWrapper = new ObserverFlutterApiWrapper(binaryMessenger, instanceManager); } - /** - * Method called when the data in observance is changed to {@code value}. - */ + /** Method called when the data in observance is changed to {@code value}. */ @Override public void onChanged(T value) { observerFlutterApiWrapper.onChanged(this, value, reply -> {}); @@ -92,9 +93,7 @@ public ObserverHostApiImpl( this.observerProxy = observerProxy; } - /** - * Creates an {@link Observer} instance with the specified observer. - */ + /** Creates an {@link Observer} instance with the specified observer. */ @Override public void create(@NonNull Long identifier) { instanceManager.addDartCreatedInstance( diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java index c99145ebc14d..203682a49103 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java @@ -56,9 +56,9 @@ public void flutterApiCreate_makesCallToDartToCreateInstance() { flutterApi.create(mockCameraState, type, mockError, reply -> {}); final long instanceIdentifier = - Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockCameraState)); + Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockCameraState)); final ArgumentCaptor cameraStateTypeDataCaptor = - ArgumentCaptor.forClass(CameraStateTypeData.class); + ArgumentCaptor.forClass(CameraStateTypeData.class); verify(mockFlutterApi) .create( @@ -66,7 +66,7 @@ public void flutterApiCreate_makesCallToDartToCreateInstance() { cameraStateTypeDataCaptor.capture(), eq(Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockError))), any()); - + assertEquals(cameraStateTypeDataCaptor.getValue().getValue(), CameraStateType.OPEN); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java index f22918f98fdb..f7c20bbcb979 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -30,6 +30,7 @@ public class LiveDataTest { @SuppressWarnings("rawtypes") @Mock public LiveData mockLiveData; + @Mock public BinaryMessenger mockBinaryMessenger; @Mock public LiveDataFlutterApi mockFlutterApi; diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java index c9f97b4b645b..626f21ea2bfc 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java @@ -28,6 +28,7 @@ public class ObserverTest { @SuppressWarnings("rawtypes") @Mock public ObserverHostApiImpl.ObserverImpl mockObserver; + @Mock public BinaryMessenger mockBinaryMessenger; @Mock public ObserverFlutterApi mockFlutterApi; @Mock public ObserverHostApiImpl.ObserverProxy mockProxy; @@ -76,6 +77,7 @@ public void onChanged_makesCallToDartCallback() { instance.onChanged(mockCameraState); verify(mockFlutterApi) - .onChanged(eq(instanceIdentifier), eq(Objects.requireNonNull(mockCameraStateIdentifier)), any()); + .onChanged( + eq(instanceIdentifier), eq(Objects.requireNonNull(mockCameraStateIdentifier)), any()); } } diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index 918e768b85e8..ace84ec186ca 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -592,13 +592,6 @@ class _CameraExampleHomeState extends State return; } - final CameraController cameraController = controller!; - - final Offset offset = Offset( - details.localPosition.dx / constraints.maxWidth, - details.localPosition.dy / constraints.maxHeight, - ); - // TODO(camsim99): Add functionality back here for setting exposure and // focus point. } 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 dd6f82e3c3c7..2541da67fbc5 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 @@ -112,8 +112,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', @@ -169,7 +168,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, @@ -179,7 +179,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, @@ -262,7 +262,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, @@ -272,7 +273,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, @@ -299,8 +300,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', @@ -317,12 +318,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', @@ -350,7 +352,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, @@ -360,7 +363,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, @@ -388,8 +391,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', @@ -413,7 +415,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?; @@ -438,12 +441,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', @@ -470,7 +478,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', @@ -496,8 +505,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', @@ -542,7 +551,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, @@ -552,7 +562,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, @@ -618,7 +628,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, @@ -646,7 +656,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); @@ -664,9 +674,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?; @@ -686,12 +698,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', @@ -710,10 +725,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', @@ -738,17 +753,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, @@ -767,7 +784,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, @@ -798,9 +815,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); @@ -818,12 +835,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', @@ -871,8 +890,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', @@ -932,7 +950,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); @@ -950,12 +968,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', @@ -976,8 +996,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', @@ -1031,7 +1051,6 @@ class CameraStateHostApi { final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = StandardMessageCodec(); - } class _CameraStateFlutterApiCodec extends StandardMessageCodec { @@ -1049,7 +1068,7 @@ class _CameraStateFlutterApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraStateTypeData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1062,7 +1081,8 @@ abstract class CameraStateFlutterApi { void create(int identifier, CameraStateTypeData type, int? errorIdentifier); - static void setup(CameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraStateFlutterApi.create', codec, @@ -1072,12 +1092,13 @@ abstract class CameraStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.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.CameraStateFlutterApi.create was null, expected non-null int.'); - final CameraStateTypeData? arg_type = (args[1] as CameraStateTypeData?); + final CameraStateTypeData? arg_type = + (args[1] as CameraStateTypeData?); assert(arg_type != null, 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null, expected non-null CameraStateTypeData.'); final int? arg_errorIdentifier = (args[2] as int?); @@ -1127,7 +1148,8 @@ abstract class ObserverFlutterApi { void onChanged(int identifier, int valueIdentifier); - static void setup(ObserverFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ObserverFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ObserverFlutterApi.onChanged', codec, @@ -1137,7 +1159,7 @@ abstract class ObserverFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ObserverFlutterApi.onChanged was null.'); + 'Argument for dev.flutter.pigeon.ObserverFlutterApi.onChanged was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1158,7 +1180,8 @@ abstract class CameraStateErrorFlutterApi { void create(int identifier, int code, String description); - static void setup(CameraStateErrorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraStateErrorFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraStateErrorFlutterApi.create', codec, @@ -1168,7 +1191,7 @@ abstract class CameraStateErrorFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1202,7 +1225,8 @@ class LiveDataHostApi { 'dev.flutter.pigeon.LiveDataHostApi.observe', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_observerIdentifier]) as List?; + await channel.send([arg_identifier, arg_observerIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1246,7 +1270,8 @@ class LiveDataHostApi { 'dev.flutter.pigeon.LiveDataHostApi.cast', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_oldIdentifier, arg_newIdentifier]) as List?; + await channel.send([arg_oldIdentifier, arg_newIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1269,7 +1294,8 @@ abstract class LiveDataFlutterApi { void create(int identifier); - static void setup(LiveDataFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(LiveDataFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveDataFlutterApi.create', codec, @@ -1279,7 +1305,7 @@ abstract class LiveDataFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.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/lib/src/instance_manager.dart b/packages/camera/camera_android_camerax/lib/src/instance_manager.dart index b44ea272927e..8f0921878de1 100644 --- a/packages/camera/camera_android_camerax/lib/src/instance_manager.dart +++ b/packages/camera/camera_android_camerax/lib/src/instance_manager.dart @@ -127,6 +127,7 @@ class InstanceManager { // This cast is safe since it matches the argument type for // _addInstanceWithIdentifier, which is the only place _copyCallbacks // is populated. + // ignore: avoid_dynamic_calls final T copy = copyCallback(strongInstance) as T; _identifiers[copy] = identifier; _weakInstances[identifier] = WeakReference(copy); diff --git a/packages/camera/camera_android_camerax/lib/src/live_data.dart b/packages/camera/camera_android_camerax/lib/src/live_data.dart index 1917cfd172eb..c6dadb2902fc 100644 --- a/packages/camera/camera_android_camerax/lib/src/live_data.dart +++ b/packages/camera/camera_android_camerax/lib/src/live_data.dart @@ -73,8 +73,8 @@ class _LiveDataHostApiImpl extends LiveDataHostApi { /// Adds specified [Observer] to the list of observers of the specified /// [LiveData] instance. Future observeFromInstances( - LiveData instance, - Observer observer, + LiveData instance, + Observer observer, ) { return observe( instanceManager.getIdentifier(instance)!, @@ -84,7 +84,7 @@ class _LiveDataHostApiImpl extends LiveDataHostApi { /// Removes all observers of the specified [LiveData] instance. Future removeObserversFromInstances( - LiveData instance, + LiveData instance, ) { return removeObservers( instanceManager.getIdentifier(instance)!, @@ -99,7 +99,7 @@ class _LiveDataHostApiImpl extends LiveDataHostApi { return cast( instanceManager.getIdentifier(instance)!, instanceManager.addDartCreatedInstance(newInstance, - onCopy: (LiveData original) => LiveData.detached( + onCopy: (LiveData original) => LiveData.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager, ))); @@ -133,12 +133,12 @@ class LiveDataFlutterApiImpl implements LiveDataFlutterApi { int identifier, ) { instanceManager.addHostCreatedInstance( - LiveData.detached( + LiveData.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager, ), identifier, - onCopy: (LiveData original) => LiveData.detached( + onCopy: (LiveData original) => LiveData.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager, ), diff --git a/packages/camera/camera_android_camerax/lib/src/observer.dart b/packages/camera/camera_android_camerax/lib/src/observer.dart index 4a231dcd639b..c8fbf5751ec9 100644 --- a/packages/camera/camera_android_camerax/lib/src/observer.dart +++ b/packages/camera/camera_android_camerax/lib/src/observer.dart @@ -33,14 +33,12 @@ class Observer extends JavaObject { /// Constructs a [Observer] that is not automatically attached to a native object. Observer.detached( - {BinaryMessenger? binaryMessenger, - InstanceManager? instanceManager, + {super.binaryMessenger, + super.instanceManager, required void Function(Object value) onChanged}) : _api = _ObserverHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager), - super.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager) { + super.detached() { this.onChanged = (Object value) { assert(value is T); onChanged(value); diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index fac6ddceec06..a6ca8a191e20 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -18,18 +18,18 @@ flutter: dartPluginClass: AndroidCameraCameraX dependencies: + async: ^2.5.0 camera_platform_interface: ^2.2.0 flutter: sdk: flutter integration_test: sdk: flutter + meta: ^1.7.0 stream_transform: ^2.1.0 dev_dependencies: - async: ^2.5.0 build_runner: ^2.2.0 flutter_test: sdk: flutter - meta: ^1.7.0 mockito: ^5.3.0 pigeon: ^9.0.0 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 11f69a0067d6..937d855ef581 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 @@ -46,8 +46,8 @@ void main() { TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); - Future testCameraClosingObserver( - AndroidCameraCameraX camera, int cameraId, Observer observer) async { + Future testCameraClosingObserver(AndroidCameraCameraX camera, + int cameraId, Observer observer) async { const String testErrorDescription = 'Test error description'; final Stream cameraClosingEventStream = camera.onCameraClosing(cameraId); @@ -483,7 +483,7 @@ void main() { camera, 78, verify(mockLiveCameraState.observe(captureAny)).captured.single - as Observer), + as Observer), isTrue); }); diff --git a/packages/camera/camera_android_camerax/test/camera_info_test.dart b/packages/camera/camera_android_camerax/test/camera_info_test.dart index f9a9f1fa665e..96ea829df2c2 100644 --- a/packages/camera/camera_android_camerax/test/camera_info_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_info_test.dart @@ -3,9 +3,9 @@ // found in the LICENSE file. import 'package:camera_android_camerax/src/camera_info.dart'; +import 'package:camera_android_camerax/src/camera_state.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; -import 'package:camera_android_camerax/src/live_camera_state.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; @@ -23,7 +23,8 @@ void main() { group('CameraInfo', () { tearDown(() => TestCameraInfoHostApi.setup(null)); - test('getSensorRotationDegreesTest', () async { + test('getSensorRotation makes call to retrieve expected sensor degrees', + () async { final MockTestCameraInfoHostApi mockApi = MockTestCameraInfoHostApi(); TestCameraInfoHostApi.setup(mockApi); @@ -59,9 +60,10 @@ void main() { instanceManager: instanceManager, ); const int cameraIdentifier = 55; - final LiveCameraState liveCameraState = LiveCameraState.detached( - instanceManager: instanceManager, - ); + final MockLiveData mockLiveCameraState = + MockLiveData(); + final MockLiveData castedMockLiveCameraState = + MockLiveData(); const int liveCameraStateIdentifier = 73; instanceManager.addHostCreatedInstance( cameraInfo, @@ -69,19 +71,22 @@ void main() { onCopy: (_) => CameraInfo.detached(), ); instanceManager.addHostCreatedInstance( - liveCameraState, + mockLiveCameraState, liveCameraStateIdentifier, - onCopy: (_) => LiveCameraState.detached(), + onCopy: (_) => MockLiveData(), ); when(mockApi.getLiveCameraState(cameraIdentifier)) .thenReturn(liveCameraStateIdentifier); + when(mockLiveCameraState.cast()) + .thenReturn(castedMockLiveCameraState); - expect(await cameraInfo.getLiveCameraState(), equals(liveCameraState)); + expect(await cameraInfo.getLiveCameraState(), + equals(castedMockLiveCameraState)); verify(mockApi.getLiveCameraState(cameraIdentifier)); }); - test('flutterApiCreateTest', () { + test('flutterApi creates CameraInfo instance with expected identifier', () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); 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 4461e9d9d743..a41843e13a71 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 @@ -3,9 +3,13 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:camera_android_camerax/src/live_data.dart' as _i2; +import 'package:camera_android_camerax/src/observer.dart' as _i4; import 'package:mockito/mockito.dart' as _i1; -import 'test_camerax_library.g.dart' as _i2; +import 'test_camerax_library.g.dart' as _i5; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -18,11 +22,63 @@ import 'test_camerax_library.g.dart' as _i2; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class +class _FakeLiveData_0 extends _i1.SmartFake implements _i2.LiveData { + _FakeLiveData_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [LiveData]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockLiveData extends _i1.Mock implements _i2.LiveData { + MockLiveData() { + _i1.throwOnMissingStub(this); + } + + @override + _i3.Future observe(_i4.Observer? observer) => (super.noSuchMethod( + Invocation.method( + #observe, + [observer], + ), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) as _i3.Future); + @override + _i3.Future removeObservers() => (super.noSuchMethod( + Invocation.method( + #removeObservers, + [], + ), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) as _i3.Future); + @override + _i2.LiveData cast() => (super.noSuchMethod( + Invocation.method( + #cast, + [], + ), + returnValue: _FakeLiveData_0( + this, + Invocation.method( + #cast, + [], + ), + ), + ) as _i2.LiveData); +} + /// A class which mocks [TestCameraInfoHostApi]. /// /// See the documentation for Mockito's code generation for more information. class MockTestCameraInfoHostApi extends _i1.Mock - implements _i2.TestCameraInfoHostApi { + implements _i5.TestCameraInfoHostApi { MockTestCameraInfoHostApi() { _i1.throwOnMissingStub(this); } @@ -49,7 +105,7 @@ class MockTestCameraInfoHostApi extends _i1.Mock /// /// See the documentation for Mockito's code generation for more information. class MockTestInstanceManagerHostApi extends _i1.Mock - implements _i2.TestInstanceManagerHostApi { + implements _i5.TestInstanceManagerHostApi { MockTestInstanceManagerHostApi() { _i1.throwOnMissingStub(this); } diff --git a/packages/camera/camera_android_camerax/test/camera_state_error_test.dart b/packages/camera/camera_android_camerax/test/camera_state_error_test.dart index 3d7d6ba0794a..17ac0e67b47c 100644 --- a/packages/camera/camera_android_camerax/test/camera_state_error_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_state_error_test.dart @@ -2,21 +2,13 @@ // 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/camera_state_error.dart'; -import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; -import 'camera_state_error_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([TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -26,7 +18,9 @@ void main() { TestInstanceManagerHostApi.setup(null); }); - test('FlutterAPI create', () { + test( + 'FlutterAPI create makes call to create CameraStateError instance with expected identifier', + () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); @@ -36,17 +30,27 @@ void main() { ); const int instanceIdentifier = 0; + const int code = 23; + const String description = 'Test error description!'; api.create( instanceIdentifier, - 0, - 'testString', + code, + description, ); + // Test instance type. + final Object? instance = + instanceManager.getInstanceWithWeakReference(instanceIdentifier); expect( - instanceManager.getInstanceWithWeakReference(instanceIdentifier), + instance, isA(), ); + + // Test instance properties. + final CameraStateError cameraStateError = instance! as CameraStateError; + expect(cameraStateError.code, equals(code)); + expect(cameraStateError.description, equals(description)); }); }); } diff --git a/packages/camera/camera_android_camerax/test/camera_state_test.dart b/packages/camera/camera_android_camerax/test/camera_state_test.dart index e7b3a39d7f46..36a1fab2b9a8 100644 --- a/packages/camera/camera_android_camerax/test/camera_state_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_state_test.dart @@ -2,22 +2,15 @@ // 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/camera_state_error.dart'; import 'package:camera_android_camerax/src/camera_state.dart'; +import 'package:camera_android_camerax/src/camera_state_error.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; -import 'camera_state_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([TestCameraStateHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -28,7 +21,9 @@ void main() { TestInstanceManagerHostApi.setup(null); }); - test('FlutterAPI create', () { + test( + 'FlutterAPI create makes call to create CameraState instance with expected identifier', + () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); @@ -37,31 +32,40 @@ void main() { instanceManager: instanceManager, ); + // Create CameraStateError for CameraState instance. const int code = 23; - const String description = "test description"; - final int cameraStateIdentifier = instanceManager.addDartCreatedInstance( - CameraStateError.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, - instanceManager: instanceManager, - code: code, - description: description, - ), onCopy: (_) { + const String description = 'test description'; + final CameraStateError cameraStateError = CameraStateError.detached( + instanceManager: instanceManager, + code: code, + description: description, + ); + final int cameraStateErrorIdentifier = + instanceManager.addDartCreatedInstance(cameraStateError, onCopy: (_) { return CameraStateError.detached(code: code, description: description); }); + // Create CameraState. const int instanceIdentifier = 46; - + const CameraStateType cameraStateType = CameraStateType.closed; api.create( instanceIdentifier, - CameraStateTypeData(value: CameraStateType.closed), - cameraStateIdentifier, + CameraStateTypeData(value: cameraStateType), + cameraStateErrorIdentifier, ); + // Test instance type. + final Object? instance = + instanceManager.getInstanceWithWeakReference(instanceIdentifier); expect( instanceManager.getInstanceWithWeakReference(instanceIdentifier), isA(), ); + + // Test instance properties. + final CameraState cameraState = instance! as CameraState; + expect(cameraState.type, equals(cameraStateType)); + expect(cameraState.error, equals(cameraStateError)); }); }); } diff --git a/packages/camera/camera_android_camerax/test/live_data_test.dart b/packages/camera/camera_android_camerax/test/live_data_test.dart index fe077f0d797f..aba713a424c8 100644 --- a/packages/camera/camera_android_camerax/test/live_data_test.dart +++ b/packages/camera/camera_android_camerax/test/live_data_test.dart @@ -2,22 +2,17 @@ // 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/camerax_library.g.dart'; +import 'package:camera_android_camerax/src/camera_state.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; import 'package:camera_android_camerax/src/live_data.dart'; import 'package:camera_android_camerax/src/observer.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; import 'live_data_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([TestLiveDataHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -28,7 +23,7 @@ void main() { TestInstanceManagerHostApi.setup(null); }); - test('observe', () async { + test('observe makes call to add observer to LiveData instance', () async { final MockTestLiveDataHostApi mockApi = MockTestLiveDataHostApi(); TestLiveDataHostApi.setup(mockApi); @@ -36,35 +31,29 @@ void main() { onWeakReferenceRemoved: (_) {}, ); - final LiveData instance = LiveData.detached( - binaryMessenger: null, + final LiveData instance = LiveData.detached( instanceManager: instanceManager, ); const int instanceIdentifier = 0; instanceManager.addHostCreatedInstance( instance, instanceIdentifier, - onCopy: (LiveData original) => LiveData.detached( - binaryMessenger: null, + onCopy: (LiveData original) => LiveData.detached( instanceManager: instanceManager, ), ); - final Observer observer = Observer.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, + final Observer observer = Observer.detached( instanceManager: instanceManager, - onChanged: (Observer instance, value) {}, + onChanged: (Object value) {}, ); const int observerIdentifier = 20; instanceManager.addHostCreatedInstance( observer, observerIdentifier, - onCopy: (_) => Observer.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, + onCopy: (_) => Observer.detached( instanceManager: instanceManager, - onChanged: (Observer instance, value) {}, + onChanged: (Object value) {}, ), ); @@ -78,7 +67,9 @@ void main() { )); }); - test('removeObservers', () async { + test( + 'removeObservers makes call to remove observers from LiveData instance', + () async { final MockTestLiveDataHostApi mockApi = MockTestLiveDataHostApi(); TestLiveDataHostApi.setup(mockApi); @@ -86,16 +77,14 @@ void main() { onWeakReferenceRemoved: (_) {}, ); - final LiveData instance = LiveData.detached( - binaryMessenger: null, + final LiveData instance = LiveData.detached( instanceManager: instanceManager, ); const int instanceIdentifier = 0; instanceManager.addHostCreatedInstance( instance, instanceIdentifier, - onCopy: (LiveData original) => LiveData.detached( - binaryMessenger: null, + onCopy: (LiveData original) => LiveData.detached( instanceManager: instanceManager, ), ); @@ -107,7 +96,39 @@ void main() { )); }); - test('FlutterAPI create', () { + test('cast makes call to create instance with expected type', () { + final MockTestLiveDataHostApi mockApi = MockTestLiveDataHostApi(); + TestLiveDataHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final LiveData instance = LiveData.detached( + instanceManager: instanceManager, + ); + const int instanceIdentifier = 27; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (LiveData original) => LiveData.detached( + instanceManager: instanceManager, + ), + ); + + instance.cast(); + + final int? newInstanceIdentifier = + verify(mockApi.cast(instanceIdentifier, captureAny)).captured.single + as int?; + expect( + instanceManager.getInstanceWithWeakReference(newInstanceIdentifier!), + isA>()); + }); + + test( + 'FlutterAPI create makes call to create LiveData instance with expected identifier', + () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); @@ -124,7 +145,7 @@ void main() { expect( instanceManager.getInstanceWithWeakReference(instanceIdentifier), - isA(), + isA>(), ); }); }); diff --git a/packages/camera/camera_android_camerax/test/observer_test.dart b/packages/camera/camera_android_camerax/test/observer_test.dart index e7d8e06f62a9..41c3eba5598c 100644 --- a/packages/camera/camera_android_camerax/test/observer_test.dart +++ b/packages/camera/camera_android_camerax/test/observer_test.dart @@ -2,22 +2,17 @@ // 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/camera_state.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; import 'package:camera_android_camerax/src/observer.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; import 'observer_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([TestObserverHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -28,7 +23,7 @@ void main() { TestInstanceManagerHostApi.setup(null); }); - test('HostApi create', () { + test('HostApi create makes call to create Observer instance', () { final MockTestObserverHostApi mockApi = MockTestObserverHostApi(); TestObserverHostApi.setup(mockApi); TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); @@ -37,9 +32,9 @@ void main() { onWeakReferenceRemoved: (_) {}, ); - final Observer instance = Observer( + final Observer instance = Observer( instanceManager: instanceManager, - onChanged: (Observer instance, value) {}, + onChanged: (Object value) {}, ); verify(mockApi.create( @@ -47,24 +42,35 @@ void main() { )); }); - test('onChanged', () { + test( + 'HostAPI create makes Observer instance that throws assertion error if onChanged receives unexpected parameter type', + () { + final MockTestObserverHostApi mockApi = MockTestObserverHostApi(); + TestObserverHostApi.setup(mockApi); + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + + final Observer cameraStateObserver = + Observer.detached(onChanged: (Object value) {}); + + expect( + () => cameraStateObserver.onChanged( + CameraState.detached(type: CameraStateType.pendingOpen)), + throwsAssertionError); + }); + + test( + 'FlutterAPI onChanged makes call with expected parameter to Observer instance onChanged callback', + () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); const int instanceIdentifier = 0; - late final List callbackParameters; + late final Object? callbackParameter; final Observer instance = Observer.detached( - onChanged: ( - Observer instance, - CameraState value, - ) { - callbackParameters = [ - instance, - value, - ]; + onChanged: (Object value) { + callbackParameter = value; }, - binaryMessenger: null, instanceManager: instanceManager, ); instanceManager.addHostCreatedInstance( @@ -73,7 +79,6 @@ void main() { onCopy: (Observer original) => Observer.detached( onChanged: original.onChanged, - binaryMessenger: null, instanceManager: instanceManager, ), ); @@ -82,11 +87,9 @@ void main() { instanceManager: instanceManager, ); - final CameraStateType cameraStateType = CameraStateType.closed; + const CameraStateType cameraStateType = CameraStateType.closed; final CameraState value = CameraState.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, instanceManager: instanceManager, type: cameraStateType, ); @@ -95,8 +98,6 @@ void main() { value, valueIdentifier, onCopy: (_) => CameraState.detached( - // TODO(bparrishMines): This should include the missing params. - binaryMessenger: null, instanceManager: instanceManager, type: cameraStateType, ), @@ -107,10 +108,7 @@ void main() { valueIdentifier, ); - expect(callbackParameters, [ - instance, - value, - ]); + expect(callbackParameter, value); }); }); } From 540ee98bd5767a53a4cdf351306ee4c891583045 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 18 Apr 2023 11:25:37 -0700 Subject: [PATCH 47/71] Fix test --- .../test/camera_info_test.dart | 7 ++- .../test/camera_info_test.mocks.dart | 62 ++++++++++++++++++- 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/packages/camera/camera_android_camerax/test/camera_info_test.dart b/packages/camera/camera_android_camerax/test/camera_info_test.dart index 96ea829df2c2..77f622e5b061 100644 --- a/packages/camera/camera_android_camerax/test/camera_info_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_info_test.dart @@ -6,6 +6,7 @@ import 'package:camera_android_camerax/src/camera_info.dart'; import 'package:camera_android_camerax/src/camera_state.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:camera_android_camerax/src/live_data.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; @@ -13,7 +14,11 @@ import 'package:mockito/mockito.dart'; import 'camera_info_test.mocks.dart'; import 'test_camerax_library.g.dart'; -@GenerateMocks([TestCameraInfoHostApi, TestInstanceManagerHostApi]) +@GenerateMocks([ + LiveData, + TestCameraInfoHostApi, + TestInstanceManagerHostApi +]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); 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 4461e9d9d743..a41843e13a71 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 @@ -3,9 +3,13 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:camera_android_camerax/src/live_data.dart' as _i2; +import 'package:camera_android_camerax/src/observer.dart' as _i4; import 'package:mockito/mockito.dart' as _i1; -import 'test_camerax_library.g.dart' as _i2; +import 'test_camerax_library.g.dart' as _i5; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -18,11 +22,63 @@ import 'test_camerax_library.g.dart' as _i2; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class +class _FakeLiveData_0 extends _i1.SmartFake implements _i2.LiveData { + _FakeLiveData_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [LiveData]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockLiveData extends _i1.Mock implements _i2.LiveData { + MockLiveData() { + _i1.throwOnMissingStub(this); + } + + @override + _i3.Future observe(_i4.Observer? observer) => (super.noSuchMethod( + Invocation.method( + #observe, + [observer], + ), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) as _i3.Future); + @override + _i3.Future removeObservers() => (super.noSuchMethod( + Invocation.method( + #removeObservers, + [], + ), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) as _i3.Future); + @override + _i2.LiveData cast() => (super.noSuchMethod( + Invocation.method( + #cast, + [], + ), + returnValue: _FakeLiveData_0( + this, + Invocation.method( + #cast, + [], + ), + ), + ) as _i2.LiveData); +} + /// A class which mocks [TestCameraInfoHostApi]. /// /// See the documentation for Mockito's code generation for more information. class MockTestCameraInfoHostApi extends _i1.Mock - implements _i2.TestCameraInfoHostApi { + implements _i5.TestCameraInfoHostApi { MockTestCameraInfoHostApi() { _i1.throwOnMissingStub(this); } @@ -49,7 +105,7 @@ class MockTestCameraInfoHostApi extends _i1.Mock /// /// See the documentation for Mockito's code generation for more information. class MockTestInstanceManagerHostApi extends _i1.Mock - implements _i2.TestInstanceManagerHostApi { + implements _i5.TestInstanceManagerHostApi { MockTestInstanceManagerHostApi() { _i1.throwOnMissingStub(this); } From debcd3a6754cf2e6d052835df3353baba20b8543 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 18 Apr 2023 11:30:11 -0700 Subject: [PATCH 48/71] Fix camera test --- packages/camera/camera_android_camerax/test/camera_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/test/camera_test.dart b/packages/camera/camera_android_camerax/test/camera_test.dart index e47e104843f3..9506a430cf6e 100644 --- a/packages/camera/camera_android_camerax/test/camera_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_test.dart @@ -40,7 +40,7 @@ void main() { instanceManager.addHostCreatedInstance( camera, cameraIdentifier, - onCopy: (_) => CameraInfo.detached(), + onCopy: (_) => Camera.detached(), ); instanceManager.addHostCreatedInstance( cameraInfo, From a79ee6299264efba586ed10c79860c7f7f45a74a Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 25 Apr 2023 10:09:30 -0700 Subject: [PATCH 49/71] Start addressing review --- .../camerax/CameraAndroidCameraxPlugin.java | 1 + .../camerax/CameraStateFlutterApiWrapper.java | 2 +- .../plugins/camerax/PreviewHostApiImpl.java | 2 +- .../lib/src/camera.dart | 2 +- .../lib/src/camera_state.dart | 41 +++++++++++++++++++ .../lib/src/camera_state_error.dart | 7 ++++ .../lib/src/instance_manager.dart | 6 +-- .../lib/src/live_data.dart | 2 +- 8 files changed, 56 insertions(+), 7 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 50e174c2b264..23abe22cb866 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 @@ -91,6 +91,7 @@ public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBi updateContext(pluginBinding.getApplicationContext()); Activity activity = activityPluginBinding.getActivity(); + // TODO(camsim99): Handle case where activity is not a LifecycleOwner. processCameraProviderHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); liveDataHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); systemServicesHostApi.setActivity(activity); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java index b1c91d265f69..4051732b9a30 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java @@ -119,7 +119,7 @@ private String getCameraStateErrorDescription(@NonNull CameraState.StateError ca return cameraStateErrorDescription + "The camera could not be opened because 'Do Not Disturb' mode is enabled. Please disable this mode, and try opening the camera again."; default: - return "There was an unspecified issue with the current camera state."; + return cameraStateErrorDescription + "There was an unspecified issue with the current camera state."; } } 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 19cc4db59fa4..f5a2fdc01ca3 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 @@ -114,7 +114,7 @@ public void onSurfaceRequested(SurfaceRequest request) { * Returns an error description for each {@link SurfaceRequest.Result} that represents an error * with providing a surface. */ - private String getProvideSurfaceErrorDescription(@NonNull int resultCode) { + private String getProvideSurfaceErrorDescription(int resultCode) { switch (resultCode) { case SurfaceRequest.Result.RESULT_INVALID_SURFACE: return resultCode + ": Provided surface could not be used by the camera."; diff --git a/packages/camera/camera_android_camerax/lib/src/camera.dart b/packages/camera/camera_android_camerax/lib/src/camera.dart index 7101be36e8c0..09f02367060d 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera.dart @@ -66,7 +66,7 @@ class CameraHostApiImpl extends CameraHostApi { /// Flutter API implementation of [Camera]. class CameraFlutterApiImpl implements CameraFlutterApi { - /// Constructs a [CameraSelectorFlutterApiImpl]. + /// Constructs a [CameraFlutterApiImpl]. CameraFlutterApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, diff --git a/packages/camera/camera_android_camerax/lib/src/camera_state.dart b/packages/camera/camera_android_camerax/lib/src/camera_state.dart index 0fc0c05ba43c..233c1821602f 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_state.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_state.dart @@ -27,6 +27,47 @@ class CameraState extends JavaObject { /// The error that the camera has encountered, if any. final CameraStateError? error; + + /// Error code indicating that the camera device is already in use. + /// + /// See https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_CAMERA_IN_USE() + static int errorCameraInUse = 1; + + /// Error code indicating that the limit number of open cameras has been + /// reached. + /// + /// See https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_MAX_CAMERAS_IN_USE() + static int errorMaxCamerasInUse = 2; + + /// Error code indicating that the camera device has encountered a recoverable + /// error. + /// + /// See https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_OTHER_RECOVERABLE_ERROR() + static int errorOtherRecoverableError = 3; + + /// Error code inidcating that configuring the camera has failed. + /// + /// https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_STREAM_CONFIG() + static int errorStreamConfig = 4; + + /// Error code indicating that the camera device could not be opened due to a + /// device policy. + /// + /// See https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_CAMERA_DISABLED() + static int errorCameraDisabled = 5; + + /// Error code indicating that the camera device was closed due to a fatal + /// error. + /// + /// See https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_CAMERA_FATAL_ERROR() + static int errorCameraFatalError = 6; + + /// Error code indicating that the camera could not be opened because + /// "Do Not Disturb" mode is enabled on devices affected by a bug in Android 9 + /// (API level 28). + /// + /// See https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_DO_NOT_DISTURB_MODE_ENABLED() + static int errorDoNotDisturbModeEnabled = 7; } /// Flutter API implementation for [CameraState]. diff --git a/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart b/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart index 6a9c9a3f81b7..6d50eb35f996 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart @@ -22,12 +22,19 @@ class CameraStateError extends JavaObject { : super.detached(); /// The code of this error. + /// + /// Will map to one of the CameraX CameraState codes: + /// https://developer.android.com/reference/androidx/camera/core/CameraState#constants_1. final int code; /// The description of this error corresponding to its [code]. /// /// This is not directly provided by the CameraX library, but is determined on /// the Java side based on the error type. + /// + /// Descriptions are required to instantiate a [CameraStateError], as they + /// are used in the camera plugin implementation to send camera error events + /// to developers using the plugin. final String description; } diff --git a/packages/camera/camera_android_camerax/lib/src/instance_manager.dart b/packages/camera/camera_android_camerax/lib/src/instance_manager.dart index 8f0921878de1..aeb97ec36faa 100644 --- a/packages/camera/camera_android_camerax/lib/src/instance_manager.dart +++ b/packages/camera/camera_android_camerax/lib/src/instance_manager.dart @@ -124,9 +124,9 @@ class InstanceManager { final T? strongInstance = _strongInstances[identifier] as T?; if (strongInstance != null) { final Function copyCallback = _copyCallbacks[identifier]!; - // This cast is safe since it matches the argument type for - // _addInstanceWithIdentifier, which is the only place _copyCallbacks - // is populated. + // This avoid_dynamic_calls is safe since the type of strongInstance + // matches the argument type for _addInstanceWithIdentifier, which is + // the only place _copyCallbacks is populated. // ignore: avoid_dynamic_calls final T copy = copyCallback(strongInstance) as T; _identifiers[copy] = identifier; diff --git a/packages/camera/camera_android_camerax/lib/src/live_data.dart b/packages/camera/camera_android_camerax/lib/src/live_data.dart index c6dadb2902fc..2a7e8272aeaf 100644 --- a/packages/camera/camera_android_camerax/lib/src/live_data.dart +++ b/packages/camera/camera_android_camerax/lib/src/live_data.dart @@ -12,7 +12,7 @@ import 'observer.dart'; /// A data holder class that can be observed. /// -/// For this wrapped class, observance can only fall within the lifecycle of the +/// For this wrapped class, observation can only fall within the lifecycle of the /// Android Activity to which this plugin is attached. /// /// See https://developer.android.com/reference/androidx/lifecycle/LiveData. From c44fc06fd8747463480845e6958d1ad0010bd10e Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 1 May 2023 14:19:13 -0700 Subject: [PATCH 50/71] Address review, remove cast --- .../camerax/CameraAndroidCameraxPlugin.java | 1 + .../camerax/CameraInfoHostApiImpl.java | 7 +- .../CameraStateErrorFlutterApiWrapper.java | 5 +- .../camerax/CameraStateFlutterApiWrapper.java | 86 +++++-------- .../camerax/GeneratedCameraXLibrary.java | 121 +++++++++++++----- .../camerax/LiveDataFlutterApiWrapper.java | 6 +- .../plugins/camerax/LiveDataHostApiImpl.java | 16 +-- .../camerax/ObserverFlutterApiWrapper.java | 2 +- .../plugins/camerax/ObserverHostApiImpl.java | 1 + .../plugins/camerax/CameraStateTest.java | 2 + .../flutter/plugins/camerax/LiveDataTest.java | 4 +- .../flutter/plugins/camerax/ObserverTest.java | 3 +- .../example/lib/main.dart | 51 ++++++-- .../lib/src/analyzer.dart | 33 +++-- .../lib/src/android_camera_camerax.dart | 2 +- .../lib/src/camera.dart | 25 ++-- .../lib/src/camera_info.dart | 32 +++-- .../lib/src/camera_selector.dart | 29 +++-- .../lib/src/camera_state.dart | 47 ++++--- .../lib/src/camera_state_error.dart | 91 +++++++++---- .../lib/src/camerax_library.g.dart | 78 +++++++---- .../lib/src/image_analysis.dart | 6 +- .../lib/src/image_capture.dart | 6 +- .../lib/src/image_proxy.dart | 29 +++-- .../lib/src/live_data.dart | 82 ++++++------ .../lib/src/observer.dart | 29 +++-- .../lib/src/plane_proxy.dart | 30 +++-- .../lib/src/preview.dart | 19 ++- .../lib/src/process_camera_provider.dart | 42 +++--- .../lib/src/surface.dart | 2 +- .../lib/src/system_services.dart | 21 ++- .../lib/src/use_case.dart | 2 +- .../pigeons/camerax_library.dart | 14 +- .../test/test_camerax_library.g.dart | 24 ---- 34 files changed, 535 insertions(+), 413 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 95dff6b83b29..f6490d004193 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 @@ -21,6 +21,7 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, Activity private FlutterPluginBinding pluginBinding; private ImageAnalysisHostApiImpl imageAnalysisHostApiImpl; private ImageCaptureHostApiImpl imageCaptureHostApiImpl; + private LiveDataHostApiImpl liveDataHostApiImpl; public SystemServicesHostApiImpl systemServicesHostApiImpl; @VisibleForTesting ProcessCameraProviderHostApiImpl processCameraProviderHostApiImpl; diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index a515f4de156f..ac675dc2eddf 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -11,6 +11,7 @@ import androidx.lifecycle.LiveData; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraInfoHostApi; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedType; import java.util.Objects; public class CameraInfoHostApiImpl implements CameraInfoHostApi { @@ -19,7 +20,7 @@ public class CameraInfoHostApiImpl implements CameraInfoHostApi { @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); - public CameraInfoHostApiImpl(BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + public CameraInfoHostApiImpl(@NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; } @@ -29,6 +30,7 @@ public CameraInfoHostApiImpl(BinaryMessenger binaryMessenger, InstanceManager in * represented by the {@link CameraInfo} with the specified identifier. */ @Override + @NonNull public Long getSensorRotationDegrees(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); @@ -41,13 +43,14 @@ public Long getSensorRotationDegrees(@NonNull Long identifier) { * identifier. */ @Override + @NonNull public Long getLiveCameraState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); LiveData liveCameraState = cameraInfo.getCameraState(); LiveDataFlutterApiWrapper liveDataFlutterApiWrapper = new LiveDataFlutterApiWrapper(binaryMessenger, instanceManager); - liveDataFlutterApiWrapper.create(liveCameraState, reply -> {}); + liveDataFlutterApiWrapper.create(liveCameraState, LiveDataSupportedType.CAMERA_STATE, reply -> {}); return instanceManager.getIdentifierForStrongReference(liveCameraState); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java index af56f0037f42..1149027e5f5c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java @@ -42,18 +42,15 @@ public CameraStateErrorFlutterApiWrapper( public void create( @NonNull CameraState.StateError instance, @NonNull Long code, - @NonNull String description, @NonNull CameraStateErrorFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { cameraStateErrorFlutterApi.create( - instanceManager.addHostCreatedInstance(instance), code, description, callback); + instanceManager.addHostCreatedInstance(instance), code, callback); } } /** * Sets the Flutter API used to send messages to Dart. - * - *

This is only visible for testing. */ @VisibleForTesting void setApi(@NonNull CameraStateErrorFlutterApi api) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java index 4051732b9a30..ce3221318d4f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java @@ -44,12 +44,35 @@ public CameraStateFlutterApiWrapper( */ public void create( @NonNull CameraState instance, - @NonNull CameraState.Type type, + @NonNull CameraStateType type, @Nullable CameraState.StateError error, @NonNull CameraStateFlutterApi.Reply callback) { + if (instanceManager.containsInstance(instance)) { + return; + } + + if (error != null) { + // We need to create a CameraStateError if there is a problem with the current camera + // state to send to the Dart side. + new CameraStateErrorFlutterApiWrapper(binaryMessenger, instanceManager) + .create( + error, + Long.valueOf(error.getCode()), + reply -> {}); + } + + cameraStateFlutterApi.create( + instanceManager.addHostCreatedInstance(instance), + new CameraStateTypeData.Builder().setValue(type).build(), + instanceManager.getIdentifierForStrongReference(error), + callback); + } - // Convert CameraX CameraState.Type to CameraStateType that the Dart side understands. - CameraStateType cameraStateType = CameraStateType.CLOSED; + /** + * Convert CameraX CameraState.Type to CameraStateType that the Dart side understands. + */ + public static CameraStateType getCameraStateType(@NonNull CameraState.Type type) { + CameraStateType cameraStateType = null; switch (type) { case CLOSED: cameraStateType = CameraStateType.CLOSED; @@ -68,65 +91,14 @@ public void create( break; } - if (error != null) { - // We need to create a CameraStateError if there is a problem with the current camera - // state to send to the Dart side. - new CameraStateErrorFlutterApiWrapper(binaryMessenger, instanceManager) - .create( - error, - Long.valueOf(error.getCode()), - getCameraStateErrorDescription(error), - reply -> {}); - } - - if (!instanceManager.containsInstance(instance)) { - cameraStateFlutterApi.create( - instanceManager.addHostCreatedInstance(instance), - new CameraStateTypeData.Builder().setValue(cameraStateType).build(), - instanceManager.getIdentifierForStrongReference(error), - callback); - } - } - - /** - * Returns an error message corresponding to the specified {@link CameraState.StateError}. - * - *

See https://developer.android.com/reference/androidx/camera/core/CameraState#constants_1 for - * more information on the different {@link CameraState.StateError} types. - */ - private String getCameraStateErrorDescription(@NonNull CameraState.StateError cameraStateError) { - final int cameraStateErrorCode = cameraStateError.getCode(); - final String cameraStateErrorDescription = cameraStateErrorCode + ": "; - switch (cameraStateErrorCode) { - case CameraState.ERROR_CAMERA_IN_USE: - return cameraStateErrorDescription - + "The camera was already in use, possibly by a higher-priority camera client."; - case CameraState.ERROR_MAX_CAMERAS_IN_USE: - return cameraStateErrorDescription - + "The limit number of open cameras has been reached, and more cameras cannot be opened until other instances are closed."; - case CameraState.ERROR_OTHER_RECOVERABLE_ERROR: - return cameraStateErrorDescription - + "The camera device has encountered a recoverable error. CameraX will attempt to recover from the error."; - case CameraState.ERROR_STREAM_CONFIG: - return cameraStateErrorDescription + "Configuring the camera has failed."; - case CameraState.ERROR_CAMERA_DISABLED: - return cameraStateErrorDescription - + "The camera device could not be opened due to a device policy. Thia may be caused by a client from a background process attempting to open the camera."; - case CameraState.ERROR_CAMERA_FATAL_ERROR: - return cameraStateErrorDescription - + "The camera was closed due to a fatal error. This may require the Android device be shut down and restarted to restore camera function or may indicate a persistent camera hardware problem."; - case CameraState.ERROR_DO_NOT_DISTURB_MODE_ENABLED: - return cameraStateErrorDescription - + "The camera could not be opened because 'Do Not Disturb' mode is enabled. Please disable this mode, and try opening the camera again."; - default: - return cameraStateErrorDescription + "There was an unspecified issue with the current camera state."; + if (cameraStateType == null) { + throw new IllegalArgumentException("The CameraState.Type passed was not recognized"); } + return cameraStateType; } /** * Sets the Flutter API used to send messages to Dart. - * - *

This is only visible for testing. */ @VisibleForTesting void setApi(@NonNull CameraStateFlutterApi api) { 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 06d408125d74..01bb4b2363f5 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 @@ -79,6 +79,16 @@ private CameraStateType(final int index) { } } + public enum LiveDataSupportedType { + CAMERA_STATE(0); + + final int index; + + private LiveDataSupportedType(final int index) { + this.index = index; + } + } + /** Generated class from Pigeon that represents data sent in messages. */ public static final class ResolutionInfo { private @NonNull Long width; @@ -274,6 +284,55 @@ ArrayList toList() { } } + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class LiveDataSupportedTypeData { + private @NonNull LiveDataSupportedType value; + + public @NonNull LiveDataSupportedType getValue() { + return value; + } + + public void setValue(@NonNull LiveDataSupportedType setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"value\" is null."); + } + this.value = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + LiveDataSupportedTypeData() {} + + public static final class Builder { + + private @Nullable LiveDataSupportedType value; + + public @NonNull Builder setValue(@NonNull LiveDataSupportedType setterArg) { + this.value = setterArg; + return this; + } + + public @NonNull LiveDataSupportedTypeData build() { + LiveDataSupportedTypeData pigeonReturn = new LiveDataSupportedTypeData(); + pigeonReturn.setValue(value); + return pigeonReturn; + } + } + + @NonNull + ArrayList toList() { + ArrayList toListResult = new ArrayList(1); + toListResult.add(value == null ? null : value.index); + return toListResult; + } + + static @NonNull LiveDataSupportedTypeData fromList(@NonNull ArrayList list) { + LiveDataSupportedTypeData pigeonResult = new LiveDataSupportedTypeData(); + Object value = list.get(0); + pigeonResult.setValue(value == null ? null : LiveDataSupportedType.values()[(int) value]); + return pigeonResult; + } + } + public interface Result { @SuppressWarnings("UnknownNullness") void success(T result); @@ -1547,12 +1606,12 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Long codeArg, @NonNull String descriptionArg, @NonNull Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull Long codeArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraStateErrorFlutterApi.create", getCodec()); channel.send( - new ArrayList(Arrays.asList(identifierArg, codeArg, descriptionArg)), + new ArrayList(Arrays.asList(identifierArg, codeArg)), channelReply -> callback.reply(null)); } } @@ -1563,8 +1622,6 @@ public interface LiveDataHostApi { void removeObservers(@NonNull Long identifier); - void cast(@NonNull Long oldIdentifier, @NonNull Long newIdentifier); - /** The codec used by LiveDataHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); @@ -1620,33 +1677,35 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo channel.setMessageHandler(null); } } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.LiveDataHostApi.cast", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number oldIdentifierArg = (Number) args.get(0); - Number newIdentifierArg = (Number) args.get(1); - try { - api.cast((oldIdentifierArg == null) ? null : oldIdentifierArg.longValue(), (newIdentifierArg == null) ? null : newIdentifierArg.longValue()); - wrapped.add(0, null); - } - catch (Throwable exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } + } + } + + private static class LiveDataFlutterApiCodec extends StandardMessageCodec { + public static final LiveDataFlutterApiCodec INSTANCE = new LiveDataFlutterApiCodec(); + + private LiveDataFlutterApiCodec() {} + + @Override + protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { + switch (type) { + case (byte) 128: + return LiveDataSupportedTypeData.fromList((ArrayList) readValue(buffer)); + default: + return super.readValueOfType(type, buffer); + } + } + + @Override + protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { + if (value instanceof LiveDataSupportedTypeData) { + stream.write(128); + writeValue(stream, ((LiveDataSupportedTypeData) value).toList()); + } else { + super.writeValue(stream, value); } } } + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class LiveDataFlutterApi { private final @NonNull BinaryMessenger binaryMessenger; @@ -1662,14 +1721,14 @@ public interface Reply { } /** The codec used by LiveDataFlutterApi. */ static @NonNull MessageCodec getCodec() { - return new StandardMessageCodec(); + return LiveDataFlutterApiCodec.INSTANCE; } - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull LiveDataSupportedTypeData typeArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.LiveDataFlutterApi.create", getCodec()); channel.send( - new ArrayList(Collections.singletonList(identifierArg)), + new ArrayList(Arrays.asList(identifierArg, typeArg)), channelReply -> callback.reply(null)); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java index 8ae072cfebc6..bd536d149411 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java @@ -9,6 +9,8 @@ import androidx.lifecycle.LiveData; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataFlutterApi; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedType; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedTypeData; /** * Flutter API implementation for {@link LiveData}. @@ -40,9 +42,9 @@ public LiveDataFlutterApiWrapper( * this method does nothing. */ public void create( - @NonNull LiveData instance, @NonNull LiveDataFlutterApi.Reply callback) { + @NonNull LiveData instance, @NonNull LiveDataSupportedType type, @NonNull LiveDataFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { - liveDataFlutterApi.create(instanceManager.addHostCreatedInstance(instance), callback); + liveDataFlutterApi.create(instanceManager.addHostCreatedInstance(instance), new LiveDataSupportedTypeData.Builder().setValue(type).build(), callback); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java index 198e52656926..0cac5c621d7e 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java @@ -35,7 +35,7 @@ public LiveDataHostApiImpl( } /** Sets {@link LifecycleOwner} used to observe the camera state if so requested. */ - public void setLifecycleOwner(LifecycleOwner lifecycleOwner) { + public void setLifecycleOwner(@NonNull LifecycleOwner lifecycleOwner) { this.lifecycleOwner = lifecycleOwner; } @@ -58,20 +58,6 @@ public void removeObservers(@NonNull Long identifier) { getLiveDataInstance(identifier).removeObservers(lifecycleOwner); } - /** - * Re-creates an instance of {@link LiveData} that has been created on the Java side, stored in - * the Dart {@link InstanceManager} as a generic type, and casted to a specific type on the Dart - * side. - * - *

This method is necessary in order for the Dart wrapped version of this class to be generic - * since the type of {@link LiveData} created on the Java side is unknown to the Dart side. - */ - @Override - public void cast(Long identifier, Long newInstanceIdentifier) { - instanceManager.addDartCreatedInstance( - instanceManager.getInstance(identifier), newInstanceIdentifier); - } - /** Retrieves the {@link LiveData} instance that has the specified identifier. */ private LiveData getLiveDataInstance(@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/ObserverFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java index 12fc3ed06765..ffa00cb65c3b 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java @@ -49,7 +49,7 @@ public void onChanged( if (value instanceof CameraState) { CameraState state = (CameraState) value; new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager) - .create(state, state.getType(), state.getError(), reply -> {}); + .create(state, CameraStateFlutterApiWrapper.getCameraStateType(state.getType()), state.getError(), reply -> {}); } else { throw new UnsupportedOperationException( "The type of value in observance is not wrapped by this plugin."); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java index 7f6e1de08950..963c0df5a22c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java @@ -27,6 +27,7 @@ public class ObserverHostApiImpl implements ObserverHostApi { public static class ObserverProxy { /** Creates an instance of {@link Observer}. */ + @NonNull public ObserverImpl create( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { return new ObserverImpl(binaryMessenger, instanceManager); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java index 203682a49103..05939ba4c73b 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java @@ -70,3 +70,5 @@ public void flutterApiCreate_makesCallToDartToCreateInstance() { assertEquals(cameraStateTypeDataCaptor.getValue().getValue(), CameraStateType.OPEN); } } + +// TODO(camsim99): Test static method I added. diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java index f7c20bbcb979..1e44bb8a5431 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -10,6 +10,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import androidx.camera.core.CameraState; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; @@ -27,9 +28,8 @@ public class LiveDataTest { @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - @SuppressWarnings("rawtypes") @Mock - public LiveData mockLiveData; + public LiveData mockLiveData; @Mock public BinaryMessenger mockBinaryMessenger; @Mock public LiveDataFlutterApi mockFlutterApi; diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java index 626f21ea2bfc..9588f795fd25 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java @@ -25,9 +25,8 @@ public class ObserverTest { @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - @SuppressWarnings("rawtypes") @Mock - public ObserverHostApiImpl.ObserverImpl mockObserver; + public ObserverHostApiImpl.ObserverImpl mockObserver; @Mock public BinaryMessenger mockBinaryMessenger; @Mock public ObserverFlutterApi mockFlutterApi; diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index ace84ec186ca..c668871b7a62 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -54,6 +54,8 @@ class _CameraExampleHomeState extends State VideoPlayerController? videoController; VoidCallback? videoPlayerListener; bool enableAudio = true; + double _minAvailableExposureOffset = 0.0; + double _maxAvailableExposureOffset = 0.0; double _currentExposureOffset = 0.0; late AnimationController _flashModeControlRowAnimationController; late Animation _flashModeControlRowAnimation; @@ -61,16 +63,11 @@ class _CameraExampleHomeState extends State late Animation _exposureModeControlRowAnimation; late AnimationController _focusModeControlRowAnimationController; late Animation _focusModeControlRowAnimation; - + double _minAvailableZoom = 1.0; + double _maxAvailableZoom = 1.0; double _currentScale = 1.0; double _baseScale = 1.0; - // TODO(camsim99): Make these configuration values variable. - final double _minAvailableZoom = 1.0; - final double _maxAvailableZoom = 1.0; - final double _minAvailableExposureOffset = 0.0; - final double _maxAvailableExposureOffset = 0.0; - // Counting pointers (number of user fingers on screen) int _pointers = 0; @@ -424,7 +421,7 @@ class _CameraExampleHomeState extends State Text(_minAvailableExposureOffset.toString()), Slider( value: _currentExposureOffset, - // TODO(camsim99): Specify minimum available exposure offset here. + min: _minAvailableExposureOffset, max: _maxAvailableExposureOffset, label: _currentExposureOffset.toString(), onChanged: _minAvailableExposureOffset == @@ -475,8 +472,12 @@ class _CameraExampleHomeState extends State style: styleAuto, onPressed: () {}, // TODO(camsim99): Add functionality back here. - onLongPress: - () {}, // TODO(camsim99): Add functionality back here. + onLongPress: () { + if (controller != null) { + controller!.setFocusPoint(null); + } + showInSnackBar('Resetting focus point'); + }, child: const Text('AUTO'), ), TextButton( @@ -592,8 +593,14 @@ class _CameraExampleHomeState extends State return; } - // TODO(camsim99): Add functionality back here for setting exposure and - // focus point. + final CameraController cameraController = controller!; + + final Offset offset = Offset( + details.localPosition.dx / constraints.maxWidth, + details.localPosition.dy / constraints.maxHeight, + ); + cameraController.setExposurePoint(offset); + cameraController.setFocusPoint(offset); } Future onNewCameraSelected(CameraDescription cameraDescription) async { @@ -630,8 +637,24 @@ class _CameraExampleHomeState extends State try { await cameraController.initialize(); - // TODO(camsim99): Add back functionality retrieving exposure offset - // and zoom level information. + 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/analyzer.dart b/packages/camera/camera_android_camerax/lib/src/analyzer.dart index fc312cd1982f..8cdcc137ae4c 100644 --- a/packages/camera/camera_android_camerax/lib/src/analyzer.dart +++ b/packages/camera/camera_android_camerax/lib/src/analyzer.dart @@ -87,35 +87,40 @@ class _AnalyzerHostApiImpl extends AnalyzerHostApi { @protected class AnalyzerFlutterApiImpl implements AnalyzerFlutterApi { /// Constructs a [AnalyzerFlutterApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. AnalyzerFlutterApiImpl({ - this.binaryMessenger, + BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + }) : _binaryMessenger = binaryMessenger, + _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; + final BinaryMessenger? _binaryMessenger; /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; + final InstanceManager _instanceManager; @override void create( int identifier, ) { - instanceManager.addHostCreatedInstance( + _instanceManager.addHostCreatedInstance( Analyzer.detached( analyze: (ImageProxy imageProxy) async {}, - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager, ), identifier, onCopy: (Analyzer original) => Analyzer.detached( analyze: original.analyze, - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager, ), ); } @@ -126,9 +131,9 @@ class AnalyzerFlutterApiImpl implements AnalyzerFlutterApi { int imageProxyIdentifier, ) { final Analyzer instance = - instanceManager.getInstanceWithWeakReference(identifier)!; + _instanceManager.getInstanceWithWeakReference(identifier)!; final ImageProxy imageProxy = - instanceManager.getInstanceWithWeakReference(imageProxyIdentifier)!; + _instanceManager.getInstanceWithWeakReference(imageProxyIdentifier)!; 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 99b7d385520c..e66e717368f2 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 @@ -497,7 +497,7 @@ class AndroidCameraCameraX extends CameraPlatform { } if (state.error != null) { cameraEventStreamController - .add(CameraErrorEvent(cameraId, state.error!.description)); + .add(CameraErrorEvent(cameraId, state.error!.getDescription())); } } diff --git a/packages/camera/camera_android_camerax/lib/src/camera.dart b/packages/camera/camera_android_camerax/lib/src/camera.dart index d8acfe7f2ba1..fe8e5f8b3f5f 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera.dart @@ -68,31 +68,34 @@ class CameraHostApiImpl extends CameraHostApi { class CameraFlutterApiImpl implements CameraFlutterApi { /// Constructs a [CameraFlutterApiImpl]. /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + /// /// An [instanceManager] is typically passed when a copy of an instance - /// contained by an `InstanceManager` is being created. + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. CameraFlutterApiImpl({ - this.binaryMessenger, + BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + }) : _binaryMessenger = binaryMessenger, + _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; + final BinaryMessenger? _binaryMessenger; /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; + final InstanceManager _instanceManager; @override void create(int identifier) { - instanceManager.addHostCreatedInstance( + _instanceManager.addHostCreatedInstance( Camera.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager), + binaryMessenger: _binaryMessenger, instanceManager: _instanceManager), identifier, onCopy: (Camera original) { return Camera.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager); }, ); } diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index 9ae10c4655c2..ca65d6723585 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -68,9 +68,9 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { 'No CameraInfo has the identifer of that which was requested.'); final int liveCameraStateId = await getLiveCameraState(identifier!); - final LiveData liveData = instanceManager - .getInstanceWithWeakReference>(liveCameraStateId)!; - final LiveData liveCameraState = liveData.cast(); + final LiveData liveCameraState = + instanceManager.getInstanceWithWeakReference>( + liveCameraStateId)!; return liveCameraState; } } @@ -78,29 +78,35 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { /// Flutter API implementation of [CameraInfo]. class CameraInfoFlutterApiImpl extends CameraInfoFlutterApi { /// Constructs a [CameraInfoFlutterApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. CameraInfoFlutterApiImpl({ - this.binaryMessenger, + BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + }) : _binaryMessenger = binaryMessenger, + _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; + final BinaryMessenger? _binaryMessenger; /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; + final InstanceManager _instanceManager; @override void create(int identifier) { - instanceManager.addHostCreatedInstance( + _instanceManager.addHostCreatedInstance( CameraInfo.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager), + binaryMessenger: _binaryMessenger, instanceManager: _instanceManager), identifier, onCopy: (CameraInfo original) { return CameraInfo.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); + binaryMessenger: _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 8300063204c0..1df886b861bd 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_selector.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_selector.dart @@ -163,32 +163,37 @@ class CameraSelectorHostApiImpl extends CameraSelectorHostApi { /// Flutter API implementation of [CameraSelector]. class CameraSelectorFlutterApiImpl implements CameraSelectorFlutterApi { /// Constructs a [CameraSelectorFlutterApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. CameraSelectorFlutterApiImpl({ - this.binaryMessenger, + BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + }) : _binaryMessenger = binaryMessenger, + _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; + final BinaryMessenger? _binaryMessenger; /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; + final InstanceManager _instanceManager; @override void create(int identifier, int? lensFacing) { - instanceManager.addHostCreatedInstance( + _instanceManager.addHostCreatedInstance( CameraSelector.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager, lensFacing: lensFacing), identifier, onCopy: (CameraSelector original) { return CameraSelector.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager, lensFacing: original.lensFacing); }, ); diff --git a/packages/camera/camera_android_camerax/lib/src/camera_state.dart b/packages/camera/camera_android_camerax/lib/src/camera_state.dart index 233c1821602f..c3dc25a46895 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_state.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_state.dart @@ -10,7 +10,7 @@ import 'camerax_library.g.dart'; import 'instance_manager.dart'; import 'java_object.dart'; -/// The state of a camera. +/// A snapshot of the camera state. /// /// See https://developer.android.com/reference/androidx/camera/core/CameraState. class CameraState extends JavaObject { @@ -31,43 +31,43 @@ class CameraState extends JavaObject { /// Error code indicating that the camera device is already in use. /// /// See https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_CAMERA_IN_USE() - static int errorCameraInUse = 1; + static const int errorCameraInUse = 1; /// Error code indicating that the limit number of open cameras has been /// reached. /// /// See https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_MAX_CAMERAS_IN_USE() - static int errorMaxCamerasInUse = 2; + static const int errorMaxCamerasInUse = 2; /// Error code indicating that the camera device has encountered a recoverable /// error. /// /// See https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_OTHER_RECOVERABLE_ERROR() - static int errorOtherRecoverableError = 3; + static const int errorOtherRecoverableError = 3; /// Error code inidcating that configuring the camera has failed. /// /// https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_STREAM_CONFIG() - static int errorStreamConfig = 4; + static const int errorStreamConfig = 4; /// Error code indicating that the camera device could not be opened due to a /// device policy. /// /// See https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_CAMERA_DISABLED() - static int errorCameraDisabled = 5; + static const int errorCameraDisabled = 5; /// Error code indicating that the camera device was closed due to a fatal /// error. /// /// See https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_CAMERA_FATAL_ERROR() - static int errorCameraFatalError = 6; + static const int errorCameraFatalError = 6; /// Error code indicating that the camera could not be opened because /// "Do Not Disturb" mode is enabled on devices affected by a bug in Android 9 /// (API level 28). /// /// See https://developer.android.com/reference/androidx/camera/core/CameraState#ERROR_DO_NOT_DISTURB_MODE_ENABLED() - static int errorDoNotDisturbModeEnabled = 7; + static const int errorDoNotDisturbModeEnabled = 7; } /// Flutter API implementation for [CameraState]. @@ -78,19 +78,24 @@ class CameraState extends JavaObject { @protected class CameraStateFlutterApiImpl implements CameraStateFlutterApi { /// Constructs a [CameraStateFlutterApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. CameraStateFlutterApiImpl({ - this.binaryMessenger, + BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + }) : _binaryMessenger = binaryMessenger, + _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; + final BinaryMessenger? _binaryMessenger; /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; + final InstanceManager _instanceManager; @override void create( @@ -98,23 +103,23 @@ class CameraStateFlutterApiImpl implements CameraStateFlutterApi { CameraStateTypeData type, int? errorIdentifier, ) { - instanceManager.addHostCreatedInstance( + _instanceManager.addHostCreatedInstance( CameraState.detached( type: type.value, error: errorIdentifier == null ? null - : instanceManager.getInstanceWithWeakReference( + : _instanceManager.getInstanceWithWeakReference( errorIdentifier, ), - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager, ), identifier, onCopy: (CameraState original) => CameraState.detached( type: original.type, error: original.error, - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager, ), ); } diff --git a/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart b/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart index 6d50eb35f996..89fb0f8ac176 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_state_error.dart @@ -5,6 +5,7 @@ import 'package:flutter/services.dart'; import 'package:meta/meta.dart'; +import 'camera_state.dart'; import 'camerax_library.g.dart'; import 'instance_manager.dart'; import 'java_object.dart'; @@ -15,27 +16,60 @@ import 'java_object.dart'; class CameraStateError extends JavaObject { /// Constructs a [CameraStateError] that is not automatically attached to a native object. CameraStateError.detached( - {super.binaryMessenger, - super.instanceManager, - required this.code, - required this.description}) + {super.binaryMessenger, super.instanceManager, required this.code}) : super.detached(); /// The code of this error. /// - /// Will map to one of the CameraX CameraState codes: + /// Will map to one of the [CameraState] error codes that map to the CameraX + /// CameraState codes: /// https://developer.android.com/reference/androidx/camera/core/CameraState#constants_1. final int code; - /// The description of this error corresponding to its [code]. + /// Gets a description of this error corresponding to its [code]. /// - /// This is not directly provided by the CameraX library, but is determined on - /// the Java side based on the error type. + /// This is not directly provided by the CameraX library, but is determined + /// based on the description of the [code]. /// - /// Descriptions are required to instantiate a [CameraStateError], as they - /// are used in the camera plugin implementation to send camera error events - /// to developers using the plugin. - final String description; + /// Provided for developers to use for error handling. + String getDescription() { + String description = ''; + switch (code) { + case CameraState.errorCameraInUse: + description = + 'The camera was already in use, possibly by a higher-priority camera client.'; + break; + case CameraState.errorMaxCamerasInUse: + description = + 'The limit number of open cameras has been reached, and more cameras cannot be opened until other instances are closed.'; + break; + case CameraState.errorOtherRecoverableError: + description = + 'The camera device has encountered a recoverable error. CameraX will attempt to recover from the error.'; + break; + case CameraState.errorStreamConfig: + description = 'Configuring the camera has failed.'; + break; + case CameraState.errorCameraDisabled: + description = + 'The camera device could not be opened due to a device policy. Thia may be caused by a client from a background process attempting to open the camera.'; + break; + case CameraState.errorCameraFatalError: + description = + 'The camera was closed due to a fatal error. This may require the Android device be shut down and restarted to restore camera function or may indicate a persistent camera hardware problem.'; + break; + case CameraState.errorDoNotDisturbModeEnabled: + description = + 'The camera could not be opened because "Do Not Disturb" mode is enabled. Please disable this mode, and try opening the camera again.'; + break; + default: + description = + 'There was an unspecified issue with the current camera state.'; + break; + } + + return '$code : $description'; + } } /// Flutter API implementation for [CameraStateError]. @@ -46,39 +80,42 @@ class CameraStateError extends JavaObject { @protected class CameraStateErrorFlutterApiImpl implements CameraStateErrorFlutterApi { /// Constructs a [CameraStateErrorFlutterApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. If left null, it + /// will default to the global instance defined in [JavaObject]. CameraStateErrorFlutterApiImpl({ - this.binaryMessenger, + BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + }) : _binaryMessenger = binaryMessenger, + _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; + final BinaryMessenger? _binaryMessenger; /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; + final InstanceManager _instanceManager; @override void create( int identifier, int code, - String description, ) { - instanceManager.addHostCreatedInstance( + _instanceManager.addHostCreatedInstance( CameraStateError.detached( code: code, - description: description, - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager, ), identifier, onCopy: (CameraStateError original) => CameraStateError.detached( code: original.code, - description: original.description, - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager, ), ); } 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 5c07e52188ba..8ce3e3f93723 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 @@ -22,6 +22,10 @@ enum CameraStateType { pendingOpen, } +enum LiveDataSupportedType { + cameraState, +} + class ResolutionInfo { ResolutionInfo({ required this.width, @@ -95,6 +99,27 @@ class CameraStateTypeData { } } +class LiveDataSupportedTypeData { + LiveDataSupportedTypeData({ + required this.value, + }); + + LiveDataSupportedType value; + + Object encode() { + return [ + value.index, + ]; + } + + static LiveDataSupportedTypeData decode(Object result) { + result as List; + return LiveDataSupportedTypeData( + value: LiveDataSupportedType.values[result[0]! as int], + ); + } +} + class InstanceManagerHostApi { /// Constructor for [InstanceManagerHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -1277,7 +1302,7 @@ abstract class ObserverFlutterApi { abstract class CameraStateErrorFlutterApi { static const MessageCodec codec = StandardMessageCodec(); - void create(int identifier, int code, String description); + void create(int identifier, int code); static void setup(CameraStateErrorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { @@ -1297,10 +1322,7 @@ abstract class CameraStateErrorFlutterApi { final int? arg_code = (args[1] as int?); assert(arg_code != null, 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null, expected non-null int.'); - final String? arg_description = (args[2] as String?); - assert(arg_description != null, - 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null, expected non-null String.'); - api.create(arg_identifier!, arg_code!, arg_description!); + api.create(arg_identifier!, arg_code!); return; }); } @@ -1361,34 +1383,35 @@ class LiveDataHostApi { return; } } +} - Future cast(int arg_oldIdentifier, int arg_newIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveDataHostApi.cast', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_oldIdentifier, arg_newIdentifier]) 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], - ); +class _LiveDataFlutterApiCodec extends StandardMessageCodec { + const _LiveDataFlutterApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is LiveDataSupportedTypeData) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); } else { - return; + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return LiveDataSupportedTypeData.decode(readValue(buffer)!); + default: + return super.readValueOfType(type, buffer); } } } abstract class LiveDataFlutterApi { - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec codec = _LiveDataFlutterApiCodec(); - void create(int identifier); + void create(int identifier, LiveDataSupportedTypeData type); static void setup(LiveDataFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { @@ -1405,7 +1428,10 @@ abstract class LiveDataFlutterApi { final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.create was null, expected non-null int.'); - api.create(arg_identifier!); + final LiveDataSupportedTypeData? arg_type = (args[1] as LiveDataSupportedTypeData?); + assert(arg_type != null, + 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.create was null, expected non-null LiveDataSupportedTypeData.'); + api.create(arg_identifier!, arg_type!); 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 69cc7829c7a3..7ffaba72ecad 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_analysis.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_analysis.dart @@ -61,8 +61,12 @@ class ImageAnalysis extends UseCase { class _ImageAnalysisHostApiImpl extends ImageAnalysisHostApi { /// Constructor for [_ImageAnalysisHostApiImpl]. /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + /// /// An [instanceManager] is typically passed when a copy of an instance - /// contained by an `InstanceManager` is being created. + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. _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 9b80c8706214..6a9b2dedd042 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_capture.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_capture.dart @@ -96,8 +96,12 @@ class ImageCapture extends UseCase { class ImageCaptureHostApiImpl extends ImageCaptureHostApi { /// Constructs a [ImageCaptureHostApiImpl]. /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + /// /// An [instanceManager] is typically passed when a copy of an instance - /// contained by an `InstanceManager` is being created. + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. 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 a1f929c5960d..ded09123da6e 100644 --- a/packages/camera/camera_android_camerax/lib/src/image_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/image_proxy.dart @@ -99,19 +99,24 @@ class _ImageProxyHostApiImpl extends ImageProxyHostApi { @protected class ImageProxyFlutterApiImpl implements ImageProxyFlutterApi { /// Constructs a [ImageProxyFlutterApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. ImageProxyFlutterApiImpl({ - this.binaryMessenger, + BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + }) : _binaryMessenger = binaryMessenger, + _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; + final BinaryMessenger? _binaryMessenger; /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; + final InstanceManager _instanceManager; @override void create( @@ -120,18 +125,18 @@ class ImageProxyFlutterApiImpl implements ImageProxyFlutterApi { int height, int width, ) { - instanceManager.addHostCreatedInstance( + _instanceManager.addHostCreatedInstance( ImageProxy.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, + 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/live_data.dart b/packages/camera/camera_android_camerax/lib/src/live_data.dart index 2a7e8272aeaf..7a14ae91d09c 100644 --- a/packages/camera/camera_android_camerax/lib/src/live_data.dart +++ b/packages/camera/camera_android_camerax/lib/src/live_data.dart @@ -5,6 +5,7 @@ import 'package:flutter/services.dart'; import 'package:meta/meta.dart'; +import 'camera_state.dart'; import 'camerax_library.g.dart'; import 'instance_manager.dart'; import 'java_object.dart'; @@ -41,20 +42,18 @@ class LiveData extends JavaObject { Future removeObservers() { return _api.removeObserversFromInstances(this); } - - /// Creates a new instance of [LiveData] with a specified type [S] that will - /// act as the casted version of the generic typed instance created from the - /// Java side. - LiveData cast() { - final LiveData newInstance = LiveData.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); - _api.castFromInstances(this, newInstance); - return newInstance; - } } /// Host API implementation of [LiveData]. class _LiveDataHostApiImpl extends LiveDataHostApi { + /// Constructs a [_LiveDataHostApiImpl]. + /// + /// If [binaryMessenger] the default BinaryMessenger will be used which routes to + /// the host platform. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. _LiveDataHostApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, @@ -62,9 +61,6 @@ class _LiveDataHostApiImpl extends LiveDataHostApi { 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. @@ -90,20 +86,6 @@ class _LiveDataHostApiImpl extends LiveDataHostApi { instanceManager.getIdentifier(instance)!, ); } - - /// Creates a new instance of [LiveData] with a specified type [S] that will - /// act as the casted version of the typed [T] instance created from the - /// Java side. - Future castFromInstances( - LiveData instance, LiveData newInstance) { - return cast( - instanceManager.getIdentifier(instance)!, - instanceManager.addDartCreatedInstance(newInstance, - onCopy: (LiveData original) => LiveData.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, - ))); - } } /// Flutter API implementation for [LiveData]. @@ -114,34 +96,44 @@ class _LiveDataHostApiImpl extends LiveDataHostApi { @protected class LiveDataFlutterApiImpl implements LiveDataFlutterApi { /// Constructs a [LiveDataFlutterApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. LiveDataFlutterApiImpl({ - this.binaryMessenger, + BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + }) : _binaryMessenger = binaryMessenger, + _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; + final BinaryMessenger? _binaryMessenger; /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; + final InstanceManager _instanceManager; @override void create( int identifier, + LiveDataSupportedTypeData typeData, ) { - instanceManager.addHostCreatedInstance( - LiveData.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, - ), - identifier, - onCopy: (LiveData original) => LiveData.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, - ), - ); + switch (typeData.value) { + case LiveDataSupportedType.cameraState: + _instanceManager.addHostCreatedInstance( + LiveData.detached( + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager, + ), + identifier, + onCopy: (LiveData original) => + LiveData.detached( + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager, + ), + ); + } } } diff --git a/packages/camera/camera_android_camerax/lib/src/observer.dart b/packages/camera/camera_android_camerax/lib/src/observer.dart index c8fbf5751ec9..70ae0dbb507f 100644 --- a/packages/camera/camera_android_camerax/lib/src/observer.dart +++ b/packages/camera/camera_android_camerax/lib/src/observer.dart @@ -55,6 +55,14 @@ class Observer extends JavaObject { } class _ObserverHostApiImpl extends ObserverHostApi { + /// Constructs an [_ObserverHostApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. _ObserverHostApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, @@ -90,20 +98,17 @@ class _ObserverHostApiImpl extends ObserverHostApi { /// overridden native class. @protected class ObserverFlutterApiImpl implements ObserverFlutterApi { - /// Constructs a [ObserverFlutterApiImpl]. + /// Constructs an [ObserverFlutterApiImpl]. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. ObserverFlutterApiImpl({ - 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; + }) : _instanceManager = instanceManager ?? JavaObject.globalInstanceManager; /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; + final InstanceManager _instanceManager; @override void onChanged( @@ -111,11 +116,11 @@ class ObserverFlutterApiImpl implements ObserverFlutterApi { int valueIdentifier, ) { final Observer instance = - instanceManager.getInstanceWithWeakReference(identifier)!; + _instanceManager.getInstanceWithWeakReference(identifier)!; // ignore: avoid_dynamic_calls, void_checks instance.onChanged( - instanceManager.getInstanceWithWeakReference(valueIdentifier)!, + _instanceManager.getInstanceWithWeakReference(valueIdentifier)!, ); } } 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 c057876d1ede..d5b1661b0b40 100644 --- a/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart +++ b/packages/camera/camera_android_camerax/lib/src/plane_proxy.dart @@ -46,23 +46,25 @@ class PlaneProxy extends JavaObject { /// overridden native class. @protected class PlaneProxyFlutterApiImpl implements PlaneProxyFlutterApi { - /// Constructs a [PlaneProxyFlutterApiImpl]. + /// Constructs an [PlaneProxyFlutterApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. /// /// An [instanceManager] is typically passed when a copy of an instance - /// contained by an `InstanceManager` is being created. + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. PlaneProxyFlutterApiImpl({ - this.binaryMessenger, + BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + }) : _binaryMessenger = binaryMessenger, + _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; + final BinaryMessenger? _binaryMessenger; /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; + final InstanceManager _instanceManager; @override void create( @@ -71,18 +73,18 @@ class PlaneProxyFlutterApiImpl implements PlaneProxyFlutterApi { int pixelStride, int rowStride, ) { - instanceManager.addHostCreatedInstance( + _instanceManager.addHostCreatedInstance( PlaneProxy.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, + 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/lib/src/preview.dart b/packages/camera/camera_android_camerax/lib/src/preview.dart index 02a540a3b507..c3094d714179 100644 --- a/packages/camera/camera_android_camerax/lib/src/preview.dart +++ b/packages/camera/camera_android_camerax/lib/src/preview.dart @@ -70,18 +70,19 @@ class Preview extends UseCase { /// Host API implementation of [Preview]. class PreviewHostApiImpl extends PreviewHostApi { - /// Constructs a [PreviewHostApiImpl]. + /// Constructs an [PreviewHostApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. /// /// An [instanceManager] is typically passed when a copy of an instance - /// contained by an `InstanceManager` is being created. + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. PreviewHostApiImpl({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. @@ -106,10 +107,8 @@ class PreviewHostApiImpl extends PreviewHostApi { /// the ID corresponding to the surface it will provide. Future setSurfaceProviderFromInstance(Preview instance) async { final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No Preview has the identifer of that requested to set the surface provider on.'); - final int surfaceTextureEntryId = await setSurfaceProvider(identifier!); + return surfaceTextureEntryId; } @@ -122,10 +121,8 @@ class PreviewHostApiImpl extends PreviewHostApi { /// Gets the resolution information of the specified [Preview] instance. Future getResolutionInfoFromInstance(Preview instance) async { final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No Preview has the identifer of that requested to get the resolution information for.'); - final ResolutionInfo resolutionInfo = await getResolutionInfo(identifier!); + return resolutionInfo; } } 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 d8cccdb2aa3e..88eab07f0bed 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 @@ -74,10 +74,14 @@ class ProcessCameraProvider extends JavaObject { /// Host API implementation of [ProcessCameraProvider]. class ProcessCameraProviderHostApiImpl extends ProcessCameraProviderHostApi { - /// Creates a [ProcessCameraProviderHostApiImpl]. + /// Constructs an [ProcessCameraProviderHostApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. /// /// An [instanceManager] is typically passed when a copy of an instance - /// contained by an `InstanceManager` is being created. + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. ProcessCameraProviderHostApiImpl( {this.binaryMessenger, InstanceManager? instanceManager}) : super(binaryMessenger: binaryMessenger) { @@ -85,9 +89,6 @@ class ProcessCameraProviderHostApiImpl extends ProcessCameraProviderHostApi { } /// 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. @@ -104,9 +105,6 @@ class ProcessCameraProviderHostApiImpl extends ProcessCameraProviderHostApi { /// the [ProcessCameraProvider] instance. int getProcessCameraProviderIdentifier(ProcessCameraProvider instance) { final int? identifier = instanceManager.getIdentifier(instance); - - assert(identifier != null, - 'No ProcessCameraProvider has the identifer of that which was requested.'); return identifier!; } @@ -186,30 +184,36 @@ class ProcessCameraProviderHostApiImpl extends ProcessCameraProviderHostApi { /// Flutter API Implementation of [ProcessCameraProvider]. class ProcessCameraProviderFlutterApiImpl implements ProcessCameraProviderFlutterApi { - /// Constructs a [ProcessCameraProviderFlutterApiImpl]. + /// Constructs an [ProcessCameraProviderFlutterApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. If left null, it + /// will default to the global instance defined in [JavaObject]. ProcessCameraProviderFlutterApiImpl({ - this.binaryMessenger, + BinaryMessenger? binaryMessenger, InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + }) : _binaryMessenger = binaryMessenger, + _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; + final BinaryMessenger? _binaryMessenger; /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; + final InstanceManager _instanceManager; @override void create(int identifier) { - instanceManager.addHostCreatedInstance( + _instanceManager.addHostCreatedInstance( ProcessCameraProvider.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager), + binaryMessenger: _binaryMessenger, instanceManager: _instanceManager), identifier, onCopy: (ProcessCameraProvider original) { return ProcessCameraProvider.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager); }, ); } diff --git a/packages/camera/camera_android_camerax/lib/src/surface.dart b/packages/camera/camera_android_camerax/lib/src/surface.dart index ea8cf8cb751e..42cad38721c0 100644 --- a/packages/camera/camera_android_camerax/lib/src/surface.dart +++ b/packages/camera/camera_android_camerax/lib/src/surface.dart @@ -8,7 +8,7 @@ import 'java_object.dart'; /// /// See https://developer.android.com/reference/android/view/Surface.html. class Surface extends JavaObject { - /// Creates a detached [UseCase]. + /// Creates a detached [Surface]. Surface.detached({super.binaryMessenger, super.instanceManager}) : super.detached(); diff --git a/packages/camera/camera_android_camerax/lib/src/system_services.dart b/packages/camera/camera_android_camerax/lib/src/system_services.dart index e108b6140bed..8cb2dc835318 100644 --- a/packages/camera/camera_android_camerax/lib/src/system_services.dart +++ b/packages/camera/camera_android_camerax/lib/src/system_services.dart @@ -65,14 +65,14 @@ class SystemServices { /// Host API implementation of [SystemServices]. class SystemServicesHostApiImpl extends SystemServicesHostApi { - /// Creates a [SystemServicesHostApiImpl]. + /// Constructs an [SystemServicesHostApiImpl]. + /// + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. SystemServicesHostApiImpl({this.binaryMessenger}) : 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; /// Requests permission to access the camera and audio if specified. @@ -94,16 +94,11 @@ class SystemServicesHostApiImpl extends SystemServicesHostApi { /// Flutter API implementation of [SystemServices]. class SystemServicesFlutterApiImpl implements SystemServicesFlutterApi { - /// Constructs a [SystemServicesFlutterApiImpl]. - SystemServicesFlutterApiImpl({ - this.binaryMessenger, - }); - - /// Receives binary data across the Flutter platform barrier. + /// Constructs an [SystemServicesFlutterApiImpl]. /// - /// If it is null, the default BinaryMessenger will be used which routes to - /// the host platform. - final BinaryMessenger? binaryMessenger; + /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, + /// which routes to the host platform. + SystemServicesFlutterApiImpl(); /// Callback method for any changes in device orientation. /// diff --git a/packages/camera/camera_android_camerax/lib/src/use_case.dart b/packages/camera/camera_android_camerax/lib/src/use_case.dart index f8910d9c5347..256caf8c01bc 100644 --- a/packages/camera/camera_android_camerax/lib/src/use_case.dart +++ b/packages/camera/camera_android_camerax/lib/src/use_case.dart @@ -4,7 +4,7 @@ import 'java_object.dart'; -/// An object representing the different functionalitites of the camera. +/// An object representing the different functionalities of the camera. /// /// See https://developer.android.com/reference/androidx/camera/core/UseCase. class UseCase extends JavaObject { diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 6ceda6110b06..e6a12454117b 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -61,6 +61,14 @@ class CameraStateTypeData { late CameraStateType value; } +enum LiveDataSupportedType { + cameraState, +} + +class LiveDataSupportedTypeData { + late LiveDataSupportedType value; +} + @HostApi(dartHostTestHandler: 'TestInstanceManagerHostApi') abstract class InstanceManagerHostApi { /// Clear the native `InstanceManager`. @@ -205,7 +213,7 @@ abstract class ObserverFlutterApi { @FlutterApi() abstract class CameraStateErrorFlutterApi { - void create(int identifier, int code, String description); + void create(int identifier, int code); } @HostApi(dartHostTestHandler: 'TestLiveDataHostApi') @@ -213,13 +221,11 @@ abstract class LiveDataHostApi { void observe(int identifier, int observerIdentifier); void removeObservers(int identifier); - - void cast(int oldIdentifier, int newIdentifier); } @FlutterApi() abstract class LiveDataFlutterApi { - void create(int identifier); + void create(int identifier, LiveDataSupportedTypeData type); } @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 004ce5558f10..bfcedfe6b901 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 @@ -815,8 +815,6 @@ abstract class TestLiveDataHostApi { void removeObservers(int identifier); - void cast(int oldIdentifier, int newIdentifier); - static void setup(TestLiveDataHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( @@ -859,28 +857,6 @@ abstract class TestLiveDataHostApi { }); } } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.LiveDataHostApi.cast', 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.LiveDataHostApi.cast was null.'); - final List args = (message as List?)!; - final int? arg_oldIdentifier = (args[0] as int?); - assert(arg_oldIdentifier != null, - 'Argument for dev.flutter.pigeon.LiveDataHostApi.cast was null, expected non-null int.'); - final int? arg_newIdentifier = (args[1] as int?); - assert(arg_newIdentifier != null, - 'Argument for dev.flutter.pigeon.LiveDataHostApi.cast was null, expected non-null int.'); - api.cast(arg_oldIdentifier!, arg_newIdentifier!); - return []; - }); - } - } } } From 83aea107ec8796d382e59b86100c30dfa17bee5a Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 1 May 2023 15:54:03 -0700 Subject: [PATCH 51/71] Fix java tests --- .../camerax/CameraAndroidCameraxPlugin.java | 6 +-- .../camerax/CameraInfoHostApiImpl.java | 5 +-- .../camerax/CameraStateFlutterApiWrapper.java | 2 +- .../camerax/ObserverFlutterApiWrapper.java | 8 +++- .../CameraAndroidCameraxPluginTest.java | 10 +++++ .../plugins/camerax/CameraInfoTest.java | 10 ++++- .../plugins/camerax/CameraStateErrorTest.java | 9 ++--- .../plugins/camerax/CameraStateTest.java | 37 ++++++++++++++++--- .../flutter/plugins/camerax/LiveDataTest.java | 36 ++++++++---------- .../flutter/plugins/camerax/ObserverTest.java | 23 ++++++++---- 10 files changed, 97 insertions(+), 49 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 f6490d004193..f91f085da026 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 @@ -21,10 +21,10 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, Activity private FlutterPluginBinding pluginBinding; private ImageAnalysisHostApiImpl imageAnalysisHostApiImpl; private ImageCaptureHostApiImpl imageCaptureHostApiImpl; - private LiveDataHostApiImpl liveDataHostApiImpl; public SystemServicesHostApiImpl systemServicesHostApiImpl; - @VisibleForTesting ProcessCameraProviderHostApiImpl processCameraProviderHostApiImpl; + @VisibleForTesting public ProcessCameraProviderHostApiImpl processCameraProviderHostApiImpl; + @VisibleForTesting public LiveDataHostApiImpl liveDataHostApiImpl; /** * Initialize this within the {@code #configureFlutterEngine} of a Flutter activity or fragment. @@ -113,7 +113,7 @@ public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBi } else { ProxyLifecycleProvider proxyLifecycleProvider = new ProxyLifecycleProvider(activity); processCameraProviderHostApiImpl.setLifecycleOwner(proxyLifecycleProvider); - liveDataHostApiImpl.setLifecycleOwner(proxyLifecycleProvider); // TODO(camsim99): add test for this. + liveDataHostApiImpl.setLifecycleOwner(proxyLifecycleProvider); } systemServicesHostApiImpl.setActivity(activity); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index ac675dc2eddf..be06452fdd28 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -18,11 +18,12 @@ public class CameraInfoHostApiImpl implements CameraInfoHostApi { private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; - @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); + @VisibleForTesting public LiveDataFlutterApiWrapper liveDataFlutterApiWrapper; public CameraInfoHostApiImpl(@NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; + this.liveDataFlutterApiWrapper = new LiveDataFlutterApiWrapper(binaryMessenger, instanceManager); } /** @@ -48,8 +49,6 @@ public Long getLiveCameraState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); LiveData liveCameraState = cameraInfo.getCameraState(); - LiveDataFlutterApiWrapper liveDataFlutterApiWrapper = - new LiveDataFlutterApiWrapper(binaryMessenger, instanceManager); liveDataFlutterApiWrapper.create(liveCameraState, LiveDataSupportedType.CAMERA_STATE, reply -> {}); return instanceManager.getIdentifierForStrongReference(liveCameraState); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java index ce3221318d4f..4439e68d1384 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java @@ -92,7 +92,7 @@ public static CameraStateType getCameraStateType(@NonNull CameraState.Type type) } if (cameraStateType == null) { - throw new IllegalArgumentException("The CameraState.Type passed was not recognized"); + throw new IllegalArgumentException("The CameraState.Type passed to this method was not recognized."); } return cameraStateType; } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java index ffa00cb65c3b..85a743a2ca94 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java @@ -23,6 +23,8 @@ public class ObserverFlutterApiWrapper { private final InstanceManager instanceManager; private ObserverFlutterApi observerFlutterApi; + @VisibleForTesting public CameraStateFlutterApiWrapper cameraStateFlutterApiWrapper; + /** * Constructs a {@link ObserverFlutterApiWrapper}. * @@ -48,7 +50,11 @@ public void onChanged( // Cast value to type of data that is being observed if supported by this plugin. if (value instanceof CameraState) { CameraState state = (CameraState) value; - new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager) + + if (cameraStateFlutterApiWrapper == null) { + cameraStateFlutterApiWrapper = new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager); + } + cameraStateFlutterApiWrapper .create(state, CameraStateFlutterApiWrapper.getCameraStateType(state.getType()), state.getError(), reply -> {}); } else { throw new UnsupportedOperationException( diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraAndroidCameraxPluginTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraAndroidCameraxPluginTest.java index a73654d0e69a..d7b81dba389b 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraAndroidCameraxPluginTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraAndroidCameraxPluginTest.java @@ -17,6 +17,8 @@ import androidx.lifecycle.LifecycleOwner; import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding; import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; +import io.flutter.plugins.camerax.LiveDataHostApiImpl; + import org.junit.Rule; import org.junit.Test; import org.mockito.Mock; @@ -36,17 +38,21 @@ public void onAttachedToActivity_setsLifecycleOwnerAsActivityIfLifecycleOwner() mock(Activity.class, withSettings().extraInterfaces(LifecycleOwner.class)); ProcessCameraProviderHostApiImpl mockProcessCameraProviderHostApiImpl = mock(ProcessCameraProviderHostApiImpl.class); + LiveDataHostApiImpl mockLiveDataHostApiImpl = mock(LiveDataHostApiImpl.class); + doNothing().when(plugin).setUp(any(), any(), any()); when(activityPluginBinding.getActivity()).thenReturn(mockActivity); plugin.processCameraProviderHostApiImpl = mockProcessCameraProviderHostApiImpl; + plugin.liveDataHostApiImpl = mockLiveDataHostApiImpl; plugin.systemServicesHostApiImpl = mock(SystemServicesHostApiImpl.class); plugin.onAttachedToEngine(flutterPluginBinding); plugin.onAttachedToActivity(activityPluginBinding); verify(mockProcessCameraProviderHostApiImpl).setLifecycleOwner(any(LifecycleOwner.class)); + verify(mockLiveDataHostApiImpl).setLifecycleOwner(any(LifecycleOwner.class)); } @Test @@ -56,12 +62,14 @@ public void onAttachedToActivity_setsLifecycleOwnerAsActivityIfLifecycleOwner() Activity mockActivity = mock(Activity.class); ProcessCameraProviderHostApiImpl mockProcessCameraProviderHostApiImpl = mock(ProcessCameraProviderHostApiImpl.class); + LiveDataHostApiImpl mockLiveDataHostApiImpl = mock(LiveDataHostApiImpl.class); doNothing().when(plugin).setUp(any(), any(), any()); when(activityPluginBinding.getActivity()).thenReturn(mockActivity); when(mockActivity.getApplication()).thenReturn(mock(Application.class)); plugin.processCameraProviderHostApiImpl = mockProcessCameraProviderHostApiImpl; + plugin.liveDataHostApiImpl = mockLiveDataHostApiImpl; plugin.systemServicesHostApiImpl = mock(SystemServicesHostApiImpl.class); plugin.onAttachedToEngine(flutterPluginBinding); @@ -69,5 +77,7 @@ public void onAttachedToActivity_setsLifecycleOwnerAsActivityIfLifecycleOwner() verify(mockProcessCameraProviderHostApiImpl) .setLifecycleOwner(any(ProxyLifecycleProvider.class)); + verify(mockLiveDataHostApiImpl) + .setLifecycleOwner(any(ProxyLifecycleProvider.class)); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java index f063f3c69704..b6645364e392 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java @@ -16,6 +16,9 @@ import androidx.camera.core.CameraState; import androidx.lifecycle.LiveData; import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataFlutterApi.Reply; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedType; + import java.util.Objects; import org.junit.After; import org.junit.Before; @@ -60,16 +63,19 @@ public void getSensorRotationDegrees_makesCallToRetrieveSensorRotationDegrees() public void getLiveCameraState_makesCallToRetrieveLiveCameraState() { final CameraInfoHostApiImpl cameraInfoHostApiImpl = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); + final LiveDataFlutterApiWrapper mockLiveDataFlutterApiWrapper = mock(LiveDataFlutterApiWrapper.class); final Long mockCameraInfoIdentifier = 27L; @SuppressWarnings("unchecked") - final LiveData mockLiveCameraState = mock(LiveData.class); + final LiveData mockLiveCameraState = (LiveData) mock(LiveData.class); testInstanceManager.addDartCreatedInstance(mockCameraInfo, mockCameraInfoIdentifier); - + cameraInfoHostApiImpl.liveDataFlutterApiWrapper = mockLiveDataFlutterApiWrapper; when(mockCameraInfo.getCameraState()).thenReturn(mockLiveCameraState); final Long liveCameraStateIdentifier = cameraInfoHostApiImpl.getLiveCameraState(mockCameraInfoIdentifier); + + verify(mockLiveDataFlutterApiWrapper).create(eq(mockLiveCameraState), eq(LiveDataSupportedType.CAMERA_STATE), any()); assertEquals( liveCameraStateIdentifier, testInstanceManager.getIdentifierForStrongReference(mockLiveCameraState)); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java index 3c50556991ba..a82608958522 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java @@ -31,12 +31,12 @@ public class CameraStateErrorTest { @Before public void setUp() { - instanceManager = InstanceManager.open(identifier -> {}); + instanceManager = InstanceManager.create(identifier -> {}); } @After public void tearDown() { - instanceManager.close(); + instanceManager.clear(); } @Test @@ -46,13 +46,12 @@ public void flutterApiCreate_makesCallToDartToCreateInstance() { flutterApi.setApi(mockFlutterApi); final Long code = 0L; - final String description = "testString"; - flutterApi.create(mockCameraStateError, code, description, reply -> {}); + flutterApi.create(mockCameraStateError, code, reply -> {}); final long instanceIdentifier = Objects.requireNonNull( instanceManager.getIdentifierForStrongReference(mockCameraStateError)); - verify(mockFlutterApi).create(eq(instanceIdentifier), eq(code), eq(description), any()); + verify(mockFlutterApi).create(eq(instanceIdentifier), eq(code), any()); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java index 05939ba4c73b..4f42e4ade379 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java @@ -5,6 +5,7 @@ package io.flutter.plugins.camerax; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -36,12 +37,12 @@ public class CameraStateTest { @Before public void setUp() { - instanceManager = InstanceManager.open(identifier -> {}); + instanceManager = InstanceManager.create(identifier -> {}); } @After public void tearDown() { - instanceManager.close(); + instanceManager.clear(); } @Test @@ -50,7 +51,7 @@ public void flutterApiCreate_makesCallToDartToCreateInstance() { new CameraStateFlutterApiWrapper(mockBinaryMessenger, instanceManager); flutterApi.setApi(mockFlutterApi); - final CameraState.Type type = CameraState.Type.OPEN; + final CameraStateType type = CameraStateType.OPEN; final CameraState.StateError mockError = mock(CameraState.StateError.class); flutterApi.create(mockCameraState, type, mockError, reply -> {}); @@ -67,8 +68,32 @@ public void flutterApiCreate_makesCallToDartToCreateInstance() { eq(Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockError))), any()); - assertEquals(cameraStateTypeDataCaptor.getValue().getValue(), CameraStateType.OPEN); + assertEquals(cameraStateTypeDataCaptor.getValue().getValue(), type); } -} -// TODO(camsim99): Test static method I added. + @Test + public void getCameraStateType_returnsExpectedType() { + for (CameraState.Type type : CameraState.Type.values()) { + switch(type) { + case CLOSED: + assertEquals(CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.CLOSED); + break; + case CLOSING: + assertEquals(CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.CLOSING); + break; + case OPEN: + assertEquals(CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.OPEN); + break; + case OPENING: + assertEquals(CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.OPENING); + break; + case PENDING_OPEN: + assertEquals(CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.PENDING_OPEN); + break; + default: + // There is a CameraState.Type unhandled by this method. + fail(); + } + } + } +} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java index 1e44bb8a5431..4158cf9881e0 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -4,6 +4,7 @@ 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; @@ -16,11 +17,15 @@ import androidx.lifecycle.Observer; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataFlutterApi; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedType; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedTypeData; + import java.util.Objects; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; @@ -38,12 +43,12 @@ public class LiveDataTest { @Before public void setUp() { - instanceManager = InstanceManager.open(identifier -> {}); + instanceManager = InstanceManager.create(identifier -> {}); } @After public void tearDown() { - instanceManager.close(); + instanceManager.clear(); } @Test @@ -80,32 +85,23 @@ public void removeObservers_makesCallToRemoveObserversFromLiveDataInstance() { verify(mockLiveData).removeObservers(mockLifecycleOwner); } - @Test - public void cast_addsOldInstanceWithNewIdentifier() { - final InstanceManager spyInstanceManager = spy(instanceManager); - final LiveDataHostApiImpl hostApi = - new LiveDataHostApiImpl(mockBinaryMessenger, spyInstanceManager); - final long instanceIdentifier = 56; - final long newIdentifier = 98; - final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); - - spyInstanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); - - hostApi.cast(instanceIdentifier, newIdentifier); - - verify(spyInstanceManager).addDartCreatedInstance(mockLiveData, newIdentifier); - } - @Test public void flutterApiCreate_makesCallToDartToCreateInstance() { final LiveDataFlutterApiWrapper flutterApi = new LiveDataFlutterApiWrapper(mockBinaryMessenger, instanceManager); + final LiveDataSupportedType liveDataType = LiveDataSupportedType.CAMERA_STATE; flutterApi.setApi(mockFlutterApi); - flutterApi.create(mockLiveData, reply -> {}); + + final ArgumentCaptor liveDataSupportedTypeDataCaptor = + ArgumentCaptor.forClass(LiveDataSupportedTypeData.class); + + + flutterApi.create(mockLiveData, liveDataType, reply -> {}); final long instanceIdentifier = Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockLiveData)); - verify(mockFlutterApi).create(eq(instanceIdentifier), any()); + verify(mockFlutterApi).create(eq(instanceIdentifier), liveDataSupportedTypeDataCaptor.capture(), any()); + assertEquals(liveDataSupportedTypeDataCaptor.getValue().getValue(), liveDataType); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java index 9588f795fd25..04908c5ca17d 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java @@ -7,11 +7,14 @@ 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.CameraState; import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateFlutterApi.Reply; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateType; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ObserverFlutterApi; import java.util.Objects; import org.junit.After; @@ -36,12 +39,12 @@ public class ObserverTest { @Before public void setUp() { - instanceManager = InstanceManager.open(identifier -> {}); + instanceManager = InstanceManager.create(identifier -> {}); } @After public void tearDown() { - instanceManager.close(); + instanceManager.clear(); } @Test @@ -51,7 +54,7 @@ public void create_createsObserverInstance() { new ObserverHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); final long instanceIdentifier = 0; - when(mockProxy.create(mockBinaryMessenger, instanceManager)).thenReturn(mockObserver); + when(mockProxy.create(mockBinaryMessenger, instanceManager)).thenReturn(mockObserver); hostApi.create(instanceIdentifier); @@ -59,24 +62,28 @@ public void create_createsObserverInstance() { } @Test - public void onChanged_makesCallToDartCallback() { + public void onChanged_makesCallToDartCallbackForCameraState() { final ObserverFlutterApiWrapper flutterApi = new ObserverFlutterApiWrapper(mockBinaryMessenger, instanceManager); final ObserverHostApiImpl.ObserverImpl instance = new ObserverHostApiImpl.ObserverImpl(mockBinaryMessenger, instanceManager); + final CameraStateFlutterApiWrapper mockCameraStateFlutterApiWrapper = mock(CameraStateFlutterApiWrapper.class); final long instanceIdentifier = 0; - final CameraState mockCameraState = CameraState.create(CameraState.Type.CLOSED); - Long mockCameraStateIdentifier = instanceManager.addHostCreatedInstance(mockCameraState); + final CameraState.StateError testCameraStateError = CameraState.StateError.create(CameraState.ERROR_CAMERA_IN_USE); + final CameraState testCameraState = CameraState.create(CameraState.Type.CLOSED, testCameraStateError); + Long mockCameraStateIdentifier = instanceManager.addHostCreatedInstance(testCameraState); flutterApi.setApi(mockFlutterApi); instance.setApi(flutterApi); - + flutterApi.cameraStateFlutterApiWrapper = mockCameraStateFlutterApiWrapper; + instanceManager.addDartCreatedInstance(instance, instanceIdentifier); - instance.onChanged(mockCameraState); + instance.onChanged(testCameraState); verify(mockFlutterApi) .onChanged( eq(instanceIdentifier), eq(Objects.requireNonNull(mockCameraStateIdentifier)), any()); + verify(mockCameraStateFlutterApiWrapper).create(eq(testCameraState), eq(CameraStateType.CLOSED), eq(testCameraStateError), any()); } } From 5f435e8fdbf453de4d4d2b3ed290a58d7a50575e Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 1 May 2023 16:08:42 -0700 Subject: [PATCH 52/71] Fix dart tests --- .../camerax/CameraAndroidCameraxPlugin.java | 5 +- .../plugins/camerax/CameraHostApiImpl.java | 3 +- .../camerax/CameraInfoFlutterApiImpl.java | 4 +- .../camerax/CameraInfoHostApiImpl.java | 9 +- .../CameraStateErrorFlutterApiWrapper.java | 4 +- .../camerax/CameraStateFlutterApiWrapper.java | 16 +- .../camerax/GeneratedCameraXLibrary.java | 460 ++++++++++++------ .../camerax/LiveDataFlutterApiWrapper.java | 9 +- .../camerax/ObserverFlutterApiWrapper.java | 10 +- .../CameraAndroidCameraxPluginTest.java | 6 +- .../plugins/camerax/CameraInfoTest.java | 8 +- .../plugins/camerax/CameraStateTest.java | 40 +- .../flutter/plugins/camerax/LiveDataTest.java | 13 +- .../flutter/plugins/camerax/ObserverTest.java | 21 +- .../lib/src/camerax_library.g.dart | 193 +++++--- .../test/android_camera_camerax_test.dart | 23 +- .../test/camera_info_test.dart | 8 +- .../test/camera_state_error_test.dart | 3 - .../test/camera_state_test.dart | 4 +- .../test/live_data_test.dart | 36 +- .../test/test_camerax_library.g.dart | 440 +++++++++++------ 21 files changed, 800 insertions(+), 515 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 f91f085da026..e971c3d764e3 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 @@ -100,12 +100,9 @@ public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBi Context applicationContext = activity.getApplicationContext(); setUp( - pluginBinding.getBinaryMessenger(), - applicationContext, - pluginBinding.getTextureRegistry()); + pluginBinding.getBinaryMessenger(), applicationContext, pluginBinding.getTextureRegistry()); updateContext(applicationContext); - if (activity instanceof LifecycleOwner) { processCameraProviderHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); liveDataHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java index 8406f8c9a239..98f5f74b959d 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java @@ -15,7 +15,8 @@ public class CameraHostApiImpl implements CameraHostApi { private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; - public CameraHostApiImpl(@NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + public CameraHostApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java index f0309c4f845a..bb9db6a2c653 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java @@ -17,7 +17,9 @@ public CameraInfoFlutterApiImpl( this.instanceManager = instanceManager; } - /** Creates a {@link CameraInfo} instance in Dart. {@code reply} is not used so it can be empty. */ + /** + * Creates a {@link CameraInfo} instance in Dart. {@code reply} is not used so it can be empty. + */ void create(CameraInfo cameraInfo, Reply reply) { create(instanceManager.addHostCreatedInstance(cameraInfo), reply); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index be06452fdd28..ab31e1100ed9 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -20,10 +20,12 @@ public class CameraInfoHostApiImpl implements CameraInfoHostApi { @VisibleForTesting public LiveDataFlutterApiWrapper liveDataFlutterApiWrapper; - public CameraInfoHostApiImpl(@NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + public CameraInfoHostApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; - this.liveDataFlutterApiWrapper = new LiveDataFlutterApiWrapper(binaryMessenger, instanceManager); + this.liveDataFlutterApiWrapper = + new LiveDataFlutterApiWrapper(binaryMessenger, instanceManager); } /** @@ -49,7 +51,8 @@ public Long getLiveCameraState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); LiveData liveCameraState = cameraInfo.getCameraState(); - liveDataFlutterApiWrapper.create(liveCameraState, LiveDataSupportedType.CAMERA_STATE, reply -> {}); + liveDataFlutterApiWrapper.create( + liveCameraState, LiveDataSupportedType.CAMERA_STATE, reply -> {}); return instanceManager.getIdentifierForStrongReference(liveCameraState); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java index 1149027e5f5c..f4c8d6ee4afd 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateErrorFlutterApiWrapper.java @@ -49,9 +49,7 @@ public void create( } } - /** - * Sets the Flutter API used to send messages to Dart. - */ + /** Sets the Flutter API used to send messages to Dart. */ @VisibleForTesting void setApi(@NonNull CameraStateErrorFlutterApi api) { this.cameraStateErrorFlutterApi = api; diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java index 4439e68d1384..e6e83c4af995 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java @@ -55,10 +55,7 @@ public void create( // We need to create a CameraStateError if there is a problem with the current camera // state to send to the Dart side. new CameraStateErrorFlutterApiWrapper(binaryMessenger, instanceManager) - .create( - error, - Long.valueOf(error.getCode()), - reply -> {}); + .create(error, Long.valueOf(error.getCode()), reply -> {}); } cameraStateFlutterApi.create( @@ -68,9 +65,7 @@ public void create( callback); } - /** - * Convert CameraX CameraState.Type to CameraStateType that the Dart side understands. - */ + /** Convert CameraX CameraState.Type to CameraStateType that the Dart side understands. */ public static CameraStateType getCameraStateType(@NonNull CameraState.Type type) { CameraStateType cameraStateType = null; switch (type) { @@ -92,14 +87,13 @@ public static CameraStateType getCameraStateType(@NonNull CameraState.Type type) } if (cameraStateType == null) { - throw new IllegalArgumentException("The CameraState.Type passed to this method was not recognized."); + throw new IllegalArgumentException( + "The CameraState.Type passed to this method was not recognized."); } return cameraStateType; } - /** - * Sets the Flutter API used to send messages to Dart. - */ + /** Sets the Flutter API used to send messages to Dart. */ @VisibleForTesting void setApi(@NonNull CameraStateFlutterApi api) { this.cameraStateFlutterApi = api; 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 01bb4b2363f5..fae7f171ab4e 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; } @@ -63,7 +60,7 @@ protected static ArrayList wrapError(@NonNull Throwable exception) { /** * The states the camera can be in. * - * See https://developer.android.com/reference/androidx/camera/core/CameraState.Type. + *

See https://developer.android.com/reference/androidx/camera/core/CameraState.Type. */ public enum CameraStateType { CLOSED(0), @@ -155,9 +152,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; } } @@ -344,7 +345,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(); @@ -352,8 +353,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<>( @@ -365,8 +370,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; } @@ -387,7 +391,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 = @@ -402,8 +408,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; } @@ -423,7 +428,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); @@ -432,6 +437,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -444,22 +450,26 @@ 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); - @NonNull + @NonNull Long getLiveCameraState(@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) -> { @@ -467,10 +477,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; } @@ -483,7 +494,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -491,10 +504,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getLiveCameraState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getLiveCameraState( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -514,7 +528,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); @@ -523,6 +537,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -537,15 +552,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<>( @@ -558,10 +577,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; } @@ -583,10 +603,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; } @@ -606,7 +628,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); @@ -615,7 +637,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()); @@ -629,13 +653,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); @@ -646,12 +673,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) -> { @@ -678,7 +711,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) -> { @@ -686,10 +721,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; } @@ -702,7 +738,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) -> { @@ -712,10 +750,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; } @@ -728,7 +771,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) -> { @@ -737,10 +782,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; } @@ -753,7 +800,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) -> { @@ -762,10 +811,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; } @@ -778,7 +827,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) -> { @@ -788,8 +839,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; } @@ -809,7 +859,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); @@ -818,10 +868,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)); @@ -830,14 +883,14 @@ public void create(@NonNull Long identifierArg, @NonNull Reply callback) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraHostApi { - @NonNull + @NonNull Long getCameraInfo(@NonNull Long identifier); /** The codec used by CameraHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ + /** Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHostApi api) { { BasicMessageChannel channel = @@ -850,10 +903,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHost ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -873,7 +926,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); @@ -882,6 +935,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -921,9 +975,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(); @@ -931,12 +987,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) -> { @@ -965,7 +1027,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) -> { @@ -974,10 +1038,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; } @@ -990,7 +1055,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) -> { @@ -998,8 +1065,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; } @@ -1019,7 +1085,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); @@ -1028,18 +1094,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)); @@ -1080,21 +1153,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 = @@ -1109,10 +1185,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; } @@ -1125,7 +1203,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) -> { @@ -1133,10 +1213,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; } @@ -1149,7 +1230,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) -> { @@ -1157,8 +1240,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; } @@ -1179,10 +1261,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; } @@ -1224,7 +1307,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); @@ -1234,7 +1320,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 = @@ -1249,10 +1338,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; } @@ -1274,10 +1365,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; } @@ -1310,7 +1402,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); @@ -1353,7 +1446,7 @@ public CameraStateFlutterApi(@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); @@ -1362,7 +1455,12 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return CameraStateFlutterApiCodec.INSTANCE; } - public void create(@NonNull Long identifierArg, @NonNull CameraStateTypeData typeArg, @Nullable Long errorIdentifierArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull CameraStateTypeData typeArg, + @Nullable Long errorIdentifierArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraStateFlutterApi.create", getCodec()); @@ -1411,8 +1509,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<>( @@ -1425,10 +1527,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; } @@ -1450,10 +1553,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; } @@ -1466,7 +1570,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) -> { @@ -1476,8 +1582,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; } @@ -1498,7 +1603,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 = @@ -1513,8 +1620,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; } @@ -1535,7 +1641,9 @@ public interface ObserverHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `ObserverHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ObserverHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHostApi api) { { BasicMessageChannel channel = @@ -1550,8 +1658,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHo try { api.create((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1571,7 +1678,7 @@ public ObserverFlutterApi(@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); @@ -1580,7 +1687,11 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void onChanged(@NonNull Long identifierArg, @NonNull Long valueIdentifierArg, @NonNull Reply callback) { + + public void onChanged( + @NonNull Long identifierArg, + @NonNull Long valueIdentifierArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ObserverFlutterApi.onChanged", getCodec()); @@ -1597,7 +1708,7 @@ public CameraStateErrorFlutterApi(@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); @@ -1606,7 +1717,9 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Long codeArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, @NonNull Long codeArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraStateErrorFlutterApi.create", getCodec()); @@ -1626,7 +1739,9 @@ public interface LiveDataHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `LiveDataHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `LiveDataHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHostApi api) { { BasicMessageChannel channel = @@ -1640,10 +1755,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo Number identifierArg = (Number) args.get(0); Number observerIdentifierArg = (Number) args.get(1); try { - api.observe((identifierArg == null) ? null : identifierArg.longValue(), (observerIdentifierArg == null) ? null : observerIdentifierArg.longValue()); + api.observe( + (identifierArg == null) ? null : identifierArg.longValue(), + (observerIdentifierArg == null) ? null : observerIdentifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1666,8 +1782,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo try { api.removeObservers((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1714,7 +1829,7 @@ public LiveDataFlutterApi(@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); @@ -1723,7 +1838,11 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return LiveDataFlutterApiCodec.INSTANCE; } - public void create(@NonNull Long identifierArg, @NonNull LiveDataSupportedTypeData typeArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull LiveDataSupportedTypeData typeArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.LiveDataFlutterApi.create", getCodec()); @@ -1740,7 +1859,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); @@ -1749,6 +1868,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1757,7 +1877,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()); @@ -1769,7 +1893,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); @@ -1778,7 +1902,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 = @@ -1791,10 +1917,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; } @@ -1817,8 +1943,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; } @@ -1838,7 +1963,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); @@ -1847,7 +1972,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()); @@ -1864,7 +1995,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); @@ -1873,12 +2004,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/LiveDataFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java index bd536d149411..50b10fc76204 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java @@ -42,9 +42,14 @@ public LiveDataFlutterApiWrapper( * this method does nothing. */ public void create( - @NonNull LiveData instance, @NonNull LiveDataSupportedType type, @NonNull LiveDataFlutterApi.Reply callback) { + @NonNull LiveData instance, + @NonNull LiveDataSupportedType type, + @NonNull LiveDataFlutterApi.Reply callback) { if (!instanceManager.containsInstance(instance)) { - liveDataFlutterApi.create(instanceManager.addHostCreatedInstance(instance), new LiveDataSupportedTypeData.Builder().setValue(type).build(), callback); + liveDataFlutterApi.create( + instanceManager.addHostCreatedInstance(instance), + new LiveDataSupportedTypeData.Builder().setValue(type).build(), + callback); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java index 85a743a2ca94..a337385f79a3 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java @@ -52,10 +52,14 @@ public void onChanged( CameraState state = (CameraState) value; if (cameraStateFlutterApiWrapper == null) { - cameraStateFlutterApiWrapper = new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager); + cameraStateFlutterApiWrapper = + new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager); } - cameraStateFlutterApiWrapper - .create(state, CameraStateFlutterApiWrapper.getCameraStateType(state.getType()), state.getError(), reply -> {}); + cameraStateFlutterApiWrapper.create( + state, + CameraStateFlutterApiWrapper.getCameraStateType(state.getType()), + state.getError(), + reply -> {}); } else { throw new UnsupportedOperationException( "The type of value in observance is not wrapped by this plugin."); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraAndroidCameraxPluginTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraAndroidCameraxPluginTest.java index d7b81dba389b..4a2197624b65 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraAndroidCameraxPluginTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraAndroidCameraxPluginTest.java @@ -17,8 +17,6 @@ import androidx.lifecycle.LifecycleOwner; import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding; import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; -import io.flutter.plugins.camerax.LiveDataHostApiImpl; - import org.junit.Rule; import org.junit.Test; import org.mockito.Mock; @@ -40,7 +38,6 @@ public void onAttachedToActivity_setsLifecycleOwnerAsActivityIfLifecycleOwner() mock(ProcessCameraProviderHostApiImpl.class); LiveDataHostApiImpl mockLiveDataHostApiImpl = mock(LiveDataHostApiImpl.class); - doNothing().when(plugin).setUp(any(), any(), any()); when(activityPluginBinding.getActivity()).thenReturn(mockActivity); @@ -77,7 +74,6 @@ public void onAttachedToActivity_setsLifecycleOwnerAsActivityIfLifecycleOwner() verify(mockProcessCameraProviderHostApiImpl) .setLifecycleOwner(any(ProxyLifecycleProvider.class)); - verify(mockLiveDataHostApiImpl) - .setLifecycleOwner(any(ProxyLifecycleProvider.class)); + verify(mockLiveDataHostApiImpl).setLifecycleOwner(any(ProxyLifecycleProvider.class)); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java index b6645364e392..63f36c4071b7 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java @@ -16,9 +16,7 @@ import androidx.camera.core.CameraState; import androidx.lifecycle.LiveData; import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataFlutterApi.Reply; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedType; - import java.util.Objects; import org.junit.After; import org.junit.Before; @@ -63,7 +61,8 @@ public void getSensorRotationDegrees_makesCallToRetrieveSensorRotationDegrees() public void getLiveCameraState_makesCallToRetrieveLiveCameraState() { final CameraInfoHostApiImpl cameraInfoHostApiImpl = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); - final LiveDataFlutterApiWrapper mockLiveDataFlutterApiWrapper = mock(LiveDataFlutterApiWrapper.class); + final LiveDataFlutterApiWrapper mockLiveDataFlutterApiWrapper = + mock(LiveDataFlutterApiWrapper.class); final Long mockCameraInfoIdentifier = 27L; @SuppressWarnings("unchecked") final LiveData mockLiveCameraState = (LiveData) mock(LiveData.class); @@ -75,7 +74,8 @@ public void getLiveCameraState_makesCallToRetrieveLiveCameraState() { final Long liveCameraStateIdentifier = cameraInfoHostApiImpl.getLiveCameraState(mockCameraInfoIdentifier); - verify(mockLiveDataFlutterApiWrapper).create(eq(mockLiveCameraState), eq(LiveDataSupportedType.CAMERA_STATE), any()); + verify(mockLiveDataFlutterApiWrapper) + .create(eq(mockLiveCameraState), eq(LiveDataSupportedType.CAMERA_STATE), any()); assertEquals( liveCameraStateIdentifier, testInstanceManager.getIdentifierForStrongReference(mockLiveCameraState)); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java index 4f42e4ade379..c3a41070db62 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java @@ -74,25 +74,29 @@ public void flutterApiCreate_makesCallToDartToCreateInstance() { @Test public void getCameraStateType_returnsExpectedType() { for (CameraState.Type type : CameraState.Type.values()) { - switch(type) { + switch (type) { case CLOSED: - assertEquals(CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.CLOSED); - break; - case CLOSING: - assertEquals(CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.CLOSING); - break; - case OPEN: - assertEquals(CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.OPEN); - break; - case OPENING: - assertEquals(CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.OPENING); - break; - case PENDING_OPEN: - assertEquals(CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.PENDING_OPEN); - break; - default: - // There is a CameraState.Type unhandled by this method. - fail(); + assertEquals( + CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.CLOSED); + break; + case CLOSING: + assertEquals( + CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.CLOSING); + break; + case OPEN: + assertEquals(CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.OPEN); + break; + case OPENING: + assertEquals( + CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.OPENING); + break; + case PENDING_OPEN: + assertEquals( + CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.PENDING_OPEN); + break; + default: + // There is a CameraState.Type unhandled by this method. + fail(); } } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java index 4158cf9881e0..d525b3481fe0 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -8,7 +8,6 @@ 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 androidx.camera.core.CameraState; @@ -19,7 +18,6 @@ import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataFlutterApi; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedType; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedTypeData; - import java.util.Objects; import org.junit.After; import org.junit.Before; @@ -33,8 +31,7 @@ public class LiveDataTest { @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - @Mock - public LiveData mockLiveData; + @Mock public LiveData mockLiveData; @Mock public BinaryMessenger mockBinaryMessenger; @Mock public LiveDataFlutterApi mockFlutterApi; @@ -89,19 +86,19 @@ public void removeObservers_makesCallToRemoveObserversFromLiveDataInstance() { public void flutterApiCreate_makesCallToDartToCreateInstance() { final LiveDataFlutterApiWrapper flutterApi = new LiveDataFlutterApiWrapper(mockBinaryMessenger, instanceManager); - final LiveDataSupportedType liveDataType = LiveDataSupportedType.CAMERA_STATE; + final LiveDataSupportedType liveDataType = LiveDataSupportedType.CAMERA_STATE; flutterApi.setApi(mockFlutterApi); final ArgumentCaptor liveDataSupportedTypeDataCaptor = - ArgumentCaptor.forClass(LiveDataSupportedTypeData.class); - + ArgumentCaptor.forClass(LiveDataSupportedTypeData.class); flutterApi.create(mockLiveData, liveDataType, reply -> {}); final long instanceIdentifier = Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(mockLiveData)); - verify(mockFlutterApi).create(eq(instanceIdentifier), liveDataSupportedTypeDataCaptor.capture(), any()); + verify(mockFlutterApi) + .create(eq(instanceIdentifier), liveDataSupportedTypeDataCaptor.capture(), any()); assertEquals(liveDataSupportedTypeDataCaptor.getValue().getValue(), liveDataType); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java index 04908c5ca17d..2c628905db6a 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java @@ -13,7 +13,6 @@ import androidx.camera.core.CameraState; import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateFlutterApi.Reply; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateType; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ObserverFlutterApi; import java.util.Objects; @@ -28,8 +27,7 @@ public class ObserverTest { @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - @Mock - public ObserverHostApiImpl.ObserverImpl mockObserver; + @Mock public ObserverHostApiImpl.ObserverImpl mockObserver; @Mock public BinaryMessenger mockBinaryMessenger; @Mock public ObserverFlutterApi mockFlutterApi; @@ -54,7 +52,8 @@ public void create_createsObserverInstance() { new ObserverHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); final long instanceIdentifier = 0; - when(mockProxy.create(mockBinaryMessenger, instanceManager)).thenReturn(mockObserver); + when(mockProxy.create(mockBinaryMessenger, instanceManager)) + .thenReturn(mockObserver); hostApi.create(instanceIdentifier); @@ -67,16 +66,19 @@ public void onChanged_makesCallToDartCallbackForCameraState() { new ObserverFlutterApiWrapper(mockBinaryMessenger, instanceManager); final ObserverHostApiImpl.ObserverImpl instance = new ObserverHostApiImpl.ObserverImpl(mockBinaryMessenger, instanceManager); - final CameraStateFlutterApiWrapper mockCameraStateFlutterApiWrapper = mock(CameraStateFlutterApiWrapper.class); + final CameraStateFlutterApiWrapper mockCameraStateFlutterApiWrapper = + mock(CameraStateFlutterApiWrapper.class); final long instanceIdentifier = 0; - final CameraState.StateError testCameraStateError = CameraState.StateError.create(CameraState.ERROR_CAMERA_IN_USE); - final CameraState testCameraState = CameraState.create(CameraState.Type.CLOSED, testCameraStateError); + final CameraState.StateError testCameraStateError = + CameraState.StateError.create(CameraState.ERROR_CAMERA_IN_USE); + final CameraState testCameraState = + CameraState.create(CameraState.Type.CLOSED, testCameraStateError); Long mockCameraStateIdentifier = instanceManager.addHostCreatedInstance(testCameraState); flutterApi.setApi(mockFlutterApi); instance.setApi(flutterApi); flutterApi.cameraStateFlutterApiWrapper = mockCameraStateFlutterApiWrapper; - + instanceManager.addDartCreatedInstance(instance, instanceIdentifier); instance.onChanged(testCameraState); @@ -84,6 +86,7 @@ public void onChanged_makesCallToDartCallbackForCameraState() { verify(mockFlutterApi) .onChanged( eq(instanceIdentifier), eq(Objects.requireNonNull(mockCameraStateIdentifier)), any()); - verify(mockCameraStateFlutterApiWrapper).create(eq(testCameraState), eq(CameraStateType.CLOSED), eq(testCameraStateError), any()); + verify(mockCameraStateFlutterApiWrapper) + .create(eq(testCameraState), eq(CameraStateType.CLOSED), eq(testCameraStateError), 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 8ce3e3f93723..0163f0f7e24b 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 @@ -137,8 +137,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', @@ -194,7 +193,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, @@ -204,7 +204,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, @@ -287,7 +287,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, @@ -297,7 +298,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, @@ -324,8 +325,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', @@ -342,12 +343,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', @@ -375,7 +377,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, @@ -385,7 +388,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, @@ -413,8 +416,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', @@ -438,7 +440,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?; @@ -463,12 +466,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', @@ -495,7 +503,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', @@ -521,8 +530,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', @@ -567,7 +576,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, @@ -577,7 +587,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, @@ -643,7 +653,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, @@ -671,7 +681,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); @@ -689,9 +699,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?; @@ -711,12 +723,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', @@ -735,10 +750,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', @@ -763,17 +778,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, @@ -792,7 +809,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, @@ -823,9 +840,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); @@ -843,12 +860,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', @@ -896,8 +915,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', @@ -957,7 +975,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); @@ -975,12 +993,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', @@ -1001,8 +1021,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', @@ -1062,7 +1082,7 @@ class _CameraStateFlutterApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraStateTypeData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1075,7 +1095,8 @@ abstract class CameraStateFlutterApi { void create(int identifier, CameraStateTypeData type, int? errorIdentifier); - static void setup(CameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraStateFlutterApi.create', codec, @@ -1085,12 +1106,13 @@ abstract class CameraStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.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.CameraStateFlutterApi.create was null, expected non-null int.'); - final CameraStateTypeData? arg_type = (args[1] as CameraStateTypeData?); + final CameraStateTypeData? arg_type = + (args[1] as CameraStateTypeData?); assert(arg_type != null, 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null, expected non-null CameraStateTypeData.'); final int? arg_errorIdentifier = (args[2] as int?); @@ -1117,7 +1139,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); @@ -1135,12 +1157,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', @@ -1157,12 +1181,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', @@ -1273,7 +1299,8 @@ abstract class ObserverFlutterApi { void onChanged(int identifier, int valueIdentifier); - static void setup(ObserverFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ObserverFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ObserverFlutterApi.onChanged', codec, @@ -1283,7 +1310,7 @@ abstract class ObserverFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ObserverFlutterApi.onChanged was null.'); + 'Argument for dev.flutter.pigeon.ObserverFlutterApi.onChanged was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1304,7 +1331,8 @@ abstract class CameraStateErrorFlutterApi { void create(int identifier, int code); - static void setup(CameraStateErrorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraStateErrorFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraStateErrorFlutterApi.create', codec, @@ -1314,7 +1342,7 @@ abstract class CameraStateErrorFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1345,7 +1373,8 @@ class LiveDataHostApi { 'dev.flutter.pigeon.LiveDataHostApi.observe', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_observerIdentifier]) as List?; + await channel.send([arg_identifier, arg_observerIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1400,7 +1429,7 @@ class _LiveDataFlutterApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return LiveDataSupportedTypeData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1413,7 +1442,8 @@ abstract class LiveDataFlutterApi { void create(int identifier, LiveDataSupportedTypeData type); - static void setup(LiveDataFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(LiveDataFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveDataFlutterApi.create', codec, @@ -1423,12 +1453,13 @@ abstract class LiveDataFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.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.LiveDataFlutterApi.create was null, expected non-null int.'); - final LiveDataSupportedTypeData? arg_type = (args[1] as LiveDataSupportedTypeData?); + final LiveDataSupportedTypeData? arg_type = + (args[1] as LiveDataSupportedTypeData?); assert(arg_type != null, 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.create was null, expected non-null LiveDataSupportedTypeData.'); api.create(arg_identifier!, arg_type!); @@ -1446,7 +1477,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, @@ -1456,7 +1488,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, @@ -1475,7 +1507,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, @@ -1556,7 +1588,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, @@ -1566,7 +1599,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, @@ -1593,7 +1626,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, @@ -1603,7 +1637,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, @@ -1617,7 +1651,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/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index bee3f3f96944..6ab5f4bc69dc 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 @@ -56,7 +56,8 @@ void main() { Future testCameraClosingObserver(AndroidCameraCameraX camera, int cameraId, Observer observer) async { - const String testErrorDescription = 'Test error description'; + final CameraStateError testCameraStateError = + CameraStateError.detached(code: 0); final Stream cameraClosingEventStream = camera.onCameraClosing(cameraId); final StreamQueue cameraClosingStreamQueue = @@ -67,14 +68,12 @@ void main() { StreamQueue(cameraErrorEventStream); observer.onChanged(CameraState.detached( - type: CameraStateType.closing, - error: CameraStateError.detached( - code: 0, description: testErrorDescription))); + type: CameraStateType.closing, error: testCameraStateError)); final bool cameraClosingEventSent = await cameraClosingStreamQueue.next == CameraClosingEvent(cameraId); final bool cameraErrorSent = await cameraErrorStreamQueue.next == - CameraErrorEvent(cameraId, testErrorDescription); + CameraErrorEvent(cameraId, testCameraStateError.getDescription()); await cameraClosingStreamQueue.cancel(); await cameraErrorStreamQueue.cancel(); @@ -197,13 +196,13 @@ void main() { verify(camera.preview!.setSurfaceProvider()); // Verify the camera state observer is updated. - // expect( - // await testCameraClosingObserver( - // camera, - // testSurfaceTextureId, - // verify(mockLiveCameraState.observe(captureAny)).captured.single - // as Observer), - // isTrue); + expect( + await testCameraClosingObserver( + camera, + testSurfaceTextureId, + verify(mockLiveCameraState.observe(captureAny)).captured.single + as Observer), + isTrue); }); test( diff --git a/packages/camera/camera_android_camerax/test/camera_info_test.dart b/packages/camera/camera_android_camerax/test/camera_info_test.dart index 77f622e5b061..fc4f29a97a1c 100644 --- a/packages/camera/camera_android_camerax/test/camera_info_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_info_test.dart @@ -67,8 +67,6 @@ void main() { const int cameraIdentifier = 55; final MockLiveData mockLiveCameraState = MockLiveData(); - final MockLiveData castedMockLiveCameraState = - MockLiveData(); const int liveCameraStateIdentifier = 73; instanceManager.addHostCreatedInstance( cameraInfo, @@ -83,11 +81,9 @@ void main() { when(mockApi.getLiveCameraState(cameraIdentifier)) .thenReturn(liveCameraStateIdentifier); - when(mockLiveCameraState.cast()) - .thenReturn(castedMockLiveCameraState); - expect(await cameraInfo.getLiveCameraState(), - equals(castedMockLiveCameraState)); + expect( + await cameraInfo.getLiveCameraState(), equals(mockLiveCameraState)); verify(mockApi.getLiveCameraState(cameraIdentifier)); }); diff --git a/packages/camera/camera_android_camerax/test/camera_state_error_test.dart b/packages/camera/camera_android_camerax/test/camera_state_error_test.dart index 17ac0e67b47c..48da38d7af3a 100644 --- a/packages/camera/camera_android_camerax/test/camera_state_error_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_state_error_test.dart @@ -31,12 +31,10 @@ void main() { const int instanceIdentifier = 0; const int code = 23; - const String description = 'Test error description!'; api.create( instanceIdentifier, code, - description, ); // Test instance type. @@ -50,7 +48,6 @@ void main() { // Test instance properties. final CameraStateError cameraStateError = instance! as CameraStateError; expect(cameraStateError.code, equals(code)); - expect(cameraStateError.description, equals(description)); }); }); } diff --git a/packages/camera/camera_android_camerax/test/camera_state_test.dart b/packages/camera/camera_android_camerax/test/camera_state_test.dart index 6dedf5a79bf4..9265cee4d579 100644 --- a/packages/camera/camera_android_camerax/test/camera_state_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_state_test.dart @@ -33,15 +33,13 @@ void main() { // Create CameraStateError for CameraState instance. const int code = 23; - const String description = 'test description'; final CameraStateError cameraStateError = CameraStateError.detached( instanceManager: instanceManager, code: code, - description: description, ); final int cameraStateErrorIdentifier = instanceManager.addDartCreatedInstance(cameraStateError, onCopy: (_) { - return CameraStateError.detached(code: code, description: description); + return CameraStateError.detached(code: code); }); // Create CameraState. diff --git a/packages/camera/camera_android_camerax/test/live_data_test.dart b/packages/camera/camera_android_camerax/test/live_data_test.dart index aba713a424c8..04c64c7c80cb 100644 --- a/packages/camera/camera_android_camerax/test/live_data_test.dart +++ b/packages/camera/camera_android_camerax/test/live_data_test.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:camera_android_camerax/src/camera_state.dart'; +import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; import 'package:camera_android_camerax/src/live_data.dart'; import 'package:camera_android_camerax/src/observer.dart'; @@ -96,38 +97,8 @@ void main() { )); }); - test('cast makes call to create instance with expected type', () { - final MockTestLiveDataHostApi mockApi = MockTestLiveDataHostApi(); - TestLiveDataHostApi.setup(mockApi); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - - final LiveData instance = LiveData.detached( - instanceManager: instanceManager, - ); - const int instanceIdentifier = 27; - instanceManager.addHostCreatedInstance( - instance, - instanceIdentifier, - onCopy: (LiveData original) => LiveData.detached( - instanceManager: instanceManager, - ), - ); - - instance.cast(); - - final int? newInstanceIdentifier = - verify(mockApi.cast(instanceIdentifier, captureAny)).captured.single - as int?; - expect( - instanceManager.getInstanceWithWeakReference(newInstanceIdentifier!), - isA>()); - }); - test( - 'FlutterAPI create makes call to create LiveData instance with expected identifier', + 'FlutterAPI create makes call to create LiveData instance with expected identifier', () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, @@ -141,11 +112,12 @@ void main() { api.create( instanceIdentifier, + LiveDataSupportedTypeData(value: LiveDataSupportedType.cameraState), ); expect( instanceManager.getInstanceWithWeakReference(instanceIdentifier), - isA>(), + isA>(), ); }); }); 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 bfcedfe6b901..19e6c8eab7b9 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,24 +80,30 @@ 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); int getLiveCameraState(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, @@ -102,11 +118,14 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', 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.getLiveCameraState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -120,24 +139,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, @@ -153,19 +177,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]; }); } @@ -174,14 +203,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); @@ -189,15 +220,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]; @@ -206,33 +241,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, @@ -240,10 +284,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]; }); } @@ -253,11 +299,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, @@ -265,7 +314,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]; }); } @@ -275,16 +325,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!); @@ -297,11 +351,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, @@ -315,22 +372,27 @@ abstract class TestProcessCameraProviderHostApi { } abstract class TestCameraHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getCameraInfo(int identifier); - static void setup(TestCameraHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', 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.CameraHostApi.getCameraInfo was null.'); + 'Argument for dev.flutter.pigeon.CameraHostApi.getCameraInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -358,7 +420,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); @@ -367,45 +429,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, @@ -413,19 +488,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 []; @@ -453,9 +533,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); @@ -464,7 +544,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); @@ -475,23 +556,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 []; }); @@ -502,11 +588,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, @@ -518,12 +607,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 []; @@ -535,11 +628,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, @@ -567,7 +663,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); @@ -576,7 +672,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); @@ -585,23 +682,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 []; }); @@ -612,11 +714,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, @@ -634,11 +739,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, @@ -666,7 +774,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); @@ -675,7 +783,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); @@ -684,22 +793,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 []; }); @@ -710,11 +824,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, @@ -732,11 +849,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, @@ -750,22 +870,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, @@ -779,22 +904,27 @@ abstract class TestAnalyzerHostApi { } abstract class TestObserverHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void create(int identifier); - static void setup(TestObserverHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestObserverHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ObserverHostApi.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.ObserverHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ObserverHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -808,24 +938,29 @@ abstract class TestObserverHostApi { } abstract class TestLiveDataHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void observe(int identifier, int observerIdentifier); void removeObservers(int identifier); - static void setup(TestLiveDataHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestLiveDataHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveDataHostApi.observe', 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.LiveDataHostApi.observe was null.'); + 'Argument for dev.flutter.pigeon.LiveDataHostApi.observe was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -843,11 +978,14 @@ abstract class TestLiveDataHostApi { 'dev.flutter.pigeon.LiveDataHostApi.removeObservers', 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.LiveDataHostApi.removeObservers was null.'); + 'Argument for dev.flutter.pigeon.LiveDataHostApi.removeObservers was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -861,24 +999,29 @@ abstract class TestLiveDataHostApi { } 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, @@ -893,11 +1036,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 dec3d697b4622d0edc5f7665215bda6f06706258 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 1 May 2023 16:34:43 -0700 Subject: [PATCH 53/71] Merge remote-tracking branch 'upstream/main' into camx_occ --- .../camera_android_camerax/CHANGELOG.md | 1 + .../camerax/CameraInfoHostApiImpl.java | 38 ++ .../camerax/GeneratedCameraXLibrary.java | 627 ++++++++++-------- .../plugins/camerax/CameraInfoTest.java | 1 + .../lib/src/android_camera_camerax.dart | 55 ++ ...roid_camera_camerax_flutter_api_impls.dart | 70 +- .../lib/src/camera_info.dart | 22 + .../lib/src/camerax_library.g.dart | 327 ++++++--- .../pigeons/camerax_library.dart | 25 + .../test/android_camera_camerax_test.dart | 65 +- .../android_camera_camerax_test.mocks.dart | 9 + .../test/camera_info_test.dart | 1 + .../test/camera_info_test.mocks.dart | 8 + .../test/camera_test.dart | 4 +- .../test/test_camerax_library.g.dart | 431 +++++------- 15 files changed, 977 insertions(+), 707 deletions(-) diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index 1c901a82bfac..24fbec47e8b7 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -21,3 +21,4 @@ * Implements image streaming. * Provides LifecycleOwner implementation for Activities that use the plugin that do not implement it themselves. * Implements retrieval of camera information. +* Implements onCameraClosing callback method for indicating the camera is closing and bumps CameraX version to 1.3.0-alpha05. diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index f9fd7722fc87..973e2928d789 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -6,8 +6,10 @@ import androidx.annotation.NonNull; import androidx.camera.core.CameraInfo; +import androidx.camera.core.CameraState; import androidx.camera.core.ExposureState; import androidx.camera.core.ZoomState; +import androidx.lifecycle.LiveData; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraInfoHostApi; import java.util.Objects; @@ -66,4 +68,40 @@ public Long getZoomState(@NonNull Long identifier) { return instanceManager.getIdentifierForStrongReference(zoomState); } + + /** + * Retrieves the {@link ExposureState} of the {@link CameraInfo} with the specified identifier. + */ + @Override + @NonNull + public Long getExposureState(@NonNull Long identifier) { + CameraInfo cameraInfo = + (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); + ExposureState exposureState = cameraInfo.getExposureState(); + + ExposureStateFlutterApiImpl exposureStateFlutterApiImpl = + new ExposureStateFlutterApiImpl(binaryMessenger, instanceManager); + exposureStateFlutterApiImpl.create(exposureState, result -> {}); + + return instanceManager.getIdentifierForStrongReference(exposureState); + } + + /** + * Retrieves the current {@link ZoomState} value of the {@link CameraInfo} with the specified + * identifier. + */ + @NonNull + @Override + public Long getZoomState(@NonNull Long identifier) { + CameraInfo cameraInfo = + (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); + // TODO(camsim99): Create/return LiveData once https://github.com/flutter/packages/pull/3419 lands. + ZoomState zoomState = cameraInfo.getZoomState().getValue(); + + ZoomStateFlutterApiImpl zoomStateFlutterApiImpl = + new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager); + zoomStateFlutterApiImpl.create(zoomState, result -> {}); + + return instanceManager.getIdentifierForStrongReference(zoomState); + } } 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 882c1d146323..d48feb044a36 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; } } @@ -273,19 +272,82 @@ ArrayList toList() { static @NonNull ExposureCompensationRange fromList(@NonNull ArrayList list) { ExposureCompensationRange pigeonResult = new ExposureCompensationRange(); Object minCompensation = list.get(0); - pigeonResult.setMinCompensation( - (minCompensation == null) - ? null - : ((minCompensation instanceof Integer) - ? (Integer) minCompensation - : (Long) minCompensation)); + pigeonResult.setMinCompensation((minCompensation == null) ? null : ((minCompensation instanceof Integer) ? (Integer) minCompensation : (Long) minCompensation)); Object maxCompensation = list.get(1); - pigeonResult.setMaxCompensation( - (maxCompensation == null) - ? null - : ((maxCompensation instanceof Integer) - ? (Integer) maxCompensation - : (Long) maxCompensation)); + pigeonResult.setMaxCompensation((maxCompensation == null) ? null : ((maxCompensation instanceof Integer) ? (Integer) maxCompensation : (Long) maxCompensation)); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class ExposureCompensationRange { + private @NonNull Long minCompensation; + + public @NonNull Long getMinCompensation() { + return minCompensation; + } + + public void setMinCompensation(@NonNull Long setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"minCompensation\" is null."); + } + this.minCompensation = setterArg; + } + + private @NonNull Long maxCompensation; + + public @NonNull Long getMaxCompensation() { + return maxCompensation; + } + + public void setMaxCompensation(@NonNull Long setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"maxCompensation\" is null."); + } + this.maxCompensation = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + ExposureCompensationRange() {} + + public static final class Builder { + + private @Nullable Long minCompensation; + + public @NonNull Builder setMinCompensation(@NonNull Long setterArg) { + this.minCompensation = setterArg; + return this; + } + + private @Nullable Long maxCompensation; + + public @NonNull Builder setMaxCompensation(@NonNull Long setterArg) { + this.maxCompensation = setterArg; + return this; + } + + public @NonNull ExposureCompensationRange build() { + ExposureCompensationRange pigeonReturn = new ExposureCompensationRange(); + pigeonReturn.setMinCompensation(minCompensation); + pigeonReturn.setMaxCompensation(maxCompensation); + return pigeonReturn; + } + } + + @NonNull + ArrayList toList() { + ArrayList toListResult = new ArrayList(2); + toListResult.add(minCompensation); + toListResult.add(maxCompensation); + return toListResult; + } + + static @NonNull ExposureCompensationRange fromList(@NonNull ArrayList list) { + ExposureCompensationRange pigeonResult = new ExposureCompensationRange(); + Object minCompensation = list.get(0); + pigeonResult.setMinCompensation((minCompensation == null) ? null : ((minCompensation instanceof Integer) ? (Integer) minCompensation : (Long) minCompensation)); + Object maxCompensation = list.get(1); + pigeonResult.setMaxCompensation((maxCompensation == null) ? null : ((maxCompensation instanceof Integer) ? (Integer) maxCompensation : (Long) maxCompensation)); return pigeonResult; } } @@ -301,7 +363,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(); @@ -309,12 +371,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<>( @@ -326,7 +384,8 @@ static void setup( try { api.clear(); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -347,9 +406,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 = @@ -364,7 +421,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; } @@ -384,7 +442,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); @@ -393,7 +451,6 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -406,29 +463,28 @@ 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); - @NonNull + @NonNull + Long getLiveCameraState(@NonNull Long identifier); + + @NonNull Long getExposureState(@NonNull Long identifier); - @NonNull + @NonNull Long getZoomState(@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) -> { @@ -436,11 +492,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; } @@ -453,9 +508,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.CameraInfoHostApi.getExposureState", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -463,11 +516,34 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = - api.getExposureState( - (identifierArg == null) ? null : identifierArg.longValue()); + Long output = api.getLiveCameraState((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getExposureState", 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.getExposureState((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -488,10 +564,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = - api.getZoomState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = api.getZoomState((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -511,7 +587,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); @@ -520,7 +596,6 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -535,19 +610,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<>( @@ -560,11 +631,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; } @@ -586,12 +656,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; } @@ -611,7 +679,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); @@ -620,9 +688,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()); @@ -636,16 +702,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); @@ -656,18 +719,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) -> { @@ -694,9 +751,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) -> { @@ -704,11 +759,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; } @@ -721,9 +775,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) -> { @@ -733,15 +785,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; } @@ -754,9 +801,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) -> { @@ -765,12 +810,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; } @@ -783,9 +826,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) -> { @@ -794,10 +835,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; } @@ -810,9 +851,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) -> { @@ -822,7 +861,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; } @@ -842,7 +882,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); @@ -851,13 +891,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)); @@ -866,14 +903,14 @@ public void create(@NonNull Long identifierArg, @NonNull Reply callback) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraHostApi { - @NonNull + @NonNull Long getCameraInfo(@NonNull Long identifier); /** The codec used by CameraHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /** Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ + /**Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHostApi api) { { BasicMessageChannel channel = @@ -886,10 +923,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHost ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = - api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); + Long output = api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -909,7 +946,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); @@ -918,7 +955,6 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -958,11 +994,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(); @@ -970,18 +1004,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) -> { @@ -1010,9 +1038,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) -> { @@ -1021,11 +1047,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; } @@ -1038,9 +1063,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) -> { @@ -1048,7 +1071,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; } @@ -1068,7 +1092,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); @@ -1077,25 +1101,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)); @@ -1136,24 +1153,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 = @@ -1168,12 +1182,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; } @@ -1186,9 +1198,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) -> { @@ -1196,11 +1206,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; } @@ -1213,9 +1222,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) -> { @@ -1223,7 +1230,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; } @@ -1244,11 +1252,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; } @@ -1290,10 +1297,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); @@ -1303,10 +1307,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 = @@ -1321,12 +1322,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; } @@ -1348,11 +1347,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; } @@ -1385,8 +1383,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); @@ -1429,7 +1426,7 @@ public ExposureStateFlutterApi(@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); @@ -1438,19 +1435,12 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return ExposureStateFlutterApiCodec.INSTANCE; } - - public void create( - @NonNull Long identifierArg, - @NonNull ExposureCompensationRange exposureCompensationRangeArg, - @NonNull Double exposureCompensationStepArg, - @NonNull Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull ExposureCompensationRange exposureCompensationRangeArg, @NonNull Double exposureCompensationStepArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ExposureStateFlutterApi.create", getCodec()); channel.send( - new ArrayList( - Arrays.asList( - identifierArg, exposureCompensationRangeArg, exposureCompensationStepArg)), + new ArrayList(Arrays.asList(identifierArg, exposureCompensationRangeArg, exposureCompensationStepArg)), channelReply -> callback.reply(null)); } } @@ -1462,7 +1452,7 @@ public ZoomStateFlutterApi(@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); @@ -1471,12 +1461,86 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Double minZoomRatioArg, @NonNull Double maxZoomRatioArg, @NonNull Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ZoomStateFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg, minZoomRatioArg, maxZoomRatioArg)), + channelReply -> callback.reply(null)); + } + } + + private static class ExposureStateFlutterApiCodec extends StandardMessageCodec { + public static final ExposureStateFlutterApiCodec INSTANCE = new ExposureStateFlutterApiCodec(); + + private ExposureStateFlutterApiCodec() {} + + @Override + protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { + switch (type) { + case (byte) 128: + return ExposureCompensationRange.fromList((ArrayList) readValue(buffer)); + default: + return super.readValueOfType(type, buffer); + } + } + + @Override + protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { + if (value instanceof ExposureCompensationRange) { + stream.write(128); + writeValue(stream, ((ExposureCompensationRange) value).toList()); + } else { + super.writeValue(stream, value); + } + } + } + + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + public static class ExposureStateFlutterApi { + private final @NonNull BinaryMessenger binaryMessenger; - public void create( - @NonNull Long identifierArg, - @NonNull Double minZoomRatioArg, - @NonNull Double maxZoomRatioArg, - @NonNull Reply callback) { + public ExposureStateFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { + void reply(T reply); + } + /** The codec used by ExposureStateFlutterApi. */ + static @NonNull MessageCodec getCodec() { + return ExposureStateFlutterApiCodec.INSTANCE; + } + public void create(@NonNull Long identifierArg, @NonNull ExposureCompensationRange exposureCompensationRangeArg, @NonNull Double exposureCompensationStepArg, @NonNull Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ExposureStateFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg, exposureCompensationRangeArg, exposureCompensationStepArg)), + channelReply -> callback.reply(null)); + } + } + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + public static class ZoomStateFlutterApi { + private final @NonNull BinaryMessenger binaryMessenger; + + public ZoomStateFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { + void reply(T reply); + } + /** The codec used by ZoomStateFlutterApi. */ + static @NonNull MessageCodec getCodec() { + return new StandardMessageCodec(); + } + public void create(@NonNull Long identifierArg, @NonNull Double minZoomRatioArg, @NonNull Double maxZoomRatioArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ZoomStateFlutterApi.create", getCodec()); @@ -1525,12 +1589,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<>( @@ -1543,11 +1603,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; } @@ -1569,11 +1628,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; } @@ -1586,9 +1644,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) -> { @@ -1598,7 +1654,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; } @@ -1619,9 +1676,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 = @@ -1636,7 +1691,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; } @@ -1656,7 +1712,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); @@ -1665,7 +1721,6 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1674,11 +1729,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()); @@ -1690,7 +1741,7 @@ 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); void close(@NonNull Long identifier); @@ -1699,9 +1750,7 @@ 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 = @@ -1714,10 +1763,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; } @@ -1740,7 +1789,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; } @@ -1760,7 +1810,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); @@ -1769,13 +1819,7 @@ 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()); @@ -1792,7 +1836,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); @@ -1801,19 +1845,12 @@ 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/test/java/io/flutter/plugins/camerax/CameraInfoTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java index 5cfd06935b85..379cf3f3b05c 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java @@ -13,6 +13,7 @@ import static org.mockito.Mockito.when; import androidx.camera.core.CameraInfo; +import androidx.camera.core.CameraState; import androidx.camera.core.ExposureState; import androidx.camera.core.ZoomState; import androidx.lifecycle.LiveData; 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 174a373e3b9b..f0eac80d9eed 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 @@ -45,6 +45,10 @@ class AndroidCameraCameraX extends CameraPlatform { @visibleForTesting CameraInfo? cameraInfo; + /// The [LiveData] of the [CameraState] that represents the state of the + /// [camera] instance. + LiveData? liveCameraState; + /// The [Preview] instance that can be configured to present a live camera preview. @visibleForTesting Preview? preview; @@ -196,6 +200,7 @@ class AndroidCameraCameraX extends CameraPlatform { // instance as bound but not paused. camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); + await _updateLiveCameraState(flutterSurfaceTextureId); cameraInfo = await camera!.getCameraInfo(); _previewIsPaused = false; @@ -325,6 +330,55 @@ class AndroidCameraCameraX extends CameraPlatform { return exposureState.minZoomRatio; } + /// Gets the minimum supported exposure offset for the selected camera in EV units. + /// + /// [cameraId] not used. + @override + Future getMinExposureOffset(int cameraId) async { + final ExposureState exposureState = await cameraInfo!.getExposureState(); + return exposureState.exposureCompensationRange.minCompensation * + exposureState.exposureCompensationStep; + } + + /// Gets the maximum supported exposure offset for the selected camera in EV units. + /// + /// [cameraId] not used. + @override + Future getMaxExposureOffset(int cameraId) async { + final ExposureState exposureState = await cameraInfo!.getExposureState(); + return exposureState.exposureCompensationRange.maxCompensation * + exposureState.exposureCompensationStep; + } + + /// Gets the supported step size for exposure offset for the selected camera in EV units. + /// + /// Returns 0 when exposure compensation is not supported. + /// + /// [cameraId] not used. + @override + Future getExposureOffsetStepSize(int cameraId) async { + final ExposureState exposureState = await cameraInfo!.getExposureState(); + return exposureState.exposureCompensationStep; + } + + /// Gets the maximum supported zoom level for the selected camera. + /// + /// [cameraId] not used. + @override + Future getMaxZoomLevel(int cameraId) async { + final ZoomState exposureState = await cameraInfo!.getZoomState(); + return exposureState.maxZoomRatio; + } + + /// Gets the minimum supported zoom level for the selected camera. + /// + /// [cameraId] not used. + @override + Future getMinZoomLevel(int cameraId) async { + final ZoomState exposureState = await cameraInfo!.getZoomState(); + return exposureState.minZoomRatio; + } + /// The ui orientation changed. @override Stream onDeviceOrientationChanged() { @@ -413,6 +467,7 @@ class AndroidCameraCameraX extends CameraPlatform { camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!]); + await _updateLiveCameraState(cameraId); cameraInfo = await camera!.getCameraInfo(); } 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 c5692ae105f2..f92ef8349267 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 @@ -19,33 +19,46 @@ import 'zoom_state.dart'; class AndroidCameraXCameraFlutterApis { /// Creates a [AndroidCameraXCameraFlutterApis]. AndroidCameraXCameraFlutterApis({ - JavaObjectFlutterApiImpl? javaObjectFlutterApi, - CameraFlutterApiImpl? cameraFlutterApi, - CameraInfoFlutterApiImpl? cameraInfoFlutterApi, - CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi, - ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi, - SystemServicesFlutterApiImpl? systemServicesFlutterApi, + JavaObjectFlutterApiImpl? javaObjectFlutterApiImpl, + CameraFlutterApiImpl? cameraFlutterApiImpl, + CameraInfoFlutterApiImpl? cameraInfoFlutterApiImpl, + CameraSelectorFlutterApiImpl? cameraSelectorFlutterApiImpl, + ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApiImpl, + SystemServicesFlutterApiImpl? systemServicesFlutterApiImpl, + CameraStateErrorFlutterApiImpl? cameraStateErrorFlutterApiImpl, + CameraStateFlutterApiImpl? cameraStateFlutterApiImpl, ExposureStateFlutterApiImpl? exposureStateFlutterApiImpl, ZoomStateFlutterApiImpl? zoomStateFlutterApiImpl, - AnalyzerFlutterApiImpl? analyzerFlutterApiImpl, + LiveDataFlutterApiImpl? liveDataFlutterApiImpl, + ObserverFlutterApiImpl? observerFlutterApiImpl, ImageProxyFlutterApiImpl? imageProxyFlutterApiImpl, PlaneProxyFlutterApiImpl? planeProxyFlutterApiImpl, + AnalyzerFlutterApiImpl? analyzerFlutterApiImpl, }) { - this.javaObjectFlutterApi = - javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); - this.cameraInfoFlutterApi = - cameraInfoFlutterApi ?? CameraInfoFlutterApiImpl(); - this.cameraSelectorFlutterApi = - cameraSelectorFlutterApi ?? CameraSelectorFlutterApiImpl(); - this.processCameraProviderFlutterApi = processCameraProviderFlutterApi ?? - ProcessCameraProviderFlutterApiImpl(); - this.cameraFlutterApi = cameraFlutterApi ?? CameraFlutterApiImpl(); - this.systemServicesFlutterApi = - systemServicesFlutterApi ?? SystemServicesFlutterApiImpl(); + this.javaObjectFlutterApiImpl = + javaObjectFlutterApiImpl ?? JavaObjectFlutterApiImpl(); + this.cameraInfoFlutterApiImpl = + cameraInfoFlutterApiImpl ?? CameraInfoFlutterApiImpl(); + this.cameraSelectorFlutterApiImpl = + cameraSelectorFlutterApiImpl ?? CameraSelectorFlutterApiImpl(); + this.processCameraProviderFlutterApiImpl = + processCameraProviderFlutterApiImpl ?? + ProcessCameraProviderFlutterApiImpl(); + this.cameraFlutterApiImpl = cameraFlutterApiImpl ?? CameraFlutterApiImpl(); + this.systemServicesFlutterApiImpl = + systemServicesFlutterApiImpl ?? SystemServicesFlutterApiImpl(); + this.cameraStateErrorFlutterApiImpl = + cameraStateErrorFlutterApiImpl ?? CameraStateErrorFlutterApiImpl(); + this.cameraStateFlutterApiImpl = + cameraStateFlutterApiImpl ?? CameraStateFlutterApiImpl(); this.exposureStateFlutterApiImpl = exposureStateFlutterApiImpl ?? ExposureStateFlutterApiImpl(); this.zoomStateFlutterApiImpl = zoomStateFlutterApiImpl ?? ZoomStateFlutterApiImpl(); + this.liveDataFlutterApiImpl = + liveDataFlutterApiImpl ?? LiveDataFlutterApiImpl(); + this.observerFlutterApiImpl = + observerFlutterApiImpl ?? ObserverFlutterApiImpl(); this.analyzerFlutterApiImpl = analyzerFlutterApiImpl ?? AnalyzerFlutterApiImpl(); this.imageProxyFlutterApiImpl = @@ -87,6 +100,12 @@ class AndroidCameraXCameraFlutterApis { /// Flutter Api for [ZoomState]. late final ZoomStateFlutterApiImpl zoomStateFlutterApiImpl; + /// Flutter Api for [ExposureState]. + late final ExposureStateFlutterApiImpl exposureStateFlutterApiImpl; + + /// Flutter Api for [ZoomState]. + late final ZoomStateFlutterApiImpl zoomStateFlutterApiImpl; + /// Flutter Api implementation for [Analyzer]. late final AnalyzerFlutterApiImpl analyzerFlutterApiImpl; @@ -99,12 +118,15 @@ class AndroidCameraXCameraFlutterApis { /// Ensures all the Flutter APIs have been setup to receive calls from native code. void ensureSetUp() { if (!_haveBeenSetUp) { - JavaObjectFlutterApi.setup(javaObjectFlutterApi); - CameraInfoFlutterApi.setup(cameraInfoFlutterApi); - CameraSelectorFlutterApi.setup(cameraSelectorFlutterApi); - ProcessCameraProviderFlutterApi.setup(processCameraProviderFlutterApi); - CameraFlutterApi.setup(cameraFlutterApi); - SystemServicesFlutterApi.setup(systemServicesFlutterApi); + JavaObjectFlutterApi.setup(javaObjectFlutterApiImpl); + CameraInfoFlutterApi.setup(cameraInfoFlutterApiImpl); + CameraSelectorFlutterApi.setup(cameraSelectorFlutterApiImpl); + ProcessCameraProviderFlutterApi.setup( + processCameraProviderFlutterApiImpl); + CameraFlutterApi.setup(cameraFlutterApiImpl); + SystemServicesFlutterApi.setup(systemServicesFlutterApiImpl); + CameraStateErrorFlutterApi.setup(cameraStateErrorFlutterApiImpl); + CameraStateFlutterApi.setup(cameraStateFlutterApiImpl); ExposureStateFlutterApi.setup(exposureStateFlutterApiImpl); ZoomStateFlutterApi.setup(zoomStateFlutterApiImpl); AnalyzerFlutterApi.setup(analyzerFlutterApiImpl); diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index f2fdc1fdc879..07e6816fc70a 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -9,6 +9,7 @@ import 'camerax_library.g.dart'; import 'exposure_state.dart'; import 'instance_manager.dart'; import 'java_object.dart'; +import 'live_data.dart'; import 'zoom_state.dart'; /// Represents the metadata of a camera. @@ -32,6 +33,10 @@ class CameraInfo extends JavaObject { Future getSensorRotationDegrees() => _api.getSensorRotationDegreesFromInstance(this); + /// Starts listening for the camera closing. + Future> getLiveCameraState() => + _api.getLiveCameraStateFromInstance(this); + /// Gets the exposure state of the camera. Future getExposureState() => _api.getExposureStateFromInstance(this); @@ -76,6 +81,23 @@ class _CameraInfoHostApiImpl extends CameraInfoHostApi { return instanceManager .getInstanceWithWeakReference(zoomStateIdentifier)!; } + + /// Gets the [ExposureState] of the specified [CameraInfo] instance. + Future getExposureStateFromInstance( + CameraInfo instance) async { + final int? identifier = instanceManager.getIdentifier(instance); + final int exposureStateIdentifier = await getExposureState(identifier!); + return instanceManager + .getInstanceWithWeakReference(exposureStateIdentifier)!; + } + + /// Gets the [ZoomState] of the specified [CameraInfo] instance. + Future getZoomStateFromInstance(CameraInfo instance) async { + final int? identifier = instanceManager.getIdentifier(instance); + final int zoomStateIdentifier = await getZoomState(identifier!); + return instanceManager + .getInstanceWithWeakReference(zoomStateIdentifier)!; + } } /// Flutter API implementation of [CameraInfo]. 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 f2d2e17152fb..b5afcaa735a9 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 @@ -89,6 +89,32 @@ class ExposureCompensationRange { } } +class ExposureCompensationRange { + ExposureCompensationRange({ + required this.minCompensation, + required this.maxCompensation, + }); + + int minCompensation; + + int maxCompensation; + + Object encode() { + return [ + minCompensation, + maxCompensation, + ]; + } + + static ExposureCompensationRange decode(Object result) { + result as List; + return ExposureCompensationRange( + minCompensation: result[0]! as int, + maxCompensation: result[1]! as int, + ); + } +} + class InstanceManagerHostApi { /// Constructor for [InstanceManagerHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -106,7 +132,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', @@ -162,8 +189,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, @@ -173,7 +199,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, @@ -223,6 +249,33 @@ class CameraInfoHostApi { } } + Future getLiveCameraState(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', 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 getExposureState(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraInfoHostApi.getExposureState', codec, @@ -283,8 +336,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, @@ -294,7 +346,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, @@ -321,8 +373,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', @@ -339,13 +391,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', @@ -373,8 +424,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, @@ -384,7 +434,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, @@ -412,7 +462,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', @@ -436,8 +487,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?; @@ -462,17 +512,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', @@ -499,8 +544,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', @@ -526,8 +570,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', @@ -572,8 +616,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, @@ -583,7 +626,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, @@ -649,7 +692,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, @@ -677,7 +720,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); @@ -695,11 +738,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?; @@ -719,15 +760,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', @@ -746,10 +784,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', @@ -774,19 +812,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, @@ -805,7 +841,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, @@ -836,9 +872,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); @@ -856,14 +892,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', @@ -911,7 +945,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', @@ -971,7 +1006,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); @@ -989,14 +1024,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', @@ -1017,8 +1050,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', @@ -1078,7 +1111,98 @@ class _ExposureStateFlutterApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: + return ExposureCompensationRange.decode(readValue(buffer)!); + default: + return super.readValueOfType(type, buffer); + } + } +} + +abstract class ExposureStateFlutterApi { + static const MessageCodec codec = _ExposureStateFlutterApiCodec(); + + void create(int identifier, ExposureCompensationRange exposureCompensationRange, double exposureCompensationStep); + + static void setup(ExposureStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ExposureStateFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.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.ExposureStateFlutterApi.create was null, expected non-null int.'); + final ExposureCompensationRange? arg_exposureCompensationRange = (args[1] as ExposureCompensationRange?); + assert(arg_exposureCompensationRange != null, + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null ExposureCompensationRange.'); + final double? arg_exposureCompensationStep = (args[2] as double?); + assert(arg_exposureCompensationStep != null, + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null double.'); + api.create(arg_identifier!, arg_exposureCompensationRange!, arg_exposureCompensationStep!); + return; + }); + } + } + } +} + +abstract class ZoomStateFlutterApi { + static const MessageCodec codec = StandardMessageCodec(); + + void create(int identifier, double minZoomRatio, double maxZoomRatio); + + static void setup(ZoomStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ZoomStateFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.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.ZoomStateFlutterApi.create was null, expected non-null int.'); + final double? arg_minZoomRatio = (args[1] as double?); + assert(arg_minZoomRatio != null, + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null, expected non-null double.'); + final double? arg_maxZoomRatio = (args[2] as double?); + assert(arg_maxZoomRatio != null, + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null, expected non-null double.'); + api.create(arg_identifier!, arg_minZoomRatio!, arg_maxZoomRatio!); + return; + }); + } + } + } +} + +class _ExposureStateFlutterApiCodec extends StandardMessageCodec { + const _ExposureStateFlutterApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is ExposureCompensationRange) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: return ExposureCompensationRange.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1089,13 +1213,9 @@ class _ExposureStateFlutterApiCodec extends StandardMessageCodec { abstract class ExposureStateFlutterApi { static const MessageCodec codec = _ExposureStateFlutterApiCodec(); - void create( - int identifier, - ExposureCompensationRange exposureCompensationRange, - double exposureCompensationStep); + void create(int identifier, ExposureCompensationRange exposureCompensationRange, double exposureCompensationStep); - static void setup(ExposureStateFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(ExposureStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ExposureStateFlutterApi.create', codec, @@ -1105,20 +1225,18 @@ abstract class ExposureStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.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.ExposureStateFlutterApi.create was null, expected non-null int.'); - final ExposureCompensationRange? arg_exposureCompensationRange = - (args[1] as ExposureCompensationRange?); + final ExposureCompensationRange? arg_exposureCompensationRange = (args[1] as ExposureCompensationRange?); assert(arg_exposureCompensationRange != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null ExposureCompensationRange.'); final double? arg_exposureCompensationStep = (args[2] as double?); assert(arg_exposureCompensationStep != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null double.'); - api.create(arg_identifier!, arg_exposureCompensationRange!, - arg_exposureCompensationStep!); + api.create(arg_identifier!, arg_exposureCompensationRange!, arg_exposureCompensationStep!); return; }); } @@ -1131,8 +1249,7 @@ abstract class ZoomStateFlutterApi { void create(int identifier, double minZoomRatio, double maxZoomRatio); - static void setup(ZoomStateFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(ZoomStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ZoomStateFlutterApi.create', codec, @@ -1142,7 +1259,7 @@ abstract class ZoomStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1176,7 +1293,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); @@ -1194,14 +1311,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', @@ -1218,14 +1333,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', @@ -1305,8 +1418,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, @@ -1316,7 +1428,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, @@ -1335,7 +1447,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, @@ -1416,8 +1528,7 @@ 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, @@ -1427,7 +1538,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, @@ -1454,8 +1565,7 @@ 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, @@ -1465,7 +1575,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, @@ -1479,8 +1589,7 @@ 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/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index c8b3885d064b..8e4b0ca7431f 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -56,6 +56,16 @@ class ExposureCompensationRange { int maxCompensation; } +class ExposureCompensationRange { + ExposureCompensationRange({ + required this.minCompensation, + required this.maxCompensation, + }); + + int minCompensation; + int maxCompensation; +} + @HostApi(dartHostTestHandler: 'TestInstanceManagerHostApi') abstract class InstanceManagerHostApi { /// Clear the native `InstanceManager`. @@ -78,6 +88,8 @@ abstract class JavaObjectFlutterApi { abstract class CameraInfoHostApi { int getSensorRotationDegrees(int identifier); + int getLiveCameraState(int identifier); + int getExposureState(int identifier); int getZoomState(int identifier); @@ -184,6 +196,19 @@ abstract class ZoomStateFlutterApi { void create(int identifier, double minZoomRatio, double maxZoomRatio); } +@FlutterApi() +abstract class ExposureStateFlutterApi { + void create( + int identifier, + ExposureCompensationRange exposureCompensationRange, + double exposureCompensationStep); +} + +@FlutterApi() +abstract class ZoomStateFlutterApi { + void create(int identifier, double minZoomRatio, double maxZoomRatio); +} + @HostApi(dartHostTestHandler: 'TestImageAnalysisHostApi') abstract class ImageAnalysisHostApi { void create(int identifier, ResolutionInfo? targetResolutionIdentifier); 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 e7a6707d6e3f..079abe0f2fd4 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 @@ -132,12 +132,19 @@ void main() { camera.processCameraProvider = mockProcessCameraProvider; + camera.processCameraProvider = mockProcessCameraProvider; + when(camera.testPreview.setSurfaceProvider()) .thenAnswer((_) async => testSurfaceTextureId); - when(mockProcessCameraProvider.bindToLifecycle(any, any)) - .thenAnswer((_) => Future.value(mockCamera)); - when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(MockCameraInfo())); + when(mockProcessCameraProvider.bindToLifecycle( + camera.mockBackCameraSelector, + [camera.testPreview, camera.testImageCapture])) + .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); + when(mockCameraInfo.getLiveCameraState()) + .thenAnswer((_) async => mockLiveCameraState); + camera.processCameraProvider = mockProcessCameraProvider; + camera.createDetachedObjectForTesting = true; expect( await camera.createCamera(testCameraDescription, testResolutionPreset, @@ -165,7 +172,7 @@ void main() { 'createCamera binds Preview and ImageCapture use cases to ProcessCameraProvider instance', () async { final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); - final MockProcessCameraProvider mockProcessCameraProvider = + final ProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); @@ -178,6 +185,16 @@ void main() { const ResolutionPreset testResolutionPreset = ResolutionPreset.veryHigh; const bool enableAudio = true; + when(mockProcessCameraProvider.bindToLifecycle( + camera.mockBackCameraSelector, + [camera.testPreview, camera.testImageCapture])) + .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); + when(mockCameraInfo.getLiveCameraState()) + .thenAnswer((_) async => MockLiveData()); + camera.processCameraProvider = mockProcessCameraProvider; + camera.createDetachedObjectForTesting = true; + camera.processCameraProvider = mockProcessCameraProvider; when(mockProcessCameraProvider.bindToLifecycle( @@ -254,6 +271,16 @@ void main() { await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) + .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(MockCameraInfo())); + when(camera.testPreview.getResolutionInfo()) + .thenAnswer((_) async => testResolutionInfo); + + await camera.createCamera(testCameraDescription, testResolutionPreset, + enableAudio: enableAudio); + // Start listening to camera events stream to verify the proper CameraInitializedEvent is sent. camera.cameraEventStreamController.stream.listen((CameraEvent event) { expect(event, const TypeMatcher()); @@ -381,6 +408,7 @@ void main() { verifyNever(camera.processCameraProvider! .bindToLifecycle(camera.cameraSelector!, [camera.preview!])); + verifyNever(mockLiveCameraState.observe(any)); expect(camera.cameraInfo, isNot(mockCameraInfo)); }); @@ -396,6 +424,11 @@ void main() { camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) + .thenAnswer((_) => Future.value(mockCamera)); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(mockCameraInfo)); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) .thenAnswer((_) => Future.value(mockCamera)); when(mockCamera.getCameraInfo()) @@ -405,6 +438,13 @@ void main() { verify(camera.processCameraProvider! .bindToLifecycle(camera.cameraSelector!, [camera.preview!])); + expect( + await testCameraClosingObserver( + camera, + 78, + verify(mockLiveCameraState.observe(captureAny)).captured.single + as Observer), + isTrue); expect(camera.cameraInfo, equals(mockCameraInfo)); }); @@ -421,6 +461,11 @@ void main() { camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) + .thenAnswer((_) => Future.value(mockCamera)); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(MockCameraInfo())); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) .thenAnswer((_) => Future.value(mockCamera)); when(mockCamera.getCameraInfo()) @@ -457,6 +502,11 @@ void main() { camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) + .thenAnswer((_) => Future.value(mockCamera)); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(mockCameraInfo)); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) .thenAnswer((_) => Future.value(mockCamera)); when(mockCamera.getCameraInfo()) @@ -581,6 +631,11 @@ void main() { camera.cameraSelector = MockCameraSelector(); camera.createDetachedCallbacks = true; + when(mockProcessCameraProvider.bindToLifecycle(any, any)) + .thenAnswer((_) => Future.value(mockCamera)); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(MockCameraInfo())); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) .thenAnswer((_) => Future.value(mockCamera)); when(mockCamera.getCameraInfo()) 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 b7365a2e90d4..0c88413c1ad6 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 @@ -203,6 +203,15 @@ class MockCameraInfo extends _i1.Mock implements _i2.CameraInfo { returnValueForMissingStub: _i11.Future.value(0), ) as _i11.Future); @override + _i11.Future getLiveCameraState() => (super.noSuchMethod( + Invocation.method( + #getLiveCameraState, + [], + ), + returnValue: _i11.Future.value(), + returnValueForMissingStub: _i11.Future.value(), + ) as _i11.Future); + @override _i11.Future<_i3.ExposureState> getExposureState() => (super.noSuchMethod( Invocation.method( #getExposureState, diff --git a/packages/camera/camera_android_camerax/test/camera_info_test.dart b/packages/camera/camera_android_camerax/test/camera_info_test.dart index 9826b88e367e..7edf6c409fe0 100644 --- a/packages/camera/camera_android_camerax/test/camera_info_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_info_test.dart @@ -6,6 +6,7 @@ import 'package:camera_android_camerax/src/camera_info.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/exposure_state.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:camera_android_camerax/src/live_data.dart'; import 'package:camera_android_camerax/src/zoom_state.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; 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 968dc6e8b621..4c1bdf696938 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 @@ -36,6 +36,14 @@ class MockTestCameraInfoHostApi extends _i1.Mock returnValue: 0, ) as int); @override + int getLiveCameraState(int? identifier) => (super.noSuchMethod( + Invocation.method( + #getLiveCameraState, + [identifier], + ), + returnValue: 0, + ) as int); + @override int getExposureState(int? identifier) => (super.noSuchMethod( Invocation.method( #getExposureState, diff --git a/packages/camera/camera_android_camerax/test/camera_test.dart b/packages/camera/camera_android_camerax/test/camera_test.dart index 742a60799e6f..05f5fe7dd029 100644 --- a/packages/camera/camera_android_camerax/test/camera_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_test.dart @@ -20,6 +20,8 @@ void main() { TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); group('Camera', () { + tearDown(() => TestCameraHostApi.setup(null)); + test('getCameraInfo makes call to retrieve expected CameraInfo', () async { final MockTestCameraHostApi mockApi = MockTestCameraHostApi(); TestCameraHostApi.setup(mockApi); @@ -52,7 +54,7 @@ void main() { verify(mockApi.getCameraInfo(cameraIdentifier)); }); - test('flutterApiCreateTest', () { + test('flutterApiCreate makes call to add instance to instance manager', () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); 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 40bd8f2e4335..098b297bcf0a 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,32 +70,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); + int getLiveCameraState(int identifier); + int getExposureState(int identifier); int getZoomState(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,19 +101,35 @@ abstract class TestCameraInfoHostApi { }); } } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', 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.CameraInfoHostApi.getLiveCameraState 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.getLiveCameraState was null, expected non-null int.'); + final int output = api.getLiveCameraState(arg_identifier!); + return [output]; + }); + } + } { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraInfoHostApi.getExposureState', 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.getExposureState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getExposureState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -142,14 +144,11 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getZoomState', 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.getZoomState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getZoomState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -163,29 +162,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, @@ -201,24 +195,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]; }); } @@ -227,16 +216,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); @@ -244,19 +231,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]; @@ -265,42 +248,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, @@ -308,12 +282,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]; }); } @@ -323,14 +295,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, @@ -338,8 +307,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]; }); } @@ -349,20 +317,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!); @@ -375,14 +339,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, @@ -396,27 +357,22 @@ abstract class TestProcessCameraProviderHostApi { } abstract class TestCameraHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getCameraInfo(int identifier); - static void setup(TestCameraHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', 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.CameraHostApi.getCameraInfo was null.'); + 'Argument for dev.flutter.pigeon.CameraHostApi.getCameraInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -444,7 +400,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); @@ -453,58 +409,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, @@ -512,24 +455,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 []; @@ -557,9 +495,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); @@ -568,8 +506,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); @@ -580,28 +517,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 []; }); @@ -612,14 +544,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, @@ -631,16 +560,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 []; @@ -652,14 +577,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, @@ -687,7 +609,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); @@ -696,8 +618,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); @@ -706,28 +627,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 []; }); @@ -738,14 +654,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, @@ -763,14 +676,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, @@ -798,7 +708,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); @@ -807,8 +717,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); @@ -817,27 +726,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 []; }); @@ -848,14 +752,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, @@ -873,14 +774,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, @@ -894,27 +792,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, @@ -928,29 +821,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); 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, @@ -965,14 +853,11 @@ 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 ce463baee48ae6d597117cbd6e74a5a9a9d71c93 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 1 May 2023 16:53:58 -0700 Subject: [PATCH 54/71] Undo changes to other packages --- packages/animations/example/android/.pluginToolsConfig.yaml | 4 ++++ packages/dynamic_layouts/example/.pluginToolsConfig.yaml | 4 ++++ packages/espresso/example/.pluginToolsConfig.yaml | 4 ++++ .../example/.pluginToolsConfig.yaml | 4 ++++ .../flutter_adaptive_scaffold/example/.pluginToolsConfig.yaml | 4 ++++ packages/flutter_markdown/example/.pluginToolsConfig.yaml | 4 ++++ .../example/.pluginToolsConfig.yaml | 4 ++++ packages/go_router/example/.pluginToolsConfig.yaml | 4 ++++ .../google_maps_flutter/example/.pluginToolsConfig.yaml | 4 ++++ .../example/.pluginToolsConfig.yaml | 4 ++++ .../google_sign_in/example/.pluginToolsConfig.yaml | 4 ++++ .../google_sign_in_android/example/.pluginToolsConfig.yaml | 4 ++++ packages/google_sign_in/google_sign_in_ios/CHANGELOG.md | 4 ++++ .../google_sign_in_ios/ios/Classes/FLTGoogleSignInPlugin.m | 2 +- packages/google_sign_in/google_sign_in_ios/pubspec.yaml | 2 +- .../image_picker_android/example/.pluginToolsConfig.yaml | 4 ++++ .../local_auth/local_auth/example/.pluginToolsConfig.yaml | 4 ++++ .../local_auth_android/example/.pluginToolsConfig.yaml | 4 ++++ packages/palette_generator/example/.pluginToolsConfig.yaml | 4 ++++ .../path_provider/example/.pluginToolsConfig.yaml | 4 ++++ .../path_provider_android/example/.pluginToolsConfig.yaml | 4 ++++ packages/pigeon/example/app/.pluginToolsConfig.yaml | 4 ++++ .../quick_actions/example/.pluginToolsConfig.yaml | 4 ++++ .../quick_actions_android/example/.pluginToolsConfig.yaml | 4 ++++ .../shared_preferences/example/.pluginToolsConfig.yaml | 4 ++++ .../example/.pluginToolsConfig.yaml | 4 ++++ .../url_launcher/url_launcher/example/.pluginToolsConfig.yaml | 4 ++++ .../url_launcher_android/example/.pluginToolsConfig.yaml | 4 ++++ .../video_player/video_player/example/.pluginToolsConfig.yaml | 4 ++++ .../video_player_android/example/.pluginToolsConfig.yaml | 4 ++++ packages/video_player/video_player_avfoundation/CHANGELOG.md | 4 ++++ .../ios/Classes/FLTVideoPlayerPlugin.m | 2 +- packages/video_player/video_player_avfoundation/pubspec.yaml | 2 +- .../webview_flutter/example/.pluginToolsConfig.yaml | 4 ++++ .../webview_flutter_android/example/.pluginToolsConfig.yaml | 4 ++++ 35 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 packages/animations/example/android/.pluginToolsConfig.yaml create mode 100644 packages/dynamic_layouts/example/.pluginToolsConfig.yaml create mode 100644 packages/espresso/example/.pluginToolsConfig.yaml create mode 100644 packages/extension_google_sign_in_as_googleapis_auth/example/.pluginToolsConfig.yaml create mode 100644 packages/flutter_adaptive_scaffold/example/.pluginToolsConfig.yaml create mode 100644 packages/flutter_markdown/example/.pluginToolsConfig.yaml create mode 100644 packages/flutter_plugin_android_lifecycle/example/.pluginToolsConfig.yaml create mode 100644 packages/go_router/example/.pluginToolsConfig.yaml create mode 100644 packages/google_maps_flutter/google_maps_flutter/example/.pluginToolsConfig.yaml create mode 100644 packages/google_maps_flutter/google_maps_flutter_android/example/.pluginToolsConfig.yaml create mode 100644 packages/google_sign_in/google_sign_in/example/.pluginToolsConfig.yaml create mode 100644 packages/google_sign_in/google_sign_in_android/example/.pluginToolsConfig.yaml create mode 100644 packages/image_picker/image_picker_android/example/.pluginToolsConfig.yaml create mode 100644 packages/local_auth/local_auth/example/.pluginToolsConfig.yaml create mode 100644 packages/local_auth/local_auth_android/example/.pluginToolsConfig.yaml create mode 100644 packages/palette_generator/example/.pluginToolsConfig.yaml create mode 100644 packages/path_provider/path_provider/example/.pluginToolsConfig.yaml create mode 100644 packages/path_provider/path_provider_android/example/.pluginToolsConfig.yaml create mode 100644 packages/pigeon/example/app/.pluginToolsConfig.yaml create mode 100644 packages/quick_actions/quick_actions/example/.pluginToolsConfig.yaml create mode 100644 packages/quick_actions/quick_actions_android/example/.pluginToolsConfig.yaml create mode 100644 packages/shared_preferences/shared_preferences/example/.pluginToolsConfig.yaml create mode 100644 packages/shared_preferences/shared_preferences_android/example/.pluginToolsConfig.yaml create mode 100644 packages/url_launcher/url_launcher/example/.pluginToolsConfig.yaml create mode 100644 packages/url_launcher/url_launcher_android/example/.pluginToolsConfig.yaml create mode 100644 packages/video_player/video_player/example/.pluginToolsConfig.yaml create mode 100644 packages/video_player/video_player_android/example/.pluginToolsConfig.yaml create mode 100644 packages/webview_flutter/webview_flutter/example/.pluginToolsConfig.yaml create mode 100644 packages/webview_flutter/webview_flutter_android/example/.pluginToolsConfig.yaml diff --git a/packages/animations/example/android/.pluginToolsConfig.yaml b/packages/animations/example/android/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/animations/example/android/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/dynamic_layouts/example/.pluginToolsConfig.yaml b/packages/dynamic_layouts/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/dynamic_layouts/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/espresso/example/.pluginToolsConfig.yaml b/packages/espresso/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/espresso/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/extension_google_sign_in_as_googleapis_auth/example/.pluginToolsConfig.yaml b/packages/extension_google_sign_in_as_googleapis_auth/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/extension_google_sign_in_as_googleapis_auth/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/flutter_adaptive_scaffold/example/.pluginToolsConfig.yaml b/packages/flutter_adaptive_scaffold/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/flutter_adaptive_scaffold/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/flutter_markdown/example/.pluginToolsConfig.yaml b/packages/flutter_markdown/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/flutter_markdown/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/flutter_plugin_android_lifecycle/example/.pluginToolsConfig.yaml b/packages/flutter_plugin_android_lifecycle/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/flutter_plugin_android_lifecycle/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/go_router/example/.pluginToolsConfig.yaml b/packages/go_router/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/go_router/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/google_maps_flutter/google_maps_flutter/example/.pluginToolsConfig.yaml b/packages/google_maps_flutter/google_maps_flutter/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/.pluginToolsConfig.yaml b/packages/google_maps_flutter/google_maps_flutter_android/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/google_sign_in/google_sign_in/example/.pluginToolsConfig.yaml b/packages/google_sign_in/google_sign_in/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/google_sign_in/google_sign_in/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/google_sign_in/google_sign_in_android/example/.pluginToolsConfig.yaml b/packages/google_sign_in/google_sign_in_android/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/google_sign_in/google_sign_in_android/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md b/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md index 82cb24bd5658..843a9e8d60e0 100644 --- a/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.6.2 + +* Updates functions without a prototype to avoid deprecation warning. + ## 5.6.1 * Clarifies explanation of endorsement in README. diff --git a/packages/google_sign_in/google_sign_in_ios/ios/Classes/FLTGoogleSignInPlugin.m b/packages/google_sign_in/google_sign_in_ios/ios/Classes/FLTGoogleSignInPlugin.m index 7beb604aaee3..069928422863 100644 --- a/packages/google_sign_in/google_sign_in_ios/ios/Classes/FLTGoogleSignInPlugin.m +++ b/packages/google_sign_in/google_sign_in_ios/ios/Classes/FLTGoogleSignInPlugin.m @@ -14,7 +14,7 @@ static NSString *const kServerClientIdKey = @"SERVER_CLIENT_ID"; -static NSDictionary *loadGoogleServiceInfo() { +static NSDictionary *loadGoogleServiceInfo(void) { NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; if (plistPath) { diff --git a/packages/google_sign_in/google_sign_in_ios/pubspec.yaml b/packages/google_sign_in/google_sign_in_ios/pubspec.yaml index 50c33f80aa1f..6ce44b89b533 100644 --- a/packages/google_sign_in/google_sign_in_ios/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: google_sign_in_ios description: iOS implementation of the google_sign_in plugin. repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22 -version: 5.6.1 +version: 5.6.2 environment: sdk: ">=2.18.0 <4.0.0" diff --git a/packages/image_picker/image_picker_android/example/.pluginToolsConfig.yaml b/packages/image_picker/image_picker_android/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/image_picker/image_picker_android/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/local_auth/local_auth/example/.pluginToolsConfig.yaml b/packages/local_auth/local_auth/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/local_auth/local_auth/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/local_auth/local_auth_android/example/.pluginToolsConfig.yaml b/packages/local_auth/local_auth_android/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/local_auth/local_auth_android/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/palette_generator/example/.pluginToolsConfig.yaml b/packages/palette_generator/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/palette_generator/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/path_provider/path_provider/example/.pluginToolsConfig.yaml b/packages/path_provider/path_provider/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/path_provider/path_provider/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/path_provider/path_provider_android/example/.pluginToolsConfig.yaml b/packages/path_provider/path_provider_android/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/path_provider/path_provider_android/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/pigeon/example/app/.pluginToolsConfig.yaml b/packages/pigeon/example/app/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/pigeon/example/app/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/quick_actions/quick_actions/example/.pluginToolsConfig.yaml b/packages/quick_actions/quick_actions/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/quick_actions/quick_actions/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/quick_actions/quick_actions_android/example/.pluginToolsConfig.yaml b/packages/quick_actions/quick_actions_android/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/quick_actions/quick_actions_android/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/shared_preferences/shared_preferences/example/.pluginToolsConfig.yaml b/packages/shared_preferences/shared_preferences/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/shared_preferences/shared_preferences/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/shared_preferences/shared_preferences_android/example/.pluginToolsConfig.yaml b/packages/shared_preferences/shared_preferences_android/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/shared_preferences/shared_preferences_android/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/url_launcher/url_launcher/example/.pluginToolsConfig.yaml b/packages/url_launcher/url_launcher/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/url_launcher/url_launcher/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/url_launcher/url_launcher_android/example/.pluginToolsConfig.yaml b/packages/url_launcher/url_launcher_android/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/url_launcher/url_launcher_android/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/video_player/video_player/example/.pluginToolsConfig.yaml b/packages/video_player/video_player/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/video_player/video_player/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/video_player/video_player_android/example/.pluginToolsConfig.yaml b/packages/video_player/video_player_android/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/video_player/video_player_android/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index 8c1e2bc3426f..c4425521fa95 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.4.5 + +* Updates functions without a prototype to avoid deprecation warning. + ## 2.4.4 * Updates pigeon to fix warnings with clang 15. diff --git a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m index 586d6555befb..6c39cb9a4a77 100644 --- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m @@ -146,7 +146,7 @@ NS_INLINE CGFloat radiansToDegrees(CGFloat radians) { return degrees; }; -NS_INLINE UIViewController *rootViewController() { +NS_INLINE UIViewController *rootViewController(void) { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" // TODO: (hellohuanlin) Provide a non-deprecated codepath. See diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml index c579ee0be2e4..53bbe63fce3d 100644 --- a/packages/video_player/video_player_avfoundation/pubspec.yaml +++ b/packages/video_player/video_player_avfoundation/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_avfoundation description: iOS implementation of the video_player plugin. repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_avfoundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.4.4 +version: 2.4.5 environment: sdk: ">=2.18.0 <4.0.0" diff --git a/packages/webview_flutter/webview_flutter/example/.pluginToolsConfig.yaml b/packages/webview_flutter/webview_flutter/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/webview_flutter/webview_flutter/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" diff --git a/packages/webview_flutter/webview_flutter_android/example/.pluginToolsConfig.yaml b/packages/webview_flutter/webview_flutter_android/example/.pluginToolsConfig.yaml new file mode 100644 index 000000000000..3b6017b7609a --- /dev/null +++ b/packages/webview_flutter/webview_flutter_android/example/.pluginToolsConfig.yaml @@ -0,0 +1,4 @@ +buildFlags: + _pluginToolsConfigGlobalKey: + - "--no-tree-shake-icons" + - "--dart-define=buildmode=testing" From c525162fd964cab94ce270c67e93beb7d23c4410 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 1 May 2023 16:56:04 -0700 Subject: [PATCH 55/71] Undo non-camera changes --- .ci/flutter_master.version | 2 +- script/tool/lib/src/common/package_state_utils.dart | 1 + script/tool/test/version_check_command_test.dart | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 7ad6ea501624..9af3ba0ad9af 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -66fa4c5d301c5093cb4403b39e3d61f604b96d90 +828a04040e111e5eec07056e82037a930f5fd5a2 diff --git a/script/tool/lib/src/common/package_state_utils.dart b/script/tool/lib/src/common/package_state_utils.dart index fbba75c6116f..2b18f017652b 100644 --- a/script/tool/lib/src/common/package_state_utils.dart +++ b/script/tool/lib/src/common/package_state_utils.dart @@ -195,6 +195,7 @@ bool _isExampleBuildFile(List pathComponents) { pathComponents.contains('build.gradle') || pathComponents.contains('Runner.xcodeproj') || pathComponents.contains('CMakeLists.txt') || + pathComponents.contains('.pluginToolsConfig.yaml') || pathComponents.contains('pubspec.yaml'); } diff --git a/script/tool/test/version_check_command_test.dart b/script/tool/test/version_check_command_test.dart index b614d8cef571..f3e6f9227dc8 100644 --- a/script/tool/test/version_check_command_test.dart +++ b/script/tool/test/version_check_command_test.dart @@ -874,6 +874,7 @@ tool/plugin/lib/plugin.dart processRunner.mockProcessesForExecutable['git-diff'] = [ FakeProcessInfo(MockProcess(stdout: ''' +packages/plugin/example/android/.pluginToolsConfig.yaml packages/plugin/example/android/lint-baseline.xml packages/plugin/example/android/src/androidTest/foo/bar/FooTest.java packages/plugin/example/ios/RunnerTests/Foo.m From 86304c3f1edb2891e2a25cbf6d3c1686e1e0b8eb Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 2 May 2023 11:08:16 -0700 Subject: [PATCH 56/71] Add getValue --- .../camerax/CameraInfoHostApiImpl.java | 46 +-- .../camerax/GeneratedCameraXLibrary.java | 218 ++++-------- .../plugins/camerax/LiveDataHostApiImpl.java | 29 ++ .../plugins/camerax/CameraInfoTest.java | 4 +- .../flutter/plugins/camerax/LiveDataTest.java | 6 + .../lib/src/android_camera_camerax.dart | 73 ++-- ...roid_camera_camerax_flutter_api_impls.dart | 6 - .../lib/src/camera_info.dart | 33 +- .../lib/src/camerax_library.g.dart | 169 +++------ .../lib/src/live_data.dart | 44 ++- .../pigeons/camerax_library.dart | 28 +- .../test/android_camera_camerax_test.dart | 95 +---- .../android_camera_camerax_test.mocks.dart | 326 +++++++++--------- .../test/camera_info_test.dart | 10 +- .../test/camera_info_test.mocks.dart | 7 +- .../test/live_data_test.mocks.dart | 13 + .../test/test_camerax_library.g.dart | 59 +++- 17 files changed, 471 insertions(+), 695 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index 786c311de282..de98dadfa253 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -49,7 +49,7 @@ public Long getSensorRotationDegrees(@NonNull Long identifier) { */ @Override @NonNull - public Long getLiveCameraState(@NonNull Long identifier) { + public Long getCameraState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); LiveData liveCameraState = cameraInfo.getCameraState(); @@ -84,48 +84,10 @@ public Long getExposureState(@NonNull Long identifier) { public Long getZoomState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); - // TODO(camsim99): Create/return LiveData once https://github.com/flutter/packages/pull/3419 lands. - ZoomState zoomState = cameraInfo.getZoomState().getValue(); + LiveData zoomState = cameraInfo.getZoomState(); - ZoomStateFlutterApiImpl zoomStateFlutterApiImpl = - new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager); - zoomStateFlutterApiImpl.create(zoomState, result -> {}); - - return instanceManager.getIdentifierForStrongReference(zoomState); - } - - /** - * Retrieves the {@link ExposureState} of the {@link CameraInfo} with the specified identifier. - */ - @Override - @NonNull - public Long getExposureState(@NonNull Long identifier) { - CameraInfo cameraInfo = - (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); - ExposureState exposureState = cameraInfo.getExposureState(); - - ExposureStateFlutterApiImpl exposureStateFlutterApiImpl = - new ExposureStateFlutterApiImpl(binaryMessenger, instanceManager); - exposureStateFlutterApiImpl.create(exposureState, result -> {}); - - return instanceManager.getIdentifierForStrongReference(exposureState); - } - - /** - * Retrieves the current {@link ZoomState} value of the {@link CameraInfo} with the specified - * identifier. - */ - @NonNull - @Override - public Long getZoomState(@NonNull Long identifier) { - CameraInfo cameraInfo = - (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); - // TODO(camsim99): Create/return LiveData once https://github.com/flutter/packages/pull/3419 lands. - ZoomState zoomState = cameraInfo.getZoomState().getValue(); - - ZoomStateFlutterApiImpl zoomStateFlutterApiImpl = - new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager); - zoomStateFlutterApiImpl.create(zoomState, result -> {}); + LiveDataFlutterApiWrapper liveDataFlutterApiWrapper = new LiveDataFlutterApiWrapper(binaryMessenger, instanceManager); + liveDataFlutterApiWrapper.create(zoomState, LiveDataSupportedType.ZOOM_STATE, reply -> {}); return instanceManager.getIdentifierForStrongReference(zoomState); } 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 249a18aa4ef7..c1e2710ffbe5 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 @@ -80,7 +80,8 @@ private CameraStateType(final int index) { } public enum LiveDataSupportedType { - CAMERA_STATE(0); + CAMERA_STATE(0), + ZOOM_STATE(1); final int index; @@ -406,79 +407,6 @@ ArrayList toList() { } } - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class ExposureCompensationRange { - private @NonNull Long minCompensation; - - public @NonNull Long getMinCompensation() { - return minCompensation; - } - - public void setMinCompensation(@NonNull Long setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"minCompensation\" is null."); - } - this.minCompensation = setterArg; - } - - private @NonNull Long maxCompensation; - - public @NonNull Long getMaxCompensation() { - return maxCompensation; - } - - public void setMaxCompensation(@NonNull Long setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"maxCompensation\" is null."); - } - this.maxCompensation = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - ExposureCompensationRange() {} - - public static final class Builder { - - private @Nullable Long minCompensation; - - public @NonNull Builder setMinCompensation(@NonNull Long setterArg) { - this.minCompensation = setterArg; - return this; - } - - private @Nullable Long maxCompensation; - - public @NonNull Builder setMaxCompensation(@NonNull Long setterArg) { - this.maxCompensation = setterArg; - return this; - } - - public @NonNull ExposureCompensationRange build() { - ExposureCompensationRange pigeonReturn = new ExposureCompensationRange(); - pigeonReturn.setMinCompensation(minCompensation); - pigeonReturn.setMaxCompensation(maxCompensation); - return pigeonReturn; - } - } - - @NonNull - ArrayList toList() { - ArrayList toListResult = new ArrayList(2); - toListResult.add(minCompensation); - toListResult.add(maxCompensation); - return toListResult; - } - - static @NonNull ExposureCompensationRange fromList(@NonNull ArrayList list) { - ExposureCompensationRange pigeonResult = new ExposureCompensationRange(); - Object minCompensation = list.get(0); - pigeonResult.setMinCompensation((minCompensation == null) ? null : ((minCompensation instanceof Integer) ? (Integer) minCompensation : (Long) minCompensation)); - Object maxCompensation = list.get(1); - pigeonResult.setMaxCompensation((maxCompensation == null) ? null : ((maxCompensation instanceof Integer) ? (Integer) maxCompensation : (Long) maxCompensation)); - return pigeonResult; - } - } - public interface Result { @SuppressWarnings("UnknownNullness") void success(T result); @@ -594,7 +522,7 @@ public interface CameraInfoHostApi { Long getSensorRotationDegrees(@NonNull Long identifier); @NonNull - Long getLiveCameraState(@NonNull Long identifier); + Long getCameraState(@NonNull Long identifier); @NonNull Long getExposureState(@NonNull Long identifier); @@ -635,7 +563,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState", getCodec()); + binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getCameraState", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -643,7 +571,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getLiveCameraState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = api.getCameraState((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); } catch (Throwable exception) { @@ -1651,85 +1579,6 @@ public void create(@NonNull Long identifierArg, @NonNull Double minZoomRatioArg, } } - private static class ExposureStateFlutterApiCodec extends StandardMessageCodec { - public static final ExposureStateFlutterApiCodec INSTANCE = new ExposureStateFlutterApiCodec(); - - private ExposureStateFlutterApiCodec() {} - - @Override - protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { - switch (type) { - case (byte) 128: - return ExposureCompensationRange.fromList((ArrayList) readValue(buffer)); - default: - return super.readValueOfType(type, buffer); - } - } - - @Override - protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { - if (value instanceof ExposureCompensationRange) { - stream.write(128); - writeValue(stream, ((ExposureCompensationRange) value).toList()); - } else { - super.writeValue(stream, value); - } - } - } - - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ - public static class ExposureStateFlutterApi { - private final @NonNull BinaryMessenger binaryMessenger; - - public ExposureStateFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { - this.binaryMessenger = argBinaryMessenger; - } - - /** Public interface for sending reply. */ - @SuppressWarnings("UnknownNullness") - public interface Reply { - void reply(T reply); - } - /** The codec used by ExposureStateFlutterApi. */ - static @NonNull MessageCodec getCodec() { - return ExposureStateFlutterApiCodec.INSTANCE; - } - public void create(@NonNull Long identifierArg, @NonNull ExposureCompensationRange exposureCompensationRangeArg, @NonNull Double exposureCompensationStepArg, @NonNull Reply callback) { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ExposureStateFlutterApi.create", getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg, exposureCompensationRangeArg, exposureCompensationStepArg)), - channelReply -> callback.reply(null)); - } - } - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ - public static class ZoomStateFlutterApi { - private final @NonNull BinaryMessenger binaryMessenger; - - public ZoomStateFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { - this.binaryMessenger = argBinaryMessenger; - } - - /** Public interface for sending reply. */ - @SuppressWarnings("UnknownNullness") - public interface Reply { - void reply(T reply); - } - /** The codec used by ZoomStateFlutterApi. */ - static @NonNull MessageCodec getCodec() { - return new StandardMessageCodec(); - } - public void create(@NonNull Long identifierArg, @NonNull Double minZoomRatioArg, @NonNull Double maxZoomRatioArg, @NonNull Reply callback) { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ZoomStateFlutterApi.create", getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg, minZoomRatioArg, maxZoomRatioArg)), - channelReply -> callback.reply(null)); - } - } - private static class ImageAnalysisHostApiCodec extends StandardMessageCodec { public static final ImageAnalysisHostApiCodec INSTANCE = new ImageAnalysisHostApiCodec(); @@ -1973,6 +1822,33 @@ public void create(@NonNull Long identifierArg, @NonNull Long codeArg, @NonNull channelReply -> callback.reply(null)); } } + + private static class LiveDataHostApiCodec extends StandardMessageCodec { + public static final LiveDataHostApiCodec INSTANCE = new LiveDataHostApiCodec(); + + private LiveDataHostApiCodec() {} + + @Override + protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { + switch (type) { + case (byte) 128: + return LiveDataSupportedTypeData.fromList((ArrayList) readValue(buffer)); + default: + return super.readValueOfType(type, buffer); + } + } + + @Override + protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { + if (value instanceof LiveDataSupportedTypeData) { + stream.write(128); + writeValue(stream, ((LiveDataSupportedTypeData) value).toList()); + } else { + super.writeValue(stream, value); + } + } + } + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface LiveDataHostApi { @@ -1980,9 +1856,12 @@ public interface LiveDataHostApi { void removeObservers(@NonNull Long identifier); + @Nullable + Long getValue(@NonNull Long identifier, @NonNull LiveDataSupportedTypeData type); + /** The codec used by LiveDataHostApi. */ static @NonNull MessageCodec getCodec() { - return new StandardMessageCodec(); + return LiveDataHostApiCodec.INSTANCE; } /**Sets up an instance of `LiveDataHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHostApi api) { @@ -2025,6 +1904,31 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo api.removeObservers((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); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.LiveDataHostApi.getValue", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + LiveDataSupportedTypeData typeArg = (LiveDataSupportedTypeData) args.get(1); + try { + Long output = api.getValue((identifierArg == null) ? null : identifierArg.longValue(), typeArg); + wrapped.add(0, output); + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java index 0cac5c621d7e..175d8a6e5852 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java @@ -5,10 +5,16 @@ package io.flutter.plugins.camerax; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.camera.core.CameraState; +import androidx.camera.core.ZoomState; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataHostApi; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedType; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedTypeData; + import java.util.Objects; /** @@ -58,6 +64,29 @@ public void removeObservers(@NonNull Long identifier) { getLiveDataInstance(identifier).removeObservers(lifecycleOwner); } + @Override + @Nullable + public Long getValue(@NonNull Long identifier, @NonNull LiveDataSupportedTypeData type) { + Object value = getLiveDataInstance(identifier).getValue(); + if (value == null) { + return null; + } + + LiveDataSupportedType valueType = type.getValue(); + switch(valueType) { + case CAMERA_STATE: + CameraState cameraState = (CameraState) value; + new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager).create(cameraState, CameraStateFlutterApiWrapper.getCameraStateType(cameraState.getType()), cameraState.getError(), reply -> {}); + return instanceManager.getIdentifierForStrongReference(cameraState); + case ZOOM_STATE: + ZoomState zoomState = (ZoomState) value; + new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager).create(zoomState, reply -> {}); + return instanceManager.getIdentifierForStrongReference(zoomState); + default: + throw new IllegalArgumentException("The type of LiveData whose value was requested is not supported."); + } + } + /** Retrieves the {@link LiveData} instance that has the specified identifier. */ private LiveData getLiveDataInstance(@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/CameraInfoTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java index f8bbe276498a..050037dd0653 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java @@ -60,7 +60,7 @@ public void getSensorRotationDegrees_makesCallToRetrieveSensorRotationDegrees() } @Test - public void getLiveCameraState_makesCallToRetrieveLiveCameraState() { + public void getCameraState_makesCallToRetrieveLiveCameraState() { final CameraInfoHostApiImpl cameraInfoHostApiImpl = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); final LiveDataFlutterApiWrapper mockLiveDataFlutterApiWrapper = @@ -74,7 +74,7 @@ public void getLiveCameraState_makesCallToRetrieveLiveCameraState() { when(mockCameraInfo.getCameraState()).thenReturn(mockLiveCameraState); final Long liveCameraStateIdentifier = - cameraInfoHostApiImpl.getLiveCameraState(mockCameraInfoIdentifier); + cameraInfoHostApiImpl.getCameraState(mockCameraInfoIdentifier); verify(mockLiveDataFlutterApiWrapper) .create(eq(mockLiveCameraState), eq(LiveDataSupportedType.CAMERA_STATE), any()); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java index d525b3481fe0..d58f001316bd 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -82,6 +82,12 @@ public void removeObservers_makesCallToRemoveObserversFromLiveDataInstance() { verify(mockLiveData).removeObservers(mockLifecycleOwner); } + @Test + public void getValue_returnsExpectedValue() { + + } + + @Test public void flutterApiCreate_makesCallToDartToCreateInstance() { final LiveDataFlutterApiWrapper flutterApi = 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 95347add9c68..ef3ad3ca54b0 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 @@ -332,57 +332,16 @@ class AndroidCameraCameraX extends CameraPlatform { /// [cameraId] not used. @override Future getMaxZoomLevel(int cameraId) async { - final ZoomState exposureState = await cameraInfo!.getZoomState(); - return exposureState.maxZoomRatio; - } - - /// Gets the minimum supported zoom level for the selected camera. - /// - /// [cameraId] not used. - @override - Future getMinZoomLevel(int cameraId) async { - final ZoomState exposureState = await cameraInfo!.getZoomState(); - return exposureState.minZoomRatio; - } - - /// Gets the minimum supported exposure offset for the selected camera in EV units. - /// - /// [cameraId] not used. - @override - Future getMinExposureOffset(int cameraId) async { - final ExposureState exposureState = await cameraInfo!.getExposureState(); - return exposureState.exposureCompensationRange.minCompensation * - exposureState.exposureCompensationStep; - } + final LiveData liveZoomState = await cameraInfo!.getZoomState(); + final ZoomState? zoomState = await liveZoomState.getValue(); - /// Gets the maximum supported exposure offset for the selected camera in EV units. - /// - /// [cameraId] not used. - @override - Future getMaxExposureOffset(int cameraId) async { - final ExposureState exposureState = await cameraInfo!.getExposureState(); - return exposureState.exposureCompensationRange.maxCompensation * - exposureState.exposureCompensationStep; - } - - /// Gets the supported step size for exposure offset for the selected camera in EV units. - /// - /// Returns 0 when exposure compensation is not supported. - /// - /// [cameraId] not used. - @override - Future getExposureOffsetStepSize(int cameraId) async { - final ExposureState exposureState = await cameraInfo!.getExposureState(); - return exposureState.exposureCompensationStep; - } - - /// Gets the maximum supported zoom level for the selected camera. - /// - /// [cameraId] not used. - @override - Future getMaxZoomLevel(int cameraId) async { - final ZoomState exposureState = await cameraInfo!.getZoomState(); - return exposureState.maxZoomRatio; + if (zoomState == null) { + throw CameraException( + 'zoomStateNotSet', + 'No explicit zoomState has been set on the LiveData instance for the camera in use.', + ); + } + return zoomState.maxZoomRatio; } /// Gets the minimum supported zoom level for the selected camera. @@ -390,8 +349,16 @@ class AndroidCameraCameraX extends CameraPlatform { /// [cameraId] not used. @override Future getMinZoomLevel(int cameraId) async { - final ZoomState exposureState = await cameraInfo!.getZoomState(); - return exposureState.minZoomRatio; + final LiveData liveZoomState = await cameraInfo!.getZoomState(); + final ZoomState? zoomState = await liveZoomState.getValue(); + + if (zoomState == null) { + throw CameraException( + 'zoomStateNotSet', + 'No explicit zoomState has been set on the LiveData instance for the camera in use.', + ); + } + return zoomState.minZoomRatio; } /// The ui orientation changed. @@ -586,7 +553,7 @@ class AndroidCameraCameraX extends CameraPlatform { Future _updateLiveCameraState(int cameraId) async { final CameraInfo cameraInfo = await camera!.getCameraInfo(); liveCameraState?.removeObservers(); - liveCameraState = await cameraInfo.getLiveCameraState(); + liveCameraState = await cameraInfo.getCameraState(); await liveCameraState!.observe(_createCameraClosingObserver(cameraId)); } 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 0911d4bf12ce..0d385f373f78 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 @@ -116,12 +116,6 @@ class AndroidCameraXCameraFlutterApis { /// Flutter Api for [ZoomState]. late final ZoomStateFlutterApiImpl zoomStateFlutterApiImpl; - /// Flutter Api for [ExposureState]. - late final ExposureStateFlutterApiImpl exposureStateFlutterApiImpl; - - /// Flutter Api for [ZoomState]. - late final ZoomStateFlutterApiImpl zoomStateFlutterApiImpl; - /// Flutter Api implementation for [Analyzer]. late final AnalyzerFlutterApiImpl analyzerFlutterApiImpl; diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index f9f99b8b9a71..012d01943aca 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -37,15 +37,16 @@ class CameraInfo extends JavaObject { _api.getSensorRotationDegreesFromInstance(this); /// Starts listening for the camera closing. - Future> getLiveCameraState() => - _api.getLiveCameraStateFromInstance(this); + Future> getCameraState() => + _api.getCameraStateFromInstance(this); /// Gets the exposure state of the camera. Future getExposureState() => _api.getExposureStateFromInstance(this); /// Gets the zoom state of the camera. - Future getZoomState() => _api.getZoomStateFromInstance(this); + Future> getZoomState() => + _api.getZoomStateFromInstance(this); } /// Host API implementation of [CameraInfo]. @@ -70,13 +71,13 @@ class _CameraInfoHostApiImpl extends CameraInfoHostApi { /// Gets the [LiveData] that represents the state of the camera /// to which the CameraInfo [instance] pertains. - Future> getLiveCameraStateFromInstance( + Future> getCameraStateFromInstance( CameraInfo instance) async { final int? identifier = instanceManager.getIdentifier(instance); assert(identifier != null, 'No CameraInfo has the identifer of that which was requested.'); - final int liveCameraStateId = await getLiveCameraState(identifier!); + final int liveCameraStateId = await getCameraState(identifier!); final LiveData liveCameraState = instanceManager.getInstanceWithWeakReference>( liveCameraStateId)!; @@ -93,28 +94,12 @@ class _CameraInfoHostApiImpl extends CameraInfoHostApi { } /// Gets the [ZoomState] of the specified [CameraInfo] instance. - Future getZoomStateFromInstance(CameraInfo instance) async { - final int? identifier = instanceManager.getIdentifier(instance); - final int zoomStateIdentifier = await getZoomState(identifier!); - return instanceManager - .getInstanceWithWeakReference(zoomStateIdentifier)!; - } - - /// Gets the [ExposureState] of the specified [CameraInfo] instance. - Future getExposureStateFromInstance( + Future> getZoomStateFromInstance( CameraInfo instance) async { final int? identifier = instanceManager.getIdentifier(instance); - final int exposureStateIdentifier = await getExposureState(identifier!); - return instanceManager - .getInstanceWithWeakReference(exposureStateIdentifier)!; - } - - /// Gets the [ZoomState] of the specified [CameraInfo] instance. - Future getZoomStateFromInstance(CameraInfo instance) async { - final int? identifier = instanceManager.getIdentifier(instance); final int zoomStateIdentifier = await getZoomState(identifier!); - return instanceManager - .getInstanceWithWeakReference(zoomStateIdentifier)!; + return instanceManager.getInstanceWithWeakReference>( + zoomStateIdentifier)!; } } 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 12f80905e130..fea7df6e2060 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 @@ -24,6 +24,7 @@ enum CameraStateType { enum LiveDataSupportedType { cameraState, + zoomState, } class ResolutionInfo { @@ -146,32 +147,6 @@ class ExposureCompensationRange { } } -class ExposureCompensationRange { - ExposureCompensationRange({ - required this.minCompensation, - required this.maxCompensation, - }); - - int minCompensation; - - int maxCompensation; - - Object encode() { - return [ - minCompensation, - maxCompensation, - ]; - } - - static ExposureCompensationRange decode(Object result) { - result as List; - return ExposureCompensationRange( - minCompensation: result[0]! as int, - maxCompensation: result[1]! as int, - ); - } -} - class InstanceManagerHostApi { /// Constructor for [InstanceManagerHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -306,9 +281,9 @@ class CameraInfoHostApi { } } - Future getLiveCameraState(int arg_identifier) async { + Future getCameraState(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', codec, + 'dev.flutter.pigeon.CameraInfoHostApi.getCameraState', codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_identifier]) as List?; @@ -1299,97 +1274,6 @@ abstract class ZoomStateFlutterApi { } } -class _ExposureStateFlutterApiCodec extends StandardMessageCodec { - const _ExposureStateFlutterApiCodec(); - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is ExposureCompensationRange) { - buffer.putUint8(128); - writeValue(buffer, value.encode()); - } else { - super.writeValue(buffer, value); - } - } - - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 128: - return ExposureCompensationRange.decode(readValue(buffer)!); - default: - return super.readValueOfType(type, buffer); - } - } -} - -abstract class ExposureStateFlutterApi { - static const MessageCodec codec = _ExposureStateFlutterApiCodec(); - - void create(int identifier, ExposureCompensationRange exposureCompensationRange, double exposureCompensationStep); - - static void setup(ExposureStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ExposureStateFlutterApi.create', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMessageHandler(null); - } else { - channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.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.ExposureStateFlutterApi.create was null, expected non-null int.'); - final ExposureCompensationRange? arg_exposureCompensationRange = (args[1] as ExposureCompensationRange?); - assert(arg_exposureCompensationRange != null, - 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null ExposureCompensationRange.'); - final double? arg_exposureCompensationStep = (args[2] as double?); - assert(arg_exposureCompensationStep != null, - 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null double.'); - api.create(arg_identifier!, arg_exposureCompensationRange!, arg_exposureCompensationStep!); - return; - }); - } - } - } -} - -abstract class ZoomStateFlutterApi { - static const MessageCodec codec = StandardMessageCodec(); - - void create(int identifier, double minZoomRatio, double maxZoomRatio); - - static void setup(ZoomStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ZoomStateFlutterApi.create', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMessageHandler(null); - } else { - channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.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.ZoomStateFlutterApi.create was null, expected non-null int.'); - final double? arg_minZoomRatio = (args[1] as double?); - assert(arg_minZoomRatio != null, - 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null, expected non-null double.'); - final double? arg_maxZoomRatio = (args[2] as double?); - assert(arg_maxZoomRatio != null, - 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null, expected non-null double.'); - api.create(arg_identifier!, arg_minZoomRatio!, arg_maxZoomRatio!); - return; - }); - } - } - } -} - class _ImageAnalysisHostApiCodec extends StandardMessageCodec { const _ImageAnalysisHostApiCodec(); @override @@ -1618,6 +1502,29 @@ abstract class CameraStateErrorFlutterApi { } } +class _LiveDataHostApiCodec extends StandardMessageCodec { + const _LiveDataHostApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is LiveDataSupportedTypeData) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return LiveDataSupportedTypeData.decode(readValue(buffer)!); + default: + return super.readValueOfType(type, buffer); + } + } +} + class LiveDataHostApi { /// Constructor for [LiveDataHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -1626,7 +1533,7 @@ class LiveDataHostApi { : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec codec = _LiveDataHostApiCodec(); Future observe(int arg_identifier, int arg_observerIdentifier) async { final BasicMessageChannel channel = BasicMessageChannel( @@ -1671,6 +1578,28 @@ class LiveDataHostApi { return; } } + + Future getValue(int arg_identifier, LiveDataSupportedTypeData arg_type) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveDataHostApi.getValue', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier, arg_type]) 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 (replyList[0] as int?); + } + } } class _LiveDataFlutterApiCodec extends StandardMessageCodec { diff --git a/packages/camera/camera_android_camerax/lib/src/live_data.dart b/packages/camera/camera_android_camerax/lib/src/live_data.dart index 7a14ae91d09c..102467b5b774 100644 --- a/packages/camera/camera_android_camerax/lib/src/live_data.dart +++ b/packages/camera/camera_android_camerax/lib/src/live_data.dart @@ -10,6 +10,7 @@ import 'camerax_library.g.dart'; import 'instance_manager.dart'; import 'java_object.dart'; import 'observer.dart'; +import 'zoom_state.dart'; /// A data holder class that can be observed. /// @@ -17,7 +18,7 @@ import 'observer.dart'; /// Android Activity to which this plugin is attached. /// /// See https://developer.android.com/reference/androidx/lifecycle/LiveData. -class LiveData extends JavaObject { +class LiveData extends JavaObject { /// Constructs a [LiveData] that is not automatically attached to a native object. LiveData.detached({this.binaryMessenger, this.instanceManager}) : _api = _LiveDataHostApiImpl( @@ -42,6 +43,11 @@ class LiveData extends JavaObject { Future removeObservers() { return _api.removeObserversFromInstances(this); } + + /// Returns the current value. + Future? getValue() { + return _api.getValueFromInstances(this); + } } /// Host API implementation of [LiveData]. @@ -86,6 +92,27 @@ class _LiveDataHostApiImpl extends LiveDataHostApi { instanceManager.getIdentifier(instance)!, ); } + + /// Gets current value of specified [LiveData] instance. + Future? getValueFromInstances( + LiveData instance) async { + LiveDataSupportedTypeData? typeData; + switch (T) { + case CameraState: + typeData = + LiveDataSupportedTypeData(value: LiveDataSupportedType.cameraState); + break; + case ZoomState: + typeData = + LiveDataSupportedTypeData(value: LiveDataSupportedType.zoomState); + break; + } + final int? valueIdentifier = + await getValue(instanceManager.getIdentifier(instance)!, typeData!); + return valueIdentifier == null + ? null + : instanceManager.getInstanceWithWeakReference(valueIdentifier); + } } /// Flutter API implementation for [LiveData]. @@ -134,6 +161,21 @@ class LiveDataFlutterApiImpl implements LiveDataFlutterApi { instanceManager: _instanceManager, ), ); + return; + case LiveDataSupportedType.zoomState: + _instanceManager.addHostCreatedInstance( + LiveData.detached( + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager, + ), + identifier, + onCopy: (LiveData original) => + LiveData.detached( + binaryMessenger: _binaryMessenger, + instanceManager: _instanceManager, + ), + ); + return; } } } diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 584b80ffc809..a1662d06d3fc 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -63,6 +63,7 @@ class CameraStateTypeData { enum LiveDataSupportedType { cameraState, + zoomState, } class LiveDataSupportedTypeData { @@ -79,16 +80,6 @@ class ExposureCompensationRange { int maxCompensation; } -class ExposureCompensationRange { - ExposureCompensationRange({ - required this.minCompensation, - required this.maxCompensation, - }); - - int minCompensation; - int maxCompensation; -} - @HostApi(dartHostTestHandler: 'TestInstanceManagerHostApi') abstract class InstanceManagerHostApi { /// Clear the native `InstanceManager`. @@ -111,7 +102,7 @@ abstract class JavaObjectFlutterApi { abstract class CameraInfoHostApi { int getSensorRotationDegrees(int identifier); - int getLiveCameraState(int identifier); + int getCameraState(int identifier); int getExposureState(int identifier); @@ -224,19 +215,6 @@ abstract class ZoomStateFlutterApi { void create(int identifier, double minZoomRatio, double maxZoomRatio); } -@FlutterApi() -abstract class ExposureStateFlutterApi { - void create( - int identifier, - ExposureCompensationRange exposureCompensationRange, - double exposureCompensationStep); -} - -@FlutterApi() -abstract class ZoomStateFlutterApi { - void create(int identifier, double minZoomRatio, double maxZoomRatio); -} - @HostApi(dartHostTestHandler: 'TestImageAnalysisHostApi') abstract class ImageAnalysisHostApi { void create(int identifier, ResolutionInfo? targetResolutionIdentifier); @@ -271,6 +249,8 @@ abstract class LiveDataHostApi { void observe(int identifier, int observerIdentifier); void removeObservers(int identifier); + + int? getValue(int identifier, LiveDataSupportedTypeData type); } @FlutterApi() 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 7cf2402291a4..c1a6fd177fbc 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 @@ -54,10 +54,11 @@ import 'test_camerax_library.g.dart'; @GenerateMocks([BuildContext]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); - // Mocks the call to clear the native InstanceManager. + // Mocks the call to clear the native InstanceManager. TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + /// Helper method for testing sending/receiving CameraErrorEvents. Future testCameraClosingObserver(AndroidCameraCameraX camera, int cameraId, Observer observer) async { final CameraStateError testCameraStateError = @@ -167,10 +168,6 @@ void main() { final MockCameraInfo mockCameraInfo = MockCameraInfo(); final MockLiveData mockLiveCameraState = MockLiveData(); - camera.processCameraProvider = mockProcessCameraProvider; - - camera.processCameraProvider = mockProcessCameraProvider; - when(camera.testPreview.setSurfaceProvider()) .thenAnswer((_) async => testSurfaceTextureId); when(mockProcessCameraProvider.bindToLifecycle( @@ -178,7 +175,7 @@ void main() { [camera.testPreview, camera.testImageCapture])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); - when(mockCameraInfo.getLiveCameraState()) + when(mockCameraInfo.getCameraState()) .thenAnswer((_) async => mockLiveCameraState); camera.processCameraProvider = mockProcessCameraProvider; camera.createDetachedObjectForTesting = true; @@ -218,7 +215,7 @@ void main() { 'createCamera binds Preview and ImageCapture use cases to ProcessCameraProvider instance', () async { final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); - final ProcessCameraProvider mockProcessCameraProvider = + final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); const CameraLensDirection testLensDirection = CameraLensDirection.back; const int testSensorOrientation = 90; @@ -231,35 +228,18 @@ void main() { final MockCamera mockCamera = MockCamera(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); - when(mockProcessCameraProvider.bindToLifecycle( - camera.mockBackCameraSelector, - [camera.testPreview, camera.testImageCapture])) - .thenAnswer((_) async => mockCamera); - when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); - when(mockCameraInfo.getLiveCameraState()) - .thenAnswer((_) async => MockLiveData()); camera.processCameraProvider = mockProcessCameraProvider; - camera.createDetachedObjectForTesting = true; when(mockProcessCameraProvider.bindToLifecycle( camera.mockBackCameraSelector, [camera.testPreview, camera.testImageCapture])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); - when(mockCameraInfo.getLiveCameraState()) + when(mockCameraInfo.getCameraState()) .thenAnswer((_) async => MockLiveData()); camera.processCameraProvider = mockProcessCameraProvider; camera.createDetachedObjectForTesting = true; - camera.processCameraProvider = mockProcessCameraProvider; - - when(mockProcessCameraProvider.bindToLifecycle( - camera.mockBackCameraSelector, - [camera.testPreview, camera.testImageCapture])) - .thenAnswer((_) => Future.value(mockCamera)); - when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(mockCameraInfo)); - await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); @@ -323,29 +303,11 @@ void main() { [camera.testPreview, camera.testImageCapture])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); - when(mockCameraInfo.getLiveCameraState()) + when(mockCameraInfo.getCameraState()) .thenAnswer((_) async => MockLiveData()); - camera.createDetachedObjectForTesting = true; - - await camera.createCamera(testCameraDescription, testResolutionPreset, - enableAudio: enableAudio); - - when(mockProcessCameraProvider.bindToLifecycle(any, any)) - .thenAnswer((_) async => mockCamera); - when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(MockCameraInfo())); - when(camera.testPreview.getResolutionInfo()) - .thenAnswer((_) async => testResolutionInfo); - - await camera.createCamera(testCameraDescription, testResolutionPreset, - enableAudio: enableAudio); - - when(mockProcessCameraProvider.bindToLifecycle(any, any)) - .thenAnswer((_) async => mockCamera); - when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(MockCameraInfo())); when(camera.testPreview.getResolutionInfo()) .thenAnswer((_) async => testResolutionInfo); + camera.createDetachedObjectForTesting = true; await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); @@ -502,7 +464,7 @@ void main() { .bindToLifecycle(camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); - when(mockCameraInfo.getLiveCameraState()) + when(mockCameraInfo.getCameraState()) .thenAnswer((_) async => mockLiveCameraState); await camera.resumePreview(78); @@ -532,19 +494,9 @@ void main() { .bindToLifecycle(camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); - when(mockCameraInfo.getLiveCameraState()) + when(mockCameraInfo.getCameraState()) .thenAnswer((_) async => mockLiveCameraState); - when(mockProcessCameraProvider.bindToLifecycle(any, any)) - .thenAnswer((_) => Future.value(mockCamera)); - when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(mockCameraInfo)); - - when(mockProcessCameraProvider.bindToLifecycle(any, any)) - .thenAnswer((_) => Future.value(mockCamera)); - when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(mockCameraInfo)); - await camera.resumePreview(78); verify(camera.processCameraProvider! @@ -578,19 +530,9 @@ void main() { .bindToLifecycle(camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); - when(mockCameraInfo.getLiveCameraState()) + when(mockCameraInfo.getCameraState()) .thenAnswer((_) async => MockLiveData()); - when(mockProcessCameraProvider.bindToLifecycle(any, any)) - .thenAnswer((_) => Future.value(mockCamera)); - when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(MockCameraInfo())); - - when(mockProcessCameraProvider.bindToLifecycle(any, any)) - .thenAnswer((_) => Future.value(mockCamera)); - when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(MockCameraInfo())); - final FutureBuilder previewWidget = camera.buildPreview(textureId) as FutureBuilder; @@ -627,19 +569,9 @@ void main() { .bindToLifecycle(camera.cameraSelector, [camera.preview!])) .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); - when(mockCameraInfo.getLiveCameraState()) + when(mockCameraInfo.getCameraState()) .thenAnswer((_) async => MockLiveData()); - when(mockProcessCameraProvider.bindToLifecycle(any, any)) - .thenAnswer((_) => Future.value(mockCamera)); - when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(mockCameraInfo)); - - when(mockProcessCameraProvider.bindToLifecycle(any, any)) - .thenAnswer((_) => Future.value(mockCamera)); - when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(mockCameraInfo)); - final FutureBuilder previewWidget = camera.buildPreview(textureId) as FutureBuilder; @@ -759,11 +691,6 @@ void main() { camera.cameraSelector = MockCameraSelector(); camera.createDetachedObjectForTesting = true; - when(mockProcessCameraProvider.bindToLifecycle(any, any)) - .thenAnswer((_) => Future.value(mockCamera)); - when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(MockCameraInfo())); - when(mockProcessCameraProvider.bindToLifecycle(any, any)) .thenAnswer((_) => Future.value(mockCamera)); when(mockCamera.getCameraInfo()) 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 4e94e98236ad..5eb3c800f8e2 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,15 +3,15 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i12; +import 'dart:async' as _i11; import 'dart:typed_data' as _i21; import 'package:camera_android_camerax/src/analyzer.dart' as _i16; -import 'package:camera_android_camerax/src/camera.dart' as _i8; +import 'package:camera_android_camerax/src/camera.dart' as _i7; import 'package:camera_android_camerax/src/camera_info.dart' as _i2; import 'package:camera_android_camerax/src/camera_selector.dart' as _i14; -import 'package:camera_android_camerax/src/camera_state.dart' as _i13; -import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i7; +import 'package:camera_android_camerax/src/camera_state.dart' as _i12; +import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i6; import 'package:camera_android_camerax/src/exposure_state.dart' as _i4; import 'package:camera_android_camerax/src/image_analysis.dart' as _i15; import 'package:camera_android_camerax/src/image_capture.dart' as _i17; @@ -23,12 +23,12 @@ import 'package:camera_android_camerax/src/preview.dart' as _i22; import 'package:camera_android_camerax/src/process_camera_provider.dart' as _i23; import 'package:camera_android_camerax/src/use_case.dart' as _i24; -import 'package:camera_android_camerax/src/zoom_state.dart' as _i5; +import 'package:camera_android_camerax/src/zoom_state.dart' as _i13; import 'package:camera_platform_interface/camera_platform_interface.dart' - as _i6; -import 'package:flutter/foundation.dart' as _i11; -import 'package:flutter/services.dart' as _i10; -import 'package:flutter/widgets.dart' as _i9; + as _i5; +import 'package:flutter/foundation.dart' as _i10; +import 'package:flutter/services.dart' as _i9; +import 'package:flutter/widgets.dart' as _i8; import 'package:mockito/mockito.dart' as _i1; import 'test_camerax_library.g.dart' as _i25; @@ -54,7 +54,8 @@ class _FakeCameraInfo_0 extends _i1.SmartFake implements _i2.CameraInfo { ); } -class _FakeLiveData_1 extends _i1.SmartFake implements _i3.LiveData { +class _FakeLiveData_1 extends _i1.SmartFake + implements _i3.LiveData { _FakeLiveData_1( Object parent, Invocation parentInvocation, @@ -74,8 +75,9 @@ class _FakeExposureState_2 extends _i1.SmartFake implements _i4.ExposureState { ); } -class _FakeZoomState_3 extends _i1.SmartFake implements _i5.ZoomState { - _FakeZoomState_3( +class _FakeCameraImageFormat_3 extends _i1.SmartFake + implements _i5.CameraImageFormat { + _FakeCameraImageFormat_3( Object parent, Invocation parentInvocation, ) : super( @@ -84,9 +86,9 @@ class _FakeZoomState_3 extends _i1.SmartFake implements _i5.ZoomState { ); } -class _FakeCameraImageFormat_4 extends _i1.SmartFake - implements _i6.CameraImageFormat { - _FakeCameraImageFormat_4( +class _FakeExposureCompensationRange_4 extends _i1.SmartFake + implements _i6.ExposureCompensationRange { + _FakeExposureCompensationRange_4( Object parent, Invocation parentInvocation, ) : super( @@ -95,9 +97,9 @@ class _FakeCameraImageFormat_4 extends _i1.SmartFake ); } -class _FakeExposureCompensationRange_5 extends _i1.SmartFake - implements _i7.ExposureCompensationRange { - _FakeExposureCompensationRange_5( +class _FakeResolutionInfo_5 extends _i1.SmartFake + implements _i6.ResolutionInfo { + _FakeResolutionInfo_5( Object parent, Invocation parentInvocation, ) : super( @@ -106,9 +108,8 @@ class _FakeExposureCompensationRange_5 extends _i1.SmartFake ); } -class _FakeResolutionInfo_6 extends _i1.SmartFake - implements _i7.ResolutionInfo { - _FakeResolutionInfo_6( +class _FakeCamera_6 extends _i1.SmartFake implements _i7.Camera { + _FakeCamera_6( Object parent, Invocation parentInvocation, ) : super( @@ -117,18 +118,8 @@ class _FakeResolutionInfo_6 extends _i1.SmartFake ); } -class _FakeCamera_7 extends _i1.SmartFake implements _i8.Camera { - _FakeCamera_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeWidget_8 extends _i1.SmartFake implements _i9.Widget { - _FakeWidget_8( +class _FakeWidget_7 extends _i1.SmartFake implements _i8.Widget { + _FakeWidget_7( Object parent, Invocation parentInvocation, ) : super( @@ -137,14 +128,13 @@ class _FakeWidget_8 extends _i1.SmartFake implements _i9.Widget { ); @override - String toString( - {_i10.DiagnosticLevel? minLevel = _i10.DiagnosticLevel.info}) => + String toString({_i9.DiagnosticLevel? minLevel = _i9.DiagnosticLevel.info}) => super.toString(); } -class _FakeInheritedWidget_9 extends _i1.SmartFake - implements _i9.InheritedWidget { - _FakeInheritedWidget_9( +class _FakeInheritedWidget_8 extends _i1.SmartFake + implements _i8.InheritedWidget { + _FakeInheritedWidget_8( Object parent, Invocation parentInvocation, ) : super( @@ -153,14 +143,13 @@ class _FakeInheritedWidget_9 extends _i1.SmartFake ); @override - String toString( - {_i10.DiagnosticLevel? minLevel = _i10.DiagnosticLevel.info}) => + String toString({_i9.DiagnosticLevel? minLevel = _i9.DiagnosticLevel.info}) => super.toString(); } -class _FakeDiagnosticsNode_10 extends _i1.SmartFake - implements _i11.DiagnosticsNode { - _FakeDiagnosticsNode_10( +class _FakeDiagnosticsNode_9 extends _i1.SmartFake + implements _i10.DiagnosticsNode { + _FakeDiagnosticsNode_9( Object parent, Invocation parentInvocation, ) : super( @@ -170,8 +159,8 @@ class _FakeDiagnosticsNode_10 extends _i1.SmartFake @override String toString({ - _i11.TextTreeConfiguration? parentConfiguration, - _i10.DiagnosticLevel? minLevel = _i10.DiagnosticLevel.info, + _i10.TextTreeConfiguration? parentConfiguration, + _i9.DiagnosticLevel? minLevel = _i9.DiagnosticLevel.info, }) => super.toString(); } @@ -179,14 +168,14 @@ class _FakeDiagnosticsNode_10 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 _i8.Camera { +class MockCamera extends _i1.Mock implements _i7.Camera { @override - _i12.Future<_i2.CameraInfo> getCameraInfo() => (super.noSuchMethod( + _i11.Future<_i2.CameraInfo> getCameraInfo() => (super.noSuchMethod( Invocation.method( #getCameraInfo, [], ), - returnValue: _i12.Future<_i2.CameraInfo>.value(_FakeCameraInfo_0( + returnValue: _i11.Future<_i2.CameraInfo>.value(_FakeCameraInfo_0( this, Invocation.method( #getCameraInfo, @@ -194,14 +183,14 @@ class MockCamera extends _i1.Mock implements _i8.Camera { ), )), returnValueForMissingStub: - _i12.Future<_i2.CameraInfo>.value(_FakeCameraInfo_0( + _i11.Future<_i2.CameraInfo>.value(_FakeCameraInfo_0( this, Invocation.method( #getCameraInfo, [], ), )), - ) as _i12.Future<_i2.CameraInfo>); + ) as _i11.Future<_i2.CameraInfo>); } /// A class which mocks [CameraInfo]. @@ -209,46 +198,46 @@ class MockCamera extends _i1.Mock implements _i8.Camera { /// See the documentation for Mockito's code generation for more information. class MockCameraInfo extends _i1.Mock implements _i2.CameraInfo { @override - _i12.Future getSensorRotationDegrees() => (super.noSuchMethod( + _i11.Future getSensorRotationDegrees() => (super.noSuchMethod( Invocation.method( #getSensorRotationDegrees, [], ), - returnValue: _i12.Future.value(0), - returnValueForMissingStub: _i12.Future.value(0), - ) as _i12.Future); + returnValue: _i11.Future.value(0), + returnValueForMissingStub: _i11.Future.value(0), + ) as _i11.Future); @override - _i12.Future<_i3.LiveData<_i13.CameraState>> getLiveCameraState() => + _i11.Future<_i3.LiveData<_i12.CameraState>> getCameraState() => (super.noSuchMethod( Invocation.method( - #getLiveCameraState, + #getCameraState, [], ), - returnValue: _i12.Future<_i3.LiveData<_i13.CameraState>>.value( - _FakeLiveData_1<_i13.CameraState>( + returnValue: _i11.Future<_i3.LiveData<_i12.CameraState>>.value( + _FakeLiveData_1<_i12.CameraState>( this, Invocation.method( - #getLiveCameraState, + #getCameraState, [], ), )), returnValueForMissingStub: - _i12.Future<_i3.LiveData<_i13.CameraState>>.value( - _FakeLiveData_1<_i13.CameraState>( + _i11.Future<_i3.LiveData<_i12.CameraState>>.value( + _FakeLiveData_1<_i12.CameraState>( this, Invocation.method( - #getLiveCameraState, + #getCameraState, [], ), )), - ) as _i12.Future<_i3.LiveData<_i13.CameraState>>); + ) as _i11.Future<_i3.LiveData<_i12.CameraState>>); @override - _i12.Future<_i4.ExposureState> getExposureState() => (super.noSuchMethod( + _i11.Future<_i4.ExposureState> getExposureState() => (super.noSuchMethod( Invocation.method( #getExposureState, [], ), - returnValue: _i12.Future<_i4.ExposureState>.value(_FakeExposureState_2( + returnValue: _i11.Future<_i4.ExposureState>.value(_FakeExposureState_2( this, Invocation.method( #getExposureState, @@ -256,21 +245,23 @@ class MockCameraInfo extends _i1.Mock implements _i2.CameraInfo { ), )), returnValueForMissingStub: - _i12.Future<_i4.ExposureState>.value(_FakeExposureState_2( + _i11.Future<_i4.ExposureState>.value(_FakeExposureState_2( this, Invocation.method( #getExposureState, [], ), )), - ) as _i12.Future<_i4.ExposureState>); + ) as _i11.Future<_i4.ExposureState>); @override - _i12.Future<_i5.ZoomState> getZoomState() => (super.noSuchMethod( + _i11.Future<_i3.LiveData<_i13.ZoomState>> getZoomState() => + (super.noSuchMethod( Invocation.method( #getZoomState, [], ), - returnValue: _i12.Future<_i5.ZoomState>.value(_FakeZoomState_3( + returnValue: _i11.Future<_i3.LiveData<_i13.ZoomState>>.value( + _FakeLiveData_1<_i13.ZoomState>( this, Invocation.method( #getZoomState, @@ -278,33 +269,34 @@ class MockCameraInfo extends _i1.Mock implements _i2.CameraInfo { ), )), returnValueForMissingStub: - _i12.Future<_i5.ZoomState>.value(_FakeZoomState_3( + _i11.Future<_i3.LiveData<_i13.ZoomState>>.value( + _FakeLiveData_1<_i13.ZoomState>( this, Invocation.method( #getZoomState, [], ), )), - ) as _i12.Future<_i5.ZoomState>); + ) as _i11.Future<_i3.LiveData<_i13.ZoomState>>); } /// 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 _i6.CameraImageData { +class MockCameraImageData extends _i1.Mock implements _i5.CameraImageData { @override - _i6.CameraImageFormat get format => (super.noSuchMethod( + _i5.CameraImageFormat get format => (super.noSuchMethod( Invocation.getter(#format), - returnValue: _FakeCameraImageFormat_4( + returnValue: _FakeCameraImageFormat_3( this, Invocation.getter(#format), ), - returnValueForMissingStub: _FakeCameraImageFormat_4( + returnValueForMissingStub: _FakeCameraImageFormat_3( this, Invocation.getter(#format), ), - ) as _i6.CameraImageFormat); + ) as _i5.CameraImageFormat); @override int get height => (super.noSuchMethod( Invocation.getter(#height), @@ -318,11 +310,11 @@ class MockCameraImageData extends _i1.Mock implements _i6.CameraImageData { returnValueForMissingStub: 0, ) as int); @override - List<_i6.CameraImagePlane> get planes => (super.noSuchMethod( + List<_i5.CameraImagePlane> get planes => (super.noSuchMethod( Invocation.getter(#planes), - returnValue: <_i6.CameraImagePlane>[], - returnValueForMissingStub: <_i6.CameraImagePlane>[], - ) as List<_i6.CameraImagePlane>); + returnValue: <_i5.CameraImagePlane>[], + returnValueForMissingStub: <_i5.CameraImagePlane>[], + ) as List<_i5.CameraImagePlane>); } /// A class which mocks [CameraSelector]. @@ -330,17 +322,17 @@ class MockCameraImageData extends _i1.Mock implements _i6.CameraImageData { /// See the documentation for Mockito's code generation for more information. class MockCameraSelector extends _i1.Mock implements _i14.CameraSelector { @override - _i12.Future> filter(List<_i2.CameraInfo>? cameraInfos) => + _i11.Future> filter(List<_i2.CameraInfo>? cameraInfos) => (super.noSuchMethod( Invocation.method( #filter, [cameraInfos], ), returnValue: - _i12.Future>.value(<_i2.CameraInfo>[]), + _i11.Future>.value(<_i2.CameraInfo>[]), returnValueForMissingStub: - _i12.Future>.value(<_i2.CameraInfo>[]), - ) as _i12.Future>); + _i11.Future>.value(<_i2.CameraInfo>[]), + ) as _i11.Future>); } /// A class which mocks [ExposureState]. @@ -348,18 +340,18 @@ class MockCameraSelector extends _i1.Mock implements _i14.CameraSelector { /// See the documentation for Mockito's code generation for more information. class MockExposureState extends _i1.Mock implements _i4.ExposureState { @override - _i7.ExposureCompensationRange get exposureCompensationRange => + _i6.ExposureCompensationRange get exposureCompensationRange => (super.noSuchMethod( Invocation.getter(#exposureCompensationRange), - returnValue: _FakeExposureCompensationRange_5( + returnValue: _FakeExposureCompensationRange_4( this, Invocation.getter(#exposureCompensationRange), ), - returnValueForMissingStub: _FakeExposureCompensationRange_5( + returnValueForMissingStub: _FakeExposureCompensationRange_4( this, Invocation.getter(#exposureCompensationRange), ), - ) as _i7.ExposureCompensationRange); + ) as _i6.ExposureCompensationRange); @override double get exposureCompensationStep => (super.noSuchMethod( Invocation.getter(#exposureCompensationStep), @@ -373,23 +365,23 @@ class MockExposureState extends _i1.Mock implements _i4.ExposureState { /// See the documentation for Mockito's code generation for more information. class MockImageAnalysis extends _i1.Mock implements _i15.ImageAnalysis { @override - _i12.Future setAnalyzer(_i16.Analyzer? analyzer) => (super.noSuchMethod( + _i11.Future setAnalyzer(_i16.Analyzer? analyzer) => (super.noSuchMethod( Invocation.method( #setAnalyzer, [analyzer], ), - returnValue: _i12.Future.value(), - returnValueForMissingStub: _i12.Future.value(), - ) as _i12.Future); + returnValue: _i11.Future.value(), + returnValueForMissingStub: _i11.Future.value(), + ) as _i11.Future); @override - _i12.Future clearAnalyzer() => (super.noSuchMethod( + _i11.Future clearAnalyzer() => (super.noSuchMethod( Invocation.method( #clearAnalyzer, [], ), - returnValue: _i12.Future.value(), - returnValueForMissingStub: _i12.Future.value(), - ) as _i12.Future); + returnValue: _i11.Future.value(), + returnValueForMissingStub: _i11.Future.value(), + ) as _i11.Future); } /// A class which mocks [ImageCapture]. @@ -397,48 +389,48 @@ class MockImageAnalysis extends _i1.Mock implements _i15.ImageAnalysis { /// See the documentation for Mockito's code generation for more information. class MockImageCapture extends _i1.Mock implements _i17.ImageCapture { @override - _i12.Future setFlashMode(int? newFlashMode) => (super.noSuchMethod( + _i11.Future setFlashMode(int? newFlashMode) => (super.noSuchMethod( Invocation.method( #setFlashMode, [newFlashMode], ), - returnValue: _i12.Future.value(), - returnValueForMissingStub: _i12.Future.value(), - ) as _i12.Future); + returnValue: _i11.Future.value(), + returnValueForMissingStub: _i11.Future.value(), + ) as _i11.Future); @override - _i12.Future takePicture() => (super.noSuchMethod( + _i11.Future takePicture() => (super.noSuchMethod( Invocation.method( #takePicture, [], ), - returnValue: _i12.Future.value(''), - returnValueForMissingStub: _i12.Future.value(''), - ) as _i12.Future); + returnValue: _i11.Future.value(''), + returnValueForMissingStub: _i11.Future.value(''), + ) as _i11.Future); } /// A class which mocks [LiveData]. /// /// See the documentation for Mockito's code generation for more information. -class MockLiveData extends _i1.Mock implements _i3.LiveData<_i13.CameraState> { +class MockLiveData extends _i1.Mock implements _i3.LiveData<_i12.CameraState> { @override - _i12.Future observe(_i18.Observer<_i13.CameraState>? observer) => + _i11.Future observe(_i18.Observer<_i12.CameraState>? observer) => (super.noSuchMethod( Invocation.method( #observe, [observer], ), - returnValue: _i12.Future.value(), - returnValueForMissingStub: _i12.Future.value(), - ) as _i12.Future); + returnValue: _i11.Future.value(), + returnValueForMissingStub: _i11.Future.value(), + ) as _i11.Future); @override - _i12.Future removeObservers() => (super.noSuchMethod( + _i11.Future removeObservers() => (super.noSuchMethod( Invocation.method( #removeObservers, [], ), - returnValue: _i12.Future.value(), - returnValueForMissingStub: _i12.Future.value(), - ) as _i12.Future); + returnValue: _i11.Future.value(), + returnValueForMissingStub: _i11.Future.value(), + ) as _i11.Future); } /// A class which mocks [ImageProxy]. @@ -464,25 +456,25 @@ class MockImageProxy extends _i1.Mock implements _i19.ImageProxy { returnValueForMissingStub: 0, ) as int); @override - _i12.Future> getPlanes() => (super.noSuchMethod( + _i11.Future> getPlanes() => (super.noSuchMethod( Invocation.method( #getPlanes, [], ), returnValue: - _i12.Future>.value(<_i20.PlaneProxy>[]), + _i11.Future>.value(<_i20.PlaneProxy>[]), returnValueForMissingStub: - _i12.Future>.value(<_i20.PlaneProxy>[]), - ) as _i12.Future>); + _i11.Future>.value(<_i20.PlaneProxy>[]), + ) as _i11.Future>); @override - _i12.Future close() => (super.noSuchMethod( + _i11.Future close() => (super.noSuchMethod( Invocation.method( #close, [], ), - returnValue: _i12.Future.value(), - returnValueForMissingStub: _i12.Future.value(), - ) as _i12.Future); + returnValue: _i11.Future.value(), + returnValueForMissingStub: _i11.Future.value(), + ) as _i11.Future); } /// A class which mocks [PlaneProxy]. @@ -514,14 +506,14 @@ class MockPlaneProxy extends _i1.Mock implements _i20.PlaneProxy { /// See the documentation for Mockito's code generation for more information. class MockPreview extends _i1.Mock implements _i22.Preview { @override - _i12.Future setSurfaceProvider() => (super.noSuchMethod( + _i11.Future setSurfaceProvider() => (super.noSuchMethod( Invocation.method( #setSurfaceProvider, [], ), - returnValue: _i12.Future.value(0), - returnValueForMissingStub: _i12.Future.value(0), - ) as _i12.Future); + returnValue: _i11.Future.value(0), + returnValueForMissingStub: _i11.Future.value(0), + ) as _i11.Future); @override void releaseFlutterSurfaceTexture() => super.noSuchMethod( Invocation.method( @@ -531,13 +523,13 @@ class MockPreview extends _i1.Mock implements _i22.Preview { returnValueForMissingStub: null, ); @override - _i12.Future<_i7.ResolutionInfo> getResolutionInfo() => (super.noSuchMethod( + _i11.Future<_i6.ResolutionInfo> getResolutionInfo() => (super.noSuchMethod( Invocation.method( #getResolutionInfo, [], ), returnValue: - _i12.Future<_i7.ResolutionInfo>.value(_FakeResolutionInfo_6( + _i11.Future<_i6.ResolutionInfo>.value(_FakeResolutionInfo_5( this, Invocation.method( #getResolutionInfo, @@ -545,14 +537,14 @@ class MockPreview extends _i1.Mock implements _i22.Preview { ), )), returnValueForMissingStub: - _i12.Future<_i7.ResolutionInfo>.value(_FakeResolutionInfo_6( + _i11.Future<_i6.ResolutionInfo>.value(_FakeResolutionInfo_5( this, Invocation.method( #getResolutionInfo, [], ), )), - ) as _i12.Future<_i7.ResolutionInfo>); + ) as _i11.Future<_i6.ResolutionInfo>); } /// A class which mocks [ProcessCameraProvider]. @@ -561,19 +553,19 @@ class MockPreview extends _i1.Mock implements _i22.Preview { class MockProcessCameraProvider extends _i1.Mock implements _i23.ProcessCameraProvider { @override - _i12.Future> getAvailableCameraInfos() => + _i11.Future> getAvailableCameraInfos() => (super.noSuchMethod( Invocation.method( #getAvailableCameraInfos, [], ), returnValue: - _i12.Future>.value(<_i2.CameraInfo>[]), + _i11.Future>.value(<_i2.CameraInfo>[]), returnValueForMissingStub: - _i12.Future>.value(<_i2.CameraInfo>[]), - ) as _i12.Future>); + _i11.Future>.value(<_i2.CameraInfo>[]), + ) as _i11.Future>); @override - _i12.Future<_i8.Camera> bindToLifecycle( + _i11.Future<_i7.Camera> bindToLifecycle( _i14.CameraSelector? cameraSelector, List<_i24.UseCase>? useCases, ) => @@ -585,7 +577,7 @@ class MockProcessCameraProvider extends _i1.Mock useCases, ], ), - returnValue: _i12.Future<_i8.Camera>.value(_FakeCamera_7( + returnValue: _i11.Future<_i7.Camera>.value(_FakeCamera_6( this, Invocation.method( #bindToLifecycle, @@ -595,7 +587,7 @@ class MockProcessCameraProvider extends _i1.Mock ], ), )), - returnValueForMissingStub: _i12.Future<_i8.Camera>.value(_FakeCamera_7( + returnValueForMissingStub: _i11.Future<_i7.Camera>.value(_FakeCamera_6( this, Invocation.method( #bindToLifecycle, @@ -605,16 +597,16 @@ class MockProcessCameraProvider extends _i1.Mock ], ), )), - ) as _i12.Future<_i8.Camera>); + ) as _i11.Future<_i7.Camera>); @override - _i12.Future isBound(_i24.UseCase? useCase) => (super.noSuchMethod( + _i11.Future isBound(_i24.UseCase? useCase) => (super.noSuchMethod( Invocation.method( #isBound, [useCase], ), - returnValue: _i12.Future.value(false), - returnValueForMissingStub: _i12.Future.value(false), - ) as _i12.Future); + returnValue: _i11.Future.value(false), + returnValueForMissingStub: _i11.Future.value(false), + ) as _i11.Future); @override void unbind(List<_i24.UseCase>? useCases) => super.noSuchMethod( Invocation.method( @@ -651,7 +643,7 @@ class MockTestInstanceManagerHostApi extends _i1.Mock /// A class which mocks [ZoomState]. /// /// See the documentation for Mockito's code generation for more information. -class MockZoomState extends _i1.Mock implements _i5.ZoomState { +class MockZoomState extends _i1.Mock implements _i13.ZoomState { @override double get minZoomRatio => (super.noSuchMethod( Invocation.getter(#minZoomRatio), @@ -669,19 +661,19 @@ class MockZoomState extends _i1.Mock implements _i5.ZoomState { /// A class which mocks [BuildContext]. /// /// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i9.BuildContext { +class MockBuildContext extends _i1.Mock implements _i8.BuildContext { MockBuildContext() { _i1.throwOnMissingStub(this); } @override - _i9.Widget get widget => (super.noSuchMethod( + _i8.Widget get widget => (super.noSuchMethod( Invocation.getter(#widget), - returnValue: _FakeWidget_8( + returnValue: _FakeWidget_7( this, Invocation.getter(#widget), ), - ) as _i9.Widget); + ) as _i8.Widget); @override bool get mounted => (super.noSuchMethod( Invocation.getter(#mounted), @@ -693,8 +685,8 @@ class MockBuildContext extends _i1.Mock implements _i9.BuildContext { returnValue: false, ) as bool); @override - _i9.InheritedWidget dependOnInheritedElement( - _i9.InheritedElement? ancestor, { + _i8.InheritedWidget dependOnInheritedElement( + _i8.InheritedElement? ancestor, { Object? aspect, }) => (super.noSuchMethod( @@ -703,7 +695,7 @@ class MockBuildContext extends _i1.Mock implements _i9.BuildContext { [ancestor], {#aspect: aspect}, ), - returnValue: _FakeInheritedWidget_9( + returnValue: _FakeInheritedWidget_8( this, Invocation.method( #dependOnInheritedElement, @@ -711,9 +703,9 @@ class MockBuildContext extends _i1.Mock implements _i9.BuildContext { {#aspect: aspect}, ), ), - ) as _i9.InheritedWidget); + ) as _i8.InheritedWidget); @override - void visitAncestorElements(bool Function(_i9.Element)? visitor) => + void visitAncestorElements(bool Function(_i8.Element)? visitor) => super.noSuchMethod( Invocation.method( #visitAncestorElements, @@ -722,7 +714,7 @@ class MockBuildContext extends _i1.Mock implements _i9.BuildContext { returnValueForMissingStub: null, ); @override - void visitChildElements(_i9.ElementVisitor? visitor) => super.noSuchMethod( + void visitChildElements(_i8.ElementVisitor? visitor) => super.noSuchMethod( Invocation.method( #visitChildElements, [visitor], @@ -730,7 +722,7 @@ class MockBuildContext extends _i1.Mock implements _i9.BuildContext { returnValueForMissingStub: null, ); @override - void dispatchNotification(_i9.Notification? notification) => + void dispatchNotification(_i8.Notification? notification) => super.noSuchMethod( Invocation.method( #dispatchNotification, @@ -739,9 +731,9 @@ class MockBuildContext extends _i1.Mock implements _i9.BuildContext { returnValueForMissingStub: null, ); @override - _i11.DiagnosticsNode describeElement( + _i10.DiagnosticsNode describeElement( String? name, { - _i11.DiagnosticsTreeStyle? style = _i11.DiagnosticsTreeStyle.errorProperty, + _i10.DiagnosticsTreeStyle? style = _i10.DiagnosticsTreeStyle.errorProperty, }) => (super.noSuchMethod( Invocation.method( @@ -749,7 +741,7 @@ class MockBuildContext extends _i1.Mock implements _i9.BuildContext { [name], {#style: style}, ), - returnValue: _FakeDiagnosticsNode_10( + returnValue: _FakeDiagnosticsNode_9( this, Invocation.method( #describeElement, @@ -757,11 +749,11 @@ class MockBuildContext extends _i1.Mock implements _i9.BuildContext { {#style: style}, ), ), - ) as _i11.DiagnosticsNode); + ) as _i10.DiagnosticsNode); @override - _i11.DiagnosticsNode describeWidget( + _i10.DiagnosticsNode describeWidget( String? name, { - _i11.DiagnosticsTreeStyle? style = _i11.DiagnosticsTreeStyle.errorProperty, + _i10.DiagnosticsTreeStyle? style = _i10.DiagnosticsTreeStyle.errorProperty, }) => (super.noSuchMethod( Invocation.method( @@ -769,7 +761,7 @@ class MockBuildContext extends _i1.Mock implements _i9.BuildContext { [name], {#style: style}, ), - returnValue: _FakeDiagnosticsNode_10( + returnValue: _FakeDiagnosticsNode_9( this, Invocation.method( #describeWidget, @@ -777,9 +769,9 @@ class MockBuildContext extends _i1.Mock implements _i9.BuildContext { {#style: style}, ), ), - ) as _i11.DiagnosticsNode); + ) as _i10.DiagnosticsNode); @override - List<_i11.DiagnosticsNode> describeMissingAncestor( + List<_i10.DiagnosticsNode> describeMissingAncestor( {required Type? expectedAncestorType}) => (super.noSuchMethod( Invocation.method( @@ -787,21 +779,21 @@ class MockBuildContext extends _i1.Mock implements _i9.BuildContext { [], {#expectedAncestorType: expectedAncestorType}, ), - returnValue: <_i11.DiagnosticsNode>[], - ) as List<_i11.DiagnosticsNode>); + returnValue: <_i10.DiagnosticsNode>[], + ) as List<_i10.DiagnosticsNode>); @override - _i11.DiagnosticsNode describeOwnershipChain(String? name) => + _i10.DiagnosticsNode describeOwnershipChain(String? name) => (super.noSuchMethod( Invocation.method( #describeOwnershipChain, [name], ), - returnValue: _FakeDiagnosticsNode_10( + returnValue: _FakeDiagnosticsNode_9( this, Invocation.method( #describeOwnershipChain, [name], ), ), - ) as _i11.DiagnosticsNode); + ) as _i10.DiagnosticsNode); } diff --git a/packages/camera/camera_android_camerax/test/camera_info_test.dart b/packages/camera/camera_android_camerax/test/camera_info_test.dart index c3aa85fd676e..24f06d02938d 100644 --- a/packages/camera/camera_android_camerax/test/camera_info_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_info_test.dart @@ -56,8 +56,7 @@ void main() { verify(mockApi.getSensorRotationDegrees(0)); }); - test('getLiveCameraState makes call to retrieve live camera state', - () async { + test('getCameraState makes call to retrieve live camera state', () async { final MockTestCameraInfoHostApi mockApi = MockTestCameraInfoHostApi(); TestCameraInfoHostApi.setup(mockApi); @@ -82,12 +81,11 @@ void main() { onCopy: (_) => MockLiveData(), ); - when(mockApi.getLiveCameraState(cameraIdentifier)) + when(mockApi.getCameraState(cameraIdentifier)) .thenReturn(liveCameraStateIdentifier); - expect( - await cameraInfo.getLiveCameraState(), equals(mockLiveCameraState)); - verify(mockApi.getLiveCameraState(cameraIdentifier)); + expect(await cameraInfo.getCameraState(), equals(mockLiveCameraState)); + verify(mockApi.getCameraState(cameraIdentifier)); }); test('getExposureState makes call to retrieve expected ExposureState', 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 8da0675983a0..648e1b4815f2 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 @@ -25,7 +25,8 @@ import 'test_camerax_library.g.dart' as _i5; /// A class which mocks [LiveData]. /// /// See the documentation for Mockito's code generation for more information. -class MockLiveData extends _i1.Mock implements _i2.LiveData { +class MockLiveData extends _i1.Mock + implements _i2.LiveData { MockLiveData() { _i1.throwOnMissingStub(this); } @@ -68,9 +69,9 @@ class MockTestCameraInfoHostApi extends _i1.Mock returnValue: 0, ) as int); @override - int getLiveCameraState(int? identifier) => (super.noSuchMethod( + int getCameraState(int? identifier) => (super.noSuchMethod( Invocation.method( - #getLiveCameraState, + #getCameraState, [identifier], ), returnValue: 0, diff --git a/packages/camera/camera_android_camerax/test/live_data_test.mocks.dart b/packages/camera/camera_android_camerax/test/live_data_test.mocks.dart index f5568593510b..01779862a3c6 100644 --- a/packages/camera/camera_android_camerax/test/live_data_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/live_data_test.mocks.dart @@ -3,6 +3,7 @@ // 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; @@ -50,6 +51,18 @@ class MockTestLiveDataHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override + int? getValue( + int? identifier, + _i3.LiveDataSupportedTypeData? type, + ) => + (super.noSuchMethod(Invocation.method( + #getValue, + [ + identifier, + type, + ], + )) as int?); } /// A class which mocks [TestInstanceManagerHostApi]. 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 0fcf7371bbe1..6b5dfe4509bd 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 @@ -75,7 +75,7 @@ abstract class TestCameraInfoHostApi { int getSensorRotationDegrees(int identifier); - int getLiveCameraState(int identifier); + int getCameraState(int identifier); int getExposureState(int identifier); @@ -103,19 +103,19 @@ abstract class TestCameraInfoHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getLiveCameraState', codec, + 'dev.flutter.pigeon.CameraInfoHostApi.getCameraState', 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.CameraInfoHostApi.getLiveCameraState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getCameraState 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.getLiveCameraState was null, expected non-null int.'); - final int output = api.getLiveCameraState(arg_identifier!); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getCameraState was null, expected non-null int.'); + final int output = api.getCameraState(arg_identifier!); return [output]; }); } @@ -849,14 +849,39 @@ abstract class TestObserverHostApi { } } +class _TestLiveDataHostApiCodec extends StandardMessageCodec { + const _TestLiveDataHostApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is LiveDataSupportedTypeData) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return LiveDataSupportedTypeData.decode(readValue(buffer)!); + default: + return super.readValueOfType(type, buffer); + } + } +} + abstract class TestLiveDataHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec codec = _TestLiveDataHostApiCodec(); void observe(int identifier, int observerIdentifier); void removeObservers(int identifier); + int? getValue(int identifier, LiveDataSupportedTypeData type); + static void setup(TestLiveDataHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( @@ -899,6 +924,28 @@ abstract class TestLiveDataHostApi { }); } } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.LiveDataHostApi.getValue', 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.LiveDataHostApi.getValue 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.LiveDataHostApi.getValue was null, expected non-null int.'); + final LiveDataSupportedTypeData? arg_type = (args[1] as LiveDataSupportedTypeData?); + assert(arg_type != null, + 'Argument for dev.flutter.pigeon.LiveDataHostApi.getValue was null, expected non-null LiveDataSupportedTypeData.'); + final int? output = api.getValue(arg_identifier!, arg_type!); + return [output]; + }); + } + } } } From b826c1848f5fc97efc20939b097b8a764151ea8d Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 2 May 2023 12:34:41 -0700 Subject: [PATCH 57/71] Fix tests --- .../camerax/ObserverFlutterApiWrapper.java | 12 +- .../plugins/camerax/CameraInfoTest.java | 7 +- .../plugins/camerax/CameraStateTest.java | 2 +- .../flutter/plugins/camerax/LiveDataTest.java | 47 ++++++- .../flutter/plugins/camerax/ObserverTest.java | 30 +++- .../test/android_camera_camerax_test.dart | 34 +++-- .../android_camera_camerax_test.mocks.dart | 133 +++++++++++------- .../test/camera_info_test.dart | 23 +-- .../test/camera_info_test.mocks.dart | 103 +++++++++----- .../test/live_data_test.dart | 54 ++++++- 10 files changed, 319 insertions(+), 126 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java index a337385f79a3..8d3f2e532f16 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java @@ -7,6 +7,7 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.camera.core.CameraState; +import androidx.camera.core.ZoomState; import androidx.lifecycle.Observer; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ObserverFlutterApi; @@ -24,6 +25,7 @@ public class ObserverFlutterApiWrapper { private ObserverFlutterApi observerFlutterApi; @VisibleForTesting public CameraStateFlutterApiWrapper cameraStateFlutterApiWrapper; + @VisibleForTesting public ZoomStateFlutterApiImpl zoomStateFlutterApiImpl; /** * Constructs a {@link ObserverFlutterApiWrapper}. @@ -60,7 +62,15 @@ public void onChanged( CameraStateFlutterApiWrapper.getCameraStateType(state.getType()), state.getError(), reply -> {}); - } else { + } else if (value instanceof ZoomState) { + ZoomState state = (ZoomState) value; + + if (zoomStateFlutterApiImpl == null) { + zoomStateFlutterApiImpl = new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager); + } + zoomStateFlutterApiImpl.create(state, reply -> {}); + } + else { throw new UnsupportedOperationException( "The type of value in observance is not wrapped by this plugin."); } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java index 050037dd0653..e3cabcf4fde8 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraInfoTest.java @@ -110,16 +110,15 @@ public void getZoomState_retrievesExpectedZoomState() { final LiveData mockLiveZoomState = (LiveData) mock(LiveData.class); final ZoomState mockZoomState = mock(ZoomState.class); final Long mockCameraInfoIdentifier = 20L; - final Long mockZoomStateIdentifier = 74L; + final Long mockLiveZoomStateIdentifier = 74L; testInstanceManager.addDartCreatedInstance(mockCameraInfo, mockCameraInfoIdentifier); - testInstanceManager.addDartCreatedInstance(mockZoomState, mockZoomStateIdentifier); + testInstanceManager.addDartCreatedInstance(mockLiveZoomState, mockLiveZoomStateIdentifier); when(mockCameraInfo.getZoomState()).thenReturn(mockLiveZoomState); - when(mockLiveZoomState.getValue()).thenReturn(mockZoomState); assertEquals( - cameraInfoHostApiImpl.getZoomState(mockCameraInfoIdentifier), mockZoomStateIdentifier); + cameraInfoHostApiImpl.getZoomState(mockCameraInfoIdentifier), mockLiveZoomStateIdentifier); verify(mockCameraInfo).getZoomState(); } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java index c3a41070db62..c02cd24fbc90 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java @@ -95,7 +95,7 @@ public void getCameraStateType_returnsExpectedType() { CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.PENDING_OPEN); break; default: - // There is a CameraState.Type unhandled by this method. + // There is a CameraState.Type unhandled by this test. fail(); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java index d58f001316bd..e593cfbbe1cd 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -5,12 +5,15 @@ package io.flutter.plugins.camerax; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; 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.CameraState; +import androidx.camera.core.ZoomState; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; @@ -55,7 +58,7 @@ public void observe_addsExpectedObserverToLiveDataInstance() { new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); final Observer mockObserver = mock(Observer.class); final long observerIdentifier = 20; - final long instanceIdentifier = 0; + final long instanceIdentifier = 29; final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); instanceManager.addDartCreatedInstance(mockObserver, observerIdentifier); @@ -71,7 +74,7 @@ public void observe_addsExpectedObserverToLiveDataInstance() { public void removeObservers_makesCallToRemoveObserversFromLiveDataInstance() { final LiveDataHostApiImpl hostApi = new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); - final long instanceIdentifier = 0; + final long instanceIdentifier = 10; final LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class); instanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); @@ -83,8 +86,46 @@ public void removeObservers_makesCallToRemoveObserversFromLiveDataInstance() { } @Test + @SuppressWarnings("unchecked") public void getValue_returnsExpectedValue() { - + final LiveDataHostApiImpl hostApi = + new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); + + for (LiveDataSupportedType supportedType : LiveDataSupportedType.values()) { + LiveDataSupportedTypeData typeData = new LiveDataSupportedTypeData.Builder().setValue(supportedType).build(); + + switch(supportedType) { + case CAMERA_STATE: + CameraState mockCameraState = mock(CameraState.class); + final Long mockCameraStateIdentifier = 56L; + final long instanceIdentifier = 33; + + instanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); + instanceManager.addDartCreatedInstance(mockCameraState, mockCameraStateIdentifier); + + when(mockLiveData.getValue()).thenReturn(mockCameraState); + when(mockCameraState.getType()).thenReturn(CameraState.Type.CLOSED); + when(mockCameraState.getError()).thenReturn(null); + + assertEquals(hostApi.getValue(instanceIdentifier, typeData), mockCameraStateIdentifier); + break; + case ZOOM_STATE: + final LiveData mockLiveZoomState = (LiveData) mock(LiveData.class); + ZoomState mockZoomState = mock(ZoomState.class); + final Long mockLiveZoomStateIdentifier = 22L; + final Long mockZoomStateIdentifier = 8L; + + when(mockLiveZoomState.getValue()).thenReturn(mockZoomState); + instanceManager.addDartCreatedInstance(mockLiveZoomState, mockLiveZoomStateIdentifier); + instanceManager.addDartCreatedInstance(mockZoomState, mockZoomStateIdentifier); + + assertEquals(hostApi.getValue(mockLiveZoomStateIdentifier, typeData), mockZoomStateIdentifier); + break; + default: + // There is a LiveDataSupportedType untested by this method. + fail(); + } + } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java index 2c628905db6a..91a223b228c0 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java @@ -12,6 +12,7 @@ import static org.mockito.Mockito.when; import androidx.camera.core.CameraState; +import androidx.camera.core.ZoomState; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraStateType; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ObserverFlutterApi; @@ -61,19 +62,19 @@ public void create_createsObserverInstance() { } @Test - public void onChanged_makesCallToDartCallbackForCameraState() { + public void onChanged_makesExpectedCallToDartCallbackForCameraState() { final ObserverFlutterApiWrapper flutterApi = new ObserverFlutterApiWrapper(mockBinaryMessenger, instanceManager); final ObserverHostApiImpl.ObserverImpl instance = new ObserverHostApiImpl.ObserverImpl(mockBinaryMessenger, instanceManager); final CameraStateFlutterApiWrapper mockCameraStateFlutterApiWrapper = mock(CameraStateFlutterApiWrapper.class); - final long instanceIdentifier = 0; + final long instanceIdentifier = 60; final CameraState.StateError testCameraStateError = CameraState.StateError.create(CameraState.ERROR_CAMERA_IN_USE); final CameraState testCameraState = CameraState.create(CameraState.Type.CLOSED, testCameraStateError); - Long mockCameraStateIdentifier = instanceManager.addHostCreatedInstance(testCameraState); + final Long mockCameraStateIdentifier = instanceManager.addHostCreatedInstance(testCameraState); flutterApi.setApi(mockFlutterApi); instance.setApi(flutterApi); @@ -89,4 +90,27 @@ public void onChanged_makesCallToDartCallbackForCameraState() { verify(mockCameraStateFlutterApiWrapper) .create(eq(testCameraState), eq(CameraStateType.CLOSED), eq(testCameraStateError), any()); } + + @Test + public void onChanged_makesExpectedCallToDartCallbackForZoomState() { + final ObserverFlutterApiWrapper flutterApi = + new ObserverFlutterApiWrapper(mockBinaryMessenger, instanceManager); + final ObserverHostApiImpl.ObserverImpl instance = + new ObserverHostApiImpl.ObserverImpl(mockBinaryMessenger, instanceManager); + final long instanceIdentifier = 2; + final ZoomStateFlutterApiImpl mockZoomStateFlutterApiImpl = mock(ZoomStateFlutterApiImpl.class); + final ZoomState mockZoomState = mock(ZoomState.class); + final Long mockZoomStateIdentifier = instanceManager.addHostCreatedInstance(mockZoomState); + + flutterApi.setApi(mockFlutterApi); + instance.setApi(flutterApi); + flutterApi.zoomStateFlutterApiImpl = mockZoomStateFlutterApiImpl; + + instanceManager.addDartCreatedInstance(instance, instanceIdentifier); + + instance.onChanged(mockZoomState); + + verify(mockFlutterApi).onChanged(eq(instanceIdentifier), eq(mockZoomStateIdentifier), any()); + verify(mockZoomStateFlutterApiImpl).create(eq(mockZoomState), any()); + } } 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 c1a6fd177fbc..eb0d5f6977df 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 @@ -43,7 +43,6 @@ import 'test_camerax_library.g.dart'; MockSpec(), MockSpec(), MockSpec(), - MockSpec>(), MockSpec(), MockSpec(), MockSpec(), @@ -51,7 +50,12 @@ import 'test_camerax_library.g.dart'; MockSpec(), MockSpec(), ]) -@GenerateMocks([BuildContext]) +@GenerateMocks([ + BuildContext +], customMocks: >[ + MockSpec>(as: #MockLiveCameraState), + MockSpec>(as: #MockLiveZoomState), +]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -166,7 +170,7 @@ void main() { const int testSurfaceTextureId = 6; final MockCamera mockCamera = MockCamera(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); - final MockLiveData mockLiveCameraState = MockLiveData(); + final MockLiveCameraState mockLiveCameraState = MockLiveCameraState(); when(camera.testPreview.setSurfaceProvider()) .thenAnswer((_) async => testSurfaceTextureId); @@ -236,7 +240,7 @@ void main() { .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getCameraState()) - .thenAnswer((_) async => MockLiveData()); + .thenAnswer((_) async => MockLiveCameraState()); camera.processCameraProvider = mockProcessCameraProvider; camera.createDetachedObjectForTesting = true; @@ -304,7 +308,7 @@ void main() { .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getCameraState()) - .thenAnswer((_) async => MockLiveData()); + .thenAnswer((_) async => MockLiveCameraState()); when(camera.testPreview.getResolutionInfo()) .thenAnswer((_) async => testResolutionInfo); camera.createDetachedObjectForTesting = true; @@ -331,7 +335,7 @@ void main() { camera.preview = MockPreview(); camera.processCameraProvider = MockProcessCameraProvider(); - camera.liveCameraState = MockLiveData(); + camera.liveCameraState = MockLiveCameraState(); camera.dispose(3); @@ -451,7 +455,7 @@ void main() { MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); - final MockLiveData mockLiveCameraState = MockLiveData(); + final MockLiveCameraState mockLiveCameraState = MockLiveCameraState(); camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); @@ -483,7 +487,7 @@ void main() { MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); - final MockLiveData mockLiveCameraState = MockLiveData(); + final MockLiveCameraState mockLiveCameraState = MockLiveCameraState(); camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); @@ -531,7 +535,7 @@ void main() { .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getCameraState()) - .thenAnswer((_) async => MockLiveData()); + .thenAnswer((_) async => MockLiveCameraState()); final FutureBuilder previewWidget = camera.buildPreview(textureId) as FutureBuilder; @@ -570,7 +574,7 @@ void main() { .thenAnswer((_) async => mockCamera); when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockCameraInfo.getCameraState()) - .thenAnswer((_) async => MockLiveData()); + .thenAnswer((_) async => MockLiveCameraState()); final FutureBuilder previewWidget = camera.buildPreview(textureId) as FutureBuilder; @@ -654,12 +658,15 @@ void main() { final AndroidCameraCameraX camera = AndroidCameraCameraX(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); const double maxZoomRatio = 1; + final LiveData mockLiveZoomState = MockLiveZoomState(); final ZoomState zoomState = ZoomState.detached(maxZoomRatio: maxZoomRatio, minZoomRatio: 0); camera.cameraInfo = mockCameraInfo; - when(mockCameraInfo.getZoomState()).thenAnswer((_) async => zoomState); + when(mockCameraInfo.getZoomState()) + .thenAnswer((_) async => mockLiveZoomState); + when(mockLiveZoomState.getValue()).thenAnswer((_) async => zoomState); expect(await camera.getMaxZoomLevel(55), maxZoomRatio); }); @@ -668,12 +675,15 @@ void main() { final AndroidCameraCameraX camera = AndroidCameraCameraX(); final MockCameraInfo mockCameraInfo = MockCameraInfo(); const double minZoomRatio = 0; + final LiveData mockLiveZoomState = MockLiveZoomState(); final ZoomState zoomState = ZoomState.detached(maxZoomRatio: 1, minZoomRatio: minZoomRatio); camera.cameraInfo = mockCameraInfo; - when(mockCameraInfo.getZoomState()).thenAnswer((_) async => zoomState); + when(mockCameraInfo.getZoomState()) + .thenAnswer((_) async => mockLiveZoomState); + when(mockLiveZoomState.getValue()).thenAnswer((_) async => zoomState); expect(await camera.getMinZoomLevel(55), minZoomRatio); }); 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 5eb3c800f8e2..185480273aa4 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,7 +4,7 @@ // ignore_for_file: no_leading_underscores_for_library_prefixes import 'dart:async' as _i11; -import 'dart:typed_data' as _i21; +import 'dart:typed_data' as _i20; import 'package:camera_android_camerax/src/analyzer.dart' as _i16; import 'package:camera_android_camerax/src/camera.dart' as _i7; @@ -15,14 +15,14 @@ import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i6; import 'package:camera_android_camerax/src/exposure_state.dart' as _i4; import 'package:camera_android_camerax/src/image_analysis.dart' as _i15; import 'package:camera_android_camerax/src/image_capture.dart' as _i17; -import 'package:camera_android_camerax/src/image_proxy.dart' as _i19; +import 'package:camera_android_camerax/src/image_proxy.dart' as _i18; import 'package:camera_android_camerax/src/live_data.dart' as _i3; -import 'package:camera_android_camerax/src/observer.dart' as _i18; -import 'package:camera_android_camerax/src/plane_proxy.dart' as _i20; -import 'package:camera_android_camerax/src/preview.dart' as _i22; +import 'package:camera_android_camerax/src/observer.dart' as _i25; +import 'package:camera_android_camerax/src/plane_proxy.dart' as _i19; +import 'package:camera_android_camerax/src/preview.dart' as _i21; import 'package:camera_android_camerax/src/process_camera_provider.dart' - as _i23; -import 'package:camera_android_camerax/src/use_case.dart' as _i24; + as _i22; +import 'package:camera_android_camerax/src/use_case.dart' as _i23; import 'package:camera_android_camerax/src/zoom_state.dart' as _i13; import 'package:camera_platform_interface/camera_platform_interface.dart' as _i5; @@ -31,7 +31,7 @@ import 'package:flutter/services.dart' as _i9; import 'package:flutter/widgets.dart' as _i8; import 'package:mockito/mockito.dart' as _i1; -import 'test_camerax_library.g.dart' as _i25; +import 'test_camerax_library.g.dart' as _i24; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -408,35 +408,10 @@ class MockImageCapture extends _i1.Mock implements _i17.ImageCapture { ) as _i11.Future); } -/// A class which mocks [LiveData]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockLiveData extends _i1.Mock implements _i3.LiveData<_i12.CameraState> { - @override - _i11.Future observe(_i18.Observer<_i12.CameraState>? observer) => - (super.noSuchMethod( - Invocation.method( - #observe, - [observer], - ), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), - ) as _i11.Future); - @override - _i11.Future removeObservers() => (super.noSuchMethod( - Invocation.method( - #removeObservers, - [], - ), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), - ) as _i11.Future); -} - /// A class which mocks [ImageProxy]. /// /// See the documentation for Mockito's code generation for more information. -class MockImageProxy extends _i1.Mock implements _i19.ImageProxy { +class MockImageProxy extends _i1.Mock implements _i18.ImageProxy { @override int get format => (super.noSuchMethod( Invocation.getter(#format), @@ -456,16 +431,16 @@ class MockImageProxy extends _i1.Mock implements _i19.ImageProxy { returnValueForMissingStub: 0, ) as int); @override - _i11.Future> getPlanes() => (super.noSuchMethod( + _i11.Future> getPlanes() => (super.noSuchMethod( Invocation.method( #getPlanes, [], ), returnValue: - _i11.Future>.value(<_i20.PlaneProxy>[]), + _i11.Future>.value(<_i19.PlaneProxy>[]), returnValueForMissingStub: - _i11.Future>.value(<_i20.PlaneProxy>[]), - ) as _i11.Future>); + _i11.Future>.value(<_i19.PlaneProxy>[]), + ) as _i11.Future>); @override _i11.Future close() => (super.noSuchMethod( Invocation.method( @@ -480,13 +455,13 @@ class MockImageProxy extends _i1.Mock implements _i19.ImageProxy { /// A class which mocks [PlaneProxy]. /// /// See the documentation for Mockito's code generation for more information. -class MockPlaneProxy extends _i1.Mock implements _i20.PlaneProxy { +class MockPlaneProxy extends _i1.Mock implements _i19.PlaneProxy { @override - _i21.Uint8List get buffer => (super.noSuchMethod( + _i20.Uint8List get buffer => (super.noSuchMethod( Invocation.getter(#buffer), - returnValue: _i21.Uint8List(0), - returnValueForMissingStub: _i21.Uint8List(0), - ) as _i21.Uint8List); + returnValue: _i20.Uint8List(0), + returnValueForMissingStub: _i20.Uint8List(0), + ) as _i20.Uint8List); @override int get pixelStride => (super.noSuchMethod( Invocation.getter(#pixelStride), @@ -504,7 +479,7 @@ class MockPlaneProxy extends _i1.Mock implements _i20.PlaneProxy { /// A class which mocks [Preview]. /// /// See the documentation for Mockito's code generation for more information. -class MockPreview extends _i1.Mock implements _i22.Preview { +class MockPreview extends _i1.Mock implements _i21.Preview { @override _i11.Future setSurfaceProvider() => (super.noSuchMethod( Invocation.method( @@ -551,7 +526,7 @@ class MockPreview extends _i1.Mock implements _i22.Preview { /// /// See the documentation for Mockito's code generation for more information. class MockProcessCameraProvider extends _i1.Mock - implements _i23.ProcessCameraProvider { + implements _i22.ProcessCameraProvider { @override _i11.Future> getAvailableCameraInfos() => (super.noSuchMethod( @@ -567,7 +542,7 @@ class MockProcessCameraProvider extends _i1.Mock @override _i11.Future<_i7.Camera> bindToLifecycle( _i14.CameraSelector? cameraSelector, - List<_i24.UseCase>? useCases, + List<_i23.UseCase>? useCases, ) => (super.noSuchMethod( Invocation.method( @@ -599,7 +574,7 @@ class MockProcessCameraProvider extends _i1.Mock )), ) as _i11.Future<_i7.Camera>); @override - _i11.Future isBound(_i24.UseCase? useCase) => (super.noSuchMethod( + _i11.Future isBound(_i23.UseCase? useCase) => (super.noSuchMethod( Invocation.method( #isBound, [useCase], @@ -608,7 +583,7 @@ class MockProcessCameraProvider extends _i1.Mock returnValueForMissingStub: _i11.Future.value(false), ) as _i11.Future); @override - void unbind(List<_i24.UseCase>? useCases) => super.noSuchMethod( + void unbind(List<_i23.UseCase>? useCases) => super.noSuchMethod( Invocation.method( #unbind, [useCases], @@ -629,7 +604,7 @@ class MockProcessCameraProvider extends _i1.Mock /// /// See the documentation for Mockito's code generation for more information. class MockTestInstanceManagerHostApi extends _i1.Mock - implements _i25.TestInstanceManagerHostApi { + implements _i24.TestInstanceManagerHostApi { @override void clear() => super.noSuchMethod( Invocation.method( @@ -797,3 +772,63 @@ class MockBuildContext extends _i1.Mock implements _i8.BuildContext { ), ) as _i10.DiagnosticsNode); } + +/// A class which mocks [LiveData]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockLiveCameraState extends _i1.Mock + implements _i3.LiveData<_i12.CameraState> { + MockLiveCameraState() { + _i1.throwOnMissingStub(this); + } + + @override + _i11.Future observe(_i25.Observer<_i12.CameraState>? observer) => + (super.noSuchMethod( + Invocation.method( + #observe, + [observer], + ), + returnValue: _i11.Future.value(), + returnValueForMissingStub: _i11.Future.value(), + ) as _i11.Future); + @override + _i11.Future removeObservers() => (super.noSuchMethod( + Invocation.method( + #removeObservers, + [], + ), + returnValue: _i11.Future.value(), + returnValueForMissingStub: _i11.Future.value(), + ) as _i11.Future); +} + +/// A class which mocks [LiveData]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockLiveZoomState extends _i1.Mock + implements _i3.LiveData<_i13.ZoomState> { + MockLiveZoomState() { + _i1.throwOnMissingStub(this); + } + + @override + _i11.Future observe(_i25.Observer<_i13.ZoomState>? observer) => + (super.noSuchMethod( + Invocation.method( + #observe, + [observer], + ), + returnValue: _i11.Future.value(), + returnValueForMissingStub: _i11.Future.value(), + ) as _i11.Future); + @override + _i11.Future removeObservers() => (super.noSuchMethod( + Invocation.method( + #removeObservers, + [], + ), + returnValue: _i11.Future.value(), + returnValueForMissingStub: _i11.Future.value(), + ) as _i11.Future); +} diff --git a/packages/camera/camera_android_camerax/test/camera_info_test.dart b/packages/camera/camera_android_camerax/test/camera_info_test.dart index 24f06d02938d..487983b33656 100644 --- a/packages/camera/camera_android_camerax/test/camera_info_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_info_test.dart @@ -17,9 +17,11 @@ import 'camera_info_test.mocks.dart'; import 'test_camerax_library.g.dart'; @GenerateMocks([ - LiveData, TestCameraInfoHostApi, TestInstanceManagerHostApi +], customMocks: >[ + MockSpec>(as: #MockLiveCameraState), + MockSpec>(as: #MockLiveZoomState), ]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -67,8 +69,7 @@ void main() { instanceManager: instanceManager, ); const int cameraIdentifier = 55; - final MockLiveData mockLiveCameraState = - MockLiveData(); + final MockLiveCameraState mockLiveCameraState = MockLiveCameraState(); const int liveCameraStateIdentifier = 73; instanceManager.addHostCreatedInstance( cameraInfo, @@ -78,7 +79,7 @@ void main() { instanceManager.addHostCreatedInstance( mockLiveCameraState, liveCameraStateIdentifier, - onCopy: (_) => MockLiveData(), + onCopy: (_) => MockLiveCameraState(), ); when(mockApi.getCameraState(cameraIdentifier)) @@ -141,21 +142,21 @@ void main() { instanceManager: instanceManager, ); const int cameraInfoIdentifier = 2; - final ZoomState zoomState = - ZoomState.detached(minZoomRatio: 0, maxZoomRatio: 1); - const int zoomStateIdentifier = 55; + final MockLiveZoomState mockLiveZoomState = MockLiveZoomState(); + const int mockLiveZoomStateIdentifier = 55; instanceManager.addHostCreatedInstance( cameraInfo, cameraInfoIdentifier, onCopy: (_) => CameraInfo.detached(), ); - instanceManager.addHostCreatedInstance(zoomState, zoomStateIdentifier, - onCopy: (_) => ZoomState.detached(minZoomRatio: 0, maxZoomRatio: 1)); + instanceManager.addHostCreatedInstance( + mockLiveZoomState, mockLiveZoomStateIdentifier, + onCopy: (_) => MockLiveZoomState()); when(mockApi.getZoomState(cameraInfoIdentifier)) - .thenReturn(zoomStateIdentifier); - expect(await cameraInfo.getZoomState(), equals(zoomState)); + .thenReturn(mockLiveZoomStateIdentifier); + expect(await cameraInfo.getZoomState(), equals(mockLiveZoomState)); verify(mockApi.getZoomState(cameraInfoIdentifier)); }); 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 648e1b4815f2..62483abcc5fc 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 @@ -3,13 +3,15 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i3; +import 'dart:async' as _i5; -import 'package:camera_android_camerax/src/live_data.dart' as _i2; -import 'package:camera_android_camerax/src/observer.dart' as _i4; +import 'package:camera_android_camerax/src/camera_state.dart' as _i4; +import 'package:camera_android_camerax/src/live_data.dart' as _i3; +import 'package:camera_android_camerax/src/observer.dart' as _i6; +import 'package:camera_android_camerax/src/zoom_state.dart' as _i7; import 'package:mockito/mockito.dart' as _i1; -import 'test_camerax_library.g.dart' as _i5; +import 'test_camerax_library.g.dart' as _i2; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -22,40 +24,11 @@ import 'test_camerax_library.g.dart' as _i5; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -/// A class which mocks [LiveData]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockLiveData extends _i1.Mock - implements _i2.LiveData { - MockLiveData() { - _i1.throwOnMissingStub(this); - } - - @override - _i3.Future observe(_i4.Observer? observer) => (super.noSuchMethod( - Invocation.method( - #observe, - [observer], - ), - returnValue: _i3.Future.value(), - returnValueForMissingStub: _i3.Future.value(), - ) as _i3.Future); - @override - _i3.Future removeObservers() => (super.noSuchMethod( - Invocation.method( - #removeObservers, - [], - ), - returnValue: _i3.Future.value(), - returnValueForMissingStub: _i3.Future.value(), - ) as _i3.Future); -} - /// A class which mocks [TestCameraInfoHostApi]. /// /// See the documentation for Mockito's code generation for more information. class MockTestCameraInfoHostApi extends _i1.Mock - implements _i5.TestCameraInfoHostApi { + implements _i2.TestCameraInfoHostApi { MockTestCameraInfoHostApi() { _i1.throwOnMissingStub(this); } @@ -98,7 +71,7 @@ class MockTestCameraInfoHostApi extends _i1.Mock /// /// See the documentation for Mockito's code generation for more information. class MockTestInstanceManagerHostApi extends _i1.Mock - implements _i5.TestInstanceManagerHostApi { + implements _i2.TestInstanceManagerHostApi { MockTestInstanceManagerHostApi() { _i1.throwOnMissingStub(this); } @@ -112,3 +85,63 @@ class MockTestInstanceManagerHostApi extends _i1.Mock returnValueForMissingStub: null, ); } + +/// A class which mocks [LiveData]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockLiveCameraState extends _i1.Mock + implements _i3.LiveData<_i4.CameraState> { + MockLiveCameraState() { + _i1.throwOnMissingStub(this); + } + + @override + _i5.Future observe(_i6.Observer<_i4.CameraState>? observer) => + (super.noSuchMethod( + Invocation.method( + #observe, + [observer], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + @override + _i5.Future removeObservers() => (super.noSuchMethod( + Invocation.method( + #removeObservers, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); +} + +/// A class which mocks [LiveData]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockLiveZoomState extends _i1.Mock + implements _i3.LiveData<_i7.ZoomState> { + MockLiveZoomState() { + _i1.throwOnMissingStub(this); + } + + @override + _i5.Future observe(_i6.Observer<_i7.ZoomState>? observer) => + (super.noSuchMethod( + Invocation.method( + #observe, + [observer], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + @override + _i5.Future removeObservers() => (super.noSuchMethod( + Invocation.method( + #removeObservers, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); +} diff --git a/packages/camera/camera_android_camerax/test/live_data_test.dart b/packages/camera/camera_android_camerax/test/live_data_test.dart index 04c64c7c80cb..95bf9a83315f 100644 --- a/packages/camera/camera_android_camerax/test/live_data_test.dart +++ b/packages/camera/camera_android_camerax/test/live_data_test.dart @@ -18,6 +18,9 @@ import 'test_camerax_library.g.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); + // Mocks the call to clear the native InstanceManager. + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + group('LiveData', () { tearDown(() { TestLiveDataHostApi.setup(null); @@ -32,19 +35,19 @@ void main() { onWeakReferenceRemoved: (_) {}, ); - final LiveData instance = LiveData.detached( + final LiveData instance = LiveData.detached( instanceManager: instanceManager, ); const int instanceIdentifier = 0; instanceManager.addHostCreatedInstance( instance, instanceIdentifier, - onCopy: (LiveData original) => LiveData.detached( + onCopy: (LiveData original) => LiveData.detached( instanceManager: instanceManager, ), ); - final Observer observer = Observer.detached( + final Observer observer = Observer.detached( instanceManager: instanceManager, onChanged: (Object value) {}, ); @@ -52,7 +55,7 @@ void main() { instanceManager.addHostCreatedInstance( observer, observerIdentifier, - onCopy: (_) => Observer.detached( + onCopy: (_) => Observer.detached( instanceManager: instanceManager, onChanged: (Object value) {}, ), @@ -78,14 +81,14 @@ void main() { onWeakReferenceRemoved: (_) {}, ); - final LiveData instance = LiveData.detached( + final LiveData instance = LiveData.detached( instanceManager: instanceManager, ); const int instanceIdentifier = 0; instanceManager.addHostCreatedInstance( instance, instanceIdentifier, - onCopy: (LiveData original) => LiveData.detached( + onCopy: (LiveData original) => LiveData.detached( instanceManager: instanceManager, ), ); @@ -97,9 +100,46 @@ void main() { )); }); + test('getValue returns expected value', () async { + final MockTestLiveDataHostApi mockApi = MockTestLiveDataHostApi(); + TestLiveDataHostApi.setup(mockApi); + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final LiveData instance = LiveData.detached( + instanceManager: instanceManager, + ); + final CameraState testCameraState = + CameraState.detached(type: CameraStateType.closed); + const int instanceIdentifier = 0; + const int testCameraStateIdentifier = 22; + instanceManager.addHostCreatedInstance( + instance, + instanceIdentifier, + onCopy: (LiveData original) => + LiveData.detached( + instanceManager: instanceManager, + ), + ); + instanceManager.addHostCreatedInstance( + testCameraState, + testCameraStateIdentifier, + onCopy: (CameraState original) => CameraState.detached( + type: original.type, instanceManager: instanceManager), + ); + + when(mockApi.getValue(instanceIdentifier, any)) + .thenReturn(testCameraStateIdentifier); + + expect(await instance.getValue(), equals(testCameraState)); + }); + test( 'FlutterAPI create makes call to create LiveData instance with expected identifier', - () { + () async { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); From 2cebb1899f84d4e924d8d1ab6f459e9eba44c2c2 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 2 May 2023 12:38:41 -0700 Subject: [PATCH 58/71] Add log and formatting --- .../camerax/CameraInfoHostApiImpl.java | 3 +- .../camerax/GeneratedCameraXLibrary.java | 522 ++++++++++++------ .../plugins/camerax/LiveDataHostApiImpl.java | 18 +- .../camerax/ObserverFlutterApiWrapper.java | 16 +- .../flutter/plugins/camerax/LiveDataTest.java | 71 +-- .../lib/src/camerax_library.g.dart | 225 +++++--- .../test/test_camerax_library.g.dart | 472 ++++++++++------ 7 files changed, 853 insertions(+), 474 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index de98dadfa253..444e9159e30d 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -86,7 +86,8 @@ public Long getZoomState(@NonNull Long identifier) { (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); LiveData zoomState = cameraInfo.getZoomState(); - LiveDataFlutterApiWrapper liveDataFlutterApiWrapper = new LiveDataFlutterApiWrapper(binaryMessenger, instanceManager); + LiveDataFlutterApiWrapper liveDataFlutterApiWrapper = + new LiveDataFlutterApiWrapper(binaryMessenger, instanceManager); liveDataFlutterApiWrapper.create(zoomState, LiveDataSupportedType.ZOOM_STATE, reply -> {}); return instanceManager.getIdentifierForStrongReference(zoomState); 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 c1e2710ffbe5..691c39d09030 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; } @@ -63,7 +60,7 @@ protected static ArrayList wrapError(@NonNull Throwable exception) { /** * The states the camera can be in. * - * See https://developer.android.com/reference/androidx/camera/core/CameraState.Type. + *

See https://developer.android.com/reference/androidx/camera/core/CameraState.Type. */ public enum CameraStateType { CLOSED(0), @@ -156,9 +153,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; } } @@ -400,9 +401,19 @@ ArrayList toList() { static @NonNull ExposureCompensationRange fromList(@NonNull ArrayList list) { ExposureCompensationRange pigeonResult = new ExposureCompensationRange(); Object minCompensation = list.get(0); - pigeonResult.setMinCompensation((minCompensation == null) ? null : ((minCompensation instanceof Integer) ? (Integer) minCompensation : (Long) minCompensation)); + pigeonResult.setMinCompensation( + (minCompensation == null) + ? null + : ((minCompensation instanceof Integer) + ? (Integer) minCompensation + : (Long) minCompensation)); Object maxCompensation = list.get(1); - pigeonResult.setMaxCompensation((maxCompensation == null) ? null : ((maxCompensation instanceof Integer) ? (Integer) maxCompensation : (Long) maxCompensation)); + pigeonResult.setMaxCompensation( + (maxCompensation == null) + ? null + : ((maxCompensation instanceof Integer) + ? (Integer) maxCompensation + : (Long) maxCompensation)); return pigeonResult; } } @@ -418,7 +429,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(); @@ -426,8 +437,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<>( @@ -439,8 +454,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; } @@ -461,7 +475,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 = @@ -476,8 +492,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; } @@ -497,7 +512,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); @@ -506,6 +521,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -518,28 +534,32 @@ 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); - @NonNull + @NonNull Long getCameraState(@NonNull Long identifier); - @NonNull + @NonNull Long getExposureState(@NonNull Long identifier); - @NonNull + @NonNull Long getZoomState(@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) -> { @@ -547,10 +567,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; } @@ -571,10 +592,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getCameraState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getCameraState( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -587,7 +609,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getExposureState", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getExposureState", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -595,10 +619,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getExposureState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getExposureState( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -619,10 +644,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getZoomState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getZoomState((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -642,7 +667,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); @@ -651,6 +676,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -665,15 +691,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<>( @@ -686,10 +716,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; } @@ -711,10 +742,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; } @@ -734,7 +767,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); @@ -743,7 +776,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()); @@ -757,13 +792,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); @@ -774,12 +812,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) -> { @@ -806,7 +850,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) -> { @@ -814,10 +860,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; } @@ -830,7 +877,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) -> { @@ -840,10 +889,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; } @@ -856,7 +910,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) -> { @@ -865,10 +921,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; } @@ -881,7 +939,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) -> { @@ -890,10 +950,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; } @@ -906,7 +966,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) -> { @@ -916,8 +978,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; } @@ -937,7 +998,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); @@ -946,10 +1007,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)); @@ -958,14 +1022,14 @@ public void create(@NonNull Long identifierArg, @NonNull Reply callback) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface CameraHostApi { - @NonNull + @NonNull Long getCameraInfo(@NonNull Long identifier); /** The codec used by CameraHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ + /** Sets up an instance of `CameraHostApi` to handle messages through the `binaryMessenger`. */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHostApi api) { { BasicMessageChannel channel = @@ -978,10 +1042,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHost ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1001,7 +1065,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); @@ -1010,6 +1074,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1049,9 +1114,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(); @@ -1059,12 +1126,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) -> { @@ -1093,7 +1166,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) -> { @@ -1102,10 +1177,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; } @@ -1118,7 +1194,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) -> { @@ -1126,8 +1204,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; } @@ -1147,7 +1224,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); @@ -1156,18 +1233,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)); @@ -1208,21 +1292,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 = @@ -1237,10 +1324,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; } @@ -1253,7 +1342,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) -> { @@ -1261,10 +1352,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; } @@ -1277,7 +1369,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) -> { @@ -1285,8 +1379,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; } @@ -1307,10 +1400,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; } @@ -1352,7 +1446,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); @@ -1362,7 +1459,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 = @@ -1377,10 +1477,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; } @@ -1402,10 +1504,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; } @@ -1438,7 +1541,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); @@ -1481,7 +1585,7 @@ public CameraStateFlutterApi(@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); @@ -1490,7 +1594,12 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return CameraStateFlutterApiCodec.INSTANCE; } - public void create(@NonNull Long identifierArg, @NonNull CameraStateTypeData typeArg, @Nullable Long errorIdentifierArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull CameraStateTypeData typeArg, + @Nullable Long errorIdentifierArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraStateFlutterApi.create", getCodec()); @@ -1534,7 +1643,7 @@ public ExposureStateFlutterApi(@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); @@ -1543,12 +1652,19 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return ExposureStateFlutterApiCodec.INSTANCE; } - public void create(@NonNull Long identifierArg, @NonNull ExposureCompensationRange exposureCompensationRangeArg, @NonNull Double exposureCompensationStepArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull ExposureCompensationRange exposureCompensationRangeArg, + @NonNull Double exposureCompensationStepArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ExposureStateFlutterApi.create", getCodec()); channel.send( - new ArrayList(Arrays.asList(identifierArg, exposureCompensationRangeArg, exposureCompensationStepArg)), + new ArrayList( + Arrays.asList( + identifierArg, exposureCompensationRangeArg, exposureCompensationStepArg)), channelReply -> callback.reply(null)); } } @@ -1560,7 +1676,7 @@ public ZoomStateFlutterApi(@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); @@ -1569,7 +1685,12 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Double minZoomRatioArg, @NonNull Double maxZoomRatioArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull Double minZoomRatioArg, + @NonNull Double maxZoomRatioArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ZoomStateFlutterApi.create", getCodec()); @@ -1618,8 +1739,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<>( @@ -1632,10 +1757,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; } @@ -1657,10 +1783,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; } @@ -1673,7 +1800,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) -> { @@ -1683,8 +1812,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; } @@ -1705,7 +1833,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 = @@ -1720,8 +1850,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; } @@ -1742,7 +1871,9 @@ public interface ObserverHostApi { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `ObserverHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ObserverHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHostApi api) { { BasicMessageChannel channel = @@ -1757,8 +1888,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ObserverHo try { api.create((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1778,7 +1908,7 @@ public ObserverFlutterApi(@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); @@ -1787,7 +1917,11 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void onChanged(@NonNull Long identifierArg, @NonNull Long valueIdentifierArg, @NonNull Reply callback) { + + public void onChanged( + @NonNull Long identifierArg, + @NonNull Long valueIdentifierArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ObserverFlutterApi.onChanged", getCodec()); @@ -1804,7 +1938,7 @@ public CameraStateErrorFlutterApi(@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); @@ -1813,7 +1947,9 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Long codeArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, @NonNull Long codeArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraStateErrorFlutterApi.create", getCodec()); @@ -1856,14 +1992,16 @@ public interface LiveDataHostApi { void removeObservers(@NonNull Long identifier); - @Nullable + @Nullable Long getValue(@NonNull Long identifier, @NonNull LiveDataSupportedTypeData type); /** The codec used by LiveDataHostApi. */ static @NonNull MessageCodec getCodec() { return LiveDataHostApiCodec.INSTANCE; } - /**Sets up an instance of `LiveDataHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `LiveDataHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHostApi api) { { BasicMessageChannel channel = @@ -1877,10 +2015,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo Number identifierArg = (Number) args.get(0); Number observerIdentifierArg = (Number) args.get(1); try { - api.observe((identifierArg == null) ? null : identifierArg.longValue(), (observerIdentifierArg == null) ? null : observerIdentifierArg.longValue()); + api.observe( + (identifierArg == null) ? null : identifierArg.longValue(), + (observerIdentifierArg == null) ? null : observerIdentifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1903,8 +2042,7 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo try { api.removeObservers((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1926,10 +2064,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable LiveDataHo Number identifierArg = (Number) args.get(0); LiveDataSupportedTypeData typeArg = (LiveDataSupportedTypeData) args.get(1); try { - Long output = api.getValue((identifierArg == null) ? null : identifierArg.longValue(), typeArg); + Long output = + api.getValue( + (identifierArg == null) ? null : identifierArg.longValue(), typeArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -1976,7 +2115,7 @@ public LiveDataFlutterApi(@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); @@ -1985,7 +2124,11 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return LiveDataFlutterApiCodec.INSTANCE; } - public void create(@NonNull Long identifierArg, @NonNull LiveDataSupportedTypeData typeArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull LiveDataSupportedTypeData typeArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.LiveDataFlutterApi.create", getCodec()); @@ -2002,7 +2145,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); @@ -2011,6 +2154,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -2019,7 +2163,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()); @@ -2031,7 +2179,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); @@ -2040,7 +2188,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 = @@ -2053,10 +2203,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; } @@ -2079,8 +2229,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; } @@ -2100,7 +2249,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); @@ -2109,7 +2258,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()); @@ -2126,7 +2281,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); @@ -2135,12 +2290,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/LiveDataHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java index 175d8a6e5852..7061ef79a256 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java @@ -14,7 +14,6 @@ import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataHostApi; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedType; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.LiveDataSupportedTypeData; - import java.util.Objects; /** @@ -65,7 +64,7 @@ public void removeObservers(@NonNull Long identifier) { } @Override - @Nullable + @Nullable public Long getValue(@NonNull Long identifier, @NonNull LiveDataSupportedTypeData type) { Object value = getLiveDataInstance(identifier).getValue(); if (value == null) { @@ -73,17 +72,24 @@ public Long getValue(@NonNull Long identifier, @NonNull LiveDataSupportedTypeDat } LiveDataSupportedType valueType = type.getValue(); - switch(valueType) { + switch (valueType) { case CAMERA_STATE: CameraState cameraState = (CameraState) value; - new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager).create(cameraState, CameraStateFlutterApiWrapper.getCameraStateType(cameraState.getType()), cameraState.getError(), reply -> {}); + new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager) + .create( + cameraState, + CameraStateFlutterApiWrapper.getCameraStateType(cameraState.getType()), + cameraState.getError(), + reply -> {}); return instanceManager.getIdentifierForStrongReference(cameraState); case ZOOM_STATE: ZoomState zoomState = (ZoomState) value; - new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager).create(zoomState, reply -> {}); + new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager) + .create(zoomState, reply -> {}); return instanceManager.getIdentifierForStrongReference(zoomState); default: - throw new IllegalArgumentException("The type of LiveData whose value was requested is not supported."); + throw new IllegalArgumentException( + "The type of LiveData whose value was requested is not supported."); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java index 8d3f2e532f16..d98f59d52d36 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java @@ -20,6 +20,9 @@ * arguments of callbacks methods to a Dart instance. */ public class ObserverFlutterApiWrapper { + + private static final String TAG = "ObserverFlutterApiWrapper"; + private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; private ObserverFlutterApi observerFlutterApi; @@ -69,14 +72,21 @@ public void onChanged( zoomStateFlutterApiImpl = new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager); } zoomStateFlutterApiImpl.create(state, reply -> {}); - } - else { + } else { throw new UnsupportedOperationException( "The type of value in observance is not wrapped by this plugin."); } + Long observerIdentifier = instanceManager.getIdentifierForStrongReference(instance); + if (observerIdentifier == null) { + Log.e( + TAG, + "The Observer that just received a callback has been garbage collected. Please create a new instance to receive any further data changes"); + return; + } + observerFlutterApi.onChanged( - Objects.requireNonNull(instanceManager.getIdentifierForStrongReference(instance)), + Objects.requireNonNull(observerIdentifier), instanceManager.getIdentifierForStrongReference(value), callback); } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java index e593cfbbe1cd..9514b416f6c7 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -89,46 +89,47 @@ public void removeObservers_makesCallToRemoveObserversFromLiveDataInstance() { @SuppressWarnings("unchecked") public void getValue_returnsExpectedValue() { final LiveDataHostApiImpl hostApi = - new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); + new LiveDataHostApiImpl(mockBinaryMessenger, instanceManager); for (LiveDataSupportedType supportedType : LiveDataSupportedType.values()) { - LiveDataSupportedTypeData typeData = new LiveDataSupportedTypeData.Builder().setValue(supportedType).build(); - - switch(supportedType) { - case CAMERA_STATE: - CameraState mockCameraState = mock(CameraState.class); - final Long mockCameraStateIdentifier = 56L; - final long instanceIdentifier = 33; - - instanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); - instanceManager.addDartCreatedInstance(mockCameraState, mockCameraStateIdentifier); - - when(mockLiveData.getValue()).thenReturn(mockCameraState); - when(mockCameraState.getType()).thenReturn(CameraState.Type.CLOSED); - when(mockCameraState.getError()).thenReturn(null); - - assertEquals(hostApi.getValue(instanceIdentifier, typeData), mockCameraStateIdentifier); - break; - case ZOOM_STATE: - final LiveData mockLiveZoomState = (LiveData) mock(LiveData.class); - ZoomState mockZoomState = mock(ZoomState.class); - final Long mockLiveZoomStateIdentifier = 22L; - final Long mockZoomStateIdentifier = 8L; - - when(mockLiveZoomState.getValue()).thenReturn(mockZoomState); - instanceManager.addDartCreatedInstance(mockLiveZoomState, mockLiveZoomStateIdentifier); - instanceManager.addDartCreatedInstance(mockZoomState, mockZoomStateIdentifier); - - assertEquals(hostApi.getValue(mockLiveZoomStateIdentifier, typeData), mockZoomStateIdentifier); - break; - default: - // There is a LiveDataSupportedType untested by this method. - fail(); - } + LiveDataSupportedTypeData typeData = + new LiveDataSupportedTypeData.Builder().setValue(supportedType).build(); + + switch (supportedType) { + case CAMERA_STATE: + CameraState mockCameraState = mock(CameraState.class); + final Long mockCameraStateIdentifier = 56L; + final long instanceIdentifier = 33; + + instanceManager.addDartCreatedInstance(mockLiveData, instanceIdentifier); + instanceManager.addDartCreatedInstance(mockCameraState, mockCameraStateIdentifier); + + when(mockLiveData.getValue()).thenReturn(mockCameraState); + when(mockCameraState.getType()).thenReturn(CameraState.Type.CLOSED); + when(mockCameraState.getError()).thenReturn(null); + + assertEquals(hostApi.getValue(instanceIdentifier, typeData), mockCameraStateIdentifier); + break; + case ZOOM_STATE: + final LiveData mockLiveZoomState = (LiveData) mock(LiveData.class); + ZoomState mockZoomState = mock(ZoomState.class); + final Long mockLiveZoomStateIdentifier = 22L; + final Long mockZoomStateIdentifier = 8L; + + when(mockLiveZoomState.getValue()).thenReturn(mockZoomState); + instanceManager.addDartCreatedInstance(mockLiveZoomState, mockLiveZoomStateIdentifier); + instanceManager.addDartCreatedInstance(mockZoomState, mockZoomStateIdentifier); + + assertEquals( + hostApi.getValue(mockLiveZoomStateIdentifier, typeData), mockZoomStateIdentifier); + break; + default: + // There is a LiveDataSupportedType untested by this method. + fail(); + } } } - @Test public void flutterApiCreate_makesCallToDartToCreateInstance() { final LiveDataFlutterApiWrapper flutterApi = 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 fea7df6e2060..9e558e46f284 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 @@ -164,8 +164,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', @@ -221,7 +220,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, @@ -231,7 +231,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, @@ -368,7 +368,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, @@ -378,7 +379,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, @@ -405,8 +406,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', @@ -423,12 +424,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', @@ -456,7 +458,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, @@ -466,7 +469,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, @@ -494,8 +497,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', @@ -519,7 +521,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?; @@ -544,12 +547,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', @@ -576,7 +584,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', @@ -602,8 +611,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', @@ -648,7 +657,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, @@ -658,7 +668,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, @@ -724,7 +734,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, @@ -752,7 +762,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); @@ -770,9 +780,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?; @@ -792,12 +804,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', @@ -816,10 +831,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', @@ -844,17 +859,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, @@ -873,7 +890,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, @@ -904,9 +921,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); @@ -924,12 +941,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', @@ -977,8 +996,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', @@ -1038,7 +1056,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); @@ -1056,12 +1074,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', @@ -1082,8 +1102,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', @@ -1143,7 +1163,7 @@ class _CameraStateFlutterApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraStateTypeData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1156,7 +1176,8 @@ abstract class CameraStateFlutterApi { void create(int identifier, CameraStateTypeData type, int? errorIdentifier); - static void setup(CameraStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraStateFlutterApi.create', codec, @@ -1166,12 +1187,13 @@ abstract class CameraStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.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.CameraStateFlutterApi.create was null, expected non-null int.'); - final CameraStateTypeData? arg_type = (args[1] as CameraStateTypeData?); + final CameraStateTypeData? arg_type = + (args[1] as CameraStateTypeData?); assert(arg_type != null, 'Argument for dev.flutter.pigeon.CameraStateFlutterApi.create was null, expected non-null CameraStateTypeData.'); final int? arg_errorIdentifier = (args[2] as int?); @@ -1198,7 +1220,7 @@ class _ExposureStateFlutterApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ExposureCompensationRange.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1209,9 +1231,13 @@ class _ExposureStateFlutterApiCodec extends StandardMessageCodec { abstract class ExposureStateFlutterApi { static const MessageCodec codec = _ExposureStateFlutterApiCodec(); - void create(int identifier, ExposureCompensationRange exposureCompensationRange, double exposureCompensationStep); + void create( + int identifier, + ExposureCompensationRange exposureCompensationRange, + double exposureCompensationStep); - static void setup(ExposureStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ExposureStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ExposureStateFlutterApi.create', codec, @@ -1221,18 +1247,20 @@ abstract class ExposureStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.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.ExposureStateFlutterApi.create was null, expected non-null int.'); - final ExposureCompensationRange? arg_exposureCompensationRange = (args[1] as ExposureCompensationRange?); + final ExposureCompensationRange? arg_exposureCompensationRange = + (args[1] as ExposureCompensationRange?); assert(arg_exposureCompensationRange != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null ExposureCompensationRange.'); final double? arg_exposureCompensationStep = (args[2] as double?); assert(arg_exposureCompensationStep != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null double.'); - api.create(arg_identifier!, arg_exposureCompensationRange!, arg_exposureCompensationStep!); + api.create(arg_identifier!, arg_exposureCompensationRange!, + arg_exposureCompensationStep!); return; }); } @@ -1245,7 +1273,8 @@ abstract class ZoomStateFlutterApi { void create(int identifier, double minZoomRatio, double maxZoomRatio); - static void setup(ZoomStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ZoomStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ZoomStateFlutterApi.create', codec, @@ -1255,7 +1284,7 @@ abstract class ZoomStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1289,7 +1318,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); @@ -1307,12 +1336,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', @@ -1329,12 +1360,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', @@ -1445,7 +1478,8 @@ abstract class ObserverFlutterApi { void onChanged(int identifier, int valueIdentifier); - static void setup(ObserverFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ObserverFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ObserverFlutterApi.onChanged', codec, @@ -1455,7 +1489,7 @@ abstract class ObserverFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ObserverFlutterApi.onChanged was null.'); + 'Argument for dev.flutter.pigeon.ObserverFlutterApi.onChanged was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1476,7 +1510,8 @@ abstract class CameraStateErrorFlutterApi { void create(int identifier, int code); - static void setup(CameraStateErrorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(CameraStateErrorFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraStateErrorFlutterApi.create', codec, @@ -1486,7 +1521,7 @@ abstract class CameraStateErrorFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraStateErrorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1517,7 +1552,7 @@ class _LiveDataHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return LiveDataSupportedTypeData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1540,7 +1575,8 @@ class LiveDataHostApi { 'dev.flutter.pigeon.LiveDataHostApi.observe', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_observerIdentifier]) as List?; + await channel.send([arg_identifier, arg_observerIdentifier]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1579,12 +1615,13 @@ class LiveDataHostApi { } } - Future getValue(int arg_identifier, LiveDataSupportedTypeData arg_type) async { + Future getValue( + int arg_identifier, LiveDataSupportedTypeData arg_type) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveDataHostApi.getValue', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_type]) as List?; + final List? replyList = await channel + .send([arg_identifier, arg_type]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -1617,7 +1654,7 @@ class _LiveDataFlutterApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return LiveDataSupportedTypeData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1630,7 +1667,8 @@ abstract class LiveDataFlutterApi { void create(int identifier, LiveDataSupportedTypeData type); - static void setup(LiveDataFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(LiveDataFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveDataFlutterApi.create', codec, @@ -1640,12 +1678,13 @@ abstract class LiveDataFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.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.LiveDataFlutterApi.create was null, expected non-null int.'); - final LiveDataSupportedTypeData? arg_type = (args[1] as LiveDataSupportedTypeData?); + final LiveDataSupportedTypeData? arg_type = + (args[1] as LiveDataSupportedTypeData?); assert(arg_type != null, 'Argument for dev.flutter.pigeon.LiveDataFlutterApi.create was null, expected non-null LiveDataSupportedTypeData.'); api.create(arg_identifier!, arg_type!); @@ -1663,7 +1702,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, @@ -1673,7 +1713,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, @@ -1692,7 +1732,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, @@ -1773,7 +1813,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, @@ -1783,7 +1824,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, @@ -1810,7 +1851,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, @@ -1820,7 +1862,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, @@ -1834,7 +1876,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/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index 6b5dfe4509bd..afbcc7eb1d4e 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,7 +80,8 @@ 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); @@ -81,17 +92,22 @@ abstract class TestCameraInfoHostApi { int getZoomState(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, @@ -106,11 +122,14 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getCameraState', 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.getCameraState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getCameraState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -125,11 +144,14 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getExposureState', 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.getExposureState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getExposureState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -144,11 +166,14 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getZoomState', 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.getZoomState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getZoomState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -162,24 +187,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, @@ -195,19 +225,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]; }); } @@ -216,14 +251,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); @@ -231,15 +268,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]; @@ -248,33 +289,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, @@ -282,10 +332,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]; }); } @@ -295,11 +347,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, @@ -307,7 +362,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]; }); } @@ -317,16 +373,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!); @@ -339,11 +399,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, @@ -357,22 +420,27 @@ abstract class TestProcessCameraProviderHostApi { } abstract class TestCameraHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getCameraInfo(int identifier); - static void setup(TestCameraHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', 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.CameraHostApi.getCameraInfo was null.'); + 'Argument for dev.flutter.pigeon.CameraHostApi.getCameraInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -400,7 +468,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); @@ -409,45 +477,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, @@ -455,19 +536,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 []; @@ -495,9 +581,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); @@ -506,7 +592,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); @@ -517,23 +604,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 []; }); @@ -544,11 +636,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, @@ -560,12 +655,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 []; @@ -577,11 +676,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, @@ -609,7 +711,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); @@ -618,7 +720,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); @@ -627,23 +730,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 []; }); @@ -654,11 +762,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, @@ -676,11 +787,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, @@ -708,7 +822,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); @@ -717,7 +831,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); @@ -726,22 +841,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 []; }); @@ -752,11 +872,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, @@ -774,11 +897,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, @@ -792,22 +918,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, @@ -821,22 +952,27 @@ abstract class TestAnalyzerHostApi { } abstract class TestObserverHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void create(int identifier); - static void setup(TestObserverHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestObserverHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ObserverHostApi.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.ObserverHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ObserverHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -864,7 +1000,7 @@ class _TestLiveDataHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return LiveDataSupportedTypeData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -873,7 +1009,8 @@ class _TestLiveDataHostApiCodec extends StandardMessageCodec { } abstract class TestLiveDataHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestLiveDataHostApiCodec(); void observe(int identifier, int observerIdentifier); @@ -882,17 +1019,21 @@ abstract class TestLiveDataHostApi { int? getValue(int identifier, LiveDataSupportedTypeData type); - static void setup(TestLiveDataHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestLiveDataHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.LiveDataHostApi.observe', 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.LiveDataHostApi.observe was null.'); + 'Argument for dev.flutter.pigeon.LiveDataHostApi.observe was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -910,11 +1051,14 @@ abstract class TestLiveDataHostApi { 'dev.flutter.pigeon.LiveDataHostApi.removeObservers', 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.LiveDataHostApi.removeObservers was null.'); + 'Argument for dev.flutter.pigeon.LiveDataHostApi.removeObservers was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -929,16 +1073,20 @@ abstract class TestLiveDataHostApi { 'dev.flutter.pigeon.LiveDataHostApi.getValue', 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.LiveDataHostApi.getValue was null.'); + 'Argument for dev.flutter.pigeon.LiveDataHostApi.getValue 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.LiveDataHostApi.getValue was null, expected non-null int.'); - final LiveDataSupportedTypeData? arg_type = (args[1] as LiveDataSupportedTypeData?); + final LiveDataSupportedTypeData? arg_type = + (args[1] as LiveDataSupportedTypeData?); assert(arg_type != null, 'Argument for dev.flutter.pigeon.LiveDataHostApi.getValue was null, expected non-null LiveDataSupportedTypeData.'); final int? output = api.getValue(arg_identifier!, arg_type!); @@ -950,24 +1098,29 @@ abstract class TestLiveDataHostApi { } 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, @@ -982,11 +1135,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 04976ec68dcfd9e741cc09f08c1fb57ba55d0a1f Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 2 May 2023 16:23:03 -0700 Subject: [PATCH 59/71] Add period --- .../camerax/CameraAndroidCameraxPlugin.java | 1 - .../plugins/camerax/CameraInfoHostApiImpl.java | 4 ++-- .../camerax/CameraStateFlutterApiWrapper.java | 6 +++--- .../camerax/LiveDataFlutterApiWrapper.java | 6 +----- .../camerax/ObserverFlutterApiWrapper.java | 11 ++++------- .../plugins/camerax/ObserverHostApiImpl.java | 7 +------ .../lib/src/android_camera_camerax.dart | 6 +++--- .../lib/src/camera_info.dart | 4 ++-- .../camera_android_camerax/lib/src/observer.dart | 2 ++ .../lib/src/system_services.dart | 3 --- .../pigeons/camerax_library.dart | 16 ++++++++++++++++ 11 files changed, 34 insertions(+), 32 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 23ef4ff6ed98..384d70a50200 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 @@ -108,7 +108,6 @@ public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBi if (activity instanceof LifecycleOwner) { processCameraProviderHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); liveDataHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); - } else { ProxyLifecycleProvider proxyLifecycleProvider = new ProxyLifecycleProvider(activity); processCameraProviderHostApiImpl.setLifecycleOwner(proxyLifecycleProvider); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index 444e9159e30d..e72d08da34d1 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -76,8 +76,8 @@ public Long getExposureState(@NonNull Long identifier) { } /** - * Retrieves the current {@link ZoomState} value of the {@link CameraInfo} with the specified - * identifier. + * Retrieves the {@link LiveData} of the {@link ZoomState} of the {@link CameraInfo} with the + * specified identifier. */ @NonNull @Override diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java index e6e83c4af995..a161a7c2bd06 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java @@ -52,8 +52,8 @@ public void create( } if (error != null) { - // We need to create a CameraStateError if there is a problem with the current camera - // state to send to the Dart side. + // if there is a problem with the current camera state, we need to create a CameraStateError + // to send to the Dart side. new CameraStateErrorFlutterApiWrapper(binaryMessenger, instanceManager) .create(error, Long.valueOf(error.getCode()), reply -> {}); } @@ -65,7 +65,7 @@ public void create( callback); } - /** Convert CameraX CameraState.Type to CameraStateType that the Dart side understands. */ + /** Converts CameraX CameraState.Type to CameraStateType that the Dart side understands. */ public static CameraStateType getCameraStateType(@NonNull CameraState.Type type) { CameraStateType cameraStateType = null; switch (type) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java index 50b10fc76204..35af27ce6cc3 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataFlutterApiWrapper.java @@ -53,11 +53,7 @@ public void create( } } - /** - * Sets the Flutter API used to send messages to Dart. - * - *

This is only visible for testing. - */ + /** Sets the Flutter API used to send messages to Dart. */ @VisibleForTesting void setApi(@NonNull LiveDataFlutterApi api) { this.liveDataFlutterApi = api; diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java index d98f59d52d36..3f1eb4ba925b 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java @@ -4,6 +4,7 @@ package io.flutter.plugins.camerax; +import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.camera.core.CameraState; @@ -74,14 +75,14 @@ public void onChanged( zoomStateFlutterApiImpl.create(state, reply -> {}); } else { throw new UnsupportedOperationException( - "The type of value in observance is not wrapped by this plugin."); + "The type of value that was observed is not handled by this plugin."); } Long observerIdentifier = instanceManager.getIdentifierForStrongReference(instance); if (observerIdentifier == null) { Log.e( TAG, - "The Observer that just received a callback has been garbage collected. Please create a new instance to receive any further data changes"); + "The Observer that received a callback has been garbage collected. Please create a new instance to receive any further data changes."); return; } @@ -91,11 +92,7 @@ public void onChanged( callback); } - /** - * Sets the Flutter API used to send messages to Dart. - * - *

This is only visible for testing. - */ + /** Sets the Flutter API used to send messages to Dart. */ @VisibleForTesting void setApi(@NonNull ObserverFlutterApi api) { this.observerFlutterApi = api; diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java index 963c0df5a22c..333607e4165e 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverHostApiImpl.java @@ -54,11 +54,7 @@ public void onChanged(T value) { observerFlutterApiWrapper.onChanged(this, value, reply -> {}); } - /** - * Flutter API used to send messages back to Dart. - * - *

This is only visible for testing. - */ + /** Flutter API used to send messages back to Dart. */ @VisibleForTesting void setApi(@NonNull ObserverFlutterApiWrapper api) { this.observerFlutterApiWrapper = api; @@ -73,7 +69,6 @@ void setApi(@NonNull ObserverFlutterApiWrapper api) { */ public ObserverHostApiImpl( @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { - this(binaryMessenger, instanceManager, new ObserverProxy()); } 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 ef3ad3ca54b0..023183872ce7 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 @@ -91,7 +91,7 @@ class AndroidCameraCameraX extends CameraPlatform { cameraEventStreamController.stream .where((CameraEvent event) => event.cameraId == cameraId); - /// Conditional used to create detached [Observer]s for testing their + /// Conditional used to create detached objects for testing their /// callback methods. @visibleForTesting bool createDetachedObjectForTesting = false; @@ -338,7 +338,7 @@ class AndroidCameraCameraX extends CameraPlatform { if (zoomState == null) { throw CameraException( 'zoomStateNotSet', - 'No explicit zoomState has been set on the LiveData instance for the camera in use.', + 'No explicit ZoomState has been set on the LiveData instance for the camera in use.', ); } return zoomState.maxZoomRatio; @@ -355,7 +355,7 @@ class AndroidCameraCameraX extends CameraPlatform { if (zoomState == null) { throw CameraException( 'zoomStateNotSet', - 'No explicit zoomState has been set on the LiveData instance for the camera in use.', + 'No explicit ZoomState has been set on the LiveData instance for the camera in use.', ); } return zoomState.minZoomRatio; diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index 012d01943aca..6c2d06ee502b 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -44,7 +44,7 @@ class CameraInfo extends JavaObject { Future getExposureState() => _api.getExposureStateFromInstance(this); - /// Gets the zoom state of the camera. + /// Gets the live zoom state of the camera. Future> getZoomState() => _api.getZoomStateFromInstance(this); } @@ -93,7 +93,7 @@ class _CameraInfoHostApiImpl extends CameraInfoHostApi { .getInstanceWithWeakReference(exposureStateIdentifier)!; } - /// Gets the [ZoomState] of the specified [CameraInfo] instance. + /// Gets the [LiveData] of the specified [CameraInfo] instance. Future> getZoomStateFromInstance( CameraInfo instance) async { final int? identifier = instanceManager.getIdentifier(instance); diff --git a/packages/camera/camera_android_camerax/lib/src/observer.dart b/packages/camera/camera_android_camerax/lib/src/observer.dart index 70ae0dbb507f..ae8c58670766 100644 --- a/packages/camera/camera_android_camerax/lib/src/observer.dart +++ b/packages/camera/camera_android_camerax/lib/src/observer.dart @@ -118,6 +118,8 @@ class ObserverFlutterApiImpl implements ObserverFlutterApi { final Observer instance = _instanceManager.getInstanceWithWeakReference(identifier)!; + // This call is safe because the onChanged callback will check the type + // of the instance to ensure it is expected before proceeding. // ignore: avoid_dynamic_calls, void_checks instance.onChanged( _instanceManager.getInstanceWithWeakReference(valueIdentifier)!, diff --git a/packages/camera/camera_android_camerax/lib/src/system_services.dart b/packages/camera/camera_android_camerax/lib/src/system_services.dart index 8cb2dc835318..582e4c5810c7 100644 --- a/packages/camera/camera_android_camerax/lib/src/system_services.dart +++ b/packages/camera/camera_android_camerax/lib/src/system_services.dart @@ -95,9 +95,6 @@ class SystemServicesHostApiImpl extends SystemServicesHostApi { /// Flutter API implementation of [SystemServices]. class SystemServicesFlutterApiImpl implements SystemServicesFlutterApi { /// Constructs an [SystemServicesFlutterApiImpl]. - /// - /// If [binaryMessenger] is null, the default [BinaryMessenger] will be used, - /// which routes to the host platform. SystemServicesFlutterApiImpl(); /// Callback method for any changes in device orientation. diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index a1662d06d3fc..d3a286e6c7fc 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -61,6 +61,22 @@ class CameraStateTypeData { late CameraStateType value; } +/// The types (T) properly wrapped to be used as a LiveData. +/// +/// If you need to add another type to support a type S to use a LiveData in +/// this plugin, ensure the following is done on the Dart side: +/// +/// * In `../lib/src/live_data.dart`, add new cases for S in +/// `_LiveDataHostApiImpl#getValueFromInstances` to get the current value of +/// type S from a LiveData instance and in `LiveDataFlutterApiImpl#create` +/// to create the expected type of LiveData when requested. +/// +/// On the native side, ensure the following is done: +/// +/// * Update `LiveDataHostApiImpl#getValue` is updated to properly return +/// identifiers for instances of type S. +/// * Update `ObserverFlutterApiWrapper#onChanged` to properly handle receiving +/// calls with instances of type S if a LiveData instance is observed. enum LiveDataSupportedType { cameraState, zoomState, From bca72ee8da7da58cbbb2de3ba23f0bb9227b3bd8 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 2 May 2023 16:37:56 -0700 Subject: [PATCH 60/71] Fix android test errors --- .../flutter/plugins/camerax/CameraAndroidCameraxPlugin.java | 4 ++-- .../plugins/camerax/CameraStateFlutterApiWrapper.java | 1 + .../flutter/plugins/camerax/ObserverFlutterApiWrapper.java | 6 +++--- 3 files changed, 6 insertions(+), 5 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 384d70a50200..4caf52affed4 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 @@ -23,8 +23,8 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, Activity private ImageCaptureHostApiImpl imageCaptureHostApiImpl; public SystemServicesHostApiImpl systemServicesHostApiImpl; - @VisibleForTesting public ProcessCameraProviderHostApiImpl processCameraProviderHostApiImpl; - @VisibleForTesting public LiveDataHostApiImpl liveDataHostApiImpl; + @VisibleForTesting @NonNull public ProcessCameraProviderHostApiImpl processCameraProviderHostApiImpl; + @VisibleForTesting @NonNull public LiveDataHostApiImpl liveDataHostApiImpl; /** * Initialize this within the {@code #configureFlutterEngine} of a Flutter activity or fragment. diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java index a161a7c2bd06..cb1c30ad424e 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateFlutterApiWrapper.java @@ -66,6 +66,7 @@ public void create( } /** Converts CameraX CameraState.Type to CameraStateType that the Dart side understands. */ + @NonNull public static CameraStateType getCameraStateType(@NonNull CameraState.Type type) { CameraStateType cameraStateType = null; switch (type) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java index 3f1eb4ba925b..36968259af69 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java @@ -22,14 +22,14 @@ */ public class ObserverFlutterApiWrapper { - private static final String TAG = "ObserverFlutterApiWrapper"; + private static final String TAG = "ObserverFlutterApi"; private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; private ObserverFlutterApi observerFlutterApi; - @VisibleForTesting public CameraStateFlutterApiWrapper cameraStateFlutterApiWrapper; - @VisibleForTesting public ZoomStateFlutterApiImpl zoomStateFlutterApiImpl; + @VisibleForTesting @Nullable public CameraStateFlutterApiWrapper cameraStateFlutterApiWrapper; + @VisibleForTesting @Nullable public ZoomStateFlutterApiImpl zoomStateFlutterApiImpl; /** * Constructs a {@link ObserverFlutterApiWrapper}. From ea78ab011020da09cf3fbacb7f2b32561fa8eb79 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 2 May 2023 17:04:50 -0700 Subject: [PATCH 61/71] fix tests --- .../flutter/plugins/camerax/CameraAndroidCameraxPlugin.java | 1 + .../camera/camera_android_camerax/test/camera_state_test.dart | 4 ++++ 2 files changed, 5 insertions(+) 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 4caf52affed4..227e26298c72 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 @@ -7,6 +7,7 @@ import android.app.Activity; import android.content.Context; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.lifecycle.LifecycleOwner; import io.flutter.embedding.engine.plugins.FlutterPlugin; diff --git a/packages/camera/camera_android_camerax/test/camera_state_test.dart b/packages/camera/camera_android_camerax/test/camera_state_test.dart index 9265cee4d579..3cc019c6548f 100644 --- a/packages/camera/camera_android_camerax/test/camera_state_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_state_test.dart @@ -9,12 +9,16 @@ import 'package:camera_android_camerax/src/instance_manager.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; +import 'camera_state_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('CameraState', () { tearDown(() { TestInstanceManagerHostApi.setup(null); From d0b160f4ed4eb81fcb8962aa99af437c7484eb70 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 2 May 2023 17:05:21 -0700 Subject: [PATCH 62/71] Formatting --- .../flutter/plugins/camerax/CameraAndroidCameraxPlugin.java | 5 +++-- 1 file changed, 3 insertions(+), 2 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 227e26298c72..423fc9bb2ef6 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 @@ -7,7 +7,6 @@ import android.app.Activity; import android.content.Context; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.lifecycle.LifecycleOwner; import io.flutter.embedding.engine.plugins.FlutterPlugin; @@ -24,7 +23,9 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, Activity private ImageCaptureHostApiImpl imageCaptureHostApiImpl; public SystemServicesHostApiImpl systemServicesHostApiImpl; - @VisibleForTesting @NonNull public ProcessCameraProviderHostApiImpl processCameraProviderHostApiImpl; + @VisibleForTesting @NonNull + public ProcessCameraProviderHostApiImpl processCameraProviderHostApiImpl; + @VisibleForTesting @NonNull public LiveDataHostApiImpl liveDataHostApiImpl; /** From bc7ebee86e8eb444740a87fcdfed617ee1d5da7d Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 3 May 2023 08:46:18 -0700 Subject: [PATCH 63/71] Fix tests --- .../plugins/camerax/ObserverFlutterApiWrapper.java | 1 + .../camera_android_camerax/test/exposure_state_test.dart | 8 ++++++-- .../camera_android_camerax/test/zoom_state_test.dart | 8 +++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java index 36968259af69..770c9fb3be0f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java @@ -6,6 +6,7 @@ import android.util.Log; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.camera.core.CameraState; import androidx.camera.core.ZoomState; diff --git a/packages/camera/camera_android_camerax/test/exposure_state_test.dart b/packages/camera/camera_android_camerax/test/exposure_state_test.dart index a5897f10c44c..e6eaef5d816b 100644 --- a/packages/camera/camera_android_camerax/test/exposure_state_test.dart +++ b/packages/camera/camera_android_camerax/test/exposure_state_test.dart @@ -6,15 +6,19 @@ import 'package:camera_android_camerax/src/camerax_library.g.dart'; import 'package:camera_android_camerax/src/exposure_state.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'exposure_state_test.mocks.dart'; import 'test_camerax_library.g.dart'; +@GenerateMocks([TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); - group('ExposureState', () { - tearDown(() => TestCameraInfoHostApi.setup(null)); + // Mocks the call to clear the native InstanceManager. + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + group('ExposureState', () { test('flutterApi create makes call to create expected ExposureState', () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, diff --git a/packages/camera/camera_android_camerax/test/zoom_state_test.dart b/packages/camera/camera_android_camerax/test/zoom_state_test.dart index 7adc7b23b93b..60ea85b5a221 100644 --- a/packages/camera/camera_android_camerax/test/zoom_state_test.dart +++ b/packages/camera/camera_android_camerax/test/zoom_state_test.dart @@ -5,14 +5,20 @@ import 'package:camera_android_camerax/src/instance_manager.dart'; import 'package:camera_android_camerax/src/zoom_state.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; import 'test_camerax_library.g.dart'; +import 'zoom_state_test.mocks.dart'; +@GenerateMocks([TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); + // Mocks the call to clear the native InstanceManager. + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + group('ZoomState', () { - tearDown(() => TestCameraInfoHostApi.setup(null)); + tearDown(() => TestInstanceManagerHostApi.setup(null)); test('flutterApi create makes call to create expected ZoomState', () { final InstanceManager instanceManager = InstanceManager( From 9014d3b69d68dc36f0e94fcddb5bc6f6e94cc90e Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 3 May 2023 10:02:13 -0700 Subject: [PATCH 64/71] Add mock files --- .../test/exposure_state_test.mocks.dart | 38 +++++++++++++++++++ .../test/zoom_state_test.mocks.dart | 38 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 packages/camera/camera_android_camerax/test/exposure_state_test.mocks.dart create mode 100644 packages/camera/camera_android_camerax/test/zoom_state_test.mocks.dart diff --git a/packages/camera/camera_android_camerax/test/exposure_state_test.mocks.dart b/packages/camera/camera_android_camerax/test/exposure_state_test.mocks.dart new file mode 100644 index 000000000000..24445e698061 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/exposure_state_test.mocks.dart @@ -0,0 +1,38 @@ +// Mocks generated by Mockito 5.4.0 from annotations +// in camera_android_camerax/test/exposure_state_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, + ); +} diff --git a/packages/camera/camera_android_camerax/test/zoom_state_test.mocks.dart b/packages/camera/camera_android_camerax/test/zoom_state_test.mocks.dart new file mode 100644 index 000000000000..cb52f890e53b --- /dev/null +++ b/packages/camera/camera_android_camerax/test/zoom_state_test.mocks.dart @@ -0,0 +1,38 @@ +// Mocks generated by Mockito 5.4.0 from annotations +// in camera_android_camerax/test/zoom_state_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 f3d6a06590772ebcca52cc19e5cb400f7bf1d891 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 3 May 2023 14:23:00 -0700 Subject: [PATCH 65/71] Addres test comments --- .../plugins/camerax/CameraStateTest.java | 3 +-- .../flutter/plugins/camerax/ObserverTest.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java index c02cd24fbc90..e2773fee1b57 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java @@ -95,8 +95,7 @@ public void getCameraStateType_returnsExpectedType() { CameraStateFlutterApiWrapper.getCameraStateType(type), CameraStateType.PENDING_OPEN); break; default: - // There is a CameraState.Type unhandled by this test. - fail(); + fail("The CameraState.Type " + type.toString() + " is unhandled by this test."); } } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java index 91a223b228c0..4db0809b7cc6 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java @@ -5,6 +5,7 @@ package io.flutter.plugins.camerax; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -47,7 +48,6 @@ public void tearDown() { } @Test - @SuppressWarnings({"rawtypes", "unchecked"}) public void create_createsObserverInstance() { final ObserverHostApiImpl hostApi = new ObserverHostApiImpl(mockBinaryMessenger, instanceManager, mockProxy); @@ -113,4 +113,20 @@ public void onChanged_makesExpectedCallToDartCallbackForZoomState() { verify(mockFlutterApi).onChanged(eq(instanceIdentifier), eq(mockZoomStateIdentifier), any()); verify(mockZoomStateFlutterApiImpl).create(eq(mockZoomState), any()); } + + @Test + public void onChanged_throwsExceptionForUnsupportedLiveDataType() { + final ObserverFlutterApiWrapper flutterApi = + new ObserverFlutterApiWrapper(mockBinaryMessenger, instanceManager); + final ObserverHostApiImpl.ObserverImpl instance = + new ObserverHostApiImpl.ObserverImpl(mockBinaryMessenger, instanceManager); + final long instanceIdentifier = 2; + + flutterApi.setApi(mockFlutterApi); + instance.setApi(flutterApi); + + instanceManager.addDartCreatedInstance(instance, instanceIdentifier); + + assertThrows(UnsupportedOperationException.class, () -> instance.onChanged(mock(Object.class))); + } } From 34cab98acb7a1df263ef191af64589699a5fefe4 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 3 May 2023 14:56:09 -0700 Subject: [PATCH 66/71] Address rest of review --- .../plugins/camerax/LiveDataHostApiImpl.java | 31 ++++++----- .../camerax/ObserverFlutterApiWrapper.java | 53 +++++++++++-------- .../flutter/plugins/camerax/LiveDataTest.java | 6 ++- 3 files changed, 55 insertions(+), 35 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java index 7061ef79a256..3e9e595d4b0f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/LiveDataHostApiImpl.java @@ -74,25 +74,32 @@ public Long getValue(@NonNull Long identifier, @NonNull LiveDataSupportedTypeDat LiveDataSupportedType valueType = type.getValue(); switch (valueType) { case CAMERA_STATE: - CameraState cameraState = (CameraState) value; - new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager) - .create( - cameraState, - CameraStateFlutterApiWrapper.getCameraStateType(cameraState.getType()), - cameraState.getError(), - reply -> {}); - return instanceManager.getIdentifierForStrongReference(cameraState); + return createCameraState((CameraState) value); case ZOOM_STATE: - ZoomState zoomState = (ZoomState) value; - new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager) - .create(zoomState, reply -> {}); - return instanceManager.getIdentifierForStrongReference(zoomState); + return createZoomState((ZoomState) value); default: throw new IllegalArgumentException( "The type of LiveData whose value was requested is not supported."); } } + /** Creates a {@link CameraState} on the Dart side and returns its identifier. */ + private Long createCameraState(CameraState cameraState) { + new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager) + .create( + cameraState, + CameraStateFlutterApiWrapper.getCameraStateType(cameraState.getType()), + cameraState.getError(), + reply -> {}); + return instanceManager.getIdentifierForStrongReference(cameraState); + } + + /** Creates a {@link ZoomState} on the Dart side and returns its identifiers. */ + private Long createZoomState(ZoomState zoomState) { + new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager).create(zoomState, reply -> {}); + return instanceManager.getIdentifierForStrongReference(zoomState); + } + /** Retrieves the {@link LiveData} instance that has the specified identifier. */ private LiveData getLiveDataInstance(@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/ObserverFlutterApiWrapper.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java index 770c9fb3be0f..f514ddbf86df 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ObserverFlutterApiWrapper.java @@ -49,31 +49,21 @@ public ObserverFlutterApiWrapper( * Sends a message to Dart to call {@link Observer.onChanged} on the Dart object representing * {@code instance}. */ - public void onChanged( - @NonNull Observer instance, - @NonNull Object value, + public void onChanged( + @NonNull Observer instance, + @NonNull T value, @NonNull ObserverFlutterApi.Reply callback) { - // Cast value to type of data that is being observed if supported by this plugin. + // Cast value to type of data that is being observed and create it on the Dart side + // if supported by this plugin. + // + // The supported types can be found in GeneratedCameraXLibrary.java as the + // LiveDataSupportedType enum. To add a new type, please follow the instructions + // found in pigeons/camerax_library.dart in the documentation for LiveDataSupportedType. if (value instanceof CameraState) { - CameraState state = (CameraState) value; - - if (cameraStateFlutterApiWrapper == null) { - cameraStateFlutterApiWrapper = - new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager); - } - cameraStateFlutterApiWrapper.create( - state, - CameraStateFlutterApiWrapper.getCameraStateType(state.getType()), - state.getError(), - reply -> {}); + createCameraState((CameraState) value); } else if (value instanceof ZoomState) { - ZoomState state = (ZoomState) value; - - if (zoomStateFlutterApiImpl == null) { - zoomStateFlutterApiImpl = new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager); - } - zoomStateFlutterApiImpl.create(state, reply -> {}); + createZoomState((ZoomState) value); } else { throw new UnsupportedOperationException( "The type of value that was observed is not handled by this plugin."); @@ -93,6 +83,27 @@ public void onChanged( callback); } + /** Creates a {@link CameraState} on the Dart side. */ + private void createCameraState(CameraState cameraState) { + if (cameraStateFlutterApiWrapper == null) { + cameraStateFlutterApiWrapper = + new CameraStateFlutterApiWrapper(binaryMessenger, instanceManager); + } + cameraStateFlutterApiWrapper.create( + cameraState, + CameraStateFlutterApiWrapper.getCameraStateType(cameraState.getType()), + cameraState.getError(), + reply -> {}); + } + + /** Creates a {@link ZoomState} on the Dart side. */ + private void createZoomState(ZoomState zoomState) { + if (zoomStateFlutterApiImpl == null) { + zoomStateFlutterApiImpl = new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager); + } + zoomStateFlutterApiImpl.create(zoomState, reply -> {}); + } + /** Sets the Flutter API used to send messages to Dart. */ @VisibleForTesting void setApi(@NonNull ObserverFlutterApi api) { diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java index 9514b416f6c7..3f4ffec88187 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -124,8 +124,10 @@ public void getValue_returnsExpectedValue() { hostApi.getValue(mockLiveZoomStateIdentifier, typeData), mockZoomStateIdentifier); break; default: - // There is a LiveDataSupportedType untested by this method. - fail(); + fail( + "The LiveDataSupportedType " + + supportedType.toString() + + "is unhandled by this test."); } } } From 6f701a54be3cf8ed3e01790f7c92bb9f41011320 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 3 May 2023 16:19:24 -0700 Subject: [PATCH 67/71] Address maurice review --- .../plugins/camerax/CameraAndroidCameraxPlugin.java | 6 ++---- .../flutter/plugins/camerax/CameraStateErrorTest.java | 2 +- .../io/flutter/plugins/camerax/CameraStateTest.java | 2 +- .../java/io/flutter/plugins/camerax/LiveDataTest.java | 2 +- .../java/io/flutter/plugins/camerax/ObserverTest.java | 2 +- .../lib/src/android_camera_camerax.dart | 11 ++++++++--- 6 files changed, 14 insertions(+), 11 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 423fc9bb2ef6..fbe2b1455820 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 @@ -101,11 +101,9 @@ public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { @Override public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) { Activity activity = activityPluginBinding.getActivity(); - Context applicationContext = activity.getApplicationContext(); - setUp( - pluginBinding.getBinaryMessenger(), applicationContext, pluginBinding.getTextureRegistry()); - updateContext(applicationContext); + setUp(pluginBinding.getBinaryMessenger(), activity, pluginBinding.getTextureRegistry()); + updateContext(activity); if (activity instanceof LifecycleOwner) { processCameraProviderHostApiImpl.setLifecycleOwner((LifecycleOwner) activity); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java index a82608958522..0d07c496c8e6 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateErrorTest.java @@ -36,7 +36,7 @@ public void setUp() { @After public void tearDown() { - instanceManager.clear(); + instanceManager.stopFinalizationListener(); } @Test diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java index e2773fee1b57..726241e612cb 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraStateTest.java @@ -42,7 +42,7 @@ public void setUp() { @After public void tearDown() { - instanceManager.clear(); + instanceManager.stopFinalizationListener(); } @Test diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java index 3f4ffec88187..8002ff94de95 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/LiveDataTest.java @@ -48,7 +48,7 @@ public void setUp() { @After public void tearDown() { - instanceManager.clear(); + instanceManager.stopFinalizationListener(); } @Test diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java index 4db0809b7cc6..dc45c8903ecb 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ObserverTest.java @@ -44,7 +44,7 @@ public void setUp() { @After public void tearDown() { - instanceManager.clear(); + instanceManager.stopFinalizationListener(); } @Test 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 023183872ce7..ee537a80cb04 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 @@ -464,6 +464,8 @@ class AndroidCameraCameraX extends CameraPlatform { // Create Analyzer that can read image data for image streaming. Future analyze(ImageProxy imageProxy) async { + final WeakReference weakThis = + WeakReference(this); final List planes = await imageProxy.getPlanes(); final List cameraImagePlanes = []; for (final PlaneProxy plane in planes) { @@ -484,7 +486,7 @@ class AndroidCameraCameraX extends CameraPlatform { height: imageProxy.height, width: imageProxy.width); - cameraImageDataStreamController?.add(cameraImageData); + weakThis.target!.cameraImageDataStreamController?.add(cameraImageData); imageProxy.close(); } @@ -566,12 +568,15 @@ class AndroidCameraCameraX extends CameraPlatform { Observer _createCameraClosingObserver(int cameraId) { // Callback method used to implement the behavior described above: void onChanged(Object stateAsObject) { + final WeakReference weakThis = + WeakReference(this); final CameraState state = stateAsObject as CameraState; if (state.type == CameraStateType.closing) { - cameraEventStreamController.add(CameraClosingEvent(cameraId)); + weakThis.target!.cameraEventStreamController + .add(CameraClosingEvent(cameraId)); } if (state.error != null) { - cameraEventStreamController + weakThis.target!.cameraEventStreamController .add(CameraErrorEvent(cameraId, state.error!.getDescription())); } } From a636525ff380723bfa9d01617dca56cec581e880 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 4 May 2023 12:38:23 -0700 Subject: [PATCH 68/71] Address reviews --- .../lib/src/android_camera_camerax.dart | 47 ++++++++++++++----- .../lib/src/camera_info.dart | 3 -- .../lib/src/live_data.dart | 15 +++++- .../lib/src/observer.dart | 9 ++-- .../test/android_camera_camerax_test.dart | 39 ++++++++------- 5 files changed, 76 insertions(+), 37 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 ee537a80cb04..64a7b2701369 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 @@ -31,6 +31,12 @@ import 'zoom_state.dart'; /// The Android implementation of [CameraPlatform] that uses the CameraX library. class AndroidCameraCameraX extends CameraPlatform { + /// Constructs an [AndroidCameraCameraX]. + /// + /// [shouldCreateDetachedObjectForTesting] is for testing only and thus, + /// is set to `false` by default. + AndroidCameraCameraX({this.shouldCreateDetachedObjectForTesting = false}); + /// Registers this class as the default instance of [CameraPlatform]. static void registerWith() { CameraPlatform.instance = AndroidCameraCameraX(); @@ -94,7 +100,7 @@ class AndroidCameraCameraX extends CameraPlatform { /// Conditional used to create detached objects for testing their /// callback methods. @visibleForTesting - bool createDetachedObjectForTesting = false; + final bool shouldCreateDetachedObjectForTesting; /// The controller we need to stream image data. @visibleForTesting @@ -110,6 +116,10 @@ class AndroidCameraCameraX extends CameraPlatform { /// See https://developer.android.com/reference/android/graphics/ImageFormat#JPEG. static const int imageFormatJpeg = 256; + /// Error code indicating a [ZoomState] was requested, but one has not been + /// set for the camera in use. + static const String zoomStateNotSetErrorCode = 'zoomStateNotSet'; + /// Returns list of all available cameras and their descriptions. @override Future> availableCameras() async { @@ -337,7 +347,7 @@ class AndroidCameraCameraX extends CameraPlatform { if (zoomState == null) { throw CameraException( - 'zoomStateNotSet', + zoomStateNotSetErrorCode, 'No explicit ZoomState has been set on the LiveData instance for the camera in use.', ); } @@ -354,7 +364,7 @@ class AndroidCameraCameraX extends CameraPlatform { if (zoomState == null) { throw CameraException( - 'zoomStateNotSet', + zoomStateNotSetErrorCode, 'No explicit ZoomState has been set on the LiveData instance for the camera in use.', ); } @@ -440,6 +450,9 @@ class AndroidCameraCameraX extends CameraPlatform { /// Binds [preview] instance to the camera lifecycle controlled by the /// [processCameraProvider]. + /// + /// [cameraId] used to properly update the live camera state for the camera + /// in used. Future _bindPreviewToLifecycle(int cameraId) async { final bool previewIsBound = await processCameraProvider!.isBound(preview!); if (previewIsBound || _previewIsPaused) { @@ -463,9 +476,9 @@ class AndroidCameraCameraX extends CameraPlatform { } // Create Analyzer that can read image data for image streaming. + final WeakReference weakThis = + WeakReference(this); Future analyze(ImageProxy imageProxy) async { - final WeakReference weakThis = - WeakReference(this); final List planes = await imageProxy.getPlanes(); final List cameraImagePlanes = []; for (final PlaneProxy plane in planes) { @@ -486,11 +499,14 @@ class AndroidCameraCameraX extends CameraPlatform { height: imageProxy.height, width: imageProxy.width); - weakThis.target!.cameraImageDataStreamController?.add(cameraImageData); + weakThis.target!.cameraImageDataStreamController!.add(cameraImageData); imageProxy.close(); } - final Analyzer analyzer = createDetachedObjectForTesting + // shouldCreateDetachedObjectForTesting is used to create an Analyzer + // detached from the native sideonly to test the logic of the Analyzer + // instance that will be used for image streaming. + final Analyzer analyzer = shouldCreateDetachedObjectForTesting ? Analyzer.detached(analyze: analyze) : Analyzer(analyze: analyze); @@ -550,8 +566,11 @@ class AndroidCameraCameraX extends CameraPlatform { // Methods concerning camera state: - /// Adds fresh observers to the [LiveData] of the [CameraState] of the - /// current [camera]. + /// Adds observers to the [LiveData] of the [CameraState] of the current + /// [camera], saved as [liveCameraState]. + /// + /// If a previous [liveCameraState] was stored, existing observers are + /// removed, as well. Future _updateLiveCameraState(int cameraId) async { final CameraInfo cameraInfo = await camera!.getCameraInfo(); liveCameraState?.removeObservers(); @@ -566,10 +585,11 @@ class AndroidCameraCameraX extends CameraPlatform { /// * Send a [CameraErrorEvent] if the [CameraState] indicates that the /// camera is in error state. Observer _createCameraClosingObserver(int cameraId) { + final WeakReference weakThis = + WeakReference(this); + // Callback method used to implement the behavior described above: void onChanged(Object stateAsObject) { - final WeakReference weakThis = - WeakReference(this); final CameraState state = stateAsObject as CameraState; if (state.type == CameraStateType.closing) { weakThis.target!.cameraEventStreamController @@ -581,7 +601,10 @@ class AndroidCameraCameraX extends CameraPlatform { } } - return createDetachedObjectForTesting + // shouldCreateDetachedObjectForTesting is used to create an Observer + // detached from the native side only to test the logic of the Analyzer + // instance that will be used for image streaming. + return shouldCreateDetachedObjectForTesting ? Observer.detached(onChanged: onChanged) : Observer(onChanged: onChanged); } diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index 6c2d06ee502b..4ed78ddfbf37 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -74,9 +74,6 @@ class _CameraInfoHostApiImpl extends CameraInfoHostApi { Future> getCameraStateFromInstance( CameraInfo instance) async { final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No CameraInfo has the identifer of that which was requested.'); - final int liveCameraStateId = await getCameraState(identifier!); final LiveData liveCameraState = instanceManager.getInstanceWithWeakReference>( diff --git a/packages/camera/camera_android_camerax/lib/src/live_data.dart b/packages/camera/camera_android_camerax/lib/src/live_data.dart index 102467b5b774..2a3c846d3037 100644 --- a/packages/camera/camera_android_camerax/lib/src/live_data.dart +++ b/packages/camera/camera_android_camerax/lib/src/live_data.dart @@ -34,6 +34,11 @@ class LiveData extends JavaObject { /// Maintains instances stored to communicate with native language objects. final InstanceManager? instanceManager; + /// Error message indicating a [LiveData] instance was constructed with a type + /// currently unsupported by the wrapping of this class. + static const String unsupportedLiveDataTypeErrorMessage = + 'The type of LiveData passed to this method is current unspported; please see LiveDataSupportedTypeData in pigeons/camerax_library.dart if you wish to support a new type.'; + /// Adds specified [Observer] to the list of observers of this instance. Future observe(Observer observer) { return _api.observeFromInstances(this, observer); @@ -106,9 +111,11 @@ class _LiveDataHostApiImpl extends LiveDataHostApi { typeData = LiveDataSupportedTypeData(value: LiveDataSupportedType.zoomState); break; + default: + throw ArgumentError(LiveData.unsupportedLiveDataTypeErrorMessage); } final int? valueIdentifier = - await getValue(instanceManager.getIdentifier(instance)!, typeData!); + await getValue(instanceManager.getIdentifier(instance)!, typeData); return valueIdentifier == null ? null : instanceManager.getInstanceWithWeakReference(valueIdentifier); @@ -176,6 +183,12 @@ class LiveDataFlutterApiImpl implements LiveDataFlutterApi { ), ); return; + // This ignore statement is safe beause this error will be useful when + // a new LiveDataSupportedType is being added, but the logic in this method + // has not yet been updated. + // ignore: no_default_cases + default: + throw ArgumentError(LiveData.unsupportedLiveDataTypeErrorMessage); } } } diff --git a/packages/camera/camera_android_camerax/lib/src/observer.dart b/packages/camera/camera_android_camerax/lib/src/observer.dart index ae8c58670766..f3b9a8fd5003 100644 --- a/packages/camera/camera_android_camerax/lib/src/observer.dart +++ b/packages/camera/camera_android_camerax/lib/src/observer.dart @@ -25,10 +25,13 @@ class Observer extends JavaObject { super.detached() { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); this.onChanged = (Object value) { - assert(value is T); + if (value is! T) { + throw ArgumentError( + 'The type of value observed does not match the type of Observer constructed.'); + } onChanged(value); }; - _api.createFromInstances(this); + _api.createFromInstance(this); } /// Constructs a [Observer] that is not automatically attached to a native object. @@ -75,7 +78,7 @@ class _ObserverHostApiImpl extends ObserverHostApi { /// Adds specified [Observer] instance to instance manager and makes call /// to native side to create the instance. - Future createFromInstances( + Future createFromInstance( Observer instance, ) { return create( 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 eb0d5f6977df..f74445f4f43f 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 @@ -156,7 +156,8 @@ void main() { test( 'createCamera requests permissions, starts listening for device orientation changes, updates camera state observers, and returns flutter surface texture ID', () async { - final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + final MockAndroidCameraCameraX camera = + MockAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); const CameraLensDirection testLensDirection = CameraLensDirection.back; @@ -182,7 +183,6 @@ void main() { when(mockCameraInfo.getCameraState()) .thenAnswer((_) async => mockLiveCameraState); camera.processCameraProvider = mockProcessCameraProvider; - camera.createDetachedObjectForTesting = true; expect( await camera.createCamera(testCameraDescription, testResolutionPreset, @@ -218,7 +218,8 @@ void main() { test( 'createCamera binds Preview and ImageCapture use cases to ProcessCameraProvider instance', () async { - final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + final MockAndroidCameraCameraX camera = + MockAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); const CameraLensDirection testLensDirection = CameraLensDirection.back; @@ -242,7 +243,6 @@ void main() { when(mockCameraInfo.getCameraState()) .thenAnswer((_) async => MockLiveCameraState()); camera.processCameraProvider = mockProcessCameraProvider; - camera.createDetachedObjectForTesting = true; await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); @@ -263,7 +263,8 @@ void main() { }); test('initializeCamera sends expected CameraInitializedEvent', () async { - final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + final MockAndroidCameraCameraX camera = + MockAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); const int cameraId = 10; @@ -311,7 +312,6 @@ void main() { .thenAnswer((_) async => MockLiveCameraState()); when(camera.testPreview.getResolutionInfo()) .thenAnswer((_) async => testResolutionInfo); - camera.createDetachedObjectForTesting = true; await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); @@ -482,7 +482,8 @@ void main() { test( 'resumePreview binds preview to lifecycle and updates camera state observers if not already bound', () async { - final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final AndroidCameraCameraX camera = + AndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); @@ -492,7 +493,6 @@ void main() { camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - camera.createDetachedObjectForTesting = true; when(mockProcessCameraProvider .bindToLifecycle(camera.cameraSelector, [camera.preview!])) @@ -518,7 +518,8 @@ void main() { test( 'buildPreview returns a FutureBuilder that does not return a Texture until the preview is bound to the lifecycle', () async { - final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final AndroidCameraCameraX camera = + AndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); @@ -528,7 +529,6 @@ void main() { camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - camera.createDetachedObjectForTesting = true; when(mockProcessCameraProvider .bindToLifecycle(camera.cameraSelector, [camera.preview!])) @@ -557,7 +557,8 @@ void main() { test( 'buildPreview returns a FutureBuilder that returns a Texture once the preview is bound to the lifecycle', () async { - final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final AndroidCameraCameraX camera = + AndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); @@ -567,7 +568,6 @@ void main() { camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); - camera.createDetachedObjectForTesting = true; when(mockProcessCameraProvider .bindToLifecycle(camera.cameraSelector, [camera.preview!])) @@ -691,7 +691,8 @@ void main() { test( 'onStreamedFrameAvailable emits CameraImageData when picked up from CameraImageData stream controller', () async { - final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + final MockAndroidCameraCameraX camera = + MockAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); @@ -699,7 +700,6 @@ void main() { camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); - camera.createDetachedObjectForTesting = true; when(mockProcessCameraProvider.bindToLifecycle(any, any)) .thenAnswer((_) => Future.value(mockCamera)); @@ -721,7 +721,8 @@ void main() { test( 'onStreamedFrameAvaiable returns stream that responds expectedly to being listened to', () async { - final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + final MockAndroidCameraCameraX camera = + MockAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); const int cameraId = 33; final ProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); @@ -740,7 +741,6 @@ void main() { camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = mockCameraSelector; - camera.createDetachedObjectForTesting = true; when(mockProcessCameraProvider.bindToLifecycle( mockCameraSelector, [camera.mockImageAnalysis])) @@ -792,7 +792,8 @@ void main() { test( 'onStreamedFrameAvaiable returns stream that responds expectedly to being canceled', () async { - final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + final MockAndroidCameraCameraX camera = + MockAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); const int cameraId = 32; final ProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); @@ -801,7 +802,6 @@ void main() { camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = mockCameraSelector; - camera.createDetachedObjectForTesting = true; when(mockProcessCameraProvider.bindToLifecycle( mockCameraSelector, [camera.mockImageAnalysis])) @@ -824,6 +824,9 @@ void main() { /// Mock of [AndroidCameraCameraX] that stubs behavior of some methods for /// testing. class MockAndroidCameraCameraX extends AndroidCameraCameraX { + MockAndroidCameraCameraX( + {super.shouldCreateDetachedObjectForTesting = false}); + bool cameraPermissionsRequested = false; bool startedListeningForDeviceOrientationChanges = false; From d5a21cb743d451f9de30b587aa1f508a5b2b833c Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 5 May 2023 09:44:37 -0700 Subject: [PATCH 69/71] Improve comments --- .../lib/src/android_camera_camerax.dart | 8 ++++++-- 1 file changed, 6 insertions(+), 2 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 64a7b2701369..f92a446d307b 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 @@ -451,8 +451,9 @@ class AndroidCameraCameraX extends CameraPlatform { /// Binds [preview] instance to the camera lifecycle controlled by the /// [processCameraProvider]. /// - /// [cameraId] used to properly update the live camera state for the camera - /// in used. + /// [cameraId] used to build [CameraEvent]s should you wish to filter + /// these based on a reference to a cameraId received from calling + /// `createCamera(...)`. Future _bindPreviewToLifecycle(int cameraId) async { final bool previewIsBound = await processCameraProvider!.isBound(preview!); if (previewIsBound || _previewIsPaused) { @@ -590,6 +591,9 @@ class AndroidCameraCameraX extends CameraPlatform { // Callback method used to implement the behavior described above: void onChanged(Object stateAsObject) { + // This cast is safe because the Observer implemntation ensures + // the type of stateAsObject is the same as the observer this callback + // is attached to. final CameraState state = stateAsObject as CameraState; if (state.type == CameraStateType.closing) { weakThis.target!.cameraEventStreamController From bc4ebc159f988a7bbad624f0197633da7c7357db Mon Sep 17 00:00:00 2001 From: Camille Simon <43054281+camsim99@users.noreply.github.com> Date: Mon, 8 May 2023 08:05:18 -0700 Subject: [PATCH 70/71] Update packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart Co-authored-by: Reid Baker --- .../camera_android_camerax/lib/src/android_camera_camerax.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f92a446d307b..7aff7a88c11b 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 @@ -591,7 +591,7 @@ class AndroidCameraCameraX extends CameraPlatform { // Callback method used to implement the behavior described above: void onChanged(Object stateAsObject) { - // This cast is safe because the Observer implemntation ensures + // This cast is safe because the Observer implementation ensures // the type of stateAsObject is the same as the observer this callback // is attached to. final CameraState state = stateAsObject as CameraState; From 491ab2c9f780a0542ddadefcf3cab6fff3e66854 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 8 May 2023 12:59:30 -0700 Subject: [PATCH 71/71] Apply patch + fix dispose --- .../lib/src/android_camera_camerax.dart | 22 ++++++--- .../test/android_camera_camerax_test.dart | 49 ++++++++++--------- 2 files changed, 39 insertions(+), 32 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 f92a446d307b..1a334159214b 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 @@ -32,10 +32,16 @@ import 'zoom_state.dart'; /// The Android implementation of [CameraPlatform] that uses the CameraX library. class AndroidCameraCameraX extends CameraPlatform { /// Constructs an [AndroidCameraCameraX]. - /// - /// [shouldCreateDetachedObjectForTesting] is for testing only and thus, - /// is set to `false` by default. - AndroidCameraCameraX({this.shouldCreateDetachedObjectForTesting = false}); + AndroidCameraCameraX() : _shouldCreateDetachedObjectForTesting = false; + + /// Constructs an [AndroidCameraCameraX] that is able to set + /// [_shouldCreateDetachedObjectForTesting] to create detached objects + /// for testing purposes only. + @visibleForTesting + AndroidCameraCameraX.forTesting( + {bool shouldCreateDetachedObjectForTesting = false}) + : _shouldCreateDetachedObjectForTesting = + shouldCreateDetachedObjectForTesting; /// Registers this class as the default instance of [CameraPlatform]. static void registerWith() { @@ -99,8 +105,7 @@ class AndroidCameraCameraX extends CameraPlatform { /// Conditional used to create detached objects for testing their /// callback methods. - @visibleForTesting - final bool shouldCreateDetachedObjectForTesting; + final bool _shouldCreateDetachedObjectForTesting; /// The controller we need to stream image data. @visibleForTesting @@ -279,6 +284,7 @@ class AndroidCameraCameraX extends CameraPlatform { preview?.releaseFlutterSurfaceTexture(); liveCameraState?.removeObservers(); processCameraProvider?.unbindAll(); + imageAnalysis?.clearAnalyzer(); } /// The camera has been initialized. @@ -507,7 +513,7 @@ class AndroidCameraCameraX extends CameraPlatform { // shouldCreateDetachedObjectForTesting is used to create an Analyzer // detached from the native sideonly to test the logic of the Analyzer // instance that will be used for image streaming. - final Analyzer analyzer = shouldCreateDetachedObjectForTesting + final Analyzer analyzer = _shouldCreateDetachedObjectForTesting ? Analyzer.detached(analyze: analyze) : Analyzer(analyze: analyze); @@ -608,7 +614,7 @@ class AndroidCameraCameraX extends CameraPlatform { // shouldCreateDetachedObjectForTesting is used to create an Observer // detached from the native side only to test the logic of the Analyzer // instance that will be used for image streaming. - return shouldCreateDetachedObjectForTesting + return _shouldCreateDetachedObjectForTesting ? Observer.detached(onChanged: onChanged) : Observer(onChanged: onChanged); } 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 f74445f4f43f..f76b0695e811 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 @@ -96,7 +96,7 @@ void main() { test('Should fetch CameraDescription instances for available cameras', () async { // Arrange - final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + final FakeAndroidCameraCameraX camera = FakeAndroidCameraCameraX(); camera.processCameraProvider = MockProcessCameraProvider(); final List returnData = [ { @@ -156,8 +156,8 @@ void main() { test( 'createCamera requests permissions, starts listening for device orientation changes, updates camera state observers, and returns flutter surface texture ID', () async { - final MockAndroidCameraCameraX camera = - MockAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); + final FakeAndroidCameraCameraX camera = + FakeAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); const CameraLensDirection testLensDirection = CameraLensDirection.back; @@ -218,8 +218,8 @@ void main() { test( 'createCamera binds Preview and ImageCapture use cases to ProcessCameraProvider instance', () async { - final MockAndroidCameraCameraX camera = - MockAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); + final FakeAndroidCameraCameraX camera = + FakeAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); const CameraLensDirection testLensDirection = CameraLensDirection.back; @@ -263,8 +263,8 @@ void main() { }); test('initializeCamera sends expected CameraInitializedEvent', () async { - final MockAndroidCameraCameraX camera = - MockAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); + final FakeAndroidCameraCameraX camera = + FakeAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); const int cameraId = 10; @@ -336,12 +336,14 @@ void main() { camera.preview = MockPreview(); camera.processCameraProvider = MockProcessCameraProvider(); camera.liveCameraState = MockLiveCameraState(); + camera.imageAnalysis = MockImageAnalysis(); camera.dispose(3); verify(camera.preview!.releaseFlutterSurfaceTexture()); verify(camera.liveCameraState!.removeObservers()); verify(camera.processCameraProvider!.unbindAll()); + verify(camera.imageAnalysis!.clearAnalyzer()); }); test('onCameraInitialized stream emits CameraInitializedEvents', () async { @@ -482,8 +484,8 @@ void main() { test( 'resumePreview binds preview to lifecycle and updates camera state observers if not already bound', () async { - final AndroidCameraCameraX camera = - AndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); + final AndroidCameraCameraX camera = AndroidCameraCameraX.forTesting( + shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); @@ -518,8 +520,8 @@ void main() { test( 'buildPreview returns a FutureBuilder that does not return a Texture until the preview is bound to the lifecycle', () async { - final AndroidCameraCameraX camera = - AndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); + final AndroidCameraCameraX camera = AndroidCameraCameraX.forTesting( + shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); @@ -557,8 +559,8 @@ void main() { test( 'buildPreview returns a FutureBuilder that returns a Texture once the preview is bound to the lifecycle', () async { - final AndroidCameraCameraX camera = - AndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); + final AndroidCameraCameraX camera = AndroidCameraCameraX.forTesting( + shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); @@ -691,8 +693,8 @@ void main() { test( 'onStreamedFrameAvailable emits CameraImageData when picked up from CameraImageData stream controller', () async { - final MockAndroidCameraCameraX camera = - MockAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); + final FakeAndroidCameraCameraX camera = + FakeAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); @@ -721,8 +723,8 @@ void main() { test( 'onStreamedFrameAvaiable returns stream that responds expectedly to being listened to', () async { - final MockAndroidCameraCameraX camera = - MockAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); + final FakeAndroidCameraCameraX camera = + FakeAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); const int cameraId = 33; final ProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); @@ -792,8 +794,8 @@ void main() { test( 'onStreamedFrameAvaiable returns stream that responds expectedly to being canceled', () async { - final MockAndroidCameraCameraX camera = - MockAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); + final FakeAndroidCameraCameraX camera = + FakeAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true); const int cameraId = 32; final ProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); @@ -821,11 +823,10 @@ void main() { }); } -/// Mock of [AndroidCameraCameraX] that stubs behavior of some methods for -/// testing. -class MockAndroidCameraCameraX extends AndroidCameraCameraX { - MockAndroidCameraCameraX( - {super.shouldCreateDetachedObjectForTesting = false}); +/// Fake [AndroidCameraCameraX] that stubs behavior of some methods for testing. +class FakeAndroidCameraCameraX extends AndroidCameraCameraX { + FakeAndroidCameraCameraX({super.shouldCreateDetachedObjectForTesting}) + : super.forTesting(); bool cameraPermissionsRequested = false; bool startedListeningForDeviceOrientationChanges = false;