From 8d4e97aa04bb89edaf6c260b90944ed3ab136519 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 29 Mar 2023 16:00:16 -0700 Subject: [PATCH 01/19] Add base code --- .../camerax/CameraAndroidCameraxPlugin.java | 5 +- .../camerax/CameraInfoHostApiImpl.java | 38 +- .../camerax/ExposureStateFlutterApiImpl.java | 24 + .../camerax/ExposureStateHostApiImpl.java | 44 ++ .../camerax/GeneratedCameraXLibrary.java | 623 ++++++++++++------ .../camerax/ZoomStateFlutterApiImpl.java | 24 + .../plugins/camerax/ZoomStateHostApiImpl.java | 42 ++ .../lib/src/android_camera_camerax.dart | 32 + ...roid_camera_camerax_flutter_api_impls.dart | 16 + .../lib/src/camera.dart | 2 +- .../lib/src/camera_info.dart | 32 +- .../lib/src/camerax_library.g.dart | 413 ++++++++++-- .../lib/src/exposure_state.dart | 104 +++ .../lib/src/zoom_state.dart | 102 +++ .../pigeons/camerax_library.dart | 38 ++ .../test/test_camerax_library.g.dart | 292 +++++--- 16 files changed, 1484 insertions(+), 347 deletions(-) create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateHostApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateHostApiImpl.java create mode 100644 packages/camera/camera_android_camerax/lib/src/exposure_state.dart create mode 100644 packages/camera/camera_android_camerax/lib/src/zoom_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 08ecc847aa10..71746791c9c8 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 @@ -41,7 +41,7 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex GeneratedCameraXLibrary.InstanceManagerHostApi.setup( binaryMessenger, () -> instanceManager.clear()); GeneratedCameraXLibrary.CameraInfoHostApi.setup( - binaryMessenger, new CameraInfoHostApiImpl(instanceManager)); + binaryMessenger, new CameraInfoHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.CameraSelectorHostApi.setup( binaryMessenger, new CameraSelectorHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.JavaObjectHostApi.setup( @@ -56,6 +56,9 @@ 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.ExposureStateHostApi.setup(binaryMessenger, new ExposureStateHostApiImpl(instanceManager)); + GeneratedCameraXLibrary.ZoomStateHostApi.setup(binaryMessenger, new ZoomStateHostApiImpl(instanceManager)); + } @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 d960b7fff70a..add5f76dd56d 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 @@ -10,9 +10,11 @@ import java.util.Objects; public class CameraInfoHostApiImpl implements CameraInfoHostApi { + private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; - public CameraInfoHostApiImpl(InstanceManager instanceManager) { + public CameraInfoHostApiImpl(BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; } @@ -22,4 +24,38 @@ public Long getSensorRotationDegrees(@NonNull Long identifier) { (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); return Long.valueOf(cameraInfo.getSensorRotationDegrees()); } + + /** + * Retrieves the {@link ExposureState} of the {@link CameraInfo} with the specified identifier. + */ + @Override + public Long getExposureState(@NonNull Long identifier) { + CameraInfo cameraInfo = + (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); + ExposureState exposureState = cameraInfo.getExposureState(); + + if(!instanceManager.containsInstance(exposureState)) { + ExposureStateFlutterApiImpl exposureStateFlutterApiImpl = new ExposureStateFlutterApiImpl(binaryMessenger); + exposureStateFlutterApiImpl.create(exposureState, result -> {}); + } + + return instanceManager.getIdentifierForStrongReference(exposureState); + } + + /** + * Retrieves the current {@link ZoomState} value of the {@link CameraInfo} with the specified identifier. + */ + @Override + public Long getZoomState(@NonNull Long identifier) { + CameraInfo cameraInfo = + (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); + ZoomState zoomState = cameraInfo.ZoomState().getValue(); + + if(!instanceManager.containsInstance(zoomState)) { + ZoomStateFlutterApiImpl zoomStateFlutterApiImpl = new ZoomStateFlutterApiImpl(binaryMessenger); + zoomStateFlutterApiImpl.create(zoomState, result -> {}); + } + + return instanceManager.getIdentifierForStrongReference(zoomState); + } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java new file mode 100644 index 000000000000..fb73d62ef892 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java @@ -0,0 +1,24 @@ +// 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.ExposureState; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureStateFlutterApi;; + +public class ExposureStateFlutterApiImpl extends ExposureStateFlutterApi { + private final InstanceManager instanceManager; + + public ExposureStateFlutterApiImpl( + BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + super(binaryMessenger); + this.instanceManager = instanceManager; + } + + void create(@NonNull ExposureState exposureState, @NonNull Reply reply) { + create(instanceManager.addHostCreatedInstance(exposureState), reply); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateHostApiImpl.java new file mode 100644 index 000000000000..6cf5abd7fad1 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateHostApiImpl.java @@ -0,0 +1,44 @@ +// 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.ExposureState; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureRange; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureStateHostApi; +import java.util.Objects; + + +public class ExposureStateHostApiImpl implements ExposureStateHostApi { + private final InstanceManager instanceManager; + + public ExposureStateHostApiImpl(InstanceManager instanceManager) { + this.instanceManager = instanceManager; + } + + /** + * Gets the maximum and minimum exposure compensation values for the camera with the + * {@link ExposureState} with the specified identifier. + */ + @Override + public ExposureRange getExposureCompensationRange(@NonNull Long identifier) { + ExposureState exposureState = + (ExposureState) Objects.requireNonNull(instanceManager.getInstance(identifier)); + Range exposureCompensationRange = exposureState.getExposureCompensationRange(); + + return ExposureRange.Builder().setMinCompensation(exposureCompensationRange.getLower()).setMaxCompensation(exposureCompensationRange.getUpper()).build(); + } + + /** + * Gets the smallest step by which the exposure compensation can be changed + * for the camera with the {@link ExposureState} with the specified identifier. + */ + @Override + public Double getExposureCompensationStep(@NonNull Long identifier) { + ExposureState exposureState = + (ExposureState) Objects.requireNonNull(instanceManager.getInstance(identifier)); + return exposureState.getExposureCompensationStep.getValue(); + } +} 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 4d4439ebe23a..d315e404ae43 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -18,7 +18,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) @@ -33,7 +35,8 @@ public static class FlutterError extends RuntimeException { /** The error details. Must be a datatype supported by the api codec. */ public final Object details; - public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { + public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) + { super(message); this.code = code; this.details = details; @@ -52,7 +55,7 @@ private static ArrayList wrapError(@NonNull Throwable exception) { errorList.add(exception.toString()); errorList.add(exception.getClass().getSimpleName()); errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); } return errorList; } @@ -123,13 +126,9 @@ ArrayList toList() { static @NonNull ResolutionInfo fromList(@NonNull ArrayList list) { ResolutionInfo pigeonResult = new ResolutionInfo(); Object width = list.get(0); - pigeonResult.setWidth( - (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); + pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); Object height = list.get(1); - pigeonResult.setHeight( - (height == null) - ? null - : ((height instanceof Integer) ? (Integer) height : (Long) height)); + pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer) height : (Long) height)); return pigeonResult; } } @@ -207,6 +206,79 @@ ArrayList toList() { } } + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class ExposureRange { + private @NonNull Double minCompensation; + + public @NonNull Double getMinCompensation() { + return minCompensation; + } + + public void setMinCompensation(@NonNull Double setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"minCompensation\" is null."); + } + this.minCompensation = setterArg; + } + + private @NonNull Double maxCompensation; + + public @NonNull Double getMaxCompensation() { + return maxCompensation; + } + + public void setMaxCompensation(@NonNull Double setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"maxCompensation\" is null."); + } + this.maxCompensation = setterArg; + } + + /** Constructor is private to enforce null safety; use Builder. */ + private ExposureRange() {} + + public static final class Builder { + + private @Nullable Double minCompensation; + + public @NonNull Builder setMinCompensation(@NonNull Double setterArg) { + this.minCompensation = setterArg; + return this; + } + + private @Nullable Double maxCompensation; + + public @NonNull Builder setMaxCompensation(@NonNull Double setterArg) { + this.maxCompensation = setterArg; + return this; + } + + public @NonNull ExposureRange build() { + ExposureRange pigeonReturn = new ExposureRange(); + pigeonReturn.setMinCompensation(minCompensation); + pigeonReturn.setMaxCompensation(maxCompensation); + return pigeonReturn; + } + } + + @NonNull + ArrayList toList() { + ArrayList toListResult = new ArrayList(2); + toListResult.add(minCompensation); + toListResult.add(maxCompensation); + return toListResult; + } + + static @NonNull ExposureRange fromList(@NonNull ArrayList list) { + ExposureRange pigeonResult = new ExposureRange(); + Object minCompensation = list.get(0); + pigeonResult.setMinCompensation((Double) minCompensation); + Object maxCompensation = list.get(1); + pigeonResult.setMaxCompensation((Double) maxCompensation); + return pigeonResult; + } + } + public interface Result { void success(T result); @@ -217,7 +289,7 @@ public interface InstanceManagerHostApi { /** * Clear the native `InstanceManager`. * - *

This is typically only used after a hot restart. + * This is typically only used after a hot restart. */ void clear(); @@ -225,10 +297,7 @@ public interface InstanceManagerHostApi { static MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `InstanceManagerHostApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `InstanceManagerHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, InstanceManagerHostApi api) { { BasicMessageChannel channel = @@ -241,7 +310,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; } @@ -262,9 +332,7 @@ public interface JavaObjectHostApi { static MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. - */ + /**Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, JavaObjectHostApi api) { { BasicMessageChannel channel = @@ -279,7 +347,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; } @@ -299,15 +368,13 @@ public JavaObjectFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } /** The codec used by JavaObjectFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - public void dispose(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -320,23 +387,49 @@ 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 + Long getExposureState(@NonNull Long identifier); + + @NonNull + Long getZoomState(@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) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + Long output = api.getSensorRotationDegrees((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getExposureState", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -344,11 +437,34 @@ 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.getExposureState((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getZoomState", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + Long output = api.getZoomState((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -368,15 +484,13 @@ public CameraInfoFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } /** The codec used by CameraInfoFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -391,17 +505,14 @@ public interface CameraSelectorHostApi { void create(@NonNull Long identifier, @Nullable Long lensFacing); - @NonNull + @NonNull List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); /** The codec used by CameraSelectorHostApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `CameraSelectorHostApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `CameraSelectorHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { { BasicMessageChannel channel = @@ -415,11 +526,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; } @@ -441,12 +551,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; } @@ -466,17 +574,14 @@ public CameraSelectorFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } /** The codec used by CameraSelectorFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - - public void create( - @NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { + public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); @@ -490,16 +595,13 @@ public interface ProcessCameraProviderHostApi { void getInstance(Result result); - @NonNull + @NonNull List getAvailableCameraInfos(@NonNull Long identifier); - @NonNull - Long bindToLifecycle( - @NonNull Long identifier, - @NonNull Long cameraSelectorIdentifier, - @NonNull List useCaseIds); + @NonNull + Long bindToLifecycle(@NonNull Long identifier, @NonNull Long cameraSelectorIdentifier, @NonNull List useCaseIds); - @NonNull + @NonNull Boolean isBound(@NonNull Long identifier, @NonNull Long useCaseIdentifier); void unbind(@NonNull Long identifier, @NonNull List useCaseIds); @@ -510,17 +612,12 @@ Long bindToLifecycle( static MessageCodec getCodec() { return new StandardMessageCodec(); } - /** - * Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, ProcessCameraProviderHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -547,9 +644,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) -> { @@ -557,11 +652,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; } @@ -574,9 +668,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) -> { @@ -586,15 +678,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; } @@ -607,9 +694,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) -> { @@ -618,12 +703,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; } @@ -636,9 +719,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) -> { @@ -647,10 +728,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; } @@ -663,9 +744,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) -> { @@ -675,7 +754,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; } @@ -695,21 +775,17 @@ public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } /** The codec used by ProcessCameraProviderFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", getCodec()); channel.send( new ArrayList(Collections.singletonList(identifierArg)), channelReply -> callback.reply(null)); @@ -723,15 +799,13 @@ public CameraFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } /** The codec used by CameraFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -771,11 +845,9 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface SystemServicesHostApi { - void requestCameraPermissions( - @NonNull Boolean enableAudio, Result result); + void requestCameraPermissions(@NonNull Boolean enableAudio, Result result); - void startListeningForDeviceOrientationChange( - @NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); + void startListeningForDeviceOrientationChange(@NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); void stopListeningForDeviceOrientationChange(); @@ -783,17 +855,12 @@ void startListeningForDeviceOrientationChange( static MessageCodec getCodec() { return SystemServicesHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `SystemServicesHostApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `SystemServicesHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, SystemServicesHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions", getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -822,9 +889,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) -> { @@ -833,11 +898,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; } @@ -850,9 +914,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) -> { @@ -860,7 +922,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; } @@ -880,32 +943,25 @@ public SystemServicesFlutterApi(BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ - public interface Reply { + /** Public interface for sending reply. */ public interface Reply { void reply(T reply); } /** The codec used by SystemServicesFlutterApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } - public void onDeviceOrientationChanged(@NonNull String orientationArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", getCodec()); channel.send( new ArrayList(Collections.singletonList(orientationArg)), channelReply -> callback.reply(null)); } - public void onCameraError(@NonNull String errorDescriptionArg, Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", - getCodec()); + binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", getCodec()); channel.send( new ArrayList(Collections.singletonList(errorDescriptionArg)), channelReply -> callback.reply(null)); @@ -946,24 +1002,21 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface PreviewHostApi { - void create( - @NonNull Long identifier, - @Nullable Long rotation, - @Nullable ResolutionInfo targetResolution); + void create(@NonNull Long identifier, @Nullable Long rotation, @Nullable ResolutionInfo targetResolution); - @NonNull + @NonNull Long setSurfaceProvider(@NonNull Long identifier); void releaseFlutterSurfaceTexture(); - @NonNull + @NonNull ResolutionInfo getResolutionInfo(@NonNull Long identifier); /** The codec used by PreviewHostApi. */ static MessageCodec getCodec() { return PreviewHostApiCodec.INSTANCE; } - /** Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ + /**Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { { BasicMessageChannel channel = @@ -978,12 +1031,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; } @@ -996,9 +1047,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) -> { @@ -1006,11 +1055,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; } @@ -1023,9 +1071,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) -> { @@ -1033,7 +1079,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; } @@ -1054,11 +1101,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; } @@ -1100,10 +1146,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); @@ -1113,10 +1156,7 @@ void create( static MessageCodec getCodec() { return ImageCaptureHostApiCodec.INSTANCE; } - /** - * Sets up an instance of `ImageCaptureHostApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `ImageCaptureHostApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { { BasicMessageChannel channel = @@ -1131,12 +1171,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; } @@ -1158,11 +1196,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; } @@ -1195,8 +1232,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); @@ -1204,4 +1240,209 @@ public void error(Throwable error) { } } } + + private static class ExposureStateHostApiCodec extends StandardMessageCodec { + public static final ExposureStateHostApiCodec INSTANCE = new ExposureStateHostApiCodec(); + + private ExposureStateHostApiCodec() {} + + @Override + protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { + switch (type) { + case (byte) 128: + return ExposureRange.fromList((ArrayList) readValue(buffer)); + default: + return super.readValueOfType(type, buffer); + } + } + + @Override + protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { + if (value instanceof ExposureRange) { + stream.write(128); + writeValue(stream, ((ExposureRange) value).toList()); + } else { + super.writeValue(stream, value); + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface ExposureStateHostApi { + + @NonNull + ExposureRange getExposureCompensationRange(@NonNull Long identifier); + + @NonNull + Double getExposureCompensationStep(@NonNull Long identifier); + + /** The codec used by ExposureStateHostApi. */ + static MessageCodec getCodec() { + return ExposureStateHostApiCodec.INSTANCE; + } + /**Sets up an instance of `ExposureStateHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(BinaryMessenger binaryMessenger, ExposureStateHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationRange", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + ExposureRange output = api.getExposureCompensationRange((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationStep", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + Double output = api.getExposureCompensationStep((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + public static class ExposureStateFlutterApi { + private final BinaryMessenger binaryMessenger; + + public ExposureStateFlutterApi(BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + + /** Public interface for sending reply. */ public interface Reply { + void reply(T reply); + } + /** The codec used by ExposureStateFlutterApi. */ + static MessageCodec getCodec() { + return new StandardMessageCodec(); + } + public void create(@NonNull Long identifierArg, Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ExposureStateFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Collections.singletonList(identifierArg)), + channelReply -> callback.reply(null)); + } + } + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface ZoomStateHostApi { + + @NonNull + Double getMaxZoomRatio(@NonNull Long identifier); + + @NonNull + Double getMinZoomRatio(@NonNull Long identifier); + + /** The codec used by ZoomStateHostApi. */ + static MessageCodec getCodec() { + return new StandardMessageCodec(); + } + /**Sets up an instance of `ZoomStateHostApi` to handle messages through the `binaryMessenger`. */ + static void setup(BinaryMessenger binaryMessenger, ZoomStateHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ZoomStateHostApi.getMaxZoomRatio", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + Double output = api.getMaxZoomRatio((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ZoomStateHostApi.getMinZoomRatio", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + Double output = api.getMinZoomRatio((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + public static class ExposureStateFlutterApi { + private final BinaryMessenger binaryMessenger; + + public ExposureStateFlutterApi(BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + + /** Public interface for sending reply. */ public interface Reply { + void reply(T reply); + } + /** The codec used by ExposureStateFlutterApi. */ + static MessageCodec getCodec() { + return new StandardMessageCodec(); + } + public void create(@NonNull Long identifierArg, Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.ExposureStateFlutterApi.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/ZoomStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java new file mode 100644 index 000000000000..17470ee0440c --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java @@ -0,0 +1,24 @@ +// 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.ZoomState; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ZoomStateFlutterApi;; + +public class ZoomStateFlutterApiImpl extends ZoomStateFlutterApi { + private final InstanceManager instanceManager; + + public ZoomStateFlutterApiImpl( + BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + super(binaryMessenger); + this.instanceManager = instanceManager; + } + + void create(@NonNull ZoomState zoomState, @NonNull Reply reply) { + create(instanceManager.addHostCreatedInstance(zoomState), reply); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateHostApiImpl.java new file mode 100644 index 000000000000..78ec5b8e0ed0 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateHostApiImpl.java @@ -0,0 +1,42 @@ +// 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.ZoomState; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureRange; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ZoomStateHostApi; +import java.util.Objects; + + +public class ZoomStateHostApiImpl implements ZoomStateHostApi { + private final InstanceManager instanceManager; + + public ZoomStateHostApiImpl(InstanceManager instanceManager) { + this.instanceManager = instanceManager; + } + + /** + * Gets the maximum and minimum exposure compensation values for the camera with the + * {@link ZoomState} with the specified identifier. + */ + @Override + public Double getMaxZoomRatio(@NonNull Long identifier) { + ZoomState zoomState = + (ZoomState) Objects.requireNonNull(instanceManager.getInstance(identifier)); + return (Double) zoomState.getMaxZoomRatio(); + } + + /** + * Gets the smallest step by which the exposure compensation can be changed + * for the camera with the {@link ZoomState} with the specified identifier. + */ + @Override + public Double getMinZoomRatio(@NonNull Long identifier) { + ZoomState zoomState = + (ZoomState) Objects.requireNonNull(instanceManager.getInstance(identifier)); + return (Double) zoomState.getMinZoomRatio(); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index adafd74f33f9..bcc4daa0f00f 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 @@ -241,6 +241,38 @@ class AndroidCameraCameraX extends CameraPlatform { }); } + /// Gets the minimum supported exposure offset for the selected camera in EV units. + @override + Future getMinExposureOffset(int cameraId) { + throw UnimplementedError('getMinExposureOffset() is not implemented.'); + } + + /// Gets the maximum supported exposure offset for the selected camera in EV units. + @override + Future getMaxExposureOffset(int cameraId) { + throw UnimplementedError('getMaxExposureOffset() is not implemented.'); + } + + /// Gets the supported step size for exposure offset for the selected camera in EV units. + /// + /// Returns 0 when the camera supports using a free value without stepping. + @override + Future getExposureOffsetStepSize(int cameraId) { + throw UnimplementedError('getMinExposureOffset() is not implemented.'); + } + + /// Gets the maximum supported zoom level for the selected camera. + @override + Future getMaxZoomLevel(int cameraId) { + throw UnimplementedError('getMaxZoomLevel() is not implemented.'); + } + + /// Gets the minimum supported zoom level for the selected camera. + @override + Future getMinZoomLevel(int cameraId) { + throw UnimplementedError('getMinZoomLevel() is not implemented.'); + } + /// The ui orientation changed. @override Stream onDeviceOrientationChanged() { diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart index 0a1b3ce3b285..18d2de098702 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart @@ -6,9 +6,11 @@ import 'camera.dart'; import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.g.dart'; +import 'exposure_state.dart'; import 'java_object.dart'; import 'process_camera_provider.dart'; import 'system_services.dart'; +import 'zoom_state.dart'; /// Handles initialization of Flutter APIs for the Android CameraX library. class AndroidCameraXCameraFlutterApis { @@ -20,6 +22,8 @@ class AndroidCameraXCameraFlutterApis { CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi, ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi, SystemServicesFlutterApiImpl? systemServicesFlutterApi, + ExposureStateFlutterApiImpl? exposureStateFlutterApi, + ZoomStateFlutterApiImpl? zoomStateFlutterApi, }) { this.javaObjectFlutterApi = javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); @@ -32,6 +36,10 @@ class AndroidCameraXCameraFlutterApis { this.cameraFlutterApi = cameraFlutterApi ?? CameraFlutterApiImpl(); this.systemServicesFlutterApi = systemServicesFlutterApi ?? SystemServicesFlutterApiImpl(); + this.exposureStateFlutterApi = + exposureStateFlutterApi ?? ExposureStateFlutterApiImpl(); + this.zoomStateFlutterApi = + zoomStateFlutterApi ?? ZoomStateFlutterApiImpl(); } static bool _haveBeenSetUp = false; @@ -61,6 +69,12 @@ class AndroidCameraXCameraFlutterApis { /// Flutter Api for [SystemServices]. late final SystemServicesFlutterApiImpl systemServicesFlutterApi; + /// Flutter Api for [ExposureState]. + late final ExposureStateFlutterApiImpl exposureStateFlutterApi; + + /// Flutter Api for [ZoomState]. + late final ZoomStateFlutterApiImpl exposureStateFlutterApi; + /// Ensures all the Flutter APIs have been setup to receive calls from native code. void ensureSetUp() { if (!_haveBeenSetUp) { @@ -70,6 +84,8 @@ class AndroidCameraXCameraFlutterApis { ProcessCameraProviderFlutterApi.setup(processCameraProviderFlutterApi); CameraFlutterApi.setup(cameraFlutterApi); SystemServicesFlutterApi.setup(systemServicesFlutterApi); + ExposureStateFlutterApi.setup(exposureStateFlutterApi); + ZoomStateFlutterApiImpl.setup(exposureStateFlutterApi); _haveBeenSetUp = true; } } diff --git a/packages/camera/camera_android_camerax/lib/src/camera.dart b/packages/camera/camera_android_camerax/lib/src/camera.dart index 24ff30540b28..f16408c9911c 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera.dart @@ -23,7 +23,7 @@ class Camera extends JavaObject { /// 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_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index 8c2c7bcf0aec..ebc5818f4258 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -26,9 +26,17 @@ class CameraInfo extends JavaObject { late final CameraInfoHostApiImpl _api; - /// Gets sensor orientation degrees of camera. + /// Gets sensor orientation degrees of the camera. Future getSensorRotationDegrees() => _api.getSensorRotationDegreesFromInstance(this); + + /// Gets the exposure state of the camera. + Future getExposureState() => + _api.getExposureStateFromInstance(this); + + /// Gets the zoom state of the camera. + Future getZoomState() => + _api.getZoomStateFromInstance(this); } /// Host API implementation of [CameraInfo]. @@ -42,7 +50,7 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { /// Maintains instances stored to communicate with native language objects. late final InstanceManager instanceManager; - /// Gets sensor orientation degrees of [CameraInfo]. + /// Gets sensor orientation degrees of the specified [CameraInfo] instance. Future getSensorRotationDegreesFromInstance( CameraInfo instance, ) async { @@ -50,6 +58,26 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { instanceManager.getIdentifier(instance)!); return sensorRotationDegrees; } + + /// Gets the [ExposureState] of the specified [CameraInfo] instance. + Future getExposureStateFromInstance(CameraInfo instance) { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No CameraInfo has the identifer of that requested to get the resolution information for.'); + + final int exposureStateIdentifier = await getExposureState(identifier); + return instanceManager.getInstanceWithWeakReference(exposureStateIdentifier!)! + } + + /// Gets the [ZoomState] of the specified [CameraInfo] instance. + Future getExposureStateFromInstance(CameraInfo instance) { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No CameraInfo has the identifer of that requested to get the resolution information for.'); + + final int exposureStateIdentifier = await getZoomState(identifier); + return instanceManager.getInstanceWithWeakReference(exposureStateIdentifier!)! + } } /// Flutter API implementation of [CameraInfo]. diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index 473839cac796..8014a5a2bfb7 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -63,6 +63,32 @@ class CameraPermissionsErrorData { } } +class ExposureRange { + ExposureRange({ + required this.minCompensation, + required this.maxCompensation, + }); + + double minCompensation; + + double maxCompensation; + + Object encode() { + return [ + minCompensation, + maxCompensation, + ]; + } + + static ExposureRange decode(Object result) { + result as List; + return ExposureRange( + minCompensation: result[0]! as double, + maxCompensation: result[1]! as double, + ); + } +} + class InstanceManagerHostApi { /// Constructor for [InstanceManagerHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default @@ -80,7 +106,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 +163,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 +173,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, @@ -196,6 +222,60 @@ class CameraInfoHostApi { return (replyList[0] as int?)!; } } + + Future getExposureState(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraInfoHostApi.getExposureState', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as int?)!; + } + } + + Future getZoomState(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraInfoHostApi.getZoomState', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as int?)!; + } + } } abstract class CameraInfoFlutterApi { @@ -203,8 +283,7 @@ abstract class CameraInfoFlutterApi { void create(int identifier); - static void setup(CameraInfoFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(CameraInfoFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraInfoFlutterApi.create', codec, @@ -214,7 +293,7 @@ abstract class CameraInfoFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -241,8 +320,8 @@ class CameraSelectorHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_lensFacing]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_lensFacing]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -259,13 +338,12 @@ class CameraSelectorHostApi { } } - Future> filter( - int arg_identifier, List arg_cameraInfoIds) async { + Future> filter(int arg_identifier, List arg_cameraInfoIds) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_cameraInfoIds]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_cameraInfoIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -293,8 +371,7 @@ abstract class CameraSelectorFlutterApi { void create(int identifier, int? lensFacing); - static void setup(CameraSelectorFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(CameraSelectorFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, @@ -304,7 +381,7 @@ abstract class CameraSelectorFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -332,7 +409,8 @@ class ProcessCameraProviderHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; + final List? replyList = + await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -356,8 +434,7 @@ class ProcessCameraProviderHostApi { Future> getAvailableCameraInfos(int arg_identifier) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', - codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_identifier]) as List?; @@ -382,17 +459,12 @@ class ProcessCameraProviderHostApi { } } - Future bindToLifecycle(int arg_identifier, - int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { + Future bindToLifecycle(int arg_identifier, int arg_cameraSelectorIdentifier, List arg_useCaseIds) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', - codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send([ - arg_identifier, - arg_cameraSelectorIdentifier, - arg_useCaseIds - ]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_cameraSelectorIdentifier, arg_useCaseIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -419,8 +491,7 @@ class ProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_identifier, arg_useCaseIdentifier]) - as List?; + await channel.send([arg_identifier, arg_useCaseIdentifier]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -446,8 +517,8 @@ class ProcessCameraProviderHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_useCaseIds]) as List?; + final List? replyList = + await channel.send([arg_identifier, arg_useCaseIds]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -492,8 +563,7 @@ abstract class ProcessCameraProviderFlutterApi { void create(int identifier); - static void setup(ProcessCameraProviderFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(ProcessCameraProviderFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, @@ -503,7 +573,7 @@ abstract class ProcessCameraProviderFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -531,7 +601,7 @@ abstract class CameraFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -559,7 +629,7 @@ class _SystemServicesHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -577,11 +647,9 @@ class SystemServicesHostApi { static const MessageCodec codec = _SystemServicesHostApiCodec(); - Future requestCameraPermissions( - bool arg_enableAudio) async { + Future requestCameraPermissions(bool arg_enableAudio) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: _binaryMessenger); final List? replyList = await channel.send([arg_enableAudio]) as List?; @@ -601,15 +669,12 @@ class SystemServicesHostApi { } } - Future startListeningForDeviceOrientationChange( - bool arg_isFrontFacing, int arg_sensorOrientation) async { + Future startListeningForDeviceOrientationChange(bool arg_isFrontFacing, int arg_sensorOrientation) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_isFrontFacing, arg_sensorOrientation]) - as List?; + await channel.send([arg_isFrontFacing, arg_sensorOrientation]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -628,10 +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', @@ -656,19 +721,17 @@ abstract class SystemServicesFlutterApi { void onCameraError(String errorDescription); - static void setup(SystemServicesFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(SystemServicesFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', - codec, + 'dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged was null.'); final List args = (message as List?)!; final String? arg_orientation = (args[0] as String?); assert(arg_orientation != null, @@ -687,7 +750,7 @@ abstract class SystemServicesFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError was null.'); final List args = (message as List?)!; final String? arg_errorDescription = (args[0] as String?); assert(arg_errorDescription != null, @@ -718,9 +781,9 @@ class _PreviewHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - case 129: + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -738,14 +801,12 @@ class PreviewHostApi { static const MessageCodec codec = _PreviewHostApiCodec(); - Future create(int arg_identifier, int? arg_rotation, - ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_rotation, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_rotation, arg_targetResolution]) - as List?; + final List? replyList = + await channel.send([arg_identifier, arg_rotation, arg_targetResolution]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -793,7 +854,8 @@ class PreviewHostApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; + final List? replyList = + await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -853,7 +915,7 @@ class _ImageCaptureHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -871,14 +933,12 @@ class ImageCaptureHostApi { static const MessageCodec codec = _ImageCaptureHostApiCodec(); - Future create(int arg_identifier, int? arg_flashMode, - ResolutionInfo? arg_targetResolution) async { + Future create(int arg_identifier, int? arg_flashMode, ResolutionInfo? arg_targetResolution) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send( - [arg_identifier, arg_flashMode, arg_targetResolution]) - as List?; + final List? replyList = + await channel.send([arg_identifier, arg_flashMode, arg_targetResolution]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -899,8 +959,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', @@ -944,3 +1004,212 @@ class ImageCaptureHostApi { } } } + +class _ExposureStateHostApiCodec extends StandardMessageCodec { + const _ExposureStateHostApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is ExposureRange) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return ExposureRange.decode(readValue(buffer)!); + default: + return super.readValueOfType(type, buffer); + } + } +} + +class ExposureStateHostApi { + /// Constructor for [ExposureStateHostApi]. 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. + ExposureStateHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = _ExposureStateHostApiCodec(); + + Future getExposureCompensationRange(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationRange', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as ExposureRange?)!; + } + } + + Future getExposureCompensationStep(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationStep', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as double?)!; + } + } +} + +abstract class ExposureStateFlutterApi { + static const MessageCodec codec = StandardMessageCodec(); + + void create(int identifier); + + static void setup(ExposureStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ExposureStateFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!); + return; + }); + } + } + } +} + +class ZoomStateHostApi { + /// Constructor for [ZoomStateHostApi]. 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. + ZoomStateHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = StandardMessageCodec(); + + Future getMaxZoomRatio(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ZoomStateHostApi.getMaxZoomRatio', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as double?)!; + } + } + + Future getMinZoomRatio(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ZoomStateHostApi.getMinZoomRatio', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as double?)!; + } + } +} + +abstract class ExposureStateFlutterApi { + static const MessageCodec codec = StandardMessageCodec(); + + void create(int identifier); + + static void setup(ExposureStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ExposureStateFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!); + return; + }); + } + } + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/exposure_state.dart b/packages/camera/camera_android_camerax/lib/src/exposure_state.dart new file mode 100644 index 000000000000..d3a87a2be4d4 --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/exposure_state.dart @@ -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. + +import 'package:flutter/services.dart' show BinaryMessenger; + +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camerax_library.g.dart'; +import 'instance_manager.dart'; +import 'java_object.dart'; + +/// Represents exposure related information of a camera. +/// +/// See https://developer.android.com/reference/androidx/camera/core/ExposureState. +class ExposureState extends JavaObject { + /// Constructs a [CameraInfo] that is not automatically attached to a native object. + ExposureState.detached( + {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = ExposureStateHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + } + + late final ExposureStateHostApiImpl _api; + +/// Gets the maximum and minimum exposure compensation values for the camera +/// represented by this instance. +Future getExposureCompensationRange() => _api.getExposureCompensationRangeFromInstance(this); + +/// Gets the smallest step by which the exposure compensation can be changed for +/// the camera represented by this instance. +Future getExposureCompensationStep() => _api.getExposureCompensationStepFromInstance(this); +} + +/// Host API implementation of [ExposureState]. +class ExposureStateHostApiImpl extends ExposureStateHostApi { + /// Constructs a [ExposureStateHostApiImpl]. + ExposureStateHostApiImpl( + {super.binaryMessenger, InstanceManager? instanceManager}) { + this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + } + + /// Maintains instances stored to communicate with native language objects. + late final InstanceManager instanceManager; + + /// Gets the maximum and minimum exposure compensation values for the camera + /// represented by the specified [ExposureState] instance. + Future getExposureCompensationRange( + ExposureState instance, + ) async { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No ExposureState has the identifer of that requested to get the resolution information for.'); + + final ExposureRange exposureCompensationRange = await getExposureCompensationRange(identifier); + return exposureCompensationRange; + } + + /// Gets the smallest step by which the exposure compensation can be changed for + /// the camera represented by the specified [ExposureState] instance. + Future getExposureCompensationStepFromInstance(ExposureState instance) async { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No ExposureState has the identifer of that requested to get the resolution information for.'); + + final double exposureCompensationState = await getExposureCompensationRange(identifier); + return exposureCompensationState; + } +} + + +/// Flutter API implementation of [ExposureState]. +class ExposureStateFlutterApiImpl implements ExposureStateFlutterApi { + /// Constructs a [ExposureStateFlutterApiImpl]. + ExposureStateFlutterApiImpl({ + 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( + ExposureState.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager), + identifier, + onCopy: (ExposureState original) { + return ExposureState.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + }, + ); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/zoom_state.dart b/packages/camera/camera_android_camerax/lib/src/zoom_state.dart new file mode 100644 index 000000000000..a0f4bdf9d8b6 --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/zoom_state.dart @@ -0,0 +1,102 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/services.dart' show BinaryMessenger; + +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camerax_library.g.dart'; +import 'instance_manager.dart'; +import 'java_object.dart'; + +/// Represents zoom related information of a camera. +/// +/// See https://developer.android.com/reference/androidx/camera/core/ZoomState. +class ZoomState extends JavaObject { + /// Constructs a [CameraInfo] that is not automatically attached to a native object. + ZoomState.detached( + {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = ZoomStateHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + } + + late final ZoomStateHostApiImpl _api; + +/// Gets the maximum zoom ratio of the camera represented by this instance. +Future getMaxZoomRatio() => _api.getMaxZoomRatioFromInstance(this); + +/// Gets the minimum zoom ratio of the camera represented by this instance. +Future getMinZoomRatio() => _api.getMinZoomRatioFromInstance(this); +} + +/// Host API implementation of [ZoomState]. +class ZoomStateHostApiImpl extends ZoomStateHostApi { + /// Constructs a [ZoomStateHostApiImpl]. + ZoomStateHostApiImpl( + {super.binaryMessenger, InstanceManager? instanceManager}) { + this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + } + + /// Maintains instances stored to communicate with native language objects. + late final InstanceManager instanceManager; + + /// Gets the maximum zoom ratio of the camera represented by the specified + /// [ZoomState] instance. + Future getMaxZoomRatioFromInstance( + ZoomState instance, + ) async { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No ZoomState has the identifer of that requested to get the resolution information for.'); + + final double maxZoomRatio = await getMaxZoomRatio(identifier); + return maxZoomRatio; + } + + /// Gets the minimum zoom ratio of the camera represented by the specified + /// [ZoomState] instance. + Future getMinZoomRatioFromInstance(ZoomState instance) async { + final int? identifier = instanceManager.getIdentifier(instance); + assert(identifier != null, + 'No ZoomState has the identifer of that requested to get the resolution information for.'); + + final double minZoomRatio = await getMinZoomRatio(identifier); + return minZoomRatio; + } +} + + +/// Flutter API implementation of [ZoomState]. +class ZoomStateFlutterApiImpl implements ZoomStateFlutterApi { + /// Constructs a [ZoomStateFlutterApiImpl]. + ZoomStateFlutterApiImpl({ + 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( + ZoomState.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager), + identifier, + onCopy: (ZoomState original) { + return ZoomState.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + }, + ); + } +} diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index cf580aa396a7..92b74296f0a6 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -46,6 +46,16 @@ class CameraPermissionsErrorData { String description; } +class ExposureRange{ + ExposureRange({ + required this.minCompensation, + required this.maxCompensation, + }); + + double minCompensation; + double maxCompensation; +} + @HostApi(dartHostTestHandler: 'TestInstanceManagerHostApi') abstract class InstanceManagerHostApi { /// Clear the native `InstanceManager`. @@ -67,6 +77,10 @@ abstract class JavaObjectFlutterApi { @HostApi(dartHostTestHandler: 'TestCameraInfoHostApi') abstract class CameraInfoHostApi { int getSensorRotationDegrees(int identifier); + + int getExposureState(int identifier); + + int getZoomState(int identifier); } @FlutterApi() @@ -151,3 +165,27 @@ abstract class ImageCaptureHostApi { @async String takePicture(int identifier); } + +@HostApi(dartHostTestHandler: 'TestExposureStateHostApi') +abstract class ExposureStateHostApi { + ExposureRange getExposureCompensationRange(int identifier); + + double getExposureCompensationStep(int identifier); +} + +@FlutterApi() +abstract class ExposureStateFlutterApi { + void create(int identifier); +} + +@HostApi(dartHostTestHandler: 'TestExposureStateHostApi') +abstract class ZoomStateHostApi { + double getMaxZoomRatio(int identifier); + + double getMinZoomRatio(int identifier); +} + +@FlutterApi() +abstract class ExposureStateFlutterApi { + 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 2bb655ffb630..4590ac804b9b 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -21,8 +21,7 @@ abstract class TestInstanceManagerHostApi { /// This is typically only used after a hot restart. void clear(); - static void setup(TestInstanceManagerHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestInstanceManagerHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, @@ -45,8 +44,7 @@ abstract class TestJavaObjectHostApi { void dispose(int identifier); - static void setup(TestJavaObjectHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestJavaObjectHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, @@ -56,7 +54,7 @@ abstract class TestJavaObjectHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -74,19 +72,21 @@ abstract class TestCameraInfoHostApi { int getSensorRotationDegrees(int identifier); - static void setup(TestCameraInfoHostApi? api, - {BinaryMessenger? binaryMessenger}) { + int getExposureState(int identifier); + + int getZoomState(int identifier); + + 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, @@ -96,6 +96,44 @@ abstract class TestCameraInfoHostApi { }); } } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraInfoHostApi.getExposureState', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getExposureState was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getExposureState was null, expected non-null int.'); + final int output = api.getExposureState(arg_identifier!); + return [output]; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraInfoHostApi.getZoomState', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getZoomState was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getZoomState was null, expected non-null int.'); + final int output = api.getZoomState(arg_identifier!); + return [output]; + }); + } + } } } @@ -106,8 +144,7 @@ abstract class TestCameraSelectorHostApi { List filter(int identifier, List cameraInfoIds); - static void setup(TestCameraSelectorHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraSelectorHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, @@ -117,7 +154,7 @@ abstract class TestCameraSelectorHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -137,17 +174,15 @@ abstract class TestCameraSelectorHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); - final List? arg_cameraInfoIds = - (args[1] as List?)?.cast(); + final List? arg_cameraInfoIds = (args[1] as List?)?.cast(); assert(arg_cameraInfoIds != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); - final List output = - api.filter(arg_identifier!, arg_cameraInfoIds!); + final List output = api.filter(arg_identifier!, arg_cameraInfoIds!); return [output]; }); } @@ -162,8 +197,7 @@ abstract class TestProcessCameraProviderHostApi { List getAvailableCameraInfos(int identifier); - int bindToLifecycle( - int identifier, int cameraSelectorIdentifier, List useCaseIds); + int bindToLifecycle(int identifier, int cameraSelectorIdentifier, List useCaseIds); bool isBound(int identifier, int useCaseIdentifier); @@ -171,8 +205,7 @@ abstract class TestProcessCameraProviderHostApi { void unbindAll(int identifier); - static void setup(TestProcessCameraProviderHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestProcessCameraProviderHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, @@ -189,36 +222,33 @@ abstract class TestProcessCameraProviderHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', - codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); - final List output = - api.getAvailableCameraInfos(arg_identifier!); + final List output = api.getAvailableCameraInfos(arg_identifier!); return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', - codec, + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -226,12 +256,10 @@ abstract class TestProcessCameraProviderHostApi { final int? arg_cameraSelectorIdentifier = (args[1] as int?); assert(arg_cameraSelectorIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null int.'); - final List? arg_useCaseIds = - (args[2] as List?)?.cast(); + final List? arg_useCaseIds = (args[2] as List?)?.cast(); assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null, expected non-null List.'); - final int output = api.bindToLifecycle( - arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); + final int output = api.bindToLifecycle(arg_identifier!, arg_cameraSelectorIdentifier!, arg_useCaseIds!); return [output]; }); } @@ -245,7 +273,7 @@ abstract class TestProcessCameraProviderHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -253,8 +281,7 @@ abstract class TestProcessCameraProviderHostApi { final int? arg_useCaseIdentifier = (args[1] as int?); assert(arg_useCaseIdentifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null, expected non-null int.'); - final bool output = - api.isBound(arg_identifier!, arg_useCaseIdentifier!); + final bool output = api.isBound(arg_identifier!, arg_useCaseIdentifier!); return [output]; }); } @@ -268,13 +295,12 @@ abstract class TestProcessCameraProviderHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null int.'); - final List? arg_useCaseIds = - (args[1] as List?)?.cast(); + final List? arg_useCaseIds = (args[1] as List?)?.cast(); assert(arg_useCaseIds != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null, expected non-null List.'); api.unbind(arg_identifier!, arg_useCaseIds!); @@ -291,7 +317,7 @@ abstract class TestProcessCameraProviderHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -319,7 +345,7 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return CameraPermissionsErrorData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -330,48 +356,42 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { abstract class TestSystemServicesHostApi { static const MessageCodec codec = _TestSystemServicesHostApiCodec(); - Future requestCameraPermissions( - bool enableAudio); + Future requestCameraPermissions(bool enableAudio); - void startListeningForDeviceOrientationChange( - bool isFrontFacing, int sensorOrientation); + void startListeningForDeviceOrientationChange(bool isFrontFacing, int sensorOrientation); void stopListeningForDeviceOrientationChange(); - static void setup(TestSystemServicesHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestSystemServicesHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); final List args = (message as List?)!; final bool? arg_enableAudio = (args[0] as bool?); assert(arg_enableAudio != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null, expected non-null bool.'); - final CameraPermissionsErrorData? output = - await api.requestCameraPermissions(arg_enableAudio!); + final CameraPermissionsErrorData? output = await api.requestCameraPermissions(arg_enableAudio!); return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); + 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); final List args = (message as List?)!; final bool? arg_isFrontFacing = (args[0] as bool?); assert(arg_isFrontFacing != null, @@ -379,16 +399,14 @@ abstract class TestSystemServicesHostApi { final int? arg_sensorOrientation = (args[1] as int?); assert(arg_sensorOrientation != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null, expected non-null int.'); - api.startListeningForDeviceOrientationChange( - arg_isFrontFacing!, arg_sensorOrientation!); + api.startListeningForDeviceOrientationChange(arg_isFrontFacing!, arg_sensorOrientation!); return []; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', - codec, + 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); @@ -421,9 +439,9 @@ class _TestPreviewHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); - case 129: + case 129: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -442,8 +460,7 @@ abstract class TestPreviewHostApi { ResolutionInfo getResolutionInfo(int identifier); - static void setup(TestPreviewHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestPreviewHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.PreviewHostApi.create', codec, @@ -453,14 +470,13 @@ abstract class TestPreviewHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null, expected non-null int.'); final int? arg_rotation = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = - (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_rotation, arg_targetResolution); return []; }); @@ -475,7 +491,7 @@ abstract class TestPreviewHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -487,8 +503,7 @@ abstract class TestPreviewHostApi { } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', - codec, + 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); @@ -509,7 +524,7 @@ abstract class TestPreviewHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); + 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -537,7 +552,7 @@ class _TestImageCaptureHostApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ResolutionInfo.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -554,8 +569,7 @@ abstract class TestImageCaptureHostApi { Future takePicture(int identifier); - static void setup(TestImageCaptureHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageCaptureHostApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, @@ -565,14 +579,13 @@ abstract class TestImageCaptureHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null, expected non-null int.'); final int? arg_flashMode = (args[1] as int?); - final ResolutionInfo? arg_targetResolution = - (args[2] as ResolutionInfo?); + final ResolutionInfo? arg_targetResolution = (args[2] as ResolutionInfo?); api.create(arg_identifier!, arg_flashMode, arg_targetResolution); return []; }); @@ -587,7 +600,7 @@ abstract class TestImageCaptureHostApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); + 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -609,7 +622,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, @@ -621,3 +634,124 @@ abstract class TestImageCaptureHostApi { } } } + +class _TestExposureStateHostApiCodec extends StandardMessageCodec { + const _TestExposureStateHostApiCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is ExposureRange) { + buffer.putUint8(128); + writeValue(buffer, value.encode()); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return ExposureRange.decode(readValue(buffer)!); + default: + return super.readValueOfType(type, buffer); + } + } +} + +abstract class TestExposureStateHostApi { + static const MessageCodec codec = _TestExposureStateHostApiCodec(); + + ExposureRange getExposureCompensationRange(int identifier); + + double getExposureCompensationStep(int identifier); + + static void setup(TestExposureStateHostApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationRange', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationRange was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationRange was null, expected non-null int.'); + final ExposureRange output = api.getExposureCompensationRange(arg_identifier!); + return [output]; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationStep', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationStep was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationStep was null, expected non-null int.'); + final double output = api.getExposureCompensationStep(arg_identifier!); + return [output]; + }); + } + } + } +} + +abstract class TestExposureStateHostApi { + static const MessageCodec codec = StandardMessageCodec(); + + double getMaxZoomRatio(int identifier); + + double getMinZoomRatio(int identifier); + + static void setup(TestExposureStateHostApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ZoomStateHostApi.getMaxZoomRatio', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ZoomStateHostApi.getMaxZoomRatio was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ZoomStateHostApi.getMaxZoomRatio was null, expected non-null int.'); + final double output = api.getMaxZoomRatio(arg_identifier!); + return [output]; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ZoomStateHostApi.getMinZoomRatio', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ZoomStateHostApi.getMinZoomRatio was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ZoomStateHostApi.getMinZoomRatio was null, expected non-null int.'); + final double output = api.getMinZoomRatio(arg_identifier!); + return [output]; + }); + } + } + } +} From 011d20506d384885bdc1b951ee37d81f05a2c16c Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 30 Mar 2023 10:42:47 -0700 Subject: [PATCH 02/19] Add impl code --- .../plugins/camerax/CameraHostApiImpl.java | 39 +++++++++++++ .../camerax/GeneratedCameraXLibrary.java | 38 +++++++++++++ .../lib/src/android_camera_camerax.dart | 55 +++++++++++++++---- .../lib/src/camera.dart | 49 ++++++++++++++++- .../lib/src/camerax_library.g.dart | 38 +++++++++++++ .../pigeons/camerax_library.dart | 5 ++ .../test/test_camerax_library.g.dart | 28 ++++++++++ 7 files changed, 238 insertions(+), 14 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/CameraHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java new file mode 100644 index 000000000000..f21c0b520a34 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java @@ -0,0 +1,39 @@ +// 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; + } + + /** + * 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)); + 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/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index d315e404ae43..9678b3d226f7 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 @@ -791,6 +791,44 @@ public void create(@NonNull Long identifierArg, Reply callback) { channelReply -> callback.reply(null)); } } + /** 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 new StandardMessageCodec(); + } + /**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) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + try { + Long output = api.getCameraInfo((identifierArg == null) ? null : identifierArg.longValue()); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class CameraFlutterApi { private final BinaryMessenger binaryMessenger; diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index bcc4daa0f00f..141a4c438737 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 @@ -19,6 +19,8 @@ import 'surface.dart'; import 'system_services.dart'; import 'use_case.dart'; +// TODO(camsim99): Get camerainfo and update it every time camera is updated. + /// The Android implementation of [CameraPlatform] that uses the CameraX library. class AndroidCameraCameraX extends CameraPlatform { /// Registers this class as the default instance of [CameraPlatform]. @@ -35,6 +37,9 @@ class AndroidCameraCameraX extends CameraPlatform { @visibleForTesting Camera? camera; + /// The [CameraInfo] instance that corresponds to the [camera] instance. + CameraInfo? cameraInfo; + /// The [Preview] instance that can be configured to present a live camera preview. @visibleForTesting Preview? preview; @@ -117,7 +122,6 @@ class AndroidCameraCameraX extends CameraPlatform { /// In the CameraX library, cameras are accessed by combining [UseCase]s /// to an instance of a [ProcessCameraProvider]. Thus, to create an /// unitialized camera instance, this method retrieves a - /// [ProcessCameraProvider] instance. /// /// 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 @@ -163,6 +167,7 @@ class AndroidCameraCameraX extends CameraPlatform { // instance as bound but not paused. camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); + cameraInfo = await camera.getCameraInfo(); _previewIsPaused = false; return flutterSurfaceTextureId; @@ -243,34 +248,61 @@ class AndroidCameraCameraX extends CameraPlatform { /// Gets the minimum supported exposure offset for the selected camera in EV units. @override - Future getMinExposureOffset(int cameraId) { - throw UnimplementedError('getMinExposureOffset() is not implemented.'); + Future getMinExposureOffset(int cameraId) async { + assert(cameraInfo != null); + + ExposureState exposureState = await cameraInfo.getExposureState(); + ExposureRange exposureCompensationRange = await exposureState.getExposureCompensationRange(); + double exposureCompensationStep = await exposureState.getExposureCompensationStep(); + + return exposureCompensationRange.minCompensation * exposureCompensationStep; } /// Gets the maximum supported exposure offset for the selected camera in EV units. @override - Future getMaxExposureOffset(int cameraId) { - throw UnimplementedError('getMaxExposureOffset() is not implemented.'); + Future getMaxExposureOffset(int cameraId) async { + assert(cameraInfo != null); + + ExposureState exposureState = await cameraInfo.getExposureState(); + ExposureRange exposureCompensationRange = await exposureState.getExposureCompensationRange(); + double exposureCompensationStep = await exposureState.getExposureCompensationStep(); + + return exposureCompensationRange.maxCompensation * exposureCompensationStep; } /// Gets the supported step size for exposure offset for the selected camera in EV units. /// /// Returns 0 when the camera supports using a free value without stepping. @override - Future getExposureOffsetStepSize(int cameraId) { - throw UnimplementedError('getMinExposureOffset() is not implemented.'); + Future getExposureOffsetStepSize(int cameraId) async { + assert(cameraInfo != null); + + ExposureState exposureState = await cameraInfo.getExposureState(); + double exposureCompensationStep = await exposureState.getExposureCompensationStep(); + + return exposureCompensationStep; } /// Gets the maximum supported zoom level for the selected camera. @override - Future getMaxZoomLevel(int cameraId) { - throw UnimplementedError('getMaxZoomLevel() is not implemented.'); + Future getMaxZoomLevel(int cameraId) async { + assert(cameraInfo != null); + + ZoomState exposureState = await cameraInfo.getZoomState(); + double maxZoomRatio = await exposureState.getMaxZoomRatio(); + + return maxZoomRatio; } /// Gets the minimum supported zoom level for the selected camera. @override - Future getMinZoomLevel(int cameraId) { - throw UnimplementedError('getMinZoomLevel() is not implemented.'); + Future getMinZoomLevel(int cameraId) async { + assert(cameraInfo != null); + + ZoomState exposureState = await cameraInfo.getZoomState(); + double minZoomRatio = await exposureState.getMinZoomRatio(); + + return minZoomRatio; } /// The ui orientation changed. @@ -349,6 +381,7 @@ class AndroidCameraCameraX extends CameraPlatform { camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!]); + cameraInfo = await camera.getCameraInfo(); } /// 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 f16408c9911c..7101be36e8c0 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'; @@ -15,15 +16,57 @@ 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() { + 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; + + /// Retrieve the [CameraInfo] instance that contains information about this + /// instance. + 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)!; + } } /// Flutter API implementation of [Camera]. class CameraFlutterApiImpl implements CameraFlutterApi { - /// Constructs a [CameraFlutterApiImpl]. + /// Constructs a [CameraSelectorFlutterApiImpl]. CameraFlutterApiImpl({ this.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 8014a5a2bfb7..b2af83a747ae 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 @@ -586,6 +586,44 @@ abstract class ProcessCameraProviderFlutterApi { } } +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 = StandardMessageCodec(); + + Future getCameraInfo(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraHostApi.getCameraInfo', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_identifier]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyList[0] as int?)!; + } + } +} + abstract class CameraFlutterApi { static const MessageCodec codec = StandardMessageCodec(); diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 92b74296f0a6..0d8dc8bf2de8 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -122,6 +122,11 @@ abstract class ProcessCameraProviderFlutterApi { void create(int identifier); } +@HostApi(dartHostTestHandler: 'TestCameraHostApi') +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 4590ac804b9b..7efa7b46ec1d 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 @@ -330,6 +330,34 @@ abstract class TestProcessCameraProviderHostApi { } } +abstract class TestCameraHostApi { + static const MessageCodec codec = StandardMessageCodec(); + + 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 [output]; + }); + } + } + } +} + class _TestSystemServicesHostApiCodec extends StandardMessageCodec { const _TestSystemServicesHostApiCodec(); @override From bec07343c54e723efaa2f64b198e506fbd8deb5e Mon Sep 17 00:00:00 2001 From: camsim99 Date: Sat, 22 Apr 2023 11:10:29 -0700 Subject: [PATCH 03/19] Redo wrapping --- .../camerax/CameraAndroidCameraxPlugin.java | 3 - .../camerax/CameraInfoHostApiImpl.java | 12 +- .../camerax/ExposureStateFlutterApiImpl.java | 14 +- .../camerax/ExposureStateHostApiImpl.java | 44 --- .../camerax/GeneratedCameraXLibrary.java | 307 ++++++------------ .../camerax/ZoomStateFlutterApiImpl.java | 8 +- .../plugins/camerax/ZoomStateHostApiImpl.java | 42 --- .../lib/src/android_camera_camerax.dart | 17 +- ...roid_camera_camerax_flutter_api_impls.dart | 20 +- .../lib/src/camera_info.dart | 26 +- .../lib/src/camerax_library.g.dart | 168 ++-------- .../lib/src/exposure_state.dart | 73 ++--- .../lib/src/zoom_state.dart | 70 +--- .../pigeons/camerax_library.dart | 23 +- .../test/test_camerax_library.g.dart | 228 ++++--------- 15 files changed, 279 insertions(+), 776 deletions(-) delete mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateHostApiImpl.java delete mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateHostApiImpl.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 71746791c9c8..3fd96b8de8d2 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 @@ -56,9 +56,6 @@ 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.ExposureStateHostApi.setup(binaryMessenger, new ExposureStateHostApiImpl(instanceManager)); - GeneratedCameraXLibrary.ZoomStateHostApi.setup(binaryMessenger, new ZoomStateHostApiImpl(instanceManager)); - } @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 add5f76dd56d..0352dcf27040 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 @@ -34,10 +34,8 @@ public Long getExposureState(@NonNull Long identifier) { (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); ExposureState exposureState = cameraInfo.getExposureState(); - if(!instanceManager.containsInstance(exposureState)) { - ExposureStateFlutterApiImpl exposureStateFlutterApiImpl = new ExposureStateFlutterApiImpl(binaryMessenger); - exposureStateFlutterApiImpl.create(exposureState, result -> {}); - } + ExposureStateFlutterApiImpl exposureStateFlutterApiImpl = new ExposureStateFlutterApiImpl(binaryMessenger); + exposureStateFlutterApiImpl.create(exposureState, result -> {}); return instanceManager.getIdentifierForStrongReference(exposureState); } @@ -51,10 +49,8 @@ public Long getZoomState(@NonNull Long identifier) { (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); ZoomState zoomState = cameraInfo.ZoomState().getValue(); - if(!instanceManager.containsInstance(zoomState)) { - ZoomStateFlutterApiImpl zoomStateFlutterApiImpl = new ZoomStateFlutterApiImpl(binaryMessenger); - zoomStateFlutterApiImpl.create(zoomState, result -> {}); - } + ZoomStateFlutterApiImpl zoomStateFlutterApiImpl = new ZoomStateFlutterApiImpl(binaryMessenger); + zoomStateFlutterApiImpl.create(zoomState, result -> {}); return instanceManager.getIdentifierForStrongReference(zoomState); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java index fb73d62ef892..78821fc79ee0 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java @@ -18,7 +18,19 @@ public ExposureStateFlutterApiImpl( this.instanceManager = instanceManager; } + /** + * Creates a {@link ExposureState} on the Dart side with its exposure compensation + * range that can be used to set the exposure compensation index and its exposure + * compensation step, the smallest step by which the exposure compensation can be + * changed. + */ void create(@NonNull ExposureState exposureState, @NonNull Reply reply) { - create(instanceManager.addHostCreatedInstance(exposureState), reply); + final Range exposureCompensationRange = exposureState.getExposureCompensationRange(); + ExposureRange exposureCompensationRangeAsExposureRange = ExposureRange.Builder().setMinCompensation(exposureCompensationRange.getLower()).setMaxCompensation(exposureCompensationRange.getUpper()).build() + final Double exposureCompensationStep = exposureState.getExposureCompensationStep().getValue(); + + if (!instanceManager.containsInstance(exposureState)) { + create(instanceManager.addHostCreatedInstance(exposureState), exposureCompensationRangeAsExposureRange, exposureCompensationStep, reply); + } } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateHostApiImpl.java deleted file mode 100644 index 6cf5abd7fad1..000000000000 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateHostApiImpl.java +++ /dev/null @@ -1,44 +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.ExposureState; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureRange; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureStateHostApi; -import java.util.Objects; - - -public class ExposureStateHostApiImpl implements ExposureStateHostApi { - private final InstanceManager instanceManager; - - public ExposureStateHostApiImpl(InstanceManager instanceManager) { - this.instanceManager = instanceManager; - } - - /** - * Gets the maximum and minimum exposure compensation values for the camera with the - * {@link ExposureState} with the specified identifier. - */ - @Override - public ExposureRange getExposureCompensationRange(@NonNull Long identifier) { - ExposureState exposureState = - (ExposureState) Objects.requireNonNull(instanceManager.getInstance(identifier)); - Range exposureCompensationRange = exposureState.getExposureCompensationRange(); - - return ExposureRange.Builder().setMinCompensation(exposureCompensationRange.getLower()).setMaxCompensation(exposureCompensationRange.getUpper()).build(); - } - - /** - * Gets the smallest step by which the exposure compensation can be changed - * for the camera with the {@link ExposureState} with the specified identifier. - */ - @Override - public Double getExposureCompensationStep(@NonNull Long identifier) { - ExposureState exposureState = - (ExposureState) Objects.requireNonNull(instanceManager.getInstance(identifier)); - return exposureState.getExposureCompensationStep.getValue(); - } -} 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 9678b3d226f7..9d47f79c3784 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v9.1.1), do not edit directly. +// Autogenerated from Pigeon (v9.2.4), do not edit directly. // See also: https://pub.dev/packages/pigeon package io.flutter.plugins.camerax; @@ -44,7 +44,7 @@ public FlutterError(@NonNull String code, @Nullable String message, @Nullable Ob } @NonNull - private static ArrayList wrapError(@NonNull Throwable exception) { + protected static ArrayList wrapError(@NonNull Throwable exception) { ArrayList errorList = new ArrayList(3); if (exception instanceof FlutterError) { FlutterError error = (FlutterError) exception; @@ -88,8 +88,8 @@ public void setHeight(@NonNull Long setterArg) { this.height = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private ResolutionInfo() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + ResolutionInfo() {} public static final class Builder { @@ -161,8 +161,8 @@ public void setDescription(@NonNull String setterArg) { this.description = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private CameraPermissionsErrorData() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + CameraPermissionsErrorData() {} public static final class Builder { @@ -234,8 +234,8 @@ public void setMaxCompensation(@NonNull Double setterArg) { this.maxCompensation = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private ExposureRange() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + ExposureRange() {} public static final class Builder { @@ -280,9 +280,10 @@ ArrayList toList() { } public interface Result { + @SuppressWarnings("UnknownNullness") void success(T result); - void error(Throwable error); + void error(@NonNull Throwable error); } /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface InstanceManagerHostApi { @@ -294,11 +295,11 @@ public interface InstanceManagerHostApi { void clear(); /** The codec used by InstanceManagerHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } /**Sets up an instance of `InstanceManagerHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, InstanceManagerHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable InstanceManagerHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -329,11 +330,11 @@ public interface JavaObjectHostApi { void dispose(@NonNull Long identifier); /** The codec used by JavaObjectHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } /**Sets up an instance of `JavaObjectHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, JavaObjectHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable JavaObjectHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -362,20 +363,22 @@ static void setup(BinaryMessenger binaryMessenger, JavaObjectHostApi api) { } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class JavaObjectFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public JavaObjectFlutterApi(BinaryMessenger argBinaryMessenger) { + public JavaObjectFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } /** The codec used by JavaObjectFlutterApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void dispose(@NonNull Long identifierArg, Reply callback) { + public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.JavaObjectFlutterApi.dispose", getCodec()); @@ -397,11 +400,11 @@ public interface CameraInfoHostApi { Long getZoomState(@NonNull Long identifier); /** The codec used by CameraInfoHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } /**Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfoHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -478,20 +481,22 @@ static void setup(BinaryMessenger binaryMessenger, CameraInfoHostApi api) { } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class CameraInfoFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public CameraInfoFlutterApi(BinaryMessenger argBinaryMessenger) { + public CameraInfoFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } /** The codec used by CameraInfoFlutterApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraInfoFlutterApi.create", getCodec()); @@ -509,11 +514,11 @@ public interface CameraSelectorHostApi { List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); /** The codec used by CameraSelectorHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } /**Sets up an instance of `CameraSelectorHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraSelectorHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -568,20 +573,22 @@ static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class CameraSelectorFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public CameraSelectorFlutterApi(BinaryMessenger argBinaryMessenger) { + public CameraSelectorFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } /** The codec used by CameraSelectorFlutterApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { + public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); @@ -593,7 +600,7 @@ public void create(@NonNull Long identifierArg, @Nullable Long lensFacingArg, Re /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ProcessCameraProviderHostApi { - void getInstance(Result result); + void getInstance(@NonNull Result result); @NonNull List getAvailableCameraInfos(@NonNull Long identifier); @@ -609,11 +616,11 @@ public interface ProcessCameraProviderHostApi { void unbindAll(@NonNull Long identifier); /** The codec used by ProcessCameraProviderHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } /**Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, ProcessCameraProviderHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ProcessCameraProviderHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -769,20 +776,22 @@ public void error(Throwable error) { } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class ProcessCameraProviderFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger) { + public ProcessCameraProviderFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } /** The codec used by ProcessCameraProviderFlutterApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", getCodec()); @@ -798,11 +807,11 @@ public interface CameraHostApi { 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) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -831,20 +840,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 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()); @@ -883,18 +894,18 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface SystemServicesHostApi { - void requestCameraPermissions(@NonNull Boolean enableAudio, Result result); + void requestCameraPermissions(@NonNull Boolean enableAudio, @NonNull Result result); void startListeningForDeviceOrientationChange(@NonNull Boolean isFrontFacing, @NonNull Long sensorOrientation); void stopListeningForDeviceOrientationChange(); /** The codec used by SystemServicesHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return SystemServicesHostApiCodec.INSTANCE; } /**Sets up an instance of `SystemServicesHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, SystemServicesHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable SystemServicesHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -975,20 +986,22 @@ public void error(Throwable error) { } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class SystemServicesFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public SystemServicesFlutterApi(BinaryMessenger argBinaryMessenger) { + public SystemServicesFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } /** The codec used by SystemServicesFlutterApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void onDeviceOrientationChanged(@NonNull String orientationArg, Reply callback) { + public void onDeviceOrientationChanged(@NonNull String orientationArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onDeviceOrientationChanged", getCodec()); @@ -996,7 +1009,7 @@ public void onDeviceOrientationChanged(@NonNull String orientationArg, Reply(Collections.singletonList(orientationArg)), channelReply -> callback.reply(null)); } - public void onCameraError(@NonNull String errorDescriptionArg, Reply callback) { + public void onCameraError(@NonNull String errorDescriptionArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.SystemServicesFlutterApi.onCameraError", getCodec()); @@ -1051,11 +1064,11 @@ public interface PreviewHostApi { ResolutionInfo getResolutionInfo(@NonNull Long identifier); /** The codec used by PreviewHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return PreviewHostApiCodec.INSTANCE; } /**Sets up an instance of `PreviewHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, PreviewHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable PreviewHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1188,14 +1201,14 @@ public interface ImageCaptureHostApi { void setFlashMode(@NonNull Long identifier, @NonNull Long flashMode); - void takePicture(@NonNull Long identifier, Result result); + void takePicture(@NonNull Long identifier, @NonNull Result result); /** The codec used by ImageCaptureHostApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return ImageCaptureHostApiCodec.INSTANCE; } /**Sets up an instance of `ImageCaptureHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, ImageCaptureHostApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageCaptureHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1279,10 +1292,10 @@ public void error(Throwable error) { } } - private static class ExposureStateHostApiCodec extends StandardMessageCodec { - public static final ExposureStateHostApiCodec INSTANCE = new ExposureStateHostApiCodec(); + private static class ExposureStateFlutterApiCodec extends StandardMessageCodec { + public static final ExposureStateFlutterApiCodec INSTANCE = new ExposureStateFlutterApiCodec(); - private ExposureStateHostApiCodec() {} + private ExposureStateFlutterApiCodec() {} @Override protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { @@ -1305,181 +1318,55 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface ExposureStateHostApi { - - @NonNull - ExposureRange getExposureCompensationRange(@NonNull Long identifier); - - @NonNull - Double getExposureCompensationStep(@NonNull Long identifier); - - /** The codec used by ExposureStateHostApi. */ - static MessageCodec getCodec() { - return ExposureStateHostApiCodec.INSTANCE; - } - /**Sets up an instance of `ExposureStateHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, ExposureStateHostApi api) { - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationRange", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - try { - ExposureRange output = api.getExposureCompensationRange((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); - } - catch (Throwable exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationStep", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - try { - Double output = api.getExposureCompensationStep((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); - } - catch (Throwable exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - } - } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ public static class ExposureStateFlutterApi { - private final BinaryMessenger binaryMessenger; + private final @NonNull BinaryMessenger binaryMessenger; - public ExposureStateFlutterApi(BinaryMessenger argBinaryMessenger) { + public ExposureStateFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } /** The codec used by ExposureStateFlutterApi. */ - static MessageCodec getCodec() { - return new StandardMessageCodec(); + static @NonNull MessageCodec getCodec() { + return ExposureStateFlutterApiCodec.INSTANCE; } - public void create(@NonNull Long identifierArg, Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull ExposureRange exposureCompensationRangeArg, @NonNull Double exposureCompensationStepArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ExposureStateFlutterApi.create", getCodec()); channel.send( - new ArrayList(Collections.singletonList(identifierArg)), + new ArrayList(Arrays.asList(identifierArg, exposureCompensationRangeArg, exposureCompensationStepArg)), channelReply -> callback.reply(null)); } } - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface ZoomStateHostApi { - - @NonNull - Double getMaxZoomRatio(@NonNull Long identifier); - - @NonNull - Double getMinZoomRatio(@NonNull Long identifier); - - /** The codec used by ZoomStateHostApi. */ - static MessageCodec getCodec() { - return new StandardMessageCodec(); - } - /**Sets up an instance of `ZoomStateHostApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, ZoomStateHostApi api) { - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ZoomStateHostApi.getMaxZoomRatio", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - try { - Double output = api.getMaxZoomRatio((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); - } - catch (Throwable exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ZoomStateHostApi.getMinZoomRatio", getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList(); - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - try { - Double output = api.getMinZoomRatio((identifierArg == null) ? null : identifierArg.longValue()); - wrapped.add(0, output); - } - catch (Throwable exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - } - } /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ - public static class ExposureStateFlutterApi { - private final BinaryMessenger binaryMessenger; + public static class ZoomStateFlutterApi { + private final @NonNull BinaryMessenger binaryMessenger; - public ExposureStateFlutterApi(BinaryMessenger argBinaryMessenger) { + public ZoomStateFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ public interface Reply { + /** Public interface for sending reply. */ + @SuppressWarnings("UnknownNullness") + public interface Reply { void reply(T reply); } - /** The codec used by ExposureStateFlutterApi. */ - static MessageCodec getCodec() { + /** The codec used by ZoomStateFlutterApi. */ + static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, Reply callback) { + public void create(@NonNull Long identifierArg, @NonNull Long minZoomRatioArg, @NonNull Long maxZoomRatioArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.ExposureStateFlutterApi.create", getCodec()); + binaryMessenger, "dev.flutter.pigeon.ZoomStateFlutterApi.create", getCodec()); channel.send( - new ArrayList(Collections.singletonList(identifierArg)), + new ArrayList(Arrays.asList(identifierArg, minZoomRatioArg, maxZoomRatioArg)), channelReply -> callback.reply(null)); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java index 17470ee0440c..1385f943dde0 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java @@ -18,7 +18,13 @@ public ZoomStateFlutterApiImpl( this.instanceManager = instanceManager; } + /** Creates a {@link ZoomState} on the Dart side with its minimum zoom ratio and maximum zoom ratio. */ void create(@NonNull ZoomState zoomState, @NonNull Reply reply) { - create(instanceManager.addHostCreatedInstance(zoomState), reply); + final float minZoomRatio = zoomState.getMinZoomRatio(); + final float maxZoomRatio = zoomState.getMaxZoomRatio(); + + if (!instanceManager.containsInstance(zoomState)) { + create(instanceManager.addHostCreatedInstance(zoomState),(Long) minZoomRatio, (Long) maxZoomRatio, reply); + } } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateHostApiImpl.java deleted file mode 100644 index 78ec5b8e0ed0..000000000000 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateHostApiImpl.java +++ /dev/null @@ -1,42 +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.ZoomState; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureRange; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ZoomStateHostApi; -import java.util.Objects; - - -public class ZoomStateHostApiImpl implements ZoomStateHostApi { - private final InstanceManager instanceManager; - - public ZoomStateHostApiImpl(InstanceManager instanceManager) { - this.instanceManager = instanceManager; - } - - /** - * Gets the maximum and minimum exposure compensation values for the camera with the - * {@link ZoomState} with the specified identifier. - */ - @Override - public Double getMaxZoomRatio(@NonNull Long identifier) { - ZoomState zoomState = - (ZoomState) Objects.requireNonNull(instanceManager.getInstance(identifier)); - return (Double) zoomState.getMaxZoomRatio(); - } - - /** - * Gets the smallest step by which the exposure compensation can be changed - * for the camera with the {@link ZoomState} with the specified identifier. - */ - @Override - public Double getMinZoomRatio(@NonNull Long identifier) { - ZoomState zoomState = - (ZoomState) Objects.requireNonNull(instanceManager.getInstance(identifier)); - return (Double) zoomState.getMinZoomRatio(); - } -} 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 141a4c438737..eb4cdbc0561e 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 @@ -19,8 +19,6 @@ import 'surface.dart'; import 'system_services.dart'; import 'use_case.dart'; -// TODO(camsim99): Get camerainfo and update it every time camera is updated. - /// The Android implementation of [CameraPlatform] that uses the CameraX library. class AndroidCameraCameraX extends CameraPlatform { /// Registers this class as the default instance of [CameraPlatform]. @@ -252,8 +250,10 @@ class AndroidCameraCameraX extends CameraPlatform { assert(cameraInfo != null); ExposureState exposureState = await cameraInfo.getExposureState(); - ExposureRange exposureCompensationRange = await exposureState.getExposureCompensationRange(); - double exposureCompensationStep = await exposureState.getExposureCompensationStep(); + ExposureRange exposureCompensationRange = + await exposureState.getExposureCompensationRange(); + double exposureCompensationStep = + await exposureState.getExposureCompensationStep(); return exposureCompensationRange.minCompensation * exposureCompensationStep; } @@ -264,8 +264,10 @@ class AndroidCameraCameraX extends CameraPlatform { assert(cameraInfo != null); ExposureState exposureState = await cameraInfo.getExposureState(); - ExposureRange exposureCompensationRange = await exposureState.getExposureCompensationRange(); - double exposureCompensationStep = await exposureState.getExposureCompensationStep(); + ExposureRange exposureCompensationRange = + await exposureState.getExposureCompensationRange(); + double exposureCompensationStep = + await exposureState.getExposureCompensationStep(); return exposureCompensationRange.maxCompensation * exposureCompensationStep; } @@ -278,7 +280,8 @@ class AndroidCameraCameraX extends CameraPlatform { assert(cameraInfo != null); ExposureState exposureState = await cameraInfo.getExposureState(); - double exposureCompensationStep = await exposureState.getExposureCompensationStep(); + double exposureCompensationStep = + await exposureState.getExposureCompensationStep(); return exposureCompensationStep; } 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 18d2de098702..c0e5d502190b 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 @@ -22,8 +22,8 @@ class AndroidCameraXCameraFlutterApis { CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi, ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi, SystemServicesFlutterApiImpl? systemServicesFlutterApi, - ExposureStateFlutterApiImpl? exposureStateFlutterApi, - ZoomStateFlutterApiImpl? zoomStateFlutterApi, + ExposureStateFlutterApiImpl? exposureStateFlutterApiImpl, + ZoomStateFlutterApiImpl? zoomStateFlutterApiImpl, }) { this.javaObjectFlutterApi = javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); @@ -36,10 +36,10 @@ class AndroidCameraXCameraFlutterApis { this.cameraFlutterApi = cameraFlutterApi ?? CameraFlutterApiImpl(); this.systemServicesFlutterApi = systemServicesFlutterApi ?? SystemServicesFlutterApiImpl(); - this.exposureStateFlutterApi = - exposureStateFlutterApi ?? ExposureStateFlutterApiImpl(); - this.zoomStateFlutterApi = - zoomStateFlutterApi ?? ZoomStateFlutterApiImpl(); + this.exposureStateFlutterApiImpl = + exposureStateFlutterApiImpl ?? ExposureStateFlutterApiImpl(); + this.zoomStateFlutterApiImpl = + zoomStateFlutterApiImpl ?? ZoomStateFlutterApiImpl(); } static bool _haveBeenSetUp = false; @@ -70,10 +70,10 @@ class AndroidCameraXCameraFlutterApis { late final SystemServicesFlutterApiImpl systemServicesFlutterApi; /// Flutter Api for [ExposureState]. - late final ExposureStateFlutterApiImpl exposureStateFlutterApi; + late final ExposureStateFlutterApiImpl exposureStateFlutterApiImpl; /// Flutter Api for [ZoomState]. - late final ZoomStateFlutterApiImpl exposureStateFlutterApi; + late final ZoomStateFlutterApiImpl zoomStateFlutterApiImpl; /// Ensures all the Flutter APIs have been setup to receive calls from native code. void ensureSetUp() { @@ -84,8 +84,8 @@ class AndroidCameraXCameraFlutterApis { ProcessCameraProviderFlutterApi.setup(processCameraProviderFlutterApi); CameraFlutterApi.setup(cameraFlutterApi); SystemServicesFlutterApi.setup(systemServicesFlutterApi); - ExposureStateFlutterApi.setup(exposureStateFlutterApi); - ZoomStateFlutterApiImpl.setup(exposureStateFlutterApi); + ExposureStateFlutterApi.setup(exposureStateFlutterApiImpl); + ZoomStateFlutterApi.setup(zoomStateFlutterApiImpl); _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 ebc5818f4258..640bfa103e37 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -6,8 +6,10 @@ import 'package:flutter/services.dart' show BinaryMessenger; import 'android_camera_camerax_flutter_api_impls.dart'; import 'camerax_library.g.dart'; +import 'exposure_state.dart'; import 'instance_manager.dart'; import 'java_object.dart'; +import 'zoom_state.dart'; /// Represents the metadata of a camera. /// @@ -35,8 +37,7 @@ class CameraInfo extends JavaObject { _api.getExposureStateFromInstance(this); /// Gets the zoom state of the camera. - Future getZoomState() => - _api.getZoomStateFromInstance(this); + Future getZoomState() => _api.getZoomStateFromInstance(this); } /// Host API implementation of [CameraInfo]. @@ -60,23 +61,20 @@ class CameraInfoHostApiImpl extends CameraInfoHostApi { } /// Gets the [ExposureState] of the specified [CameraInfo] instance. - Future getExposureStateFromInstance(CameraInfo instance) { + Future getExposureStateFromInstance( + CameraInfo instance) async { final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No CameraInfo has the identifer of that requested to get the resolution information for.'); - - final int exposureStateIdentifier = await getExposureState(identifier); - return instanceManager.getInstanceWithWeakReference(exposureStateIdentifier!)! + final int exposureStateIdentifier = await getExposureState(identifier!); + return instanceManager + .getInstanceWithWeakReference(exposureStateIdentifier)!; } /// Gets the [ZoomState] of the specified [CameraInfo] instance. - Future getExposureStateFromInstance(CameraInfo instance) { + Future getZoomStateFromInstance(CameraInfo instance) async { final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No CameraInfo has the identifer of that requested to get the resolution information for.'); - - final int exposureStateIdentifier = await getZoomState(identifier); - return instanceManager.getInstanceWithWeakReference(exposureStateIdentifier!)! + final int zoomStateIdentifier = await getZoomState(identifier!); + return instanceManager + .getInstanceWithWeakReference(zoomStateIdentifier)!; } } diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index b2af83a747ae..0f39c2d3fe28 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 @@ -1043,8 +1043,8 @@ class ImageCaptureHostApi { } } -class _ExposureStateHostApiCodec extends StandardMessageCodec { - const _ExposureStateHostApiCodec(); +class _ExposureStateFlutterApiCodec extends StandardMessageCodec { + const _ExposureStateFlutterApiCodec(); @override void writeValue(WriteBuffer buffer, Object? value) { if (value is ExposureRange) { @@ -1066,75 +1066,10 @@ class _ExposureStateHostApiCodec extends StandardMessageCodec { } } -class ExposureStateHostApi { - /// Constructor for [ExposureStateHostApi]. 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. - ExposureStateHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = _ExposureStateHostApiCodec(); - - Future getExposureCompensationRange(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationRange', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else if (replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (replyList[0] as ExposureRange?)!; - } - } - - Future getExposureCompensationStep(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationStep', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else if (replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (replyList[0] as double?)!; - } - } -} - abstract class ExposureStateFlutterApi { - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec codec = _ExposureStateFlutterApiCodec(); - void create(int identifier); + void create(int identifier, ExposureRange exposureCompensationRange, double exposureCompensationStep); static void setup(ExposureStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { @@ -1151,7 +1086,13 @@ abstract class ExposureStateFlutterApi { final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null int.'); - api.create(arg_identifier!); + final ExposureRange? arg_exposureCompensationRange = (args[1] as ExposureRange?); + assert(arg_exposureCompensationRange != null, + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null ExposureRange.'); + final double? arg_exposureCompensationStep = (args[2] as double?); + assert(arg_exposureCompensationStep != null, + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null double.'); + api.create(arg_identifier!, arg_exposureCompensationRange!, arg_exposureCompensationStep!); return; }); } @@ -1159,92 +1100,33 @@ abstract class ExposureStateFlutterApi { } } -class ZoomStateHostApi { - /// Constructor for [ZoomStateHostApi]. 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. - ZoomStateHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = StandardMessageCodec(); - - Future getMaxZoomRatio(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ZoomStateHostApi.getMaxZoomRatio', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else if (replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (replyList[0] as double?)!; - } - } - - Future getMinZoomRatio(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ZoomStateHostApi.getMinZoomRatio', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else if (replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (replyList[0] as double?)!; - } - } -} - -abstract class ExposureStateFlutterApi { +abstract class ZoomStateFlutterApi { static const MessageCodec codec = StandardMessageCodec(); - void create(int identifier); + void create(int identifier, int minZoomRatio, int maxZoomRatio); - static void setup(ExposureStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ZoomStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ExposureStateFlutterApi.create', codec, + 'dev.flutter.pigeon.ZoomStateFlutterApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null int.'); - api.create(arg_identifier!); + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null, expected non-null int.'); + final int? arg_minZoomRatio = (args[1] as int?); + assert(arg_minZoomRatio != null, + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null, expected non-null int.'); + final int? arg_maxZoomRatio = (args[2] as int?); + assert(arg_maxZoomRatio != null, + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!, arg_minZoomRatio!, arg_maxZoomRatio!); return; }); } diff --git a/packages/camera/camera_android_camerax/lib/src/exposure_state.dart b/packages/camera/camera_android_camerax/lib/src/exposure_state.dart index d3a87a2be4d4..61b856ea0bf6 100644 --- a/packages/camera/camera_android_camerax/lib/src/exposure_state.dart +++ b/packages/camera/camera_android_camerax/lib/src/exposure_state.dart @@ -15,63 +15,23 @@ import 'java_object.dart'; class ExposureState extends JavaObject { /// Constructs a [CameraInfo] that is not automatically attached to a native object. ExposureState.detached( - {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) - : super.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager) { - _api = ExposureStateHostApiImpl( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); + {super.binaryMessenger, + super.instanceManager, + required this.exposureCompensationRange, + required this.exposureCompensationStep}) + : super.detached() { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - late final ExposureStateHostApiImpl _api; - -/// Gets the maximum and minimum exposure compensation values for the camera -/// represented by this instance. -Future getExposureCompensationRange() => _api.getExposureCompensationRangeFromInstance(this); - -/// Gets the smallest step by which the exposure compensation can be changed for -/// the camera represented by this instance. -Future getExposureCompensationStep() => _api.getExposureCompensationStepFromInstance(this); -} - -/// Host API implementation of [ExposureState]. -class ExposureStateHostApiImpl extends ExposureStateHostApi { - /// Constructs a [ExposureStateHostApiImpl]. - ExposureStateHostApiImpl( - {super.binaryMessenger, InstanceManager? instanceManager}) { - this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; - } - - /// Maintains instances stored to communicate with native language objects. - late final InstanceManager instanceManager; - - /// Gets the maximum and minimum exposure compensation values for the camera - /// represented by the specified [ExposureState] instance. - Future getExposureCompensationRange( - ExposureState instance, - ) async { - final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No ExposureState has the identifer of that requested to get the resolution information for.'); - - final ExposureRange exposureCompensationRange = await getExposureCompensationRange(identifier); - return exposureCompensationRange; - } + /// Gets the maximum and minimum exposure compensation values for the camera + /// represented by this instance. + final ExposureRange exposureCompensationRange; /// Gets the smallest step by which the exposure compensation can be changed for - /// the camera represented by the specified [ExposureState] instance. - Future getExposureCompensationStepFromInstance(ExposureState instance) async { - final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No ExposureState has the identifer of that requested to get the resolution information for.'); - - final double exposureCompensationState = await getExposureCompensationRange(identifier); - return exposureCompensationState; - } + /// the camera represented by this instance. + final double exposureCompensationStep; } - /// Flutter API implementation of [ExposureState]. class ExposureStateFlutterApiImpl implements ExposureStateFlutterApi { /// Constructs a [ExposureStateFlutterApiImpl]. @@ -90,14 +50,21 @@ class ExposureStateFlutterApiImpl implements ExposureStateFlutterApi { final InstanceManager instanceManager; @override - void create(int identifier) { + void create(int identifier, ExposureRange exposureCompensationRange, + double exposureCompensationStep) { instanceManager.addHostCreatedInstance( ExposureState.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager), + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + exposureCompensationRange: exposureCompensationRange, + exposureCompensationStep: exposureCompensationStep), identifier, onCopy: (ExposureState original) { return ExposureState.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + exposureCompensationRange: original.exposureCompensationRange, + exposureCompensationStep: original.exposureCompensationStep); }, ); } diff --git a/packages/camera/camera_android_camerax/lib/src/zoom_state.dart b/packages/camera/camera_android_camerax/lib/src/zoom_state.dart index a0f4bdf9d8b6..7e9fa1af190b 100644 --- a/packages/camera/camera_android_camerax/lib/src/zoom_state.dart +++ b/packages/camera/camera_android_camerax/lib/src/zoom_state.dart @@ -15,61 +15,21 @@ import 'java_object.dart'; class ZoomState extends JavaObject { /// Constructs a [CameraInfo] that is not automatically attached to a native object. ZoomState.detached( - {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) - : super.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager) { - _api = ZoomStateHostApiImpl( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); + {super.binaryMessenger, + super.instanceManager, + required this.minZoomRatio, + required this.maxZoomRatio}) + : super.detached() { AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - late final ZoomStateHostApiImpl _api; - -/// Gets the maximum zoom ratio of the camera represented by this instance. -Future getMaxZoomRatio() => _api.getMaxZoomRatioFromInstance(this); + /// The minimum zoom ratio of the camera represented by this instance. + final int minZoomRatio; -/// Gets the minimum zoom ratio of the camera represented by this instance. -Future getMinZoomRatio() => _api.getMinZoomRatioFromInstance(this); + /// The maximum zoom ratio of the camera represented by this instance. + final int maxZoomRatio; } -/// Host API implementation of [ZoomState]. -class ZoomStateHostApiImpl extends ZoomStateHostApi { - /// Constructs a [ZoomStateHostApiImpl]. - ZoomStateHostApiImpl( - {super.binaryMessenger, InstanceManager? instanceManager}) { - this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; - } - - /// Maintains instances stored to communicate with native language objects. - late final InstanceManager instanceManager; - - /// Gets the maximum zoom ratio of the camera represented by the specified - /// [ZoomState] instance. - Future getMaxZoomRatioFromInstance( - ZoomState instance, - ) async { - final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No ZoomState has the identifer of that requested to get the resolution information for.'); - - final double maxZoomRatio = await getMaxZoomRatio(identifier); - return maxZoomRatio; - } - - /// Gets the minimum zoom ratio of the camera represented by the specified - /// [ZoomState] instance. - Future getMinZoomRatioFromInstance(ZoomState instance) async { - final int? identifier = instanceManager.getIdentifier(instance); - assert(identifier != null, - 'No ZoomState has the identifer of that requested to get the resolution information for.'); - - final double minZoomRatio = await getMinZoomRatio(identifier); - return minZoomRatio; - } -} - - /// Flutter API implementation of [ZoomState]. class ZoomStateFlutterApiImpl implements ZoomStateFlutterApi { /// Constructs a [ZoomStateFlutterApiImpl]. @@ -88,14 +48,20 @@ class ZoomStateFlutterApiImpl implements ZoomStateFlutterApi { final InstanceManager instanceManager; @override - void create(int identifier) { + void create(int identifier, int minZoomRatio, int maxZoomRatio) { instanceManager.addHostCreatedInstance( ZoomState.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager), + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + minZoomRatio: minZoomRatio, + maxZoomRatio: maxZoomRatio), identifier, onCopy: (ZoomState original) { return ZoomState.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + minZoomRatio: original.minZoomRatio, + maxZoomRatio: original.maxZoomRatio); }, ); } diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 0d8dc8bf2de8..234505c0f45f 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -46,7 +46,7 @@ class CameraPermissionsErrorData { String description; } -class ExposureRange{ +class ExposureRange { ExposureRange({ required this.minCompensation, required this.maxCompensation, @@ -171,26 +171,13 @@ abstract class ImageCaptureHostApi { String takePicture(int identifier); } -@HostApi(dartHostTestHandler: 'TestExposureStateHostApi') -abstract class ExposureStateHostApi { - ExposureRange getExposureCompensationRange(int identifier); - - double getExposureCompensationStep(int identifier); -} - @FlutterApi() abstract class ExposureStateFlutterApi { - void create(int identifier); -} - -@HostApi(dartHostTestHandler: 'TestExposureStateHostApi') -abstract class ZoomStateHostApi { - double getMaxZoomRatio(int identifier); - - double getMinZoomRatio(int identifier); + void create(int identifier, ExposureRange exposureCompensationRange, + double exposureCompensationStep); } @FlutterApi() -abstract class ExposureStateFlutterApi { - void create(int identifier); +abstract class ZoomStateFlutterApi { + void create(int identifier, int minZoomRatio, int maxZoomRatio); } 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 7efa7b46ec1d..4df1366cf658 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v9.1.1), do not edit directly. +// Autogenerated from Pigeon (v9.2.4), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import // ignore_for_file: avoid_relative_lib_imports @@ -14,6 +14,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; abstract class TestInstanceManagerHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); /// Clear the native `InstanceManager`. @@ -27,9 +28,9 @@ abstract class TestInstanceManagerHostApi { 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { // ignore message api.clear(); return []; @@ -40,6 +41,7 @@ abstract class TestInstanceManagerHostApi { } abstract class TestJavaObjectHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void dispose(int identifier); @@ -50,9 +52,9 @@ abstract class TestJavaObjectHostApi { 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; @@ -68,6 +70,7 @@ abstract class TestJavaObjectHostApi { } abstract class TestCameraInfoHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getSensorRotationDegrees(int identifier); @@ -82,9 +85,9 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); final List args = (message as List?)!; @@ -101,9 +104,9 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getExposureState', 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.getExposureState was null.'); final List args = (message as List?)!; @@ -120,9 +123,9 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getZoomState', 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.getZoomState was null.'); final List args = (message as List?)!; @@ -138,6 +141,7 @@ abstract class TestCameraInfoHostApi { } abstract class TestCameraSelectorHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void create(int identifier, int? lensFacing); @@ -150,9 +154,9 @@ abstract class TestCameraSelectorHostApi { 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); final List args = (message as List?)!; @@ -170,9 +174,9 @@ abstract class TestCameraSelectorHostApi { 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); final List args = (message as List?)!; @@ -191,6 +195,7 @@ abstract class TestCameraSelectorHostApi { } abstract class TestProcessCameraProviderHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); Future getInstance(); @@ -211,9 +216,9 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { // ignore message final int output = await api.getInstance(); return [output]; @@ -225,9 +230,9 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); final List args = (message as List?)!; @@ -244,9 +249,9 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.bindToLifecycle was null.'); final List args = (message as List?)!; @@ -269,9 +274,9 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.isBound was null.'); final List args = (message as List?)!; @@ -291,9 +296,9 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbind was null.'); final List args = (message as List?)!; @@ -313,9 +318,9 @@ abstract class TestProcessCameraProviderHostApi { 'dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.unbindAll was null.'); final List args = (message as List?)!; @@ -331,6 +336,7 @@ abstract class TestProcessCameraProviderHostApi { } abstract class TestCameraHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getCameraInfo(int identifier); @@ -341,9 +347,9 @@ abstract class TestCameraHostApi { '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.'); final List args = (message as List?)!; @@ -382,6 +388,7 @@ class _TestSystemServicesHostApiCodec extends StandardMessageCodec { } abstract class TestSystemServicesHostApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestSystemServicesHostApiCodec(); Future requestCameraPermissions(bool enableAudio); @@ -396,9 +403,9 @@ abstract class TestSystemServicesHostApi { 'dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.requestCameraPermissions was null.'); final List args = (message as List?)!; @@ -415,9 +422,9 @@ abstract class TestSystemServicesHostApi { 'dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.SystemServicesHostApi.startListeningForDeviceOrientationChange was null.'); final List args = (message as List?)!; @@ -437,9 +444,9 @@ abstract class TestSystemServicesHostApi { 'dev.flutter.pigeon.SystemServicesHostApi.stopListeningForDeviceOrientationChange', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { // ignore message api.stopListeningForDeviceOrientationChange(); return []; @@ -478,6 +485,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); @@ -494,9 +502,9 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.create was null.'); final List args = (message as List?)!; @@ -515,9 +523,9 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.setSurfaceProvider was null.'); final List args = (message as List?)!; @@ -534,9 +542,9 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.releaseFlutterSurfaceTexture', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { // ignore message api.releaseFlutterSurfaceTexture(); return []; @@ -548,9 +556,9 @@ abstract class TestPreviewHostApi { 'dev.flutter.pigeon.PreviewHostApi.getResolutionInfo', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.PreviewHostApi.getResolutionInfo was null.'); final List args = (message as List?)!; @@ -589,6 +597,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); @@ -603,9 +612,9 @@ abstract class TestImageCaptureHostApi { 'dev.flutter.pigeon.ImageCaptureHostApi.create', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.create was null.'); final List args = (message as List?)!; @@ -624,9 +633,9 @@ abstract class TestImageCaptureHostApi { 'dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.setFlashMode was null.'); final List args = (message as List?)!; @@ -646,9 +655,9 @@ abstract class TestImageCaptureHostApi { 'dev.flutter.pigeon.ImageCaptureHostApi.takePicture', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImageCaptureHostApi.takePicture was null.'); final List args = (message as List?)!; @@ -662,124 +671,3 @@ abstract class TestImageCaptureHostApi { } } } - -class _TestExposureStateHostApiCodec extends StandardMessageCodec { - const _TestExposureStateHostApiCodec(); - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is ExposureRange) { - buffer.putUint8(128); - writeValue(buffer, value.encode()); - } else { - super.writeValue(buffer, value); - } - } - - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 128: - return ExposureRange.decode(readValue(buffer)!); - default: - return super.readValueOfType(type, buffer); - } - } -} - -abstract class TestExposureStateHostApi { - static const MessageCodec codec = _TestExposureStateHostApiCodec(); - - ExposureRange getExposureCompensationRange(int identifier); - - double getExposureCompensationStep(int identifier); - - static void setup(TestExposureStateHostApi? api, {BinaryMessenger? binaryMessenger}) { - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationRange', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationRange was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationRange was null, expected non-null int.'); - final ExposureRange output = api.getExposureCompensationRange(arg_identifier!); - return [output]; - }); - } - } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationStep', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationStep was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ExposureStateHostApi.getExposureCompensationStep was null, expected non-null int.'); - final double output = api.getExposureCompensationStep(arg_identifier!); - return [output]; - }); - } - } - } -} - -abstract class TestExposureStateHostApi { - static const MessageCodec codec = StandardMessageCodec(); - - double getMaxZoomRatio(int identifier); - - double getMinZoomRatio(int identifier); - - static void setup(TestExposureStateHostApi? api, {BinaryMessenger? binaryMessenger}) { - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ZoomStateHostApi.getMaxZoomRatio', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ZoomStateHostApi.getMaxZoomRatio was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ZoomStateHostApi.getMaxZoomRatio was null, expected non-null int.'); - final double output = api.getMaxZoomRatio(arg_identifier!); - return [output]; - }); - } - } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ZoomStateHostApi.getMinZoomRatio', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ZoomStateHostApi.getMinZoomRatio was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ZoomStateHostApi.getMinZoomRatio was null, expected non-null int.'); - final double output = api.getMinZoomRatio(arg_identifier!); - return [output]; - }); - } - } - } -} From 494404a950b64365108c4eea554074e4b504149e Mon Sep 17 00:00:00 2001 From: camsim99 Date: Sat, 22 Apr 2023 11:38:20 -0700 Subject: [PATCH 04/19] Format and get build apk working --- .../camerax/CameraInfoHostApiImpl.java | 17 +- .../camerax/ExposureStateFlutterApiImpl.java | 30 +- .../camerax/GeneratedCameraXLibrary.java | 387 ++++++++++++------ .../camerax/ZoomStateFlutterApiImpl.java | 20 +- .../lib/src/android_camera_camerax.dart | 56 +-- .../lib/src/camerax_library.g.dart | 163 ++++---- .../lib/src/zoom_state.dart | 6 +- .../pigeons/camerax_library.dart | 6 +- .../test/test_camerax_library.g.dart | 333 ++++++++++----- 9 files changed, 635 insertions(+), 383 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index 0352dcf27040..6764b3ccf642 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java @@ -6,6 +6,9 @@ import androidx.annotation.NonNull; import androidx.camera.core.CameraInfo; +import androidx.camera.core.ExposureState; +import androidx.camera.core.ZoomState; +import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraInfoHostApi; import java.util.Objects; @@ -34,22 +37,26 @@ public Long getExposureState(@NonNull Long identifier) { (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); ExposureState exposureState = cameraInfo.getExposureState(); - ExposureStateFlutterApiImpl exposureStateFlutterApiImpl = new ExposureStateFlutterApiImpl(binaryMessenger); + ExposureStateFlutterApiImpl exposureStateFlutterApiImpl = + new ExposureStateFlutterApiImpl(binaryMessenger, instanceManager); exposureStateFlutterApiImpl.create(exposureState, result -> {}); return instanceManager.getIdentifierForStrongReference(exposureState); } - + /** - * Retrieves the current {@link ZoomState} value of the {@link CameraInfo} with the specified identifier. + * Retrieves the current {@link ZoomState} value of the {@link CameraInfo} with the specified + * identifier. */ @Override public Long getZoomState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); - ZoomState zoomState = cameraInfo.ZoomState().getValue(); + // Retrieves the current value of the LiveData. + ZoomState zoomState = cameraInfo.getZoomState().getValue(); - ZoomStateFlutterApiImpl zoomStateFlutterApiImpl = new ZoomStateFlutterApiImpl(binaryMessenger); + ZoomStateFlutterApiImpl zoomStateFlutterApiImpl = + new ZoomStateFlutterApiImpl(binaryMessenger, instanceManager); zoomStateFlutterApiImpl.create(zoomState, result -> {}); return instanceManager.getIdentifierForStrongReference(zoomState); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java index 78821fc79ee0..0309998713cd 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java @@ -4,10 +4,12 @@ package io.flutter.plugins.camerax; +import android.util.Range; import androidx.annotation.NonNull; import androidx.camera.core.ExposureState; import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureStateFlutterApi;; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureRange; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureStateFlutterApi; public class ExposureStateFlutterApiImpl extends ExposureStateFlutterApi { private final InstanceManager instanceManager; @@ -18,19 +20,27 @@ public ExposureStateFlutterApiImpl( this.instanceManager = instanceManager; } - /** - * Creates a {@link ExposureState} on the Dart side with its exposure compensation - * range that can be used to set the exposure compensation index and its exposure - * compensation step, the smallest step by which the exposure compensation can be - * changed. - */ + /** + * Creates a {@link ExposureState} on the Dart side with its exposure compensation range that can + * be used to set the exposure compensation index and its exposure compensation step, the smallest + * step by which the exposure compensation can be changed. + */ void create(@NonNull ExposureState exposureState, @NonNull Reply reply) { final Range exposureCompensationRange = exposureState.getExposureCompensationRange(); - ExposureRange exposureCompensationRangeAsExposureRange = ExposureRange.Builder().setMinCompensation(exposureCompensationRange.getLower()).setMaxCompensation(exposureCompensationRange.getUpper()).build() - final Double exposureCompensationStep = exposureState.getExposureCompensationStep().getValue(); + ExposureRange exposureCompensationRangeAsExposureRange = + new ExposureRange.Builder() + .setMinCompensation(exposureCompensationRange.getLower().longValue()) + .setMaxCompensation(exposureCompensationRange.getUpper().longValue()) + .build(); + final Double exposureCompensationStep = + exposureState.getExposureCompensationStep().doubleValue(); if (!instanceManager.containsInstance(exposureState)) { - create(instanceManager.addHostCreatedInstance(exposureState), exposureCompensationRangeAsExposureRange, exposureCompensationStep, reply); + create( + instanceManager.addHostCreatedInstance(exposureState), + exposureCompensationRangeAsExposureRange, + exposureCompensationStep, + reply); } } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 9d47f79c3784..088e9af27904 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -18,9 +18,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) @@ -35,8 +33,7 @@ public static class FlutterError extends RuntimeException { /** The error details. Must be a datatype supported by the api codec. */ public final Object details; - public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) - { + public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { super(message); this.code = code; this.details = details; @@ -55,7 +52,7 @@ protected static ArrayList wrapError(@NonNull Throwable exception) { errorList.add(exception.toString()); errorList.add(exception.getClass().getSimpleName()); errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); } return errorList; } @@ -126,9 +123,13 @@ ArrayList toList() { static @NonNull ResolutionInfo fromList(@NonNull ArrayList list) { ResolutionInfo pigeonResult = new ResolutionInfo(); Object width = list.get(0); - pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); + pigeonResult.setWidth( + (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); Object height = list.get(1); - pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer) height : (Long) height)); + pigeonResult.setHeight( + (height == null) + ? null + : ((height instanceof Integer) ? (Integer) height : (Long) height)); return pigeonResult; } } @@ -208,26 +209,26 @@ ArrayList toList() { /** Generated class from Pigeon that represents data sent in messages. */ public static final class ExposureRange { - private @NonNull Double minCompensation; + private @NonNull Long minCompensation; - public @NonNull Double getMinCompensation() { + public @NonNull Long getMinCompensation() { return minCompensation; } - public void setMinCompensation(@NonNull Double setterArg) { + public void setMinCompensation(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"minCompensation\" is null."); } this.minCompensation = setterArg; } - private @NonNull Double maxCompensation; + private @NonNull Long maxCompensation; - public @NonNull Double getMaxCompensation() { + public @NonNull Long getMaxCompensation() { return maxCompensation; } - public void setMaxCompensation(@NonNull Double setterArg) { + public void setMaxCompensation(@NonNull Long setterArg) { if (setterArg == null) { throw new IllegalStateException("Nonnull field \"maxCompensation\" is null."); } @@ -239,16 +240,16 @@ public void setMaxCompensation(@NonNull Double setterArg) { public static final class Builder { - private @Nullable Double minCompensation; + private @Nullable Long minCompensation; - public @NonNull Builder setMinCompensation(@NonNull Double setterArg) { + public @NonNull Builder setMinCompensation(@NonNull Long setterArg) { this.minCompensation = setterArg; return this; } - private @Nullable Double maxCompensation; + private @Nullable Long maxCompensation; - public @NonNull Builder setMaxCompensation(@NonNull Double setterArg) { + public @NonNull Builder setMaxCompensation(@NonNull Long setterArg) { this.maxCompensation = setterArg; return this; } @@ -272,9 +273,19 @@ ArrayList toList() { static @NonNull ExposureRange fromList(@NonNull ArrayList list) { ExposureRange pigeonResult = new ExposureRange(); Object minCompensation = list.get(0); - pigeonResult.setMinCompensation((Double) minCompensation); + pigeonResult.setMinCompensation( + (minCompensation == null) + ? null + : ((minCompensation instanceof Integer) + ? (Integer) minCompensation + : (Long) minCompensation)); Object maxCompensation = list.get(1); - pigeonResult.setMaxCompensation((Double) maxCompensation); + pigeonResult.setMaxCompensation( + (maxCompensation == null) + ? null + : ((maxCompensation instanceof Integer) + ? (Integer) maxCompensation + : (Long) maxCompensation)); return pigeonResult; } } @@ -290,7 +301,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(); @@ -298,8 +309,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<>( @@ -311,8 +326,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; } @@ -333,7 +347,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 = @@ -348,8 +364,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; } @@ -369,7 +384,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); @@ -378,6 +393,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -390,25 +406,29 @@ 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 getExposureState(@NonNull Long identifier); - @NonNull + @NonNull Long getZoomState(@NonNull Long identifier); /** The codec used by CameraInfoHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfoHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -416,10 +436,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; } @@ -432,7 +453,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getExposureState", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getExposureState", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -440,10 +463,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getExposureState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getExposureState( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -464,10 +488,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getZoomState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getZoomState((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -487,7 +511,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); @@ -496,6 +520,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -510,15 +535,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<>( @@ -531,10 +560,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; } @@ -556,10 +586,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; } @@ -579,7 +611,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); @@ -588,7 +620,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()); @@ -602,13 +636,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); @@ -619,12 +656,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) -> { @@ -651,7 +694,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) -> { @@ -659,10 +704,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; } @@ -675,7 +721,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) -> { @@ -685,10 +733,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; } @@ -701,7 +754,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) -> { @@ -710,10 +765,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; } @@ -726,7 +783,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) -> { @@ -735,10 +794,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; } @@ -751,7 +810,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) -> { @@ -761,8 +822,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; } @@ -782,7 +842,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); @@ -791,10 +851,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)); @@ -803,14 +866,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 = @@ -823,10 +886,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; } @@ -846,7 +909,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); @@ -855,6 +918,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -894,9 +958,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(); @@ -904,12 +970,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) -> { @@ -938,7 +1010,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) -> { @@ -947,10 +1021,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; } @@ -963,7 +1038,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) -> { @@ -971,8 +1048,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; } @@ -992,7 +1068,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); @@ -1001,18 +1077,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)); @@ -1053,21 +1136,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 = @@ -1082,10 +1168,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; } @@ -1098,7 +1186,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) -> { @@ -1106,10 +1196,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; } @@ -1122,7 +1213,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) -> { @@ -1130,8 +1223,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; } @@ -1152,10 +1244,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; } @@ -1197,7 +1290,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); @@ -1207,7 +1303,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 = @@ -1222,10 +1321,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; } @@ -1247,10 +1348,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; } @@ -1283,7 +1385,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); @@ -1326,7 +1429,7 @@ public ExposureStateFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1335,12 +1438,19 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return ExposureStateFlutterApiCodec.INSTANCE; } - public void create(@NonNull Long identifierArg, @NonNull ExposureRange exposureCompensationRangeArg, @NonNull Double exposureCompensationStepArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull ExposureRange exposureCompensationRangeArg, + @NonNull Double exposureCompensationStepArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ExposureStateFlutterApi.create", getCodec()); channel.send( - new ArrayList(Arrays.asList(identifierArg, exposureCompensationRangeArg, exposureCompensationStepArg)), + new ArrayList( + Arrays.asList( + identifierArg, exposureCompensationRangeArg, exposureCompensationStepArg)), channelReply -> callback.reply(null)); } } @@ -1352,7 +1462,7 @@ public ZoomStateFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1361,7 +1471,12 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Long minZoomRatioArg, @NonNull Long maxZoomRatioArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull Double minZoomRatioArg, + @NonNull Double maxZoomRatioArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ZoomStateFlutterApi.create", getCodec()); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java index 1385f943dde0..7c968794dff7 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java @@ -7,24 +7,30 @@ import androidx.annotation.NonNull; import androidx.camera.core.ZoomState; import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ZoomStateFlutterApi;; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ZoomStateFlutterApi; public class ZoomStateFlutterApiImpl extends ZoomStateFlutterApi { private final InstanceManager instanceManager; - public ZoomStateFlutterApiImpl( - BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + public ZoomStateFlutterApiImpl(BinaryMessenger binaryMessenger, InstanceManager instanceManager) { super(binaryMessenger); this.instanceManager = instanceManager; } - /** Creates a {@link ZoomState} on the Dart side with its minimum zoom ratio and maximum zoom ratio. */ + /** + * Creates a {@link ZoomState} on the Dart side with its minimum zoom ratio and maximum zoom + * ratio. + */ void create(@NonNull ZoomState zoomState, @NonNull Reply reply) { - final float minZoomRatio = zoomState.getMinZoomRatio(); - final float maxZoomRatio = zoomState.getMaxZoomRatio(); + final Float minZoomRatio = zoomState.getMinZoomRatio(); + final Float maxZoomRatio = zoomState.getMaxZoomRatio(); if (!instanceManager.containsInstance(zoomState)) { - create(instanceManager.addHostCreatedInstance(zoomState),(Long) minZoomRatio, (Long) maxZoomRatio, reply); + create( + instanceManager.addHostCreatedInstance(zoomState), + minZoomRatio.doubleValue(), + maxZoomRatio.doubleValue(), + reply); } } } diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index eb4cdbc0561e..cf62f151dd18 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,12 +12,14 @@ import 'camera.dart'; import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.g.dart'; +import 'exposure_state.dart'; import 'image_capture.dart'; import 'preview.dart'; import 'process_camera_provider.dart'; import 'surface.dart'; import 'system_services.dart'; import 'use_case.dart'; +import 'zoom_state.dart'; /// The Android implementation of [CameraPlatform] that uses the CameraX library. class AndroidCameraCameraX extends CameraPlatform { @@ -165,7 +167,7 @@ class AndroidCameraCameraX extends CameraPlatform { // instance as bound but not paused. camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); - cameraInfo = await camera.getCameraInfo(); + cameraInfo = await camera!.getCameraInfo(); _previewIsPaused = false; return flutterSurfaceTextureId; @@ -247,29 +249,18 @@ class AndroidCameraCameraX extends CameraPlatform { /// Gets the minimum supported exposure offset for the selected camera in EV units. @override Future getMinExposureOffset(int cameraId) async { - assert(cameraInfo != null); - - ExposureState exposureState = await cameraInfo.getExposureState(); - ExposureRange exposureCompensationRange = - await exposureState.getExposureCompensationRange(); - double exposureCompensationStep = - await exposureState.getExposureCompensationStep(); - - return exposureCompensationRange.minCompensation * exposureCompensationStep; + // TODO(camsim99): Ensure cameraInfo is properly updated after future changes are merged into this PR. + final ExposureState exposureState = await cameraInfo!.getExposureState(); + return exposureState.exposureCompensationRange.minCompensation * + exposureState.exposureCompensationStep; } /// Gets the maximum supported exposure offset for the selected camera in EV units. @override Future getMaxExposureOffset(int cameraId) async { - assert(cameraInfo != null); - - ExposureState exposureState = await cameraInfo.getExposureState(); - ExposureRange exposureCompensationRange = - await exposureState.getExposureCompensationRange(); - double exposureCompensationStep = - await exposureState.getExposureCompensationStep(); - - return exposureCompensationRange.maxCompensation * exposureCompensationStep; + final ExposureState exposureState = await cameraInfo!.getExposureState(); + return exposureState.exposureCompensationRange.maxCompensation * + exposureState.exposureCompensationStep; } /// Gets the supported step size for exposure offset for the selected camera in EV units. @@ -277,35 +268,22 @@ class AndroidCameraCameraX extends CameraPlatform { /// Returns 0 when the camera supports using a free value without stepping. @override Future getExposureOffsetStepSize(int cameraId) async { - assert(cameraInfo != null); - - ExposureState exposureState = await cameraInfo.getExposureState(); - double exposureCompensationStep = - await exposureState.getExposureCompensationStep(); - - return exposureCompensationStep; + final ExposureState exposureState = await cameraInfo!.getExposureState(); + return exposureState.exposureCompensationStep; } /// Gets the maximum supported zoom level for the selected camera. @override Future getMaxZoomLevel(int cameraId) async { - assert(cameraInfo != null); - - ZoomState exposureState = await cameraInfo.getZoomState(); - double maxZoomRatio = await exposureState.getMaxZoomRatio(); - - return maxZoomRatio; + final ZoomState exposureState = await cameraInfo!.getZoomState(); + return exposureState.maxZoomRatio; } /// Gets the minimum supported zoom level for the selected camera. @override Future getMinZoomLevel(int cameraId) async { - assert(cameraInfo != null); - - ZoomState exposureState = await cameraInfo.getZoomState(); - double minZoomRatio = await exposureState.getMinZoomRatio(); - - return minZoomRatio; + final ZoomState exposureState = await cameraInfo!.getZoomState(); + return exposureState.minZoomRatio; } /// The ui orientation changed. @@ -384,7 +362,7 @@ class AndroidCameraCameraX extends CameraPlatform { camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!]); - cameraInfo = await camera.getCameraInfo(); + cameraInfo = await camera!.getCameraInfo(); } /// Unbinds [preview] instance to camera lifecycle controlled by the 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 0f39c2d3fe28..38f884d5fcd1 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 @@ -69,9 +69,9 @@ class ExposureRange { required this.maxCompensation, }); - double minCompensation; + int minCompensation; - double maxCompensation; + int maxCompensation; Object encode() { return [ @@ -83,8 +83,8 @@ class ExposureRange { static ExposureRange decode(Object result) { result as List; return ExposureRange( - minCompensation: result[0]! as double, - maxCompensation: result[1]! as double, + minCompensation: result[0]! as int, + maxCompensation: result[1]! as int, ); } } @@ -106,8 +106,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', @@ -163,7 +162,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, @@ -173,7 +173,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, @@ -283,7 +283,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, @@ -293,7 +294,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, @@ -320,8 +321,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', @@ -338,12 +339,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', @@ -371,7 +373,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, @@ -381,7 +384,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, @@ -409,8 +412,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', @@ -434,7 +436,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?; @@ -459,12 +462,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', @@ -491,7 +499,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', @@ -517,8 +526,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', @@ -563,7 +572,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, @@ -573,7 +583,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, @@ -639,7 +649,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, @@ -667,7 +677,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); @@ -685,9 +695,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?; @@ -707,12 +719,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', @@ -731,10 +746,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', @@ -759,17 +774,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, @@ -788,7 +805,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, @@ -819,9 +836,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); @@ -839,12 +856,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', @@ -892,8 +911,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', @@ -953,7 +971,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); @@ -971,12 +989,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', @@ -997,8 +1017,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', @@ -1058,7 +1078,7 @@ class _ExposureStateFlutterApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ExposureRange.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1069,9 +1089,11 @@ class _ExposureStateFlutterApiCodec extends StandardMessageCodec { abstract class ExposureStateFlutterApi { static const MessageCodec codec = _ExposureStateFlutterApiCodec(); - void create(int identifier, ExposureRange exposureCompensationRange, double exposureCompensationStep); + void create(int identifier, ExposureRange exposureCompensationRange, + double exposureCompensationStep); - static void setup(ExposureStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ExposureStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ExposureStateFlutterApi.create', codec, @@ -1081,18 +1103,20 @@ abstract class ExposureStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null int.'); - final ExposureRange? arg_exposureCompensationRange = (args[1] as ExposureRange?); + final ExposureRange? arg_exposureCompensationRange = + (args[1] as ExposureRange?); assert(arg_exposureCompensationRange != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null ExposureRange.'); final double? arg_exposureCompensationStep = (args[2] as double?); assert(arg_exposureCompensationStep != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null double.'); - api.create(arg_identifier!, arg_exposureCompensationRange!, arg_exposureCompensationStep!); + api.create(arg_identifier!, arg_exposureCompensationRange!, + arg_exposureCompensationStep!); return; }); } @@ -1103,9 +1127,10 @@ abstract class ExposureStateFlutterApi { abstract class ZoomStateFlutterApi { static const MessageCodec codec = StandardMessageCodec(); - void create(int identifier, int minZoomRatio, int maxZoomRatio); + void create(int identifier, double minZoomRatio, double maxZoomRatio); - static void setup(ZoomStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ZoomStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ZoomStateFlutterApi.create', codec, @@ -1115,17 +1140,17 @@ abstract class ZoomStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null, expected non-null int.'); - final int? arg_minZoomRatio = (args[1] as int?); + final double? arg_minZoomRatio = (args[1] as double?); assert(arg_minZoomRatio != null, - 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null, expected non-null int.'); - final int? arg_maxZoomRatio = (args[2] as int?); + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null, expected non-null double.'); + final double? arg_maxZoomRatio = (args[2] as double?); assert(arg_maxZoomRatio != null, - 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null, expected non-null int.'); + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null, expected non-null double.'); api.create(arg_identifier!, arg_minZoomRatio!, arg_maxZoomRatio!); return; }); diff --git a/packages/camera/camera_android_camerax/lib/src/zoom_state.dart b/packages/camera/camera_android_camerax/lib/src/zoom_state.dart index 7e9fa1af190b..5b78f40a8904 100644 --- a/packages/camera/camera_android_camerax/lib/src/zoom_state.dart +++ b/packages/camera/camera_android_camerax/lib/src/zoom_state.dart @@ -24,10 +24,10 @@ class ZoomState extends JavaObject { } /// The minimum zoom ratio of the camera represented by this instance. - final int minZoomRatio; + final double minZoomRatio; /// The maximum zoom ratio of the camera represented by this instance. - final int maxZoomRatio; + final double maxZoomRatio; } /// Flutter API implementation of [ZoomState]. @@ -48,7 +48,7 @@ class ZoomStateFlutterApiImpl implements ZoomStateFlutterApi { final InstanceManager instanceManager; @override - void create(int identifier, int minZoomRatio, int maxZoomRatio) { + void create(int identifier, double minZoomRatio, double maxZoomRatio) { instanceManager.addHostCreatedInstance( ZoomState.detached( binaryMessenger: binaryMessenger, diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 234505c0f45f..0a6f6edf87e4 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -52,8 +52,8 @@ class ExposureRange { required this.maxCompensation, }); - double minCompensation; - double maxCompensation; + int minCompensation; + int maxCompensation; } @HostApi(dartHostTestHandler: 'TestInstanceManagerHostApi') @@ -179,5 +179,5 @@ abstract class ExposureStateFlutterApi { @FlutterApi() abstract class ZoomStateFlutterApi { - void create(int identifier, int minZoomRatio, int maxZoomRatio); + void create(int identifier, double minZoomRatio, double maxZoomRatio); } 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 4df1366cf658..043d1449f528 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -14,7 +14,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; abstract class TestInstanceManagerHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); /// Clear the native `InstanceManager`. @@ -22,15 +23,19 @@ abstract class TestInstanceManagerHostApi { /// This is typically only used after a hot restart. void clear(); - static void setup(TestInstanceManagerHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestInstanceManagerHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { // ignore message api.clear(); return []; @@ -41,22 +46,27 @@ abstract class TestInstanceManagerHostApi { } abstract class TestJavaObjectHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void dispose(int identifier); - static void setup(TestJavaObjectHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestJavaObjectHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -70,7 +80,8 @@ abstract class TestJavaObjectHostApi { } abstract class TestCameraInfoHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getSensorRotationDegrees(int identifier); @@ -79,17 +90,22 @@ abstract class TestCameraInfoHostApi { int getZoomState(int identifier); - static void setup(TestCameraInfoHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraInfoHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -104,11 +120,14 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getExposureState', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getExposureState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getExposureState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -123,11 +142,14 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getZoomState', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getZoomState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getZoomState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -141,24 +163,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, @@ -174,19 +201,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]; }); } @@ -195,14 +227,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); @@ -210,15 +244,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]; @@ -227,33 +265,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, @@ -261,10 +308,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]; }); } @@ -274,11 +323,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, @@ -286,7 +338,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]; }); } @@ -296,16 +349,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!); @@ -318,11 +375,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, @@ -336,22 +396,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, @@ -379,7 +444,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); @@ -388,45 +453,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, @@ -434,19 +512,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 []; @@ -474,9 +557,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); @@ -485,7 +568,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); @@ -496,23 +580,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 []; }); @@ -523,11 +612,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, @@ -539,12 +631,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 []; @@ -556,11 +652,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, @@ -588,7 +687,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); @@ -597,7 +696,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); @@ -606,23 +706,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 []; }); @@ -633,11 +738,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, @@ -655,11 +763,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, From 9b4b7058e6244ef9d87f98accbf11e2de3c23e82 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 25 Apr 2023 15:07:32 -0700 Subject: [PATCH 05/19] Add java tests, fix current dart plugin test --- .../plugins/camerax/CameraHostApiImpl.java | 2 +- .../camerax/CameraInfoHostApiImpl.java | 1 + .../camerax/ExposureStateFlutterApiImpl.java | 6 +- .../camerax/ZoomStateFlutterApiImpl.java | 10 +- .../plugins/camerax/CameraInfoTest.java | 47 ++- .../flutter/plugins/camerax/CameraTest.java | 22 +- .../plugins/camerax/ExposureStateTest.java | 80 +++++ .../plugins/camerax/ZoomStateTest.java | 65 ++++ .../lib/src/android_camera_camerax.dart | 2 + .../test/android_camera_camerax_test.dart | 78 ++++- .../android_camera_camerax_test.mocks.dart | 300 ++++++++++++------ .../test/camera_info_test.mocks.dart | 16 + 12 files changed, 507 insertions(+), 122 deletions(-) create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ZoomStateTest.java 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 f21c0b520a34..3dc4b11d32c5 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,7 @@ public class CameraHostApiImpl implements CameraHostApi { private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; - public CameraHostApiImpl(BinaryMessenger binaryMessenger, 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/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index 6764b3ccf642..4bcd1ff1ca3f 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 @@ -53,6 +53,7 @@ public Long getZoomState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); // Retrieves the current value of the LiveData. + // TODO(camsim99): Create/return LiveData once https://github.com/flutter/packages/pull/3419 lands. ZoomState zoomState = cameraInfo.getZoomState().getValue(); ZoomStateFlutterApiImpl zoomStateFlutterApiImpl = diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java index 0309998713cd..1067e151249e 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java @@ -26,6 +26,10 @@ public ExposureStateFlutterApiImpl( * step by which the exposure compensation can be changed. */ void create(@NonNull ExposureState exposureState, @NonNull Reply reply) { + if (instanceManager.containsInstance(exposureState)) { + return; + } + final Range exposureCompensationRange = exposureState.getExposureCompensationRange(); ExposureRange exposureCompensationRangeAsExposureRange = new ExposureRange.Builder() @@ -35,12 +39,10 @@ void create(@NonNull ExposureState exposureState, @NonNull Reply reply) { final Double exposureCompensationStep = exposureState.getExposureCompensationStep().doubleValue(); - if (!instanceManager.containsInstance(exposureState)) { create( instanceManager.addHostCreatedInstance(exposureState), exposureCompensationRangeAsExposureRange, exposureCompensationStep, reply); - } } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java index 7c968794dff7..aca72f530c0c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java @@ -22,15 +22,15 @@ public ZoomStateFlutterApiImpl(BinaryMessenger binaryMessenger, InstanceManager * ratio. */ void create(@NonNull ZoomState zoomState, @NonNull Reply reply) { - final Float minZoomRatio = zoomState.getMinZoomRatio(); - final Float maxZoomRatio = zoomState.getMaxZoomRatio(); - - if (!instanceManager.containsInstance(zoomState)) { + if (instanceManager.containsInstance(zoomState)) { + return; + } + final Float minZoomRatio = zoomState.getMinZoomRatio(); + final Float maxZoomRatio = zoomState.getMaxZoomRatio(); create( instanceManager.addHostCreatedInstance(zoomState), minZoomRatio.doubleValue(), maxZoomRatio.doubleValue(), reply); - } } } 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 0cd85848e71a..8d1faf0ef6f5 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,11 +7,17 @@ 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.lifecycle.LiveData; import androidx.camera.core.CameraInfo; +import androidx.camera.core.ExposureState; +import androidx.camera.core.ZoomState; +import android.util.Range; +import android.util.Rational; import io.flutter.plugin.common.BinaryMessenger; import java.util.Objects; import org.junit.After; @@ -41,8 +47,8 @@ public void tearDown() { } @Test - public void getSensorRotationDegreesTest() { - final CameraInfoHostApiImpl cameraInfoHostApi = new CameraInfoHostApiImpl(testInstanceManager); + public void getSensorRotationDegrees_retrievesExpectedSensorRotation() { + final CameraInfoHostApiImpl cameraInfoHostApi = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); testInstanceManager.addDartCreatedInstance(mockCameraInfo, 1); @@ -53,7 +59,42 @@ public void getSensorRotationDegreesTest() { } @Test - public void flutterApiCreateTest() { + public void getExposureState_retrievesExpectedExposureState() { + final CameraInfoHostApiImpl cameraInfoHostApiImpl = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); + final ExposureState mockExposureState = mock(ExposureState.class); + final Long mockCameraInfoIdentifier = 27L; + final Long mockExposureStateIdentifier = 47L; + + testInstanceManager.addDartCreatedInstance(mockCameraInfo, mockCameraInfoIdentifier); + testInstanceManager.addDartCreatedInstance(mockExposureState, mockExposureStateIdentifier); + + when(mockCameraInfo.getExposureState()).thenReturn(mockExposureState); + + assertEquals(cameraInfoHostApiImpl.getExposureState(mockCameraInfoIdentifier), mockExposureStateIdentifier); + verify(mockCameraInfo).getExposureState(); + } + + @SuppressWarnings("unchecked") + @Test + public void getZoomState_retrievesExpectedZoomState() { + final CameraInfoHostApiImpl cameraInfoHostApiImpl = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); + final LiveData mockLiveZoomState = mock(LiveData.class); + final ZoomState mockZoomState = mock(ZoomState.class); + final Long mockCameraInfoIdentifier = 20L; + final Long mockZoomStateIdentifier = 74L; + + testInstanceManager.addDartCreatedInstance(mockCameraInfo, mockCameraInfoIdentifier); + testInstanceManager.addDartCreatedInstance(mockZoomState, mockZoomStateIdentifier); + + when(mockCameraInfo.getZoomState()).thenReturn(mockLiveZoomState); + when(mockLiveZoomState.getValue()).thenReturn(mockZoomState); + + assertEquals(cameraInfoHostApiImpl.getZoomState(mockCameraInfoIdentifier), mockZoomStateIdentifier); + verify(mockCameraInfo).getZoomState(); + } + + @Test + public void flutterApiCreate_makesCallToCreateInstanceOnDartSide() { final CameraInfoFlutterApiImpl spyFlutterApi = spy(new CameraInfoFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); 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 af4fb2ce8e61..aa6a926c58ad 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,12 +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.when; import static org.mockito.Mockito.verify; import androidx.camera.core.Camera; +import androidx.camera.core.CameraInfo; import io.flutter.plugin.common.BinaryMessenger; import java.util.Objects; import org.junit.After; @@ -39,7 +43,23 @@ public void tearDown() { } @Test - public void flutterApiCreateTest() { + public void getCameraInfo_retrievesExpectedCameraInfoInstance() { + final CameraHostApiImpl cameraHostApiImpl = new CameraHostApiImpl(mockBinaryMessenger, testInstanceManager); + final CameraInfo mockCameraInfo = mock(CameraInfo.class); + final Long cameraIdentifier = 34L; + final Long mockCameraInfoIdentifier = 97L; + + testInstanceManager.addDartCreatedInstance(camera, cameraIdentifier); + testInstanceManager.addDartCreatedInstance(mockCameraInfo, mockCameraInfoIdentifier); + + when(camera.getCameraInfo()).thenReturn(mockCameraInfo); + + assertEquals(cameraHostApiImpl.getCameraInfo(cameraIdentifier), mockCameraInfoIdentifier); + verify(camera).getCameraInfo(); + } + + @Test + public void flutterApiCreate_makesCallToCreateInstanceOnDartSide() { final CameraFlutterApiImpl spyFlutterApi = spy(new CameraFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java new file mode 100644 index 000000000000..6f252282c833 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java @@ -0,0 +1,80 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +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.when; +import static org.mockito.Mockito.verify; + +import androidx.camera.core.Camera; +import androidx.camera.core.CameraInfo; +import androidx.camera.core.ExposureState; +import androidx.camera.core.ZoomState; +import android.util.Range; +import android.util.Rational; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.ExposureStateFlutterApiImpl; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureRange; +import java.util.Objects; +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.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +@RunWith(RobolectricTestRunner.class) +public class ExposureStateTest { + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public BinaryMessenger mockBinaryMessenger; + @Mock public ExposureState mockExposureState; + + InstanceManager testInstanceManager; + + @Before + public void setUp() { + testInstanceManager = InstanceManager.create(identifier -> {}); + } + + @After + public void tearDown() { + testInstanceManager.stopFinalizationListener(); + } + + @Config(sdk = 21) + @Test + public void create_makesExpectedCallToCreateInstanceOnDartSide() { + ExposureStateFlutterApiImpl exposureStateFlutterApiImpl = spy(new ExposureStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); + final int minExposureCompensation = 0; + final int maxExposureCompensation = 1; + Range testExposueCompensationRange = new Range(minExposureCompensation, maxExposureCompensation); + Rational textExposureCompensationStep = new Rational(1, 5); // Makes expected Double value 0.2. + + when(mockExposureState.getExposureCompensationRange()).thenReturn(testExposueCompensationRange); + when(mockExposureState.getExposureCompensationStep()).thenReturn(textExposureCompensationStep); + + final ArgumentCaptor exposureRangeCaptor = ArgumentCaptor.forClass(ExposureRange.class); + + exposureStateFlutterApiImpl.create(mockExposureState, reply -> {}); + + final long identifier = + Objects.requireNonNull(testInstanceManager.getIdentifierForStrongReference(mockExposureState)); + verify(exposureStateFlutterApiImpl).create(eq(identifier), exposureRangeCaptor.capture(), eq(0.2), any()); + + ExposureRange exposureRange = exposureRangeCaptor.getValue(); + assertEquals(exposureRange.getMinCompensation().intValue(), minExposureCompensation); + assertEquals(exposureRange.getMaxCompensation().intValue(), maxExposureCompensation); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ZoomStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ZoomStateTest.java new file mode 100644 index 000000000000..ba9fb4c0af40 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ZoomStateTest.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. + +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.when; +import static org.mockito.Mockito.verify; + +import androidx.camera.core.Camera; +import androidx.camera.core.CameraInfo; +import androidx.camera.core.ExposureState; +import androidx.camera.core.ZoomState; +import android.util.Range; +import android.util.Rational; +import io.flutter.plugin.common.BinaryMessenger; +import java.util.Objects; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class ZoomStateTest { + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public BinaryMessenger mockBinaryMessenger; + @Mock public ZoomState mockZoomState; + + InstanceManager testInstanceManager; + + @Before + public void setUp() { + testInstanceManager = InstanceManager.create(identifier -> {}); + } + + @After + public void tearDown() { + testInstanceManager.stopFinalizationListener(); + } + + + @Test + public void create_makesExpectedCallToCreateInstanceOnDartSide() { + ZoomStateFlutterApiImpl zoomStateFlutterApiImpl = spy(new ZoomStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); + final Float testMinZoomRatio = 0F; + final Float testMaxZoomRatio = 1F; + + when(mockZoomState.getMinZoomRatio()).thenReturn(testMinZoomRatio); + when(mockZoomState.getMaxZoomRatio()).thenReturn(testMaxZoomRatio); + + zoomStateFlutterApiImpl.create(mockZoomState, reply -> {}); + + final long identifier = + Objects.requireNonNull(testInstanceManager.getIdentifierForStrongReference(mockZoomState)); + verify(zoomStateFlutterApiImpl).create(eq(identifier), eq(testMinZoomRatio.doubleValue()), eq(testMaxZoomRatio.doubleValue()), any()); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index cf62f151dd18..03d2bae95bbb 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 @@ -38,6 +38,7 @@ class AndroidCameraCameraX extends CameraPlatform { Camera? camera; /// The [CameraInfo] instance that corresponds to the [camera] instance. + @visibleForTesting CameraInfo? cameraInfo; /// The [Preview] instance that can be configured to present a live camera preview. @@ -167,6 +168,7 @@ class AndroidCameraCameraX extends CameraPlatform { // instance as bound but not paused. camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); + // print(camera); cameraInfo = await camera!.getCameraInfo(); _previewIsPaused = false; diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index 640c1ed2d248..dd215ec3de14 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 @@ -100,7 +100,9 @@ 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 mockProcessCameraProvider = + MockProcessCameraProvider(); + final MockCamera mockCamera = MockCamera(); const CameraLensDirection testLensDirection = CameraLensDirection.back; const int testSensorOrientation = 90; const CameraDescription testCameraDescription = CameraDescription( @@ -111,8 +113,14 @@ void main() { const bool enableAudio = true; const int testSurfaceTextureId = 6; + camera.processCameraProvider = mockProcessCameraProvider; + when(camera.testPreview.setSurfaceProvider()) .thenAnswer((_) async => testSurfaceTextureId); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) + .thenAnswer((_) => Future.value(mockCamera)); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(MockCameraInfo())); expect( await camera.createCamera(testCameraDescription, testResolutionPreset, @@ -140,7 +148,9 @@ void main() { 'createCamera binds Preview and ImageCapture use cases to ProcessCameraProvider instance', () async { final MockAndroidCameraCamerax camera = MockAndroidCameraCamerax(); - camera.processCameraProvider = MockProcessCameraProvider(); + final MockProcessCameraProvider mockProcessCameraProvider = + MockProcessCameraProvider(); + final MockCamera mockCamera = MockCamera(); const CameraLensDirection testLensDirection = CameraLensDirection.back; const int testSensorOrientation = 90; const CameraDescription testCameraDescription = CameraDescription( @@ -150,6 +160,15 @@ void main() { const ResolutionPreset testResolutionPreset = ResolutionPreset.veryHigh; const bool enableAudio = true; + camera.processCameraProvider = mockProcessCameraProvider; + + when(mockProcessCameraProvider.bindToLifecycle( + camera.mockBackCameraSelector, + [camera.testPreview, camera.testImageCapture])) + .thenAnswer((_) => Future.value(mockCamera)); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(MockCameraInfo())); + await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); @@ -166,7 +185,8 @@ void main() { test('initializeCamera sends expected CameraInitializedEvent', () async { final MockAndroidCameraCamerax camera = MockAndroidCameraCamerax(); - camera.processCameraProvider = MockProcessCameraProvider(); + final MockProcessCameraProvider mockProcessCameraProvider = + MockProcessCameraProvider(); const int cameraId = 10; const CameraLensDirection testLensDirection = CameraLensDirection.back; const int testSensorOrientation = 90; @@ -196,18 +216,22 @@ void main() { FocusMode.auto, false); + camera.processCameraProvider = mockProcessCameraProvider; + // Call createCamera. when(camera.testPreview.setSurfaceProvider()) .thenAnswer((_) async => cameraId); - await camera.createCamera(testCameraDescription, testResolutionPreset, - enableAudio: enableAudio); - when(camera.processCameraProvider!.bindToLifecycle(camera.cameraSelector!, - [camera.testPreview, camera.testImageCapture])) + when(mockProcessCameraProvider.bindToLifecycle(any, any)) .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(MockCameraInfo())); when(camera.testPreview.getResolutionInfo()) .thenAnswer((_) async => testResolutionInfo); + await camera.createCamera(testCameraDescription, testResolutionPreset, + enableAudio: enableAudio); + // Start listening to camera events stream to verify the proper CameraInitializedEvent is sent. camera.cameraEventStreamController.stream.listen((CameraEvent event) { expect(event, const TypeMatcher()); @@ -314,14 +338,22 @@ void main() { test('resumePreview does not bind preview to lifecycle if already bound', () async { final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockProcessCameraProvider mockProcessCameraProvider = + MockProcessCameraProvider(); + final MockCamera mockCamera = MockCamera(); - camera.processCameraProvider = MockProcessCameraProvider(); + camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); when(camera.processCameraProvider!.isBound(camera.preview!)) .thenAnswer((_) async => true); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) + .thenAnswer((_) => Future.value(mockCamera)); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(MockCameraInfo())); + await camera.resumePreview(78); verifyNever(camera.processCameraProvider! @@ -331,11 +363,19 @@ 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(); - camera.processCameraProvider = MockProcessCameraProvider(); + camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) + .thenAnswer((_) => Future.value(mockCamera)); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(MockCameraInfo())); + await camera.resumePreview(78); verify(camera.processCameraProvider! @@ -346,12 +386,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 MockProcessCameraProvider mockProcessCameraProvider = + MockProcessCameraProvider(); + final MockCamera mockCamera = MockCamera(); const int textureId = 75; - camera.processCameraProvider = MockProcessCameraProvider(); + camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) + .thenAnswer((_) => Future.value(mockCamera)); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(MockCameraInfo())); + final FutureBuilder previewWidget = camera.buildPreview(textureId) as FutureBuilder; @@ -373,12 +421,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 MockProcessCameraProvider mockProcessCameraProvider = + MockProcessCameraProvider(); + final MockCamera mockCamera = MockCamera(); const int textureId = 75; - camera.processCameraProvider = MockProcessCameraProvider(); + camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.preview = MockPreview(); + when(mockProcessCameraProvider.bindToLifecycle(any, any)) + .thenAnswer((_) => Future.value(mockCamera)); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(MockCameraInfo())); + 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 59be6656d5e1..d0bccef5b88a 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.mocks.dart @@ -3,20 +3,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 _i10; -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 _i6; +import 'package:camera_android_camerax/src/camera_info.dart' as _i2; +import 'package:camera_android_camerax/src/camera_selector.dart' as _i11; +import 'package:camera_android_camerax/src/camerax_library.g.dart' as _i5; +import 'package:camera_android_camerax/src/exposure_state.dart' as _i3; +import 'package:camera_android_camerax/src/image_capture.dart' as _i12; +import 'package:camera_android_camerax/src/preview.dart' as _i13; import 'package:camera_android_camerax/src/process_camera_provider.dart' - as _i12; -import 'package:camera_android_camerax/src/use_case.dart' as _i13; -import 'package:flutter/foundation.dart' as _i6; -import 'package:flutter/services.dart' as _i5; -import 'package:flutter/widgets.dart' as _i4; + as _i14; +import 'package:camera_android_camerax/src/use_case.dart' as _i15; +import 'package:camera_android_camerax/src/zoom_state.dart' as _i4; +import 'package:flutter/foundation.dart' as _i9; +import 'package:flutter/services.dart' as _i8; +import 'package:flutter/widgets.dart' as _i7; import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: type=lint @@ -30,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( @@ -41,8 +42,8 @@ class _FakeResolutionInfo_0 extends _i1.SmartFake ); } -class _FakeCamera_1 extends _i1.SmartFake implements _i3.Camera { - _FakeCamera_1( +class _FakeExposureState_1 extends _i1.SmartFake implements _i3.ExposureState { + _FakeExposureState_1( Object parent, Invocation parentInvocation, ) : super( @@ -51,8 +52,39 @@ class _FakeCamera_1 extends _i1.SmartFake implements _i3.Camera { ); } -class _FakeWidget_2 extends _i1.SmartFake implements _i4.Widget { - _FakeWidget_2( +class _FakeZoomState_2 extends _i1.SmartFake implements _i4.ZoomState { + _FakeZoomState_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeResolutionInfo_3 extends _i1.SmartFake + implements _i5.ResolutionInfo { + _FakeResolutionInfo_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeCamera_4 extends _i1.SmartFake implements _i6.Camera { + _FakeCamera_4( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeWidget_5 extends _i1.SmartFake implements _i7.Widget { + _FakeWidget_5( Object parent, Invocation parentInvocation, ) : super( @@ -61,13 +93,13 @@ class _FakeWidget_2 extends _i1.SmartFake implements _i4.Widget { ); @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => + String toString({_i8.DiagnosticLevel? minLevel = _i8.DiagnosticLevel.info}) => super.toString(); } -class _FakeInheritedWidget_3 extends _i1.SmartFake - implements _i4.InheritedWidget { - _FakeInheritedWidget_3( +class _FakeInheritedWidget_6 extends _i1.SmartFake + implements _i7.InheritedWidget { + _FakeInheritedWidget_6( Object parent, Invocation parentInvocation, ) : super( @@ -76,13 +108,13 @@ class _FakeInheritedWidget_3 extends _i1.SmartFake ); @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => + String toString({_i8.DiagnosticLevel? minLevel = _i8.DiagnosticLevel.info}) => super.toString(); } -class _FakeDiagnosticsNode_4 extends _i1.SmartFake - implements _i6.DiagnosticsNode { - _FakeDiagnosticsNode_4( +class _FakeDiagnosticsNode_7 extends _i1.SmartFake + implements _i9.DiagnosticsNode { + _FakeDiagnosticsNode_7( Object parent, Invocation parentInvocation, ) : super( @@ -92,8 +124,8 @@ class _FakeDiagnosticsNode_4 extends _i1.SmartFake @override String toString({ - _i6.TextTreeConfiguration? parentConfiguration, - _i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info, + _i9.TextTreeConfiguration? parentConfiguration, + _i8.DiagnosticLevel? minLevel = _i8.DiagnosticLevel.info, }) => super.toString(); } @@ -101,77 +133,145 @@ 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 _i6.Camera { + @override + _i10.Future<_i2.CameraInfo> getCameraInfo() => (super.noSuchMethod( + Invocation.method( + #getCameraInfo, + [], + ), + returnValue: _i10.Future<_i2.CameraInfo>.value(_FakeCameraInfo_0( + this, + Invocation.method( + #getCameraInfo, + [], + ), + )), + returnValueForMissingStub: + _i10.Future<_i2.CameraInfo>.value(_FakeCameraInfo_0( + this, + Invocation.method( + #getCameraInfo, + [], + ), + )), + ) as _i10.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( + _i10.Future getSensorRotationDegrees() => (super.noSuchMethod( Invocation.method( #getSensorRotationDegrees, [], ), - returnValue: _i8.Future.value(0), - returnValueForMissingStub: _i8.Future.value(0), - ) as _i8.Future); + returnValue: _i10.Future.value(0), + returnValueForMissingStub: _i10.Future.value(0), + ) as _i10.Future); + @override + _i10.Future<_i3.ExposureState> getExposureState() => (super.noSuchMethod( + Invocation.method( + #getExposureState, + [], + ), + returnValue: _i10.Future<_i3.ExposureState>.value(_FakeExposureState_1( + this, + Invocation.method( + #getExposureState, + [], + ), + )), + returnValueForMissingStub: + _i10.Future<_i3.ExposureState>.value(_FakeExposureState_1( + this, + Invocation.method( + #getExposureState, + [], + ), + )), + ) as _i10.Future<_i3.ExposureState>); + @override + _i10.Future<_i4.ZoomState> getZoomState() => (super.noSuchMethod( + Invocation.method( + #getZoomState, + [], + ), + returnValue: _i10.Future<_i4.ZoomState>.value(_FakeZoomState_2( + this, + Invocation.method( + #getZoomState, + [], + ), + )), + returnValueForMissingStub: + _i10.Future<_i4.ZoomState>.value(_FakeZoomState_2( + this, + Invocation.method( + #getZoomState, + [], + ), + )), + ) as _i10.Future<_i4.ZoomState>); } /// 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 _i11.CameraSelector { @override - _i8.Future> filter(List<_i7.CameraInfo>? cameraInfos) => + _i10.Future> filter(List<_i2.CameraInfo>? cameraInfos) => (super.noSuchMethod( Invocation.method( #filter, [cameraInfos], ), - returnValue: _i8.Future>.value(<_i7.CameraInfo>[]), + returnValue: + _i10.Future>.value(<_i2.CameraInfo>[]), returnValueForMissingStub: - _i8.Future>.value(<_i7.CameraInfo>[]), - ) as _i8.Future>); + _i10.Future>.value(<_i2.CameraInfo>[]), + ) as _i10.Future>); } /// A class which mocks [ImageCapture]. /// /// See the documentation for Mockito's code generation for more information. -class MockImageCapture extends _i1.Mock implements _i10.ImageCapture { +class MockImageCapture extends _i1.Mock implements _i12.ImageCapture { @override - _i8.Future setFlashMode(int? newFlashMode) => (super.noSuchMethod( + _i10.Future setFlashMode(int? newFlashMode) => (super.noSuchMethod( Invocation.method( #setFlashMode, [newFlashMode], ), - returnValue: _i8.Future.value(), - returnValueForMissingStub: _i8.Future.value(), - ) as _i8.Future); + returnValue: _i10.Future.value(), + returnValueForMissingStub: _i10.Future.value(), + ) as _i10.Future); @override - _i8.Future takePicture() => (super.noSuchMethod( + _i10.Future takePicture() => (super.noSuchMethod( Invocation.method( #takePicture, [], ), - returnValue: _i8.Future.value(''), - returnValueForMissingStub: _i8.Future.value(''), - ) as _i8.Future); + returnValue: _i10.Future.value(''), + returnValueForMissingStub: _i10.Future.value(''), + ) as _i10.Future); } /// A class which mocks [Preview]. /// /// See the documentation for Mockito's code generation for more information. -class MockPreview extends _i1.Mock implements _i11.Preview { +class MockPreview extends _i1.Mock implements _i13.Preview { @override - _i8.Future setSurfaceProvider() => (super.noSuchMethod( + _i10.Future setSurfaceProvider() => (super.noSuchMethod( Invocation.method( #setSurfaceProvider, [], ), - returnValue: _i8.Future.value(0), - returnValueForMissingStub: _i8.Future.value(0), - ) as _i8.Future); + returnValue: _i10.Future.value(0), + returnValueForMissingStub: _i10.Future.value(0), + ) as _i10.Future); @override void releaseFlutterSurfaceTexture() => super.noSuchMethod( Invocation.method( @@ -181,12 +281,13 @@ class MockPreview extends _i1.Mock implements _i11.Preview { returnValueForMissingStub: null, ); @override - _i8.Future<_i2.ResolutionInfo> getResolutionInfo() => (super.noSuchMethod( + _i10.Future<_i5.ResolutionInfo> getResolutionInfo() => (super.noSuchMethod( Invocation.method( #getResolutionInfo, [], ), - returnValue: _i8.Future<_i2.ResolutionInfo>.value(_FakeResolutionInfo_0( + returnValue: + _i10.Future<_i5.ResolutionInfo>.value(_FakeResolutionInfo_3( this, Invocation.method( #getResolutionInfo, @@ -194,36 +295,37 @@ class MockPreview extends _i1.Mock implements _i11.Preview { ), )), returnValueForMissingStub: - _i8.Future<_i2.ResolutionInfo>.value(_FakeResolutionInfo_0( + _i10.Future<_i5.ResolutionInfo>.value(_FakeResolutionInfo_3( this, Invocation.method( #getResolutionInfo, [], ), )), - ) as _i8.Future<_i2.ResolutionInfo>); + ) as _i10.Future<_i5.ResolutionInfo>); } /// A class which mocks [ProcessCameraProvider]. /// /// See the documentation for Mockito's code generation for more information. class MockProcessCameraProvider extends _i1.Mock - implements _i12.ProcessCameraProvider { + implements _i14.ProcessCameraProvider { @override - _i8.Future> getAvailableCameraInfos() => + _i10.Future> getAvailableCameraInfos() => (super.noSuchMethod( Invocation.method( #getAvailableCameraInfos, [], ), - returnValue: _i8.Future>.value(<_i7.CameraInfo>[]), + returnValue: + _i10.Future>.value(<_i2.CameraInfo>[]), returnValueForMissingStub: - _i8.Future>.value(<_i7.CameraInfo>[]), - ) as _i8.Future>); + _i10.Future>.value(<_i2.CameraInfo>[]), + ) as _i10.Future>); @override - _i8.Future<_i3.Camera> bindToLifecycle( - _i9.CameraSelector? cameraSelector, - List<_i13.UseCase>? useCases, + _i10.Future<_i6.Camera> bindToLifecycle( + _i11.CameraSelector? cameraSelector, + List<_i15.UseCase>? useCases, ) => (super.noSuchMethod( Invocation.method( @@ -233,7 +335,7 @@ class MockProcessCameraProvider extends _i1.Mock useCases, ], ), - returnValue: _i8.Future<_i3.Camera>.value(_FakeCamera_1( + returnValue: _i10.Future<_i6.Camera>.value(_FakeCamera_4( this, Invocation.method( #bindToLifecycle, @@ -243,7 +345,7 @@ class MockProcessCameraProvider extends _i1.Mock ], ), )), - returnValueForMissingStub: _i8.Future<_i3.Camera>.value(_FakeCamera_1( + returnValueForMissingStub: _i10.Future<_i6.Camera>.value(_FakeCamera_4( this, Invocation.method( #bindToLifecycle, @@ -253,18 +355,18 @@ class MockProcessCameraProvider extends _i1.Mock ], ), )), - ) as _i8.Future<_i3.Camera>); + ) as _i10.Future<_i6.Camera>); @override - _i8.Future isBound(_i13.UseCase? useCase) => (super.noSuchMethod( + _i10.Future isBound(_i15.UseCase? useCase) => (super.noSuchMethod( Invocation.method( #isBound, [useCase], ), - returnValue: _i8.Future.value(false), - returnValueForMissingStub: _i8.Future.value(false), - ) as _i8.Future); + returnValue: _i10.Future.value(false), + returnValueForMissingStub: _i10.Future.value(false), + ) as _i10.Future); @override - void unbind(List<_i13.UseCase>? useCases) => super.noSuchMethod( + void unbind(List<_i15.UseCase>? useCases) => super.noSuchMethod( Invocation.method( #unbind, [useCases], @@ -284,19 +386,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 _i7.BuildContext { MockBuildContext() { _i1.throwOnMissingStub(this); } @override - _i4.Widget get widget => (super.noSuchMethod( + _i7.Widget get widget => (super.noSuchMethod( Invocation.getter(#widget), - returnValue: _FakeWidget_2( + returnValue: _FakeWidget_5( this, Invocation.getter(#widget), ), - ) as _i4.Widget); + ) as _i7.Widget); @override bool get mounted => (super.noSuchMethod( Invocation.getter(#mounted), @@ -308,8 +410,8 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValue: false, ) as bool); @override - _i4.InheritedWidget dependOnInheritedElement( - _i4.InheritedElement? ancestor, { + _i7.InheritedWidget dependOnInheritedElement( + _i7.InheritedElement? ancestor, { Object? aspect, }) => (super.noSuchMethod( @@ -318,7 +420,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { [ancestor], {#aspect: aspect}, ), - returnValue: _FakeInheritedWidget_3( + returnValue: _FakeInheritedWidget_6( this, Invocation.method( #dependOnInheritedElement, @@ -326,9 +428,9 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { {#aspect: aspect}, ), ), - ) as _i4.InheritedWidget); + ) as _i7.InheritedWidget); @override - void visitAncestorElements(bool Function(_i4.Element)? visitor) => + void visitAncestorElements(bool Function(_i7.Element)? visitor) => super.noSuchMethod( Invocation.method( #visitAncestorElements, @@ -337,7 +439,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValueForMissingStub: null, ); @override - void visitChildElements(_i4.ElementVisitor? visitor) => super.noSuchMethod( + void visitChildElements(_i7.ElementVisitor? visitor) => super.noSuchMethod( Invocation.method( #visitChildElements, [visitor], @@ -345,7 +447,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValueForMissingStub: null, ); @override - void dispatchNotification(_i4.Notification? notification) => + void dispatchNotification(_i7.Notification? notification) => super.noSuchMethod( Invocation.method( #dispatchNotification, @@ -354,9 +456,9 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { returnValueForMissingStub: null, ); @override - _i6.DiagnosticsNode describeElement( + _i9.DiagnosticsNode describeElement( String? name, { - _i6.DiagnosticsTreeStyle? style = _i6.DiagnosticsTreeStyle.errorProperty, + _i9.DiagnosticsTreeStyle? style = _i9.DiagnosticsTreeStyle.errorProperty, }) => (super.noSuchMethod( Invocation.method( @@ -364,7 +466,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { [name], {#style: style}, ), - returnValue: _FakeDiagnosticsNode_4( + returnValue: _FakeDiagnosticsNode_7( this, Invocation.method( #describeElement, @@ -372,11 +474,11 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { {#style: style}, ), ), - ) as _i6.DiagnosticsNode); + ) as _i9.DiagnosticsNode); @override - _i6.DiagnosticsNode describeWidget( + _i9.DiagnosticsNode describeWidget( String? name, { - _i6.DiagnosticsTreeStyle? style = _i6.DiagnosticsTreeStyle.errorProperty, + _i9.DiagnosticsTreeStyle? style = _i9.DiagnosticsTreeStyle.errorProperty, }) => (super.noSuchMethod( Invocation.method( @@ -384,7 +486,7 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { [name], {#style: style}, ), - returnValue: _FakeDiagnosticsNode_4( + returnValue: _FakeDiagnosticsNode_7( this, Invocation.method( #describeWidget, @@ -392,9 +494,9 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { {#style: style}, ), ), - ) as _i6.DiagnosticsNode); + ) as _i9.DiagnosticsNode); @override - List<_i6.DiagnosticsNode> describeMissingAncestor( + List<_i9.DiagnosticsNode> describeMissingAncestor( {required Type? expectedAncestorType}) => (super.noSuchMethod( Invocation.method( @@ -402,21 +504,21 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { [], {#expectedAncestorType: expectedAncestorType}, ), - returnValue: <_i6.DiagnosticsNode>[], - ) as List<_i6.DiagnosticsNode>); + returnValue: <_i9.DiagnosticsNode>[], + ) as List<_i9.DiagnosticsNode>); @override - _i6.DiagnosticsNode describeOwnershipChain(String? name) => + _i9.DiagnosticsNode describeOwnershipChain(String? name) => (super.noSuchMethod( Invocation.method( #describeOwnershipChain, [name], ), - returnValue: _FakeDiagnosticsNode_4( + returnValue: _FakeDiagnosticsNode_7( this, Invocation.method( #describeOwnershipChain, [name], ), ), - ) as _i6.DiagnosticsNode); + ) as _i9.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 3c153337bfa6..968dc6e8b621 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,6 +35,22 @@ class MockTestCameraInfoHostApi extends _i1.Mock ), returnValue: 0, ) as int); + @override + int getExposureState(int? identifier) => (super.noSuchMethod( + Invocation.method( + #getExposureState, + [identifier], + ), + returnValue: 0, + ) as int); + @override + int getZoomState(int? identifier) => (super.noSuchMethod( + Invocation.method( + #getZoomState, + [identifier], + ), + returnValue: 0, + ) as int); } /// A class which mocks [TestInstanceManagerHostApi]. From 57941b3282b9b070e4519c52bbe3e08430515605 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 25 Apr 2023 15:39:51 -0700 Subject: [PATCH 06/19] Add new tests --- .../lib/src/android_camera_camerax.dart | 1 - .../test/camera_info_test.dart | 81 ++++++++++++++++++- .../test/camera_test.dart | 42 ++++++++++ .../test/camera_test.mocks.dart | 56 +++++++++++++ .../test/exposure_state_test.dart | 43 ++++++++++ .../test/zoom_state.dart | 36 +++++++++ 6 files changed, 256 insertions(+), 3 deletions(-) create mode 100644 packages/camera/camera_android_camerax/test/camera_test.mocks.dart create mode 100644 packages/camera/camera_android_camerax/test/exposure_state_test.dart create mode 100644 packages/camera/camera_android_camerax/test/zoom_state.dart diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 03d2bae95bbb..6b5d819927b4 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 @@ -168,7 +168,6 @@ class AndroidCameraCameraX extends CameraPlatform { // instance as bound but not paused. camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [preview!, imageCapture!]); - // print(camera); cameraInfo = await camera!.getCameraInfo(); _previewIsPaused = false; diff --git a/packages/camera/camera_android_camerax/test/camera_info_test.dart b/packages/camera/camera_android_camerax/test/camera_info_test.dart index f0527bd1f944..8917e4db6dc5 100644 --- a/packages/camera/camera_android_camerax/test/camera_info_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_info_test.dart @@ -4,7 +4,9 @@ import 'package:camera_android_camerax/src/camera_info.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; +import 'package:camera_android_camerax/src/exposure_state.dart'; import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:camera_android_camerax/src/zoom_state.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; @@ -22,7 +24,9 @@ void main() { group('CameraInfo', () { tearDown(() => TestCameraInfoHostApi.setup(null)); - test('getSensorRotationDegreesTest', () async { + test( + 'getSensorRotationDegrees makes call to retrieve expected sensor rotation', + () async { final MockTestCameraInfoHostApi mockApi = MockTestCameraInfoHostApi(); TestCameraInfoHostApi.setup(mockApi); @@ -46,7 +50,80 @@ void main() { verify(mockApi.getSensorRotationDegrees(0)); }); - test('flutterApiCreateTest', () { + test('getExposureState makes call to retrieve expected ExposureState', + () async { + final MockTestCameraInfoHostApi mockApi = MockTestCameraInfoHostApi(); + TestCameraInfoHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final CameraInfo cameraInfo = CameraInfo.detached( + instanceManager: instanceManager, + ); + const int cameraInfoIdentifier = 4; + final ExposureState exposureState = ExposureState.detached( + exposureCompensationRange: + ExposureRange(maxCompensation: 0, minCompensation: 1), + exposureCompensationStep: 4, + instanceManager: instanceManager, + ); + const int exposureStateIdentifier = 45; + + instanceManager.addHostCreatedInstance( + cameraInfo, + cameraInfoIdentifier, + onCopy: (_) => CameraInfo.detached(), + ); + instanceManager.addHostCreatedInstance( + exposureState, + exposureStateIdentifier, + onCopy: (_) => ExposureState.detached( + exposureCompensationRange: + ExposureRange(maxCompensation: 0, minCompensation: 1), + exposureCompensationStep: 4), + ); + + when(mockApi.getExposureState(cameraInfoIdentifier)) + .thenReturn(exposureStateIdentifier); + expect(await cameraInfo.getExposureState(), equals(exposureState)); + + verify(mockApi.getExposureState(cameraInfoIdentifier)); + }); + + test('getZoomState makes call to retrieve expected ZoomState', () async { + final MockTestCameraInfoHostApi mockApi = MockTestCameraInfoHostApi(); + TestCameraInfoHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final CameraInfo cameraInfo = CameraInfo.detached( + instanceManager: instanceManager, + ); + const int cameraInfoIdentifier = 2; + final ZoomState zoomState = + ZoomState.detached(minZoomRatio: 0, maxZoomRatio: 1); + const int zoomStateIdentifier = 55; + + instanceManager.addHostCreatedInstance( + cameraInfo, + cameraInfoIdentifier, + onCopy: (_) => CameraInfo.detached(), + ); + instanceManager.addHostCreatedInstance(zoomState, zoomStateIdentifier, + onCopy: (_) => ZoomState.detached(minZoomRatio: 0, maxZoomRatio: 1)); + + when(mockApi.getZoomState(cameraInfoIdentifier)) + .thenReturn(zoomStateIdentifier); + expect(await cameraInfo.getZoomState(), equals(zoomState)); + + verify(mockApi.getZoomState(cameraInfoIdentifier)); + }); + + test('flutterApi create makes call to create expected instance type', () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); diff --git a/packages/camera/camera_android_camerax/test/camera_test.dart b/packages/camera/camera_android_camerax/test/camera_test.dart index c2948282dcf1..d808aaa71b0c 100644 --- a/packages/camera/camera_android_camerax/test/camera_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_test.dart @@ -3,13 +3,55 @@ // 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 'test_camerax_library.g.dart'; +import 'camera_test.mocks.dart'; + +@GenerateMocks([TestCameraHostApi, TestInstanceManagerHostApi]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); + // Mocks the call to clear the native InstanceManager. + TestInstanceManagerHostApi.setup(MockTestInstanceManagerHostApi()); + group('Camera', () { + test('getCameraInfo makes call to retrieve expected CameraInfo', () async { + final MockTestCameraHostApi mockApi = MockTestCameraHostApi(); + TestCameraHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + + final Camera camera = Camera.detached( + instanceManager: instanceManager, + ); + const int cameraIdentifier = 24; + final CameraInfo cameraInfo = CameraInfo.detached(); + const int cameraInfoIdentifier = 88; + instanceManager.addHostCreatedInstance( + camera, + cameraIdentifier, + onCopy: (_) => Camera.detached(instanceManager: instanceManager), + ); + instanceManager.addHostCreatedInstance( + cameraInfo, + cameraInfoIdentifier, + onCopy: (_) => CameraInfo.detached(instanceManager: instanceManager), + ); + + when(mockApi.getCameraInfo(cameraIdentifier)) + .thenAnswer((_) => cameraInfoIdentifier); + + expect(await camera.getCameraInfo(), equals(cameraInfo)); + verify(mockApi.getCameraInfo(cameraIdentifier)); + }); + test('flutterApiCreateTest', () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, diff --git a/packages/camera/camera_android_camerax/test/camera_test.mocks.dart b/packages/camera/camera_android_camerax/test/camera_test.mocks.dart new file mode 100644 index 000000000000..7f3af283f1a3 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/camera_test.mocks.dart @@ -0,0 +1,56 @@ +// Mocks generated by Mockito 5.4.0 from annotations +// in camera_android_camerax/test/camera_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:mockito/mockito.dart' as _i1; + +import 'test_camerax_library.g.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [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/exposure_state_test.dart b/packages/camera/camera_android_camerax/test/exposure_state_test.dart new file mode 100644 index 000000000000..c84b8db651f9 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/exposure_state_test.dart @@ -0,0 +1,43 @@ +// 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/exposure_state.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'test_camerax_library.g.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ExposureState', () { + tearDown(() => TestCameraInfoHostApi.setup(null)); + + test('flutterApi create makes call to create expected ExposureState', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ExposureStateFlutterApiImpl flutterApi = + ExposureStateFlutterApiImpl( + instanceManager: instanceManager, + ); + const int exposureStateIdentifier = 68; + final ExposureRange exposureCompensationRange = + ExposureRange(minCompensation: 5, maxCompensation: 7); + const double exposureCompensationStep = 0.3; + + flutterApi.create(exposureStateIdentifier, exposureCompensationRange, + exposureCompensationStep); + + final ExposureState instance = + instanceManager.getInstanceWithWeakReference(exposureStateIdentifier)! + as ExposureState; + expect(instance.exposureCompensationRange, + equals(exposureCompensationRange)); + expect( + instance.exposureCompensationStep, equals(exposureCompensationStep)); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/zoom_state.dart b/packages/camera/camera_android_camerax/test/zoom_state.dart new file mode 100644 index 000000000000..7adc7b23b93b --- /dev/null +++ b/packages/camera/camera_android_camerax/test/zoom_state.dart @@ -0,0 +1,36 @@ +// 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/instance_manager.dart'; +import 'package:camera_android_camerax/src/zoom_state.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'test_camerax_library.g.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ZoomState', () { + tearDown(() => TestCameraInfoHostApi.setup(null)); + + test('flutterApi create makes call to create expected ZoomState', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ZoomStateFlutterApiImpl flutterApi = ZoomStateFlutterApiImpl( + instanceManager: instanceManager, + ); + const int zoomStateIdentifier = 68; + const double minZoomRatio = 0; + const double maxZoomRatio = 1; + + flutterApi.create(zoomStateIdentifier, minZoomRatio, maxZoomRatio); + + final ZoomState instance = instanceManager + .getInstanceWithWeakReference(zoomStateIdentifier)! as ZoomState; + expect(instance.minZoomRatio, equals(minZoomRatio)); + expect(instance.maxZoomRatio, equals(maxZoomRatio)); + }); + }); +} From 5adc3557c2e7d26da543c781c82e6ab9da4c2c24 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 25 Apr 2023 17:59:14 -0700 Subject: [PATCH 07/19] Format and finish adding tests --- .../plugins/camerax/CameraHostApiImpl.java | 3 +- .../camerax/ExposureStateFlutterApiImpl.java | 10 +- .../camerax/ZoomStateFlutterApiImpl.java | 14 +-- .../plugins/camerax/CameraInfoTest.java | 20 ++-- .../flutter/plugins/camerax/CameraTest.java | 5 +- .../plugins/camerax/ExposureStateTest.java | 82 ++++++------- .../plugins/camerax/ZoomStateTest.java | 80 +++++++------ .../lib/src/android_camera_camerax.dart | 2 +- .../test/android_camera_camerax_test.dart | 108 +++++++++++++++++- .../android_camera_camerax_test.mocks.dart | 107 ++++++++++++++--- 10 files changed, 302 insertions(+), 129 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 3dc4b11d32c5..f5cf4bf438b3 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/ExposureStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java index 1067e151249e..5098afcc94ab 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java @@ -39,10 +39,10 @@ void create(@NonNull ExposureState exposureState, @NonNull Reply reply) { final Double exposureCompensationStep = exposureState.getExposureCompensationStep().doubleValue(); - create( - instanceManager.addHostCreatedInstance(exposureState), - exposureCompensationRangeAsExposureRange, - exposureCompensationStep, - reply); + create( + instanceManager.addHostCreatedInstance(exposureState), + exposureCompensationRangeAsExposureRange, + exposureCompensationStep, + reply); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java index aca72f530c0c..7538b2432ff4 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java @@ -25,12 +25,12 @@ void create(@NonNull ZoomState zoomState, @NonNull Reply reply) { if (instanceManager.containsInstance(zoomState)) { return; } - final Float minZoomRatio = zoomState.getMinZoomRatio(); - final Float maxZoomRatio = zoomState.getMaxZoomRatio(); - create( - instanceManager.addHostCreatedInstance(zoomState), - minZoomRatio.doubleValue(), - maxZoomRatio.doubleValue(), - reply); + final Float minZoomRatio = zoomState.getMinZoomRatio(); + final Float maxZoomRatio = zoomState.getMaxZoomRatio(); + create( + instanceManager.addHostCreatedInstance(zoomState), + minZoomRatio.doubleValue(), + maxZoomRatio.doubleValue(), + reply); } } 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 8d1faf0ef6f5..a00a9b28d849 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,12 +12,10 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import androidx.lifecycle.LiveData; import androidx.camera.core.CameraInfo; import androidx.camera.core.ExposureState; import androidx.camera.core.ZoomState; -import android.util.Range; -import android.util.Rational; +import androidx.lifecycle.LiveData; import io.flutter.plugin.common.BinaryMessenger; import java.util.Objects; import org.junit.After; @@ -48,7 +46,8 @@ public void tearDown() { @Test public void getSensorRotationDegrees_retrievesExpectedSensorRotation() { - final CameraInfoHostApiImpl cameraInfoHostApi = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); + final CameraInfoHostApiImpl cameraInfoHostApi = + new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); testInstanceManager.addDartCreatedInstance(mockCameraInfo, 1); @@ -60,7 +59,8 @@ public void getSensorRotationDegrees_retrievesExpectedSensorRotation() { @Test public void getExposureState_retrievesExpectedExposureState() { - final CameraInfoHostApiImpl cameraInfoHostApiImpl = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); + final CameraInfoHostApiImpl cameraInfoHostApiImpl = + new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); final ExposureState mockExposureState = mock(ExposureState.class); final Long mockCameraInfoIdentifier = 27L; final Long mockExposureStateIdentifier = 47L; @@ -70,14 +70,17 @@ public void getExposureState_retrievesExpectedExposureState() { when(mockCameraInfo.getExposureState()).thenReturn(mockExposureState); - assertEquals(cameraInfoHostApiImpl.getExposureState(mockCameraInfoIdentifier), mockExposureStateIdentifier); + assertEquals( + cameraInfoHostApiImpl.getExposureState(mockCameraInfoIdentifier), + mockExposureStateIdentifier); verify(mockCameraInfo).getExposureState(); } @SuppressWarnings("unchecked") @Test public void getZoomState_retrievesExpectedZoomState() { - final CameraInfoHostApiImpl cameraInfoHostApiImpl = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); + final CameraInfoHostApiImpl cameraInfoHostApiImpl = + new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); final LiveData mockLiveZoomState = mock(LiveData.class); final ZoomState mockZoomState = mock(ZoomState.class); final Long mockCameraInfoIdentifier = 20L; @@ -89,7 +92,8 @@ public void getZoomState_retrievesExpectedZoomState() { when(mockCameraInfo.getZoomState()).thenReturn(mockLiveZoomState); when(mockLiveZoomState.getValue()).thenReturn(mockZoomState); - assertEquals(cameraInfoHostApiImpl.getZoomState(mockCameraInfoIdentifier), mockZoomStateIdentifier); + assertEquals( + cameraInfoHostApiImpl.getZoomState(mockCameraInfoIdentifier), mockZoomStateIdentifier); verify(mockCameraInfo).getZoomState(); } 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 aa6a926c58ad..fb6b0b3cf353 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 @@ -9,8 +9,8 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import androidx.camera.core.Camera; import androidx.camera.core.CameraInfo; @@ -44,7 +44,8 @@ public void tearDown() { @Test public void getCameraInfo_retrievesExpectedCameraInfoInstance() { - final CameraHostApiImpl cameraHostApiImpl = new CameraHostApiImpl(mockBinaryMessenger, testInstanceManager); + final CameraHostApiImpl cameraHostApiImpl = + new CameraHostApiImpl(mockBinaryMessenger, testInstanceManager); final CameraInfo mockCameraInfo = mock(CameraInfo.class); final Long cameraIdentifier = 34L; final Long mockCameraInfoIdentifier = 97L; diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java index 6f252282c833..4e0a0ca8f954 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java @@ -7,19 +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.spy; -import static org.mockito.Mockito.when; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; -import androidx.camera.core.Camera; -import androidx.camera.core.CameraInfo; -import androidx.camera.core.ExposureState; -import androidx.camera.core.ZoomState; import android.util.Range; import android.util.Rational; +import androidx.camera.core.ExposureState; import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.ExposureStateFlutterApiImpl; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureRange; import java.util.Objects; import org.junit.After; @@ -36,45 +31,50 @@ @RunWith(RobolectricTestRunner.class) public class ExposureStateTest { - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public BinaryMessenger mockBinaryMessenger; + @Mock public ExposureState mockExposureState; + + InstanceManager testInstanceManager; + + @Before + public void setUp() { + testInstanceManager = InstanceManager.create(identifier -> {}); + } - @Mock public BinaryMessenger mockBinaryMessenger; - @Mock public ExposureState mockExposureState; - - InstanceManager testInstanceManager; - - @Before - public void setUp() { - testInstanceManager = InstanceManager.create(identifier -> {}); - } - - @After - public void tearDown() { - testInstanceManager.stopFinalizationListener(); - } + @After + public void tearDown() { + testInstanceManager.stopFinalizationListener(); + } - @Config(sdk = 21) - @Test - public void create_makesExpectedCallToCreateInstanceOnDartSide() { - ExposureStateFlutterApiImpl exposureStateFlutterApiImpl = spy(new ExposureStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); - final int minExposureCompensation = 0; - final int maxExposureCompensation = 1; - Range testExposueCompensationRange = new Range(minExposureCompensation, maxExposureCompensation); - Rational textExposureCompensationStep = new Rational(1, 5); // Makes expected Double value 0.2. + @Config(sdk = 21) + @Test + public void create_makesExpectedCallToCreateInstanceOnDartSide() { + ExposureStateFlutterApiImpl exposureStateFlutterApiImpl = + spy(new ExposureStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); + final int minExposureCompensation = 0; + final int maxExposureCompensation = 1; + Range testExposueCompensationRange = + new Range(minExposureCompensation, maxExposureCompensation); + Rational textExposureCompensationStep = new Rational(1, 5); // Makes expected Double value 0.2. - when(mockExposureState.getExposureCompensationRange()).thenReturn(testExposueCompensationRange); - when(mockExposureState.getExposureCompensationStep()).thenReturn(textExposureCompensationStep); + when(mockExposureState.getExposureCompensationRange()).thenReturn(testExposueCompensationRange); + when(mockExposureState.getExposureCompensationStep()).thenReturn(textExposureCompensationStep); - final ArgumentCaptor exposureRangeCaptor = ArgumentCaptor.forClass(ExposureRange.class); + final ArgumentCaptor exposureRangeCaptor = + ArgumentCaptor.forClass(ExposureRange.class); - exposureStateFlutterApiImpl.create(mockExposureState, reply -> {}); + exposureStateFlutterApiImpl.create(mockExposureState, reply -> {}); - final long identifier = - Objects.requireNonNull(testInstanceManager.getIdentifierForStrongReference(mockExposureState)); - verify(exposureStateFlutterApiImpl).create(eq(identifier), exposureRangeCaptor.capture(), eq(0.2), any()); + final long identifier = + Objects.requireNonNull( + testInstanceManager.getIdentifierForStrongReference(mockExposureState)); + verify(exposureStateFlutterApiImpl) + .create(eq(identifier), exposureRangeCaptor.capture(), eq(0.2), any()); - ExposureRange exposureRange = exposureRangeCaptor.getValue(); - assertEquals(exposureRange.getMinCompensation().intValue(), minExposureCompensation); - assertEquals(exposureRange.getMaxCompensation().intValue(), maxExposureCompensation); - } + ExposureRange exposureRange = exposureRangeCaptor.getValue(); + assertEquals(exposureRange.getMinCompensation().intValue(), minExposureCompensation); + assertEquals(exposureRange.getMaxCompensation().intValue(), maxExposureCompensation); + } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ZoomStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ZoomStateTest.java index ba9fb4c0af40..a4f53ad80c5d 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ZoomStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ZoomStateTest.java @@ -4,20 +4,13 @@ package io.flutter.plugins.camerax; -import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; -import androidx.camera.core.Camera; -import androidx.camera.core.CameraInfo; -import androidx.camera.core.ExposureState; import androidx.camera.core.ZoomState; -import android.util.Range; -import android.util.Rational; import io.flutter.plugin.common.BinaryMessenger; import java.util.Objects; import org.junit.After; @@ -29,37 +22,42 @@ import org.mockito.junit.MockitoRule; public class ZoomStateTest { - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - - @Mock public BinaryMessenger mockBinaryMessenger; - @Mock public ZoomState mockZoomState; - - InstanceManager testInstanceManager; - - @Before - public void setUp() { - testInstanceManager = InstanceManager.create(identifier -> {}); - } - - @After - public void tearDown() { - testInstanceManager.stopFinalizationListener(); - } - - - @Test - public void create_makesExpectedCallToCreateInstanceOnDartSide() { - ZoomStateFlutterApiImpl zoomStateFlutterApiImpl = spy(new ZoomStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); - final Float testMinZoomRatio = 0F; - final Float testMaxZoomRatio = 1F; - - when(mockZoomState.getMinZoomRatio()).thenReturn(testMinZoomRatio); - when(mockZoomState.getMaxZoomRatio()).thenReturn(testMaxZoomRatio); - - zoomStateFlutterApiImpl.create(mockZoomState, reply -> {}); - - final long identifier = - Objects.requireNonNull(testInstanceManager.getIdentifierForStrongReference(mockZoomState)); - verify(zoomStateFlutterApiImpl).create(eq(identifier), eq(testMinZoomRatio.doubleValue()), eq(testMaxZoomRatio.doubleValue()), any()); - } + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public BinaryMessenger mockBinaryMessenger; + @Mock public ZoomState mockZoomState; + + InstanceManager testInstanceManager; + + @Before + public void setUp() { + testInstanceManager = InstanceManager.create(identifier -> {}); + } + + @After + public void tearDown() { + testInstanceManager.stopFinalizationListener(); + } + + @Test + public void create_makesExpectedCallToCreateInstanceOnDartSide() { + ZoomStateFlutterApiImpl zoomStateFlutterApiImpl = + spy(new ZoomStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); + final Float testMinZoomRatio = 0F; + final Float testMaxZoomRatio = 1F; + + when(mockZoomState.getMinZoomRatio()).thenReturn(testMinZoomRatio); + when(mockZoomState.getMaxZoomRatio()).thenReturn(testMaxZoomRatio); + + zoomStateFlutterApiImpl.create(mockZoomState, reply -> {}); + + final long identifier = + Objects.requireNonNull(testInstanceManager.getIdentifierForStrongReference(mockZoomState)); + verify(zoomStateFlutterApiImpl) + .create( + eq(identifier), + eq(testMinZoomRatio.doubleValue()), + eq(testMaxZoomRatio.doubleValue()), + any()); + } } diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 6b5d819927b4..4a174540c321 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 @@ -266,7 +266,7 @@ class AndroidCameraCameraX extends CameraPlatform { /// Gets the supported step size for exposure offset for the selected camera in EV units. /// - /// Returns 0 when the camera supports using a free value without stepping. + /// Returns 0 when exposure compensation is not supported. @override Future getExposureOffsetStepSize(int cameraId) async { final ExposureState exposureState = await cameraInfo!.getExposureState(); 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 dd215ec3de14..daaa4d72c376 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,11 +10,13 @@ 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/exposure_state.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'; import 'package:camera_android_camerax/src/use_case.dart'; +import 'package:camera_android_camerax/src/zoom_state.dart'; import 'package:camera_platform_interface/camera_platform_interface.dart'; import 'package:flutter/services.dart' show DeviceOrientation; import 'package:flutter/widgets.dart'; @@ -23,19 +25,26 @@ 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()); + test('Should fetch CameraDescription instances for available cameras', () async { // Arrange @@ -151,6 +160,7 @@ void main() { final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); const CameraLensDirection testLensDirection = CameraLensDirection.back; const int testSensorOrientation = 90; const CameraDescription testCameraDescription = CameraDescription( @@ -167,13 +177,17 @@ void main() { [camera.testPreview, camera.testImageCapture])) .thenAnswer((_) => Future.value(mockCamera)); when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(MockCameraInfo())); + .thenAnswer((_) => Future.value(mockCameraInfo)); await camera.createCamera(testCameraDescription, testResolutionPreset, enableAudio: enableAudio); + // Verify expected UseCases were bound. verify(camera.processCameraProvider!.bindToLifecycle(camera.cameraSelector!, [camera.testPreview, camera.testImageCapture])); + + // Verify the camera's CameraInfo instance got updated. + expect(camera.cameraInfo, equals(mockCameraInfo)); }); test( @@ -341,6 +355,7 @@ void main() { final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); @@ -352,12 +367,13 @@ void main() { when(mockProcessCameraProvider.bindToLifecycle(any, any)) .thenAnswer((_) => Future.value(mockCamera)); when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(MockCameraInfo())); + .thenAnswer((_) => Future.value(mockCameraInfo)); await camera.resumePreview(78); verifyNever(camera.processCameraProvider! .bindToLifecycle(camera.cameraSelector!, [camera.preview!])); + expect(camera.cameraInfo, isNot(mockCameraInfo)); }); test('resumePreview binds preview to lifecycle if not already bound', @@ -366,6 +382,7 @@ void main() { final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); @@ -374,12 +391,13 @@ void main() { when(mockProcessCameraProvider.bindToLifecycle(any, any)) .thenAnswer((_) => Future.value(mockCamera)); when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(MockCameraInfo())); + .thenAnswer((_) => Future.value(mockCameraInfo)); await camera.resumePreview(78); verify(camera.processCameraProvider! .bindToLifecycle(camera.cameraSelector!, [camera.preview!])); + expect(camera.cameraInfo, equals(mockCameraInfo)); }); test( @@ -424,6 +442,7 @@ void main() { final MockProcessCameraProvider mockProcessCameraProvider = MockProcessCameraProvider(); final MockCamera mockCamera = MockCamera(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); const int textureId = 75; camera.processCameraProvider = mockProcessCameraProvider; @@ -433,7 +452,7 @@ void main() { when(mockProcessCameraProvider.bindToLifecycle(any, any)) .thenAnswer((_) => Future.value(mockCamera)); when(mockCamera.getCameraInfo()) - .thenAnswer((_) => Future.value(MockCameraInfo())); + .thenAnswer((_) => Future.value(mockCameraInfo)); final FutureBuilder previewWidget = camera.buildPreview(textureId) as FutureBuilder; @@ -461,6 +480,87 @@ void main() { expect(imageFile.path, equals(testPicturePath)); }); + + test('getMinExposureOffset returns expected exposure offset', () async { + final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); + final ExposureState exposureState = ExposureState.detached( + exposureCompensationRange: + ExposureRange(minCompensation: 3, maxCompensation: 4), + exposureCompensationStep: 0.2); + + camera.cameraInfo = mockCameraInfo; + + when(mockCameraInfo.getExposureState()) + .thenAnswer((_) async => exposureState); + + // We expect the minimum exposure to be the minimum exposure compensation * exposure compensation step. + expect( + double.parse( + (await camera.getMinExposureOffset(35)).toStringAsFixed(1)), + 0.6); + }); + + test('getMaxExposureOffset returns expected exposure offset', () async { + final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); + final ExposureState exposureState = ExposureState.detached( + exposureCompensationRange: + ExposureRange(minCompensation: 3, maxCompensation: 4), + exposureCompensationStep: 0.2); + + camera.cameraInfo = mockCameraInfo; + + when(mockCameraInfo.getExposureState()) + .thenAnswer((_) async => exposureState); + + // We expect the maximum exposure to be the maximum exposure compensation * exposure compensation step. + expect(await camera.getMaxExposureOffset(35), 0.8); + }); + + test('getExposureOffsetStepSize returns expected exposure offset', () async { + final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); + final ExposureState exposureState = ExposureState.detached( + exposureCompensationRange: + ExposureRange(minCompensation: 3, maxCompensation: 4), + exposureCompensationStep: 0.2); + + camera.cameraInfo = mockCameraInfo; + + when(mockCameraInfo.getExposureState()) + .thenAnswer((_) async => exposureState); + + expect(await camera.getExposureOffsetStepSize(55), 0.2); + }); + + test('getMaxZoomLevel returns expected exposure offset', () async { + final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); + const double maxZoomRatio = 1; + final ZoomState zoomState = + ZoomState.detached(maxZoomRatio: maxZoomRatio, minZoomRatio: 0); + + camera.cameraInfo = mockCameraInfo; + + when(mockCameraInfo.getZoomState()).thenAnswer((_) async => zoomState); + + expect(await camera.getMaxZoomLevel(55), maxZoomRatio); + }); + + test('getMinZoomLevel returns expected exposure offset', () async { + final AndroidCameraCameraX camera = AndroidCameraCameraX(); + final MockCameraInfo mockCameraInfo = MockCameraInfo(); + const double minZoomRatio = 0; + final ZoomState zoomState = + ZoomState.detached(maxZoomRatio: 1, minZoomRatio: minZoomRatio); + + camera.cameraInfo = mockCameraInfo; + + when(mockCameraInfo.getZoomState()).thenAnswer((_) async => zoomState); + + expect(await camera.getMinZoomLevel(55), minZoomRatio); + }); } /// 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 d0bccef5b88a..c0422f17635a 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 @@ -21,6 +21,8 @@ import 'package:flutter/services.dart' as _i8; import 'package:flutter/widgets.dart' as _i7; import 'package:mockito/mockito.dart' as _i1; +import 'test_camerax_library.g.dart' as _i16; + // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values // ignore_for_file: avoid_setters_without_getters @@ -62,9 +64,19 @@ class _FakeZoomState_2 extends _i1.SmartFake implements _i4.ZoomState { ); } -class _FakeResolutionInfo_3 extends _i1.SmartFake +class _FakeExposureRange_3 extends _i1.SmartFake implements _i5.ExposureRange { + _FakeExposureRange_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeResolutionInfo_4 extends _i1.SmartFake implements _i5.ResolutionInfo { - _FakeResolutionInfo_3( + _FakeResolutionInfo_4( Object parent, Invocation parentInvocation, ) : super( @@ -73,8 +85,8 @@ class _FakeResolutionInfo_3 extends _i1.SmartFake ); } -class _FakeCamera_4 extends _i1.SmartFake implements _i6.Camera { - _FakeCamera_4( +class _FakeCamera_5 extends _i1.SmartFake implements _i6.Camera { + _FakeCamera_5( Object parent, Invocation parentInvocation, ) : super( @@ -83,8 +95,8 @@ class _FakeCamera_4 extends _i1.SmartFake implements _i6.Camera { ); } -class _FakeWidget_5 extends _i1.SmartFake implements _i7.Widget { - _FakeWidget_5( +class _FakeWidget_6 extends _i1.SmartFake implements _i7.Widget { + _FakeWidget_6( Object parent, Invocation parentInvocation, ) : super( @@ -97,9 +109,9 @@ class _FakeWidget_5 extends _i1.SmartFake implements _i7.Widget { super.toString(); } -class _FakeInheritedWidget_6 extends _i1.SmartFake +class _FakeInheritedWidget_7 extends _i1.SmartFake implements _i7.InheritedWidget { - _FakeInheritedWidget_6( + _FakeInheritedWidget_7( Object parent, Invocation parentInvocation, ) : super( @@ -112,9 +124,9 @@ class _FakeInheritedWidget_6 extends _i1.SmartFake super.toString(); } -class _FakeDiagnosticsNode_7 extends _i1.SmartFake +class _FakeDiagnosticsNode_8 extends _i1.SmartFake implements _i9.DiagnosticsNode { - _FakeDiagnosticsNode_7( + _FakeDiagnosticsNode_8( Object parent, Invocation parentInvocation, ) : super( @@ -235,6 +247,30 @@ class MockCameraSelector extends _i1.Mock implements _i11.CameraSelector { ) as _i10.Future>); } +/// A class which mocks [ExposureState]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockExposureState extends _i1.Mock implements _i3.ExposureState { + @override + _i5.ExposureRange get exposureCompensationRange => (super.noSuchMethod( + Invocation.getter(#exposureCompensationRange), + returnValue: _FakeExposureRange_3( + this, + Invocation.getter(#exposureCompensationRange), + ), + returnValueForMissingStub: _FakeExposureRange_3( + this, + Invocation.getter(#exposureCompensationRange), + ), + ) as _i5.ExposureRange); + @override + double get exposureCompensationStep => (super.noSuchMethod( + Invocation.getter(#exposureCompensationStep), + returnValue: 0.0, + returnValueForMissingStub: 0.0, + ) as double); +} + /// A class which mocks [ImageCapture]. /// /// See the documentation for Mockito's code generation for more information. @@ -287,7 +323,7 @@ class MockPreview extends _i1.Mock implements _i13.Preview { [], ), returnValue: - _i10.Future<_i5.ResolutionInfo>.value(_FakeResolutionInfo_3( + _i10.Future<_i5.ResolutionInfo>.value(_FakeResolutionInfo_4( this, Invocation.method( #getResolutionInfo, @@ -295,7 +331,7 @@ class MockPreview extends _i1.Mock implements _i13.Preview { ), )), returnValueForMissingStub: - _i10.Future<_i5.ResolutionInfo>.value(_FakeResolutionInfo_3( + _i10.Future<_i5.ResolutionInfo>.value(_FakeResolutionInfo_4( this, Invocation.method( #getResolutionInfo, @@ -335,7 +371,7 @@ class MockProcessCameraProvider extends _i1.Mock useCases, ], ), - returnValue: _i10.Future<_i6.Camera>.value(_FakeCamera_4( + returnValue: _i10.Future<_i6.Camera>.value(_FakeCamera_5( this, Invocation.method( #bindToLifecycle, @@ -345,7 +381,7 @@ class MockProcessCameraProvider extends _i1.Mock ], ), )), - returnValueForMissingStub: _i10.Future<_i6.Camera>.value(_FakeCamera_4( + returnValueForMissingStub: _i10.Future<_i6.Camera>.value(_FakeCamera_5( this, Invocation.method( #bindToLifecycle, @@ -383,6 +419,39 @@ 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 _i16.TestInstanceManagerHostApi { + @override + void clear() => super.noSuchMethod( + Invocation.method( + #clear, + [], + ), + returnValueForMissingStub: null, + ); +} + +/// A class which mocks [ZoomState]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockZoomState extends _i1.Mock implements _i4.ZoomState { + @override + double get minZoomRatio => (super.noSuchMethod( + Invocation.getter(#minZoomRatio), + returnValue: 0.0, + returnValueForMissingStub: 0.0, + ) as double); + @override + double get maxZoomRatio => (super.noSuchMethod( + Invocation.getter(#maxZoomRatio), + returnValue: 0.0, + returnValueForMissingStub: 0.0, + ) as double); +} + /// A class which mocks [BuildContext]. /// /// See the documentation for Mockito's code generation for more information. @@ -394,7 +463,7 @@ class MockBuildContext extends _i1.Mock implements _i7.BuildContext { @override _i7.Widget get widget => (super.noSuchMethod( Invocation.getter(#widget), - returnValue: _FakeWidget_5( + returnValue: _FakeWidget_6( this, Invocation.getter(#widget), ), @@ -420,7 +489,7 @@ class MockBuildContext extends _i1.Mock implements _i7.BuildContext { [ancestor], {#aspect: aspect}, ), - returnValue: _FakeInheritedWidget_6( + returnValue: _FakeInheritedWidget_7( this, Invocation.method( #dependOnInheritedElement, @@ -466,7 +535,7 @@ class MockBuildContext extends _i1.Mock implements _i7.BuildContext { [name], {#style: style}, ), - returnValue: _FakeDiagnosticsNode_7( + returnValue: _FakeDiagnosticsNode_8( this, Invocation.method( #describeElement, @@ -486,7 +555,7 @@ class MockBuildContext extends _i1.Mock implements _i7.BuildContext { [name], {#style: style}, ), - returnValue: _FakeDiagnosticsNode_7( + returnValue: _FakeDiagnosticsNode_8( this, Invocation.method( #describeWidget, @@ -513,7 +582,7 @@ class MockBuildContext extends _i1.Mock implements _i7.BuildContext { #describeOwnershipChain, [name], ), - returnValue: _FakeDiagnosticsNode_7( + returnValue: _FakeDiagnosticsNode_8( this, Invocation.method( #describeOwnershipChain, From a6d30b7e29e5cdbf6993d6706d6c519a0d34c606 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 26 Apr 2023 16:21:37 -0700 Subject: [PATCH 08/19] Fix tests --- .../main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java | 1 + packages/camera/camera_android_camerax/test/camera_test.dart | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) 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 f5cf4bf438b3..98f5f74b959d 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraHostApiImpl.java @@ -26,6 +26,7 @@ public CameraHostApiImpl( * instance with the specified identifier. */ @Override + @NonNull public Long getCameraInfo(@NonNull Long identifier) { Camera camera = (Camera) Objects.requireNonNull(instanceManager.getInstance(identifier)); CameraInfo cameraInfo = camera.getCameraInfo(); diff --git a/packages/camera/camera_android_camerax/test/camera_test.dart b/packages/camera/camera_android_camerax/test/camera_test.dart index d808aaa71b0c..742a60799e6f 100644 --- a/packages/camera/camera_android_camerax/test/camera_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_test.dart @@ -9,8 +9,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; -import 'test_camerax_library.g.dart'; import 'camera_test.mocks.dart'; +import 'test_camerax_library.g.dart'; @GenerateMocks([TestCameraHostApi, TestInstanceManagerHostApi]) void main() { From c642c835a4e99729e8c49e86f37530f346627aa0 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 26 Apr 2023 16:37:41 -0700 Subject: [PATCH 09/19] Add more annotations --- .../io/flutter/plugins/camerax/CameraInfoHostApiImpl.java | 5 ++++- .../flutter/plugins/camerax/ExposureStateFlutterApiImpl.java | 2 +- .../io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index 4bcd1ff1ca3f..51b0517ab920 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 @@ -16,12 +16,13 @@ public class CameraInfoHostApiImpl implements CameraInfoHostApi { private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; - public CameraInfoHostApiImpl(BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + public CameraInfoHostApiImpl(@NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { this.binaryMessenger = binaryMessenger; this.instanceManager = instanceManager; } @Override + @NonNull public Long getSensorRotationDegrees(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); @@ -32,6 +33,7 @@ public Long getSensorRotationDegrees(@NonNull Long identifier) { * Retrieves the {@link ExposureState} of the {@link CameraInfo} with the specified identifier. */ @Override + @NonNull public Long getExposureState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); @@ -48,6 +50,7 @@ public Long getExposureState(@NonNull Long identifier) { * Retrieves the current {@link ZoomState} value of the {@link CameraInfo} with the specified * identifier. */ + @NonNull @Override public Long getZoomState(@NonNull Long identifier) { CameraInfo cameraInfo = diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java index 5098afcc94ab..2ef73d22a3e4 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java @@ -15,7 +15,7 @@ public class ExposureStateFlutterApiImpl extends ExposureStateFlutterApi { private final InstanceManager instanceManager; public ExposureStateFlutterApiImpl( - BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { super(binaryMessenger); this.instanceManager = instanceManager; } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java index 7538b2432ff4..3e0e31ebd75b 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java @@ -12,7 +12,7 @@ public class ZoomStateFlutterApiImpl extends ZoomStateFlutterApi { private final InstanceManager instanceManager; - public ZoomStateFlutterApiImpl(BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + public ZoomStateFlutterApiImpl(@NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { super(binaryMessenger); this.instanceManager = instanceManager; } From b60e1b3bf20e1fb60dfbb990b9e69e435f11b9e8 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 26 Apr 2023 16:41:26 -0700 Subject: [PATCH 10/19] Edit changelog --- packages/camera/camera_android_camerax/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index a7f96245153e..6a7207b16974 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -18,3 +18,4 @@ * Implements image capture. * Fixes cast of CameraInfo to fix integration test failure. * Updates internal Java InstanceManager to only stop finalization callbacks when stopped. +* Implements retrieval of camera information. From f3d6b4399b07cae7b3b1d8afd4f340f42c8d54d7 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 27 Apr 2023 09:39:03 -0700 Subject: [PATCH 11/19] Format --- .../java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java | 3 ++- .../io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoHostApiImpl.java index 51b0517ab920..143fa2c06f69 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 @@ -16,7 +16,8 @@ public class CameraInfoHostApiImpl implements CameraInfoHostApi { private final BinaryMessenger binaryMessenger; private final InstanceManager instanceManager; - public CameraInfoHostApiImpl(@NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + public CameraInfoHostApiImpl( + @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/ZoomStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java index 3e0e31ebd75b..c585c567e7c1 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java @@ -12,7 +12,8 @@ public class ZoomStateFlutterApiImpl extends ZoomStateFlutterApi { private final InstanceManager instanceManager; - public ZoomStateFlutterApiImpl(@NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { + public ZoomStateFlutterApiImpl( + @NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) { super(binaryMessenger); this.instanceManager = instanceManager; } From 6fd597abcb535e757840fc076c427c59acd60476 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 28 Apr 2023 12:39:38 -0700 Subject: [PATCH 12/19] Fix channel connection issue --- .../io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java | 1 + 1 file changed, 1 insertion(+) 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 ab99b5654c79..769dc037bc88 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 @@ -41,6 +41,7 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex // Set up Host APIs. GeneratedCameraXLibrary.InstanceManagerHostApi.setup( binaryMessenger, () -> instanceManager.clear()); + GeneratedCameraXLibrary.CameraHostApi.setup(binaryMessenger, new CameraHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.CameraInfoHostApi.setup( binaryMessenger, new CameraInfoHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.CameraSelectorHostApi.setup( From 351043eeded91ed6fe9ce6799cbaeb417ce36dbc Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 28 Apr 2023 14:10:08 -0700 Subject: [PATCH 13/19] First passthrough --- .../plugins/camerax/CameraHostApiImpl.java | 9 +++---- .../camerax/CameraInfoFlutterApiImpl.java | 4 ++- .../camerax/CameraInfoHostApiImpl.java | 4 ++- .../camerax/ZoomStateFlutterApiImpl.java | 1 + .../plugins/camerax/ExposureStateTest.java | 1 + .../lib/src/android_camera_camerax.dart | 6 +++-- .../lib/src/camera.dart | 9 ++++--- .../lib/src/exposure_state.dart | 2 +- .../test/android_camera_camerax_test.dart | 26 +++++++++++++++---- 9 files changed, 43 insertions(+), 19 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 98f5f74b959d..2c40b13c008d 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 @@ -31,11 +31,10 @@ 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 -> {}); - } + CameraInfoFlutterApiImpl cameraInfoFlutterApiImpl = + new CameraInfoFlutterApiImpl(binaryMessenger, instanceManager); + cameraInfoFlutterApiImpl.create(cameraInfo, reply -> {}); + return instanceManager.getIdentifierForStrongReference(cameraInfo); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java index c538e420cc7e..debc33dcc3f0 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 @@ -18,6 +18,8 @@ public CameraInfoFlutterApiImpl( } void create(CameraInfo cameraInfo, Reply reply) { - create(instanceManager.addHostCreatedInstance(cameraInfo), reply); + if (instanceManager.containsInstance(cameraInfo)) { + 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 143fa2c06f69..bcf1f04e5264 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 @@ -22,6 +22,9 @@ public CameraInfoHostApiImpl( this.instanceManager = instanceManager; } + /** + * Retrieves the sensor rotation in degrees, relative to the device's default orientation. + */ @Override @NonNull public Long getSensorRotationDegrees(@NonNull Long identifier) { @@ -56,7 +59,6 @@ public Long getExposureState(@NonNull Long identifier) { public Long getZoomState(@NonNull Long identifier) { CameraInfo cameraInfo = (CameraInfo) Objects.requireNonNull(instanceManager.getInstance(identifier)); - // Retrieves the current value of the LiveData. // TODO(camsim99): Create/return LiveData once https://github.com/flutter/packages/pull/3419 lands. ZoomState zoomState = cameraInfo.getZoomState().getValue(); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java index c585c567e7c1..4f5abdd6d181 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ZoomStateFlutterApiImpl.java @@ -26,6 +26,7 @@ void create(@NonNull ZoomState zoomState, @NonNull Reply reply) { if (instanceManager.containsInstance(zoomState)) { return; } + final Float minZoomRatio = zoomState.getMinZoomRatio(); final Float maxZoomRatio = zoomState.getMaxZoomRatio(); create( diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java index 4e0a0ca8f954..b99ed7f73d23 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java @@ -51,6 +51,7 @@ public void tearDown() { @Config(sdk = 21) @Test public void create_makesExpectedCallToCreateInstanceOnDartSide() { + // SDK version configured because ExposureState requires Android 21. ExposureStateFlutterApiImpl exposureStateFlutterApiImpl = spy(new ExposureStateFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); final int minExposureCompensation = 0; 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 9ca3831f3bf8..7d5cbbaaa3c9 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 @@ -150,6 +150,7 @@ class AndroidCameraCameraX extends CameraPlatform { /// In the CameraX library, cameras are accessed by combining [UseCase]s /// to an instance of a [ProcessCameraProvider]. Thus, to create an /// unitialized camera instance, this method retrieves a + /// [ProcessCameraProvider] instance. /// /// 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 @@ -278,7 +279,6 @@ class AndroidCameraCameraX extends CameraPlatform { /// Gets the minimum supported exposure offset for the selected camera in EV units. @override Future getMinExposureOffset(int cameraId) async { - // TODO(camsim99): Ensure cameraInfo is properly updated after future changes are merged into this PR. final ExposureState exposureState = await cameraInfo!.getExposureState(); return exposureState.exposureCompensationRange.minCompensation * exposureState.exposureCompensationStep; @@ -436,6 +436,7 @@ class AndroidCameraCameraX extends CameraPlatform { planes: cameraImagePlanes, height: imageProxy.height, width: imageProxy.width); + cameraImageDataStreamController?.add(cameraImageData); imageProxy.close(); } @@ -453,6 +454,7 @@ class AndroidCameraCameraX extends CameraPlatform { // https://github.com/flutter/packages/pull/3419 lands. camera = await processCameraProvider! .bindToLifecycle(cameraSelector!, [imageAnalysis!]); + cameraInfo = await camera!.getCameraInfo(); } /// Unbinds [useCase] from camera lifecycle controlled by the @@ -470,7 +472,7 @@ class AndroidCameraCameraX extends CameraPlatform { /// The [onListen] callback for the stream controller used for image /// streaming. - void _onFrameStreamListen() { + Future _onFrameStreamListen() async { _configureAndBindImageAnalysisToLifecycle(); } diff --git a/packages/camera/camera_android_camerax/lib/src/camera.dart b/packages/camera/camera_android_camerax/lib/src/camera.dart index d8acfe7f2ba1..65821f0734cc 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera.dart @@ -38,6 +38,9 @@ class Camera extends JavaObject { /// Host API implementation of [Camera]. class CameraHostApiImpl extends CameraHostApi { /// Constructs a [CameraHostApiImpl]. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. CameraHostApiImpl({this.binaryMessenger, InstanceManager? instanceManager}) : super(binaryMessenger: binaryMessenger) { this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; @@ -55,10 +58,8 @@ 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)!; - - assert(identifier != null, - 'No Camera has the identifer of that which was requested.'); final int cameraInfoId = await getCameraInfo(identifier); + return instanceManager .getInstanceWithWeakReference(cameraInfoId)!; } @@ -69,7 +70,7 @@ class CameraFlutterApiImpl implements CameraFlutterApi { /// Constructs a [CameraFlutterApiImpl]. /// /// 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. CameraFlutterApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, diff --git a/packages/camera/camera_android_camerax/lib/src/exposure_state.dart b/packages/camera/camera_android_camerax/lib/src/exposure_state.dart index 61b856ea0bf6..16f20b6aa0b7 100644 --- a/packages/camera/camera_android_camerax/lib/src/exposure_state.dart +++ b/packages/camera/camera_android_camerax/lib/src/exposure_state.dart @@ -13,7 +13,7 @@ import 'java_object.dart'; /// /// See https://developer.android.com/reference/androidx/camera/core/ExposureState. class ExposureState extends JavaObject { - /// Constructs a [CameraInfo] that is not automatically attached to a native object. + /// Constructs a [ExposureState] that is not automatically attached to a native object. ExposureState.detached( {super.binaryMessenger, super.instanceManager, diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index 1dbced851919..7f55985db6c9 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 @@ -568,15 +568,26 @@ void main() { when(mockCameraInfo.getZoomState()).thenAnswer((_) async => zoomState); expect(await camera.getMinZoomLevel(55), minZoomRatio); + }); + test( 'onStreamedFrameAvailable emits CameraImageData when picked up from CameraImageData stream controller', () async { final MockAndroidCameraCameraX camera = MockAndroidCameraCameraX(); + final MockProcessCameraProvider mockProcessCameraProvider = + MockProcessCameraProvider(); + final MockCamera mockCamera = MockCamera(); const int cameraId = 22; - camera.processCameraProvider = MockProcessCameraProvider(); + + camera.processCameraProvider = mockProcessCameraProvider; camera.cameraSelector = MockCameraSelector(); camera.createDetachedCallbacks = true; + when(mockProcessCameraProvider.bindToLifecycle(any, any)) + .thenAnswer((_) => Future.value(mockCamera)); + when(mockCamera.getCameraInfo()) + .thenAnswer((_) => Future.value(MockCameraInfo())); + final CameraImageData mockCameraImageData = MockCameraImageData(); final Stream imageStream = camera.onStreamedFrameAvailable(cameraId); @@ -598,6 +609,7 @@ void main() { MockProcessCameraProvider(); final CameraSelector mockCameraSelector = MockCameraSelector(); final Camera mockCamera = MockCamera(); + final CameraInfo mockCameraInfo = MockCameraInfo(); final MockImageProxy mockImageProxy = MockImageProxy(); final MockPlaneProxy mockPlane = MockPlaneProxy(); final List mockPlanes = [mockPlane]; @@ -615,6 +627,7 @@ void main() { when(mockProcessCameraProvider.bindToLifecycle( mockCameraSelector, [camera.mockImageAnalysis])) .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo); when(mockImageProxy.getPlanes()) .thenAnswer((_) => Future>.value(mockPlanes)); when(mockPlane.buffer).thenReturn(buffer); @@ -627,7 +640,7 @@ void main() { final StreamSubscription onStreamedFrameAvailableSubscription = camera .onStreamedFrameAvailable(cameraId) - .listen((CameraImageData imageData) { + .listen(expectAsync1((CameraImageData imageData) { // Test Analyzer correctly process ImageProxy instances. expect(imageData.planes.length, equals(0)); expect(imageData.planes[0].bytes, equals(buffer)); @@ -636,7 +649,11 @@ void main() { expect(imageData.format.raw, equals(imageFormat)); expect(imageData.height, equals(imageHeight)); expect(imageData.width, equals(imageWidth)); - }); + + // Verify camera and cameraInfo were properly updated. + expect(camera.camera, equals(mockCamera)); + expect(camera.cameraInfo, equals(mockCameraInfo)); + })); // Test ImageAnalysis use case is bound to ProcessCameraProvider. final Analyzer capturedAnalyzer = @@ -666,6 +683,7 @@ void main() { when(mockProcessCameraProvider.bindToLifecycle( mockCameraSelector, [camera.mockImageAnalysis])) .thenAnswer((_) async => mockCamera); + when(mockCamera.getCameraInfo()).thenAnswer((_) async => MockCameraInfo()); final StreamSubscription imageStreamSubscription = camera .onStreamedFrameAvailable(cameraId) @@ -679,7 +697,6 @@ void main() { verify(camera.mockImageAnalysis.clearAnalyzer()); }); } -} /// Mock of [AndroidCameraCameraX] that stubs behavior of some methods for /// testing. @@ -733,4 +750,3 @@ class MockAndroidCameraCameraX extends AndroidCameraCameraX { return mockImageAnalysis; } } -} From e57ba9ed588cd46277547da85d0715b345a0b934 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 28 Apr 2023 14:48:57 -0700 Subject: [PATCH 14/19] Formatting --- .../camerax/CameraAndroidCameraxPlugin.java | 3 +- .../camerax/CameraInfoHostApiImpl.java | 4 +- .../camerax/GeneratedCameraXLibrary.java | 450 ++++++++++++------ .../lib/src/camerax_library.g.dart | 181 ++++--- .../test/test_camerax_library.g.dart | 410 ++++++++++------ 5 files changed, 679 insertions(+), 369 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 769dc037bc88..8bad67d1c72e 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 @@ -41,7 +41,8 @@ void setUp(BinaryMessenger binaryMessenger, Context context, TextureRegistry tex // Set up Host APIs. GeneratedCameraXLibrary.InstanceManagerHostApi.setup( binaryMessenger, () -> instanceManager.clear()); - GeneratedCameraXLibrary.CameraHostApi.setup(binaryMessenger, new CameraHostApiImpl(binaryMessenger, instanceManager)); + GeneratedCameraXLibrary.CameraHostApi.setup( + binaryMessenger, new CameraHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.CameraInfoHostApi.setup( binaryMessenger, new CameraInfoHostApiImpl(binaryMessenger, instanceManager)); GeneratedCameraXLibrary.CameraSelectorHostApi.setup( 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 bcf1f04e5264..f9fd7722fc87 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 @@ -22,9 +22,7 @@ public CameraInfoHostApiImpl( this.instanceManager = instanceManager; } - /** - * Retrieves the sensor rotation in degrees, relative to the device's default orientation. - */ + /** Retrieves the sensor rotation in degrees, relative to the device's default orientation. */ @Override @NonNull public Long getSensorRotationDegrees(@NonNull Long identifier) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 64941d2d67d3..7a9f69ba2bf0 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -18,9 +18,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) @@ -35,8 +33,7 @@ public static class FlutterError extends RuntimeException { /** The error details. Must be a datatype supported by the api codec. */ public final Object details; - public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) - { + public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { super(message); this.code = code; this.details = details; @@ -55,7 +52,7 @@ protected static ArrayList wrapError(@NonNull Throwable exception) { errorList.add(exception.toString()); errorList.add(exception.getClass().getSimpleName()); errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); } return errorList; } @@ -126,9 +123,13 @@ ArrayList toList() { static @NonNull ResolutionInfo fromList(@NonNull ArrayList list) { ResolutionInfo pigeonResult = new ResolutionInfo(); Object width = list.get(0); - pigeonResult.setWidth((width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); + pigeonResult.setWidth( + (width == null) ? null : ((width instanceof Integer) ? (Integer) width : (Long) width)); Object height = list.get(1); - pigeonResult.setHeight((height == null) ? null : ((height instanceof Integer) ? (Integer) height : (Long) height)); + pigeonResult.setHeight( + (height == null) + ? null + : ((height instanceof Integer) ? (Integer) height : (Long) height)); return pigeonResult; } } @@ -272,9 +273,19 @@ ArrayList toList() { static @NonNull ExposureRange fromList(@NonNull ArrayList list) { ExposureRange pigeonResult = new ExposureRange(); Object minCompensation = list.get(0); - pigeonResult.setMinCompensation((minCompensation == null) ? null : ((minCompensation instanceof Integer) ? (Integer) minCompensation : (Long) minCompensation)); + pigeonResult.setMinCompensation( + (minCompensation == null) + ? null + : ((minCompensation instanceof Integer) + ? (Integer) minCompensation + : (Long) minCompensation)); Object maxCompensation = list.get(1); - pigeonResult.setMaxCompensation((maxCompensation == null) ? null : ((maxCompensation instanceof Integer) ? (Integer) maxCompensation : (Long) maxCompensation)); + pigeonResult.setMaxCompensation( + (maxCompensation == null) + ? null + : ((maxCompensation instanceof Integer) + ? (Integer) maxCompensation + : (Long) maxCompensation)); return pigeonResult; } } @@ -290,7 +301,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(); @@ -298,8 +309,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<>( @@ -311,8 +326,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; } @@ -333,7 +347,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 = @@ -348,8 +364,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; } @@ -369,7 +384,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); @@ -378,6 +393,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void dispose(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -390,25 +406,29 @@ 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 getExposureState(@NonNull Long identifier); - @NonNull + @NonNull Long getZoomState(@NonNull Long identifier); /** The codec used by CameraInfoHostApi. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `CameraInfoHostApi` to handle messages through the `binaryMessenger`. + */ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfoHostApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -416,10 +436,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; } @@ -432,7 +453,9 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.CameraInfoHostApi.getExposureState", getCodec()); + binaryMessenger, + "dev.flutter.pigeon.CameraInfoHostApi.getExposureState", + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -440,10 +463,11 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getExposureState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getExposureState( + (identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -464,10 +488,10 @@ static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable CameraInfo ArrayList args = (ArrayList) message; Number identifierArg = (Number) args.get(0); try { - Long output = api.getZoomState((identifierArg == null) ? null : identifierArg.longValue()); + Long output = + api.getZoomState((identifierArg == null) ? null : identifierArg.longValue()); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; } @@ -487,7 +511,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); @@ -496,6 +520,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -510,15 +535,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<>( @@ -531,10 +560,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; } @@ -556,10 +586,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; } @@ -579,7 +611,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); @@ -588,7 +620,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()); @@ -602,13 +636,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); @@ -619,12 +656,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) -> { @@ -651,7 +694,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) -> { @@ -659,10 +704,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; } @@ -675,7 +721,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) -> { @@ -685,10 +733,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; } @@ -701,7 +754,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) -> { @@ -710,10 +765,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; } @@ -726,7 +783,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) -> { @@ -735,10 +794,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; } @@ -751,7 +810,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) -> { @@ -761,8 +822,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; } @@ -782,7 +842,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); @@ -791,10 +851,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)); @@ -803,14 +866,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 = @@ -823,10 +886,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; } @@ -846,7 +909,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); @@ -855,6 +918,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -894,9 +958,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(); @@ -904,12 +970,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) -> { @@ -938,7 +1010,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) -> { @@ -947,10 +1021,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; } @@ -963,7 +1038,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) -> { @@ -971,8 +1048,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; } @@ -992,7 +1068,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); @@ -1001,18 +1077,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)); @@ -1053,21 +1136,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 = @@ -1082,10 +1168,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; } @@ -1098,7 +1186,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) -> { @@ -1106,10 +1196,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; } @@ -1122,7 +1213,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) -> { @@ -1130,8 +1223,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; } @@ -1152,10 +1244,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; } @@ -1197,7 +1290,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); @@ -1207,7 +1303,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 = @@ -1222,10 +1321,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; } @@ -1247,10 +1348,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; } @@ -1283,7 +1385,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); @@ -1326,7 +1429,7 @@ public ExposureStateFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1335,12 +1438,19 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return ExposureStateFlutterApiCodec.INSTANCE; } - public void create(@NonNull Long identifierArg, @NonNull ExposureRange exposureCompensationRangeArg, @NonNull Double exposureCompensationStepArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull ExposureRange exposureCompensationRangeArg, + @NonNull Double exposureCompensationStepArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ExposureStateFlutterApi.create", getCodec()); channel.send( - new ArrayList(Arrays.asList(identifierArg, exposureCompensationRangeArg, exposureCompensationStepArg)), + new ArrayList( + Arrays.asList( + identifierArg, exposureCompensationRangeArg, exposureCompensationStepArg)), channelReply -> callback.reply(null)); } } @@ -1352,7 +1462,7 @@ public ZoomStateFlutterApi(@NonNull BinaryMessenger argBinaryMessenger) { this.binaryMessenger = argBinaryMessenger; } - /** Public interface for sending reply. */ + /** Public interface for sending reply. */ @SuppressWarnings("UnknownNullness") public interface Reply { void reply(T reply); @@ -1361,7 +1471,12 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } - public void create(@NonNull Long identifierArg, @NonNull Double minZoomRatioArg, @NonNull Double maxZoomRatioArg, @NonNull Reply callback) { + + public void create( + @NonNull Long identifierArg, + @NonNull Double minZoomRatioArg, + @NonNull Double maxZoomRatioArg, + @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( binaryMessenger, "dev.flutter.pigeon.ZoomStateFlutterApi.create", getCodec()); @@ -1410,8 +1525,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<>( @@ -1424,10 +1543,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; } @@ -1449,10 +1569,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; } @@ -1465,7 +1586,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) -> { @@ -1475,8 +1598,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; } @@ -1497,7 +1619,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 = @@ -1512,8 +1636,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; } @@ -1533,7 +1656,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); @@ -1542,6 +1665,7 @@ public interface Reply { static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); } + public void create(@NonNull Long identifierArg, @NonNull Reply callback) { BasicMessageChannel channel = new BasicMessageChannel<>( @@ -1550,7 +1674,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()); @@ -1562,7 +1690,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); @@ -1571,7 +1699,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 = @@ -1584,10 +1714,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; } @@ -1610,8 +1740,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; } @@ -1631,7 +1760,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); @@ -1640,7 +1769,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()); @@ -1657,7 +1792,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); @@ -1666,12 +1801,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/lib/src/camerax_library.g.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart index 8fd2c4d854fe..1abe0e3ee908 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 @@ -106,8 +106,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', @@ -163,7 +162,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, @@ -173,7 +173,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, @@ -283,7 +283,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, @@ -293,7 +294,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, @@ -320,8 +321,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', @@ -338,12 +339,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', @@ -371,7 +373,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, @@ -381,7 +384,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, @@ -409,8 +412,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', @@ -434,7 +436,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?; @@ -459,12 +462,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', @@ -491,7 +499,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', @@ -517,8 +526,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', @@ -563,7 +572,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, @@ -573,7 +583,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, @@ -639,7 +649,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, @@ -667,7 +677,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); @@ -685,9 +695,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?; @@ -707,12 +719,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', @@ -731,10 +746,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', @@ -759,17 +774,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, @@ -788,7 +805,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, @@ -819,9 +836,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); @@ -839,12 +856,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', @@ -892,8 +911,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', @@ -953,7 +971,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); @@ -971,12 +989,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', @@ -997,8 +1017,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', @@ -1058,7 +1078,7 @@ class _ExposureStateFlutterApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return ExposureRange.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1069,9 +1089,11 @@ class _ExposureStateFlutterApiCodec extends StandardMessageCodec { abstract class ExposureStateFlutterApi { static const MessageCodec codec = _ExposureStateFlutterApiCodec(); - void create(int identifier, ExposureRange exposureCompensationRange, double exposureCompensationStep); + void create(int identifier, ExposureRange exposureCompensationRange, + double exposureCompensationStep); - static void setup(ExposureStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ExposureStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ExposureStateFlutterApi.create', codec, @@ -1081,18 +1103,20 @@ abstract class ExposureStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null int.'); - final ExposureRange? arg_exposureCompensationRange = (args[1] as ExposureRange?); + final ExposureRange? arg_exposureCompensationRange = + (args[1] as ExposureRange?); assert(arg_exposureCompensationRange != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null ExposureRange.'); final double? arg_exposureCompensationStep = (args[2] as double?); assert(arg_exposureCompensationStep != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null double.'); - api.create(arg_identifier!, arg_exposureCompensationRange!, arg_exposureCompensationStep!); + api.create(arg_identifier!, arg_exposureCompensationRange!, + arg_exposureCompensationStep!); return; }); } @@ -1105,7 +1129,8 @@ abstract class ZoomStateFlutterApi { void create(int identifier, double minZoomRatio, double maxZoomRatio); - static void setup(ZoomStateFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(ZoomStateFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ZoomStateFlutterApi.create', codec, @@ -1115,7 +1140,7 @@ abstract class ZoomStateFlutterApi { } else { channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null.'); + 'Argument for dev.flutter.pigeon.ZoomStateFlutterApi.create was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -1149,7 +1174,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); @@ -1167,12 +1192,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', @@ -1189,12 +1216,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', @@ -1274,7 +1303,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, @@ -1284,7 +1314,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, @@ -1303,7 +1333,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, @@ -1384,7 +1414,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, @@ -1394,7 +1425,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, @@ -1421,7 +1452,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, @@ -1431,7 +1463,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, @@ -1445,7 +1477,8 @@ abstract class PlaneProxyFlutterApi { final int? arg_rowStride = (args[3] as int?); assert(arg_rowStride != null, 'Argument for dev.flutter.pigeon.PlaneProxyFlutterApi.create was null, expected non-null int.'); - api.create(arg_identifier!, arg_buffer!, arg_pixelStride!, arg_rowStride!); + api.create( + arg_identifier!, arg_buffer!, arg_pixelStride!, arg_rowStride!); return; }); } diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart index 82023c3121b8..40bd8f2e4335 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.g.dart @@ -14,7 +14,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:camera_android_camerax/src/camerax_library.g.dart'; abstract class TestInstanceManagerHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); /// Clear the native `InstanceManager`. @@ -22,15 +23,19 @@ abstract class TestInstanceManagerHostApi { /// This is typically only used after a hot restart. void clear(); - static void setup(TestInstanceManagerHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestInstanceManagerHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.InstanceManagerHostApi.clear', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { // ignore message api.clear(); return []; @@ -41,22 +46,27 @@ abstract class TestInstanceManagerHostApi { } abstract class TestJavaObjectHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); void dispose(int identifier); - static void setup(TestJavaObjectHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestJavaObjectHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.JavaObjectHostApi.dispose', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); + 'Argument for dev.flutter.pigeon.JavaObjectHostApi.dispose was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -70,7 +80,8 @@ abstract class TestJavaObjectHostApi { } abstract class TestCameraInfoHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); int getSensorRotationDegrees(int identifier); @@ -79,17 +90,22 @@ abstract class TestCameraInfoHostApi { int getZoomState(int identifier); - static void setup(TestCameraInfoHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestCameraInfoHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', codec, + 'dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees', + codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getSensorRotationDegrees was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -104,11 +120,14 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getExposureState', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getExposureState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getExposureState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -123,11 +142,14 @@ abstract class TestCameraInfoHostApi { 'dev.flutter.pigeon.CameraInfoHostApi.getZoomState', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getZoomState was null.'); + 'Argument for dev.flutter.pigeon.CameraInfoHostApi.getZoomState was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -141,24 +163,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, @@ -174,19 +201,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]; }); } @@ -195,14 +227,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); @@ -210,15 +244,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]; @@ -227,33 +265,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, @@ -261,10 +308,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]; }); } @@ -274,11 +323,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, @@ -286,7 +338,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]; }); } @@ -296,16 +349,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!); @@ -318,11 +375,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, @@ -336,22 +396,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, @@ -379,7 +444,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); @@ -388,45 +453,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, @@ -434,19 +512,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 []; @@ -474,9 +557,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); @@ -485,7 +568,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); @@ -496,23 +580,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 []; }); @@ -523,11 +612,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, @@ -539,12 +631,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 []; @@ -556,11 +652,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, @@ -588,7 +687,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); @@ -597,7 +696,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); @@ -606,23 +706,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 []; }); @@ -633,11 +738,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, @@ -655,11 +763,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, @@ -687,7 +798,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); @@ -696,7 +807,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); @@ -705,22 +817,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 []; }); @@ -731,11 +848,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, @@ -753,11 +873,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, @@ -771,22 +894,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, @@ -800,24 +928,29 @@ abstract class TestAnalyzerHostApi { } abstract class TestImageProxyHostApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = StandardMessageCodec(); List getPlanes(int identifier); void close(int identifier); - static void setup(TestImageProxyHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestImageProxyHostApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.ImageProxyHostApi.getPlanes', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getPlanes was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.getPlanes was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, @@ -832,11 +965,14 @@ abstract class TestImageProxyHostApi { 'dev.flutter.pigeon.ImageProxyHostApi.close', codec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.ImageProxyHostApi.close was null.'); + 'Argument for dev.flutter.pigeon.ImageProxyHostApi.close was null.'); final List args = (message as List?)!; final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, From cdfb661163835cc434a65ee7b79a0fa8c78eb676 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 1 May 2023 07:31:23 -0700 Subject: [PATCH 15/19] Fix cameraInfo flutter api impl --- .../io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.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/CameraInfoFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java index debc33dcc3f0..d19349bcd839 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 @@ -18,7 +18,7 @@ public CameraInfoFlutterApiImpl( } void create(CameraInfo cameraInfo, Reply reply) { - if (instanceManager.containsInstance(cameraInfo)) { + if (!instanceManager.containsInstance(cameraInfo)) { create(instanceManager.addHostCreatedInstance(cameraInfo), reply); } } From 6b4c0172f05003a883b710b343a0470404aa5ff2 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 1 May 2023 08:49:52 -0700 Subject: [PATCH 16/19] Personal review --- .../camerax/ExposureStateFlutterApiImpl.java | 15 +++++++------ .../camerax/GeneratedCameraXLibrary.java | 20 ++++++++--------- .../plugins/camerax/CameraInfoTest.java | 4 ++-- .../plugins/camerax/ExposureStateTest.java | 17 ++++++++------ .../lib/src/camerax_library.g.dart | 22 ++++++++++--------- .../lib/src/exposure_state.dart | 9 ++++++-- .../lib/src/zoom_state.dart | 3 +++ .../pigeons/camerax_library.dart | 8 ++++--- .../test/android_camera_camerax_test.dart | 6 ++--- .../test/camera_info_test.dart | 6 ++--- .../test/exposure_state_test.dart | 4 ++-- .../{zoom_state.dart => zoom_state_test.dart} | 0 12 files changed, 65 insertions(+), 49 deletions(-) rename packages/camera/camera_android_camerax/test/{zoom_state.dart => zoom_state_test.dart} (100%) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java index 2ef73d22a3e4..1f31f603a8a4 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ExposureStateFlutterApiImpl.java @@ -8,7 +8,7 @@ import androidx.annotation.NonNull; import androidx.camera.core.ExposureState; import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureRange; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureCompensationRange; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureStateFlutterApi; public class ExposureStateFlutterApiImpl extends ExposureStateFlutterApi { @@ -30,18 +30,19 @@ void create(@NonNull ExposureState exposureState, @NonNull Reply reply) { return; } - final Range exposureCompensationRange = exposureState.getExposureCompensationRange(); - ExposureRange exposureCompensationRangeAsExposureRange = - new ExposureRange.Builder() - .setMinCompensation(exposureCompensationRange.getLower().longValue()) - .setMaxCompensation(exposureCompensationRange.getUpper().longValue()) + final Range exposureCompensationRangeFromState = + exposureState.getExposureCompensationRange(); + ExposureCompensationRange exposureCompensationRange = + new ExposureCompensationRange.Builder() + .setMinCompensation(exposureCompensationRangeFromState.getLower().longValue()) + .setMaxCompensation(exposureCompensationRangeFromState.getUpper().longValue()) .build(); final Double exposureCompensationStep = exposureState.getExposureCompensationStep().doubleValue(); create( instanceManager.addHostCreatedInstance(exposureState), - exposureCompensationRangeAsExposureRange, + exposureCompensationRange, exposureCompensationStep, reply); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 7a9f69ba2bf0..882c1d146323 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 @@ -208,7 +208,7 @@ ArrayList toList() { } /** Generated class from Pigeon that represents data sent in messages. */ - public static final class ExposureRange { + public static final class ExposureCompensationRange { private @NonNull Long minCompensation; public @NonNull Long getMinCompensation() { @@ -236,7 +236,7 @@ public void setMaxCompensation(@NonNull Long setterArg) { } /** Constructor is non-public to enforce null safety; use Builder. */ - ExposureRange() {} + ExposureCompensationRange() {} public static final class Builder { @@ -254,8 +254,8 @@ public static final class Builder { return this; } - public @NonNull ExposureRange build() { - ExposureRange pigeonReturn = new ExposureRange(); + public @NonNull ExposureCompensationRange build() { + ExposureCompensationRange pigeonReturn = new ExposureCompensationRange(); pigeonReturn.setMinCompensation(minCompensation); pigeonReturn.setMaxCompensation(maxCompensation); return pigeonReturn; @@ -270,8 +270,8 @@ ArrayList toList() { return toListResult; } - static @NonNull ExposureRange fromList(@NonNull ArrayList list) { - ExposureRange pigeonResult = new ExposureRange(); + static @NonNull ExposureCompensationRange fromList(@NonNull ArrayList list) { + ExposureCompensationRange pigeonResult = new ExposureCompensationRange(); Object minCompensation = list.get(0); pigeonResult.setMinCompensation( (minCompensation == null) @@ -1404,7 +1404,7 @@ private ExposureStateFlutterApiCodec() {} protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { switch (type) { case (byte) 128: - return ExposureRange.fromList((ArrayList) readValue(buffer)); + return ExposureCompensationRange.fromList((ArrayList) readValue(buffer)); default: return super.readValueOfType(type, buffer); } @@ -1412,9 +1412,9 @@ protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { @Override protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { - if (value instanceof ExposureRange) { + if (value instanceof ExposureCompensationRange) { stream.write(128); - writeValue(stream, ((ExposureRange) value).toList()); + writeValue(stream, ((ExposureCompensationRange) value).toList()); } else { super.writeValue(stream, value); } @@ -1441,7 +1441,7 @@ public interface Reply { public void create( @NonNull Long identifierArg, - @NonNull ExposureRange exposureCompensationRangeArg, + @NonNull ExposureCompensationRange exposureCompensationRangeArg, @NonNull Double exposureCompensationStepArg, @NonNull Reply callback) { BasicMessageChannel channel = 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 a00a9b28d849..5cfd06935b85 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 @@ -76,12 +76,12 @@ public void getExposureState_retrievesExpectedExposureState() { verify(mockCameraInfo).getExposureState(); } - @SuppressWarnings("unchecked") @Test + @SuppressWarnings("unchecked") public void getZoomState_retrievesExpectedZoomState() { final CameraInfoHostApiImpl cameraInfoHostApiImpl = new CameraInfoHostApiImpl(mockBinaryMessenger, testInstanceManager); - final LiveData mockLiveZoomState = mock(LiveData.class); + final LiveData mockLiveZoomState = (LiveData) mock(LiveData.class); final ZoomState mockZoomState = mock(ZoomState.class); final Long mockCameraInfoIdentifier = 20L; final Long mockZoomStateIdentifier = 74L; diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java index b99ed7f73d23..7eef68d28d12 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ExposureStateTest.java @@ -15,7 +15,7 @@ import android.util.Rational; import androidx.camera.core.ExposureState; import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureRange; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ExposureCompensationRange; import java.util.Objects; import org.junit.After; import org.junit.Before; @@ -63,8 +63,8 @@ public void create_makesExpectedCallToCreateInstanceOnDartSide() { when(mockExposureState.getExposureCompensationRange()).thenReturn(testExposueCompensationRange); when(mockExposureState.getExposureCompensationStep()).thenReturn(textExposureCompensationStep); - final ArgumentCaptor exposureRangeCaptor = - ArgumentCaptor.forClass(ExposureRange.class); + final ArgumentCaptor exposureCompensationRangeCaptor = + ArgumentCaptor.forClass(ExposureCompensationRange.class); exposureStateFlutterApiImpl.create(mockExposureState, reply -> {}); @@ -72,10 +72,13 @@ public void create_makesExpectedCallToCreateInstanceOnDartSide() { Objects.requireNonNull( testInstanceManager.getIdentifierForStrongReference(mockExposureState)); verify(exposureStateFlutterApiImpl) - .create(eq(identifier), exposureRangeCaptor.capture(), eq(0.2), any()); + .create(eq(identifier), exposureCompensationRangeCaptor.capture(), eq(0.2), any()); - ExposureRange exposureRange = exposureRangeCaptor.getValue(); - assertEquals(exposureRange.getMinCompensation().intValue(), minExposureCompensation); - assertEquals(exposureRange.getMaxCompensation().intValue(), maxExposureCompensation); + ExposureCompensationRange exposureCompensationRange = + exposureCompensationRangeCaptor.getValue(); + assertEquals( + exposureCompensationRange.getMinCompensation().intValue(), minExposureCompensation); + assertEquals( + exposureCompensationRange.getMaxCompensation().intValue(), maxExposureCompensation); } } 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 1abe0e3ee908..f2d2e17152fb 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.g.dart @@ -63,8 +63,8 @@ class CameraPermissionsErrorData { } } -class ExposureRange { - ExposureRange({ +class ExposureCompensationRange { + ExposureCompensationRange({ required this.minCompensation, required this.maxCompensation, }); @@ -80,9 +80,9 @@ class ExposureRange { ]; } - static ExposureRange decode(Object result) { + static ExposureCompensationRange decode(Object result) { result as List; - return ExposureRange( + return ExposureCompensationRange( minCompensation: result[0]! as int, maxCompensation: result[1]! as int, ); @@ -1067,7 +1067,7 @@ class _ExposureStateFlutterApiCodec extends StandardMessageCodec { const _ExposureStateFlutterApiCodec(); @override void writeValue(WriteBuffer buffer, Object? value) { - if (value is ExposureRange) { + if (value is ExposureCompensationRange) { buffer.putUint8(128); writeValue(buffer, value.encode()); } else { @@ -1079,7 +1079,7 @@ class _ExposureStateFlutterApiCodec extends StandardMessageCodec { Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { case 128: - return ExposureRange.decode(readValue(buffer)!); + return ExposureCompensationRange.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); } @@ -1089,7 +1089,9 @@ class _ExposureStateFlutterApiCodec extends StandardMessageCodec { abstract class ExposureStateFlutterApi { static const MessageCodec codec = _ExposureStateFlutterApiCodec(); - void create(int identifier, ExposureRange exposureCompensationRange, + void create( + int identifier, + ExposureCompensationRange exposureCompensationRange, double exposureCompensationStep); static void setup(ExposureStateFlutterApi? api, @@ -1108,10 +1110,10 @@ abstract class ExposureStateFlutterApi { final int? arg_identifier = (args[0] as int?); assert(arg_identifier != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null int.'); - final ExposureRange? arg_exposureCompensationRange = - (args[1] as ExposureRange?); + final ExposureCompensationRange? arg_exposureCompensationRange = + (args[1] as ExposureCompensationRange?); assert(arg_exposureCompensationRange != null, - 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null ExposureRange.'); + 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null ExposureCompensationRange.'); final double? arg_exposureCompensationStep = (args[2] as double?); assert(arg_exposureCompensationStep != null, 'Argument for dev.flutter.pigeon.ExposureStateFlutterApi.create was null, expected non-null double.'); diff --git a/packages/camera/camera_android_camerax/lib/src/exposure_state.dart b/packages/camera/camera_android_camerax/lib/src/exposure_state.dart index 16f20b6aa0b7..4599a929995e 100644 --- a/packages/camera/camera_android_camerax/lib/src/exposure_state.dart +++ b/packages/camera/camera_android_camerax/lib/src/exposure_state.dart @@ -25,7 +25,7 @@ class ExposureState extends JavaObject { /// Gets the maximum and minimum exposure compensation values for the camera /// represented by this instance. - final ExposureRange exposureCompensationRange; + final ExposureCompensationRange exposureCompensationRange; /// Gets the smallest step by which the exposure compensation can be changed for /// the camera represented by this instance. @@ -35,6 +35,9 @@ class ExposureState extends JavaObject { /// Flutter API implementation of [ExposureState]. class ExposureStateFlutterApiImpl implements ExposureStateFlutterApi { /// Constructs a [ExposureStateFlutterApiImpl]. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. ExposureStateFlutterApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, @@ -50,7 +53,9 @@ class ExposureStateFlutterApiImpl implements ExposureStateFlutterApi { final InstanceManager instanceManager; @override - void create(int identifier, ExposureRange exposureCompensationRange, + void create( + int identifier, + ExposureCompensationRange exposureCompensationRange, double exposureCompensationStep) { instanceManager.addHostCreatedInstance( ExposureState.detached( diff --git a/packages/camera/camera_android_camerax/lib/src/zoom_state.dart b/packages/camera/camera_android_camerax/lib/src/zoom_state.dart index 5b78f40a8904..98068820b154 100644 --- a/packages/camera/camera_android_camerax/lib/src/zoom_state.dart +++ b/packages/camera/camera_android_camerax/lib/src/zoom_state.dart @@ -33,6 +33,9 @@ class ZoomState extends JavaObject { /// Flutter API implementation of [ZoomState]. class ZoomStateFlutterApiImpl implements ZoomStateFlutterApi { /// Constructs a [ZoomStateFlutterApiImpl]. + /// + /// An [instanceManager] is typically passed when a copy of an instance + /// contained by an [InstanceManager] is being created. ZoomStateFlutterApiImpl({ this.binaryMessenger, InstanceManager? instanceManager, diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index b578be3dc369..c8b3885d064b 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -46,8 +46,8 @@ class CameraPermissionsErrorData { String description; } -class ExposureRange { - ExposureRange({ +class ExposureCompensationRange { + ExposureCompensationRange({ required this.minCompensation, required this.maxCompensation, }); @@ -173,7 +173,9 @@ abstract class ImageCaptureHostApi { @FlutterApi() abstract class ExposureStateFlutterApi { - void create(int identifier, ExposureRange exposureCompensationRange, + void create( + int identifier, + ExposureCompensationRange exposureCompensationRange, double exposureCompensationStep); } 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 7f55985db6c9..fe14a62c97cc 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 @@ -494,7 +494,7 @@ void main() { final MockCameraInfo mockCameraInfo = MockCameraInfo(); final ExposureState exposureState = ExposureState.detached( exposureCompensationRange: - ExposureRange(minCompensation: 3, maxCompensation: 4), + ExposureCompensationRange(minCompensation: 3, maxCompensation: 4), exposureCompensationStep: 0.2); camera.cameraInfo = mockCameraInfo; @@ -514,7 +514,7 @@ void main() { final MockCameraInfo mockCameraInfo = MockCameraInfo(); final ExposureState exposureState = ExposureState.detached( exposureCompensationRange: - ExposureRange(minCompensation: 3, maxCompensation: 4), + ExposureCompensationRange(minCompensation: 3, maxCompensation: 4), exposureCompensationStep: 0.2); camera.cameraInfo = mockCameraInfo; @@ -531,7 +531,7 @@ void main() { final MockCameraInfo mockCameraInfo = MockCameraInfo(); final ExposureState exposureState = ExposureState.detached( exposureCompensationRange: - ExposureRange(minCompensation: 3, maxCompensation: 4), + ExposureCompensationRange(minCompensation: 3, maxCompensation: 4), exposureCompensationStep: 0.2); camera.cameraInfo = mockCameraInfo; 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 8917e4db6dc5..9826b88e367e 100644 --- a/packages/camera/camera_android_camerax/test/camera_info_test.dart +++ b/packages/camera/camera_android_camerax/test/camera_info_test.dart @@ -65,7 +65,7 @@ void main() { const int cameraInfoIdentifier = 4; final ExposureState exposureState = ExposureState.detached( exposureCompensationRange: - ExposureRange(maxCompensation: 0, minCompensation: 1), + ExposureCompensationRange(maxCompensation: 0, minCompensation: 1), exposureCompensationStep: 4, instanceManager: instanceManager, ); @@ -80,8 +80,8 @@ void main() { exposureState, exposureStateIdentifier, onCopy: (_) => ExposureState.detached( - exposureCompensationRange: - ExposureRange(maxCompensation: 0, minCompensation: 1), + exposureCompensationRange: ExposureCompensationRange( + maxCompensation: 0, minCompensation: 1), exposureCompensationStep: 4), ); diff --git a/packages/camera/camera_android_camerax/test/exposure_state_test.dart b/packages/camera/camera_android_camerax/test/exposure_state_test.dart index c84b8db651f9..a5897f10c44c 100644 --- a/packages/camera/camera_android_camerax/test/exposure_state_test.dart +++ b/packages/camera/camera_android_camerax/test/exposure_state_test.dart @@ -24,8 +24,8 @@ void main() { instanceManager: instanceManager, ); const int exposureStateIdentifier = 68; - final ExposureRange exposureCompensationRange = - ExposureRange(minCompensation: 5, maxCompensation: 7); + final ExposureCompensationRange exposureCompensationRange = + ExposureCompensationRange(minCompensation: 5, maxCompensation: 7); const double exposureCompensationStep = 0.3; flutterApi.create(exposureStateIdentifier, exposureCompensationRange, diff --git a/packages/camera/camera_android_camerax/test/zoom_state.dart b/packages/camera/camera_android_camerax/test/zoom_state_test.dart similarity index 100% rename from packages/camera/camera_android_camerax/test/zoom_state.dart rename to packages/camera/camera_android_camerax/test/zoom_state_test.dart From 96178e8aba9780f54d10b9e7ee6f6f245f558119 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 1 May 2023 10:14:36 -0700 Subject: [PATCH 17/19] Regenerate mocks --- .../test/android_camera_camerax_test.dart | 12 +++++++----- .../test/android_camera_camerax_test.mocks.dart | 14 ++++++++------ 2 files changed, 15 insertions(+), 11 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 fe14a62c97cc..f2991b6ea040 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 @@ -637,10 +637,7 @@ void main() { when(mockImageProxy.height).thenReturn(imageHeight); when(mockImageProxy.width).thenReturn(imageWidth); - final StreamSubscription - onStreamedFrameAvailableSubscription = camera - .onStreamedFrameAvailable(cameraId) - .listen(expectAsync1((CameraImageData imageData) { + void callback(CameraImageData imageData) { // Test Analyzer correctly process ImageProxy instances. expect(imageData.planes.length, equals(0)); expect(imageData.planes[0].bytes, equals(buffer)); @@ -653,7 +650,11 @@ void main() { // Verify camera and cameraInfo were properly updated. expect(camera.camera, equals(mockCamera)); expect(camera.cameraInfo, equals(mockCameraInfo)); - })); + } + + final StreamSubscription + onStreamedFrameAvailableSubscription = + camera.onStreamedFrameAvailable(cameraId).listen(callback); // Test ImageAnalysis use case is bound to ProcessCameraProvider. final Analyzer capturedAnalyzer = @@ -662,6 +663,7 @@ void main() { verify(mockProcessCameraProvider.bindToLifecycle( mockCameraSelector, [camera.mockImageAnalysis])); + expectAsync1(callback); await capturedAnalyzer.analyze(mockImageProxy); onStreamedFrameAvailableSubscription.cancel(); }); 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 d68ab7f2822a..b7365a2e90d4 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 @@ -82,8 +82,9 @@ class _FakeCameraImageFormat_3 extends _i1.SmartFake ); } -class _FakeExposureRange_4 extends _i1.SmartFake implements _i6.ExposureRange { - _FakeExposureRange_4( +class _FakeExposureCompensationRange_4 extends _i1.SmartFake + implements _i6.ExposureCompensationRange { + _FakeExposureCompensationRange_4( Object parent, Invocation parentInvocation, ) : super( @@ -307,17 +308,18 @@ class MockCameraSelector extends _i1.Mock implements _i12.CameraSelector { /// See the documentation for Mockito's code generation for more information. class MockExposureState extends _i1.Mock implements _i3.ExposureState { @override - _i6.ExposureRange get exposureCompensationRange => (super.noSuchMethod( + _i6.ExposureCompensationRange get exposureCompensationRange => + (super.noSuchMethod( Invocation.getter(#exposureCompensationRange), - returnValue: _FakeExposureRange_4( + returnValue: _FakeExposureCompensationRange_4( this, Invocation.getter(#exposureCompensationRange), ), - returnValueForMissingStub: _FakeExposureRange_4( + returnValueForMissingStub: _FakeExposureCompensationRange_4( this, Invocation.getter(#exposureCompensationRange), ), - ) as _i6.ExposureRange); + ) as _i6.ExposureCompensationRange); @override double get exposureCompensationStep => (super.noSuchMethod( Invocation.getter(#exposureCompensationStep), From 107d3dfaf42c542972f50afe25d68daec943a234 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 1 May 2023 11:00:25 -0700 Subject: [PATCH 18/19] Fix dart tests --- .../test/android_camera_camerax_test.dart | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 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 f2991b6ea040..e7a6707d6e3f 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 @@ -503,10 +503,8 @@ void main() { .thenAnswer((_) async => exposureState); // We expect the minimum exposure to be the minimum exposure compensation * exposure compensation step. - expect( - double.parse( - (await camera.getMinExposureOffset(35)).toStringAsFixed(1)), - 0.6); + // Delta is included due to avoid catching rounding errors. + expect(await camera.getMinExposureOffset(35), closeTo(0.6, 0.0000000001)); }); test('getMaxExposureOffset returns expected exposure offset', () async { @@ -637,24 +635,14 @@ void main() { when(mockImageProxy.height).thenReturn(imageHeight); when(mockImageProxy.width).thenReturn(imageWidth); - void callback(CameraImageData imageData) { - // Test Analyzer correctly process ImageProxy instances. - expect(imageData.planes.length, equals(0)); - expect(imageData.planes[0].bytes, equals(buffer)); - expect(imageData.planes[0].bytesPerRow, equals(rowStride)); - expect(imageData.planes[0].bytesPerPixel, equals(pixelStride)); - expect(imageData.format.raw, equals(imageFormat)); - expect(imageData.height, equals(imageHeight)); - expect(imageData.width, equals(imageWidth)); - - // Verify camera and cameraInfo were properly updated. - expect(camera.camera, equals(mockCamera)); - expect(camera.cameraInfo, equals(mockCameraInfo)); - } - + final Completer imageDataCompleter = + Completer(); final StreamSubscription - onStreamedFrameAvailableSubscription = - camera.onStreamedFrameAvailable(cameraId).listen(callback); + onStreamedFrameAvailableSubscription = camera + .onStreamedFrameAvailable(cameraId) + .listen((CameraImageData imageData) { + imageDataCompleter.complete(imageData); + }); // Test ImageAnalysis use case is bound to ProcessCameraProvider. final Analyzer capturedAnalyzer = @@ -663,8 +651,21 @@ void main() { verify(mockProcessCameraProvider.bindToLifecycle( mockCameraSelector, [camera.mockImageAnalysis])); - expectAsync1(callback); await capturedAnalyzer.analyze(mockImageProxy); + final CameraImageData imageData = await imageDataCompleter.future; + + // Test Analyzer correctly process ImageProxy instances. + expect(imageData.planes.length, equals(1)); + expect(imageData.planes[0].bytes, equals(buffer)); + expect(imageData.planes[0].bytesPerRow, equals(rowStride)); + expect(imageData.planes[0].bytesPerPixel, equals(pixelStride)); + expect(imageData.format.raw, equals(imageFormat)); + expect(imageData.height, equals(imageHeight)); + expect(imageData.width, equals(imageWidth)); + + // Verify camera and cameraInfo were properly updated. + expect(camera.camera, equals(mockCamera)); + expect(camera.cameraInfo, equals(mockCameraInfo)); onStreamedFrameAvailableSubscription.cancel(); }); From a907639de56590925232a610f8ba62d6c7e1884b Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 1 May 2023 11:33:33 -0700 Subject: [PATCH 19/19] Address review --- .../lib/src/android_camera_camerax.dart | 10 ++++++++++ .../camera_android_camerax/lib/src/camera_info.dart | 10 +++++----- 2 files changed, 15 insertions(+), 5 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 7d5cbbaaa3c9..174a373e3b9b 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 @@ -277,6 +277,8 @@ class AndroidCameraCameraX extends CameraPlatform { } /// Gets the minimum supported exposure offset for the selected camera in EV units. + /// + /// [cameraId] not used. @override Future getMinExposureOffset(int cameraId) async { final ExposureState exposureState = await cameraInfo!.getExposureState(); @@ -285,6 +287,8 @@ class AndroidCameraCameraX extends CameraPlatform { } /// Gets the maximum supported exposure offset for the selected camera in EV units. + /// + /// [cameraId] not used. @override Future getMaxExposureOffset(int cameraId) async { final ExposureState exposureState = await cameraInfo!.getExposureState(); @@ -295,6 +299,8 @@ class AndroidCameraCameraX extends CameraPlatform { /// Gets the supported step size for exposure offset for the selected camera in EV units. /// /// Returns 0 when exposure compensation is not supported. + /// + /// [cameraId] not used. @override Future getExposureOffsetStepSize(int cameraId) async { final ExposureState exposureState = await cameraInfo!.getExposureState(); @@ -302,6 +308,8 @@ class AndroidCameraCameraX extends CameraPlatform { } /// Gets the maximum supported zoom level for the selected camera. + /// + /// [cameraId] not used. @override Future getMaxZoomLevel(int cameraId) async { final ZoomState exposureState = await cameraInfo!.getZoomState(); @@ -309,6 +317,8 @@ class AndroidCameraCameraX extends CameraPlatform { } /// Gets the minimum supported zoom level for the selected camera. + /// + /// [cameraId] not used. @override Future getMinZoomLevel(int cameraId) async { final ZoomState exposureState = await cameraInfo!.getZoomState(); 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 640bfa103e37..f2fdc1fdc879 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -21,12 +21,12 @@ class CameraInfo extends JavaObject { : super.detached( binaryMessenger: binaryMessenger, instanceManager: instanceManager) { - _api = CameraInfoHostApiImpl( + _api = _CameraInfoHostApiImpl( binaryMessenger: binaryMessenger, instanceManager: instanceManager); AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } - late final CameraInfoHostApiImpl _api; + late final _CameraInfoHostApiImpl _api; /// Gets sensor orientation degrees of the camera. Future getSensorRotationDegrees() => @@ -41,9 +41,9 @@ class CameraInfo extends JavaObject { } /// Host API implementation of [CameraInfo]. -class CameraInfoHostApiImpl extends CameraInfoHostApi { - /// Constructs a [CameraInfoHostApiImpl]. - CameraInfoHostApiImpl( +class _CameraInfoHostApiImpl extends CameraInfoHostApi { + /// Constructs a [_CameraInfoHostApiImpl]. + _CameraInfoHostApiImpl( {super.binaryMessenger, InstanceManager? instanceManager}) { this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; }