From 6125eca646d50407d23be471585203381fc27d58 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 23 Feb 2023 14:35:21 -0800 Subject: [PATCH 01/52] 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 b61e7ac7222..1f5cdb17450 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 4a3d277a4dc..55b9026b3c3 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 1e61ea69929..69716dda453 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 00000000000..a491adaff0c --- /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 00000000000..911dbf5189f --- /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 b05d14a9cc7..940aa17039d 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 4fd965271ba..c668871b7a6 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 18debf68854..9d2ff38ac39 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 1d315e5a160..34170c8e9ed 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 00000000000..6aaa54dc494 --- /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 602bcb3da76..d62ab77f20f 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 4172cd7db07..971f86e88df 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 acfaf16b9ac..d1ed0c1bed5 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 af225a10c64..7bce60af01f 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 00000000000..df30a42687d --- /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 00000000000..1dc8a28ecde --- /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 3f0e9c2d38a..e4978089ea4 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/52] 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 940aa17039d..ab86ce6a135 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/52] 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 9d2ff38ac39..4f954dd2003 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 6aaa54dc494..d415bb55dfe 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 d1ed0c1bed5..ecb50baf0f1 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 df30a42687d..d2a057fb05f 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/52] 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 9e6c5a901fc..dfc7b2338bf 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 a491adaff0c..081daae2ada 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 4f954dd2003..26cb26ac363 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 7bce60af01f..6b0c909ac46 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/52] 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 ab86ce6a135..b6cba8da981 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/52] 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 081daae2ada..3bb4794c199 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 d415bb55dfe..11da1443af1 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/52] 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 55b9026b3c3..d6a6a60cc1e 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 3bb4794c199..69af9b6ccdf 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 911dbf5189f..324a2bd5143 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 11da1443af1..b0a4da50e4f 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/52] 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 b0a4da50e4f..1edd13c8b7d 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/52] 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 69af9b6ccdf..e93d81da14e 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/52] 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 1edd13c8b7d..304d9e35454 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/52] 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 26cb26ac363..4b855c4d8f2 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 304d9e35454..8afbe232091 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 ecb50baf0f1..986b9b4c31a 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 6b0c909ac46..bfee7a181ac 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/52] 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 69716dda453..e8ed92e4448 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 e7036e7090c..ba05b4a496f 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 4b855c4d8f2..c5bee32f0f2 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 34170c8e9ed..2ed53bb2ab5 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 8afbe232091..67268802a10 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 ed9e820a1fa..a18ee2800da 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 971f86e88df..033c63ed9fd 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 986b9b4c31a..f20605514fe 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 bfee7a181ac..f4d243ac2a7 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 2ce4ab72fa5..d55415babc0 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 e4978089ea4..546344ef0e4 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/52] 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 c5bee32f0f2..adafd74f33f 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 67268802a10..b56748fe5c2 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 a18ee2800da..2186ddbd544 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 f20605514fe..640c1ed2d24 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/52] 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 f4d243ac2a7..09a645a0850 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/52] 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 324a2bd5143..01f16f0b112 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 47b4ed6ad26..37a0882bbed 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/52] 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 548ac3e00d6..d20545103c2 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/52] 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 adafd74f33f..a36fcf76080 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/52] 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 a36fcf76080..727f2ff4809 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 2186ddbd544..2f7b0d0fda6 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/52] 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 727f2ff4809..7a84f798e6b 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 640c1ed2d24..18850e410a2 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 d20545103c2..54702a6faff 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/52] 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 1f5cdb17450..ce1706ec475 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 00000000000..96ada1f57e2 --- /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 c538e420cc7..3b2850c512c 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 d960b7fff70..057d6f73a99 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 e8ed92e4448..5f7d74ff72e 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 838f0b3d656..19cc4db59fa 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 c668871b7a6..c09eebcd3b2 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 7a84f798e6b..4ba2e578fe1 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 24ff30540b2..9f0e4f298f3 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 8c2c7bcf0ae..c52cda48a25 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 2ed53bb2ab5..7efae952842 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 2f7b0d0fda6..e4be966672d 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 033c63ed9fd..4d574a68317 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 546344ef0e4..2f5a29cb2b1 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/52] 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 ce1706ec475..63eb5de33e5 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 3b2850c512c..c538e420cc7 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 057d6f73a99..7ccbd8a6f6a 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 5f7d74ff72e..2c9704bf88e 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 00000000000..b2333d04962 --- /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 00000000000..4678f6f67fa --- /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 4ba2e578fe1..e10bae8f15a 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 c52cda48a25..a99fedda844 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 7efae952842..ae3e663efd2 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 00000000000..29522e9af98 --- /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 4d574a68317..94a8aa458e8 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 2f5a29cb2b1..77953e467eb 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/52] 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 d6a6a60cc1e..df6593dd67c 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 e93d81da14e..0865e6bdaa6 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 4678f6f67fa..2215d673e68 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 663d0e2f26d..734bbd0e004 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 01f16f0b112..d7fe0cfdb22 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 00000000000..577707b41cb --- /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 0a1b3ce3b28..71de48813e2 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 18850e410a2..a85d4ca1af6 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 09a645a0850..e7c9d9a9197 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 5e558a8226b..ffdf48b1e4a 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 00000000000..2c229b162e9 --- /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 00000000000..700a72c07ef --- /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 54702a6faff..b1e13213079 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/52] 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 734bbd0e004..bfb9314801c 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 d7fe0cfdb22..e5c81be3a1e 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 577707b41cb..3949645aa1f 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/52] 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 63eb5de33e5..0180c20c501 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 7ccbd8a6f6a..239da3d14d3 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 df6593dd67c..236f997bbde 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 2c9704bf88e..027ad62d684 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 2215d673e68..70df8cbf639 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 bfb9314801c..ea3c1e50f22 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 3949645aa1f..ab4fba67d60 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 a99fedda844..fa9a2a8e9c1 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 ae3e663efd2..a3f6d900f39 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 29522e9af98..23def44ccef 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 a85d4ca1af6..3ed5fafddea 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 2c229b162e9..bf932c88934 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 b1e13213079..f7d0470ca1e 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 77953e467eb..26bb55e351a 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/52] 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 c09eebcd3b2..4814aa4a3ff 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 92a5551c153..7cc3ee788a9 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 9f0e4f298f3..08be0e809c2 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 fa9a2a8e9c1..43c9ae0943b 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 23def44ccef..08d56140afb 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 ee9ed3502c7..580bebac8f4 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 e1bc9a9615d..8433dbfb500 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/52] 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 96ada1f57e2..3231f4a7b4c 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 4814aa4a3ff..a855be8b235 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 08be0e809c2..ed4305d3c30 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 43c9ae0943b..ec6534da361 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/52] 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 3231f4a7b4c..f21c0b520a3 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 239da3d14d3..79699632188 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 236f997bbde..35804b97830 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 c676b505740..8d3ac588eb3 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 b2333d04962..c5a7b8e9c09 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 70df8cbf639..8984a371790 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 e2135b3945b..828c6ce04d7 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 a855be8b235..d0e79fba105 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 7cc3ee788a9..8433d94d495 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 ed4305d3c30..10783de2477 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 751eaeee983..e31ea5aa811 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 9d72e420645..1de5875eceb 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/52] 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 8984a371790..e47cbd6580a 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 63158974f43..00524b3c674 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 828c6ce04d7..9132df0d423 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 bf932c88934..6574365fd75 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 700a72c07ef..7c07458cdd9 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/52] 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 00524b3c674..63158974f43 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 10783de2477..7101be36e8c 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 ec6534da361..6f9ee26546b 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 08d56140afb..08e67549e7f 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 8433dbfb500..c1f22451434 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/52] 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 c1f22451434..798654414c6 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/52] 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 f1d3c5fdb66..aa7ee88023c 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/52] 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 f315d4cd967..e802aab3086 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/52] 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 798654414c6..8eb1864a37c 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/52] 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 13590efa983..c001c915e70 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 f0527bd1f94..0b23e1d8627 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 c2948282dcf..f74c9711f2c 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 00000000000..4de82739c8b --- /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 1de5875eceb..0853077931b 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/52] 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 0b23e1d8627..f9a9f1fa665 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 f74c9711f2c..e47e104843f 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/52] 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 580a13b5e33..2de375a001c 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 336e1600989..d01059c0954 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/52] 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 8cdc6a2aec5..05d4e506ba0 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 78b97b47e4e..5c5e863b001 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 63c22b7c916..7c961a11bbb 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/52] 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 00000000000..b181536f42f --- /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 00000000000..baf0617ee59 --- /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 05d4e506ba0..0c3c8db9217 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 00000000000..5ed5dcde0f1 --- /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 00000000000..8555021299d --- /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 00000000000..e567f2fb18a --- /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 00000000000..5e06c8378e5 --- /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 00000000000..b1c0812ee7b --- /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 00000000000..18ae2e22759 --- /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 00000000000..2cf5f833fb8 --- /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 00000000000..2e06440bf08 --- /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 00000000000..28e16be4fe0 --- /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 00000000000..bc33263a060 --- /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 5c5e863b001..6869970cb9c 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 00000000000..4d6828fdd69 --- /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 00000000000..2b054b9aa0f --- /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 00000000000..336ff7a32d9 --- /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 c001c915e70..a7ce2c56721 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 764b057f03d..4da9c3f07cb 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 e802aab3086..4bfe55917c9 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 5a2412e8968..4461e9d9d74 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 627aba8c55f..3b8bc4ad0b0 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 00000000000..8df0ed50d61 --- /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 00000000000..d84b67c9fff --- /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 00000000000..e7b3a39d7f4 --- /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 00000000000..62dda5d52c0 --- /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 4de82739c8b..7f3af283f1a 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 1dc8a28ecde..63761d80b88 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 7c07458cdd9..71ba35d141b 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 00000000000..fe077f0d797 --- /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 00000000000..6970fbdbfdd --- /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 00000000000..e7d8e06f62a --- /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 00000000000..ac8d4934cc0 --- /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 fe3bdb89add..467f4dc2978 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 68b0c0a9f45..62d3de7cbfd 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 27d5b016c94..cb0acdaba0b 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 7c961a11bbb..d31f7a0d0f0 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/52] 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 6d33b210a05..8fd84fc7ea0 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 baf0617ee59..3c86a13cd29 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 8555021299d..c6b398946c7 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 e567f2fb18a..f26bd92f59c 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 2cf5f833fb8..fdfe7d3db83 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 8433d94d495..5414ce442ba 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 71de48813e2..3a1d2525ce9 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 6f9ee26546b..1ce72762eac 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 2b054b9aa0f..0f227841a4a 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/52] 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 8fd84fc7ea0..0ff665c8004 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 79699632188..39360dc1252 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 3c86a13cd29..0b4058ab122 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 35804b97830..ef00a4f0f72 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 0c3c8db9217..d4d87d87102 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 c5a7b8e9c09..00000000000 --- 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 e47cbd6580a..00000000000 --- 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 5ed5dcde0f1..17b54b71c5f 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 c6b398946c7..f0cbec85f16 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 5e06c8378e5..facaa81c73d 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 ab4fba67d60..00000000000 --- 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 7c909c6116c..45cb407e8d0 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 b1b5e9d4ceb..4af433b66b5 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 d0e79fba105..0f66ffb8d17 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 5414ce442ba..005dcae66b1 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 3a1d2525ce9..5976d59d9f3 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 1ce72762eac..9ae10c4655c 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 6869970cb9c..fe1731aba55 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 ac9856a6367..59fb83cd04f 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 08e67549e7f..00000000000 --- 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 4d6828fdd69..a3dbeb5a8bd 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 0f227841a4a..5fb4490826a 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 a7ce2c56721..f8b89659a78 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 6574365fd75..00000000000 --- 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 71ba35d141b..00000000000 --- 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 d31f7a0d0f0..72cc160414b 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/52] 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 005dcae66b1..1d7c7857251 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/52] 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 facaa81c73d..41fff0184d8 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/52] 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 f0cbec85f16..5660eaec8af 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/52] 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 0ff665c8004..32c2cbab097 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 39360dc1252..a515f4de156 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 b181536f42f..af56f0037f4 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 0b4058ab122..b1c91d265f6 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 d4d87d87102..4bea82a9c42 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 17b54b71c5f..277026a2f88 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 5660eaec8af..dda52d4f615 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 f26bd92f59c..12fc3ed0676 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 41fff0184d8..d51a3c801ab 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 ea3c1e50f22..7b4b1a01f0a 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 b1c0812ee7b..3c50556991b 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 18ae2e22759..f1d8ee3d89e 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 fdfe7d3db83..8eb2bfd6307 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 2e06440bf08..3484f5abadf 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 45cb407e8d0..7c909c6116c 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 fe1731aba55..b7c559602dd 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 a3dbeb5a8bd..c9d45d001e6 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 72cc160414b..1bff8614700 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/52] 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 4bea82a9c42..99aebf609d1 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 d51a3c801ab..66005fc57de 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 f1d8ee3d89e..c99145ebc14 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 e5c81be3a1e..73778d7418f 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 8eb2bfd6307..f22918f98fd 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 3484f5abadf..c9f97b4b645 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 7c909c6116c..45cb407e8d0 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 4af433b66b5..b1b5e9d4ceb 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 0f66ffb8d17..918e768b85e 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 1d7c7857251..e6d550dd9fc 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 5976d59d9f3..9b06a53865e 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 28e16be4fe0..0fc0c05ba43 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 bc33263a060..6a9c9a3f81b 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 b7c559602dd..dd6f82e3c3c 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 59fb83cd04f..b44ea272927 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 c9d45d001e6..1917cfd172e 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 5fb4490826a..4a231dcd639 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 336ff7a32d9..00000000000 --- 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 580bebac8f4..d722cf524fa 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 f8b89659a78..6301ff7fbe7 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 4da9c3f07cb..fac6ddceec0 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 8eb1864a37c..11f69a0067d 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 4bfe55917c9..2a3af3fa87a 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 8df0ed50d61..3d7d6ba0794 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 d84b67c9fff..0590cd5b44d 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 62dda5d52c0..347e2b1e92d 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 6970fbdbfdd..b07dbc0d165 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 ac8d4934cc0..9880bde0ae9 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 1bff8614700..39a4e99dba7 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/52] 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 99aebf609d1..8b593ae1785 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 277026a2f88..8ae072cfebc 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 dda52d4f615..198e5265692 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 66005fc57de..7f6e1de0895 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 c99145ebc14..203682a4910 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 f22918f98fd..f7c20bbcb97 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 c9f97b4b645..626f21ea2bf 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 918e768b85e..ace84ec186c 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 dd6f82e3c3c..2541da67fbc 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 b44ea272927..8f0921878de 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 1917cfd172e..c6dadb2902f 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 4a231dcd639..c8fbf5751ec 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 fac6ddceec0..a6ca8a191e2 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 11f69a0067d..937d855ef58 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 f9a9f1fa665..96ea829df2c 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 4461e9d9d74..a41843e13a7 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 3d7d6ba0794..17ac0e67b47 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 e7b3a39d7f4..36a1fab2b9a 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 fe077f0d797..aba713a424c 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 e7d8e06f62a..41c3eba5598 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/52] 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 96ea829df2c..77f622e5b06 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 4461e9d9d74..a41843e13a7 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/52] 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 e47e104843f..9506a430cf6 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/52] 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 50e174c2b26..23abe22cb86 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 b1c91d265f6..4051732b9a3 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 19cc4db59fa..f5a2fdc01ca 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 7101be36e8c..09f02367060 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 0fc0c05ba43..233c1821602 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 6a9c9a3f81b..6d50eb35f99 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 8f0921878de..aeb97ec36fa 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 c6dadb2902f..2a7e8272aea 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/52] 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 95dff6b83b2..f6490d00419 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 a515f4de156..ac675dc2edd 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 af56f0037f4..1149027e5f5 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 4051732b9a3..ce3221318d4 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 06d408125d7..01bb4b2363f 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 8ae072cfebc..bd536d14941 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 198e5265692..0cac5c621d7 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 12fc3ed0676..ffa00cb65c3 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 7f6e1de0895..963c0df5a22 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 203682a4910..05939ba4c73 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 f7c20bbcb97..1e44bb8a543 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 626f21ea2bf..9588f795fd2 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 ace84ec186c..c668871b7a6 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 fc312cd1982..8cdcc137ae4 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 99b7d385520..e66e717368f 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 d8acfe7f2ba..fe8e5f8b3f5 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 9ae10c4655c..ca65d672358 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 8300063204c..1df886b861b 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 233c1821602..c3dc25a4689 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 6d50eb35f99..89fb0f8ac17 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 5c07e52188b..8ce3e3f9372 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 69cc7829c7a..7ffaba72eca 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 9b80c870621..6a9b2dedd04 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 a1f929c5960..ded09123da6 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 2a7e8272aea..7a14ae91d09 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 c8fbf5751ec..70ae0dbb507 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 c057876d1ed..d5b1661b0b4 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 02a540a3b50..c3094d71417 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 d8cccdb2aa3..88eab07f0be 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 ea8cf8cb751..42cad38721c 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 e108b6140be..8cb2dc83531 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 f8910d9c534..256caf8c01b 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 6ceda6110b0..e6a12454117 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 004ce5558f1..bfcedfe6b90 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/52] 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 f6490d00419..f91f085da02 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 ac675dc2edd..be06452fdd2 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 ce3221318d4..4439e68d138 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 ffa00cb65c3..85a743a2ca9 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 a73654d0e69..d7b81dba389 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 f063f3c6970..b6645364e39 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 3c50556991b..a8260895852 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 05939ba4c73..4f42e4ade37 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 1e44bb8a543..4158cf9881e 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 9588f795fd2..04908c5ca17 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/52] 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 f91f085da02..e971c3d764e 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 8406f8c9a23..98f5f74b959 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 f0309c4f845..bb9db6a2c65 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 be06452fdd2..ab31e1100ed 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 1149027e5f5..f4c8d6ee4af 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 4439e68d138..e6e83c4af99 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 01bb4b2363f..fae7f171ab4 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 bd536d14941..50b10fc7620 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 85a743a2ca9..a337385f79a 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 d7b81dba389..4a2197624b6 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 b6645364e39..63f36c4071b 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 4f42e4ade37..c3a41070db6 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 4158cf9881e..d525b3481fe 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 04908c5ca17..2c628905db6 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 8ce3e3f9372..0163f0f7e24 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 bee3f3f9694..6ab5f4bc69d 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 77f622e5b06..fc4f29a97a1 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 17ac0e67b47..48da38d7af3 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 6dedf5a79bf..9265cee4d57 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 aba713a424c..04c64c7c80c 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 bfcedfe6b90..19e6c8eab7b 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,