diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index ffb540b6587..722223cf8a1 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.18+1 + +* Makes Java style improvements. + ## 0.6.18 * Adds support for the `MediaSettings.enableAudio` setting, which determines whether or not audio is diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle index 4ed1e856598..3cf1451a6bb 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle +++ b/packages/camera/camera_android_camerax/android/build.gradle @@ -49,6 +49,11 @@ android { unitTests.includeAndroidResources = true unitTests.returnDefaultValues = true unitTests.all { + // The org.gradle.jvmargs property that may be set in gradle.properties does not impact + // the Java heap size when running the Android unit tests. The following property here + // sets the heap size to a size large enough to run the robolectric tests across + // multiple SDK levels. + jvmArgs "-Xmx1G" testLogging { events "passed", "skipped", "failed", "standardOut", "standardError" outputs.upToDateWhen {false} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerProxyApi.java index 61a217393fd..ad4b19d089f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AnalyzerProxyApi.java @@ -6,6 +6,7 @@ import androidx.annotation.NonNull; import androidx.camera.core.ImageAnalysis.Analyzer; +import androidx.camera.core.ImageProxy; import java.util.Objects; /** @@ -33,7 +34,7 @@ static class AnalyzerImpl implements Analyzer { } @Override - public void analyze(@NonNull androidx.camera.core.ImageProxy image) { + public void analyze(@NonNull ImageProxy image) { api.getPigeonRegistrar() .runOnMainThread( new ProxyApiRegistrar.FlutterMethodRunnable() { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AspectRatioStrategyProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AspectRatioStrategyProxyApi.java index 942c2682ecb..b7c00298037 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AspectRatioStrategyProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/AspectRatioStrategyProxyApi.java @@ -32,6 +32,11 @@ public AspectRatioStrategy pigeon_defaultConstructor( break; case RATIO_DEFAULT: nativeAspectRatio = androidx.camera.core.AspectRatio.RATIO_DEFAULT; + break; + case UNKNOWN: + default: + // Default to nativeAspectRatio -2. + break; } int nativeFallbackRule = -1; switch (fallbackRule) { @@ -41,6 +46,10 @@ public AspectRatioStrategy pigeon_defaultConstructor( case NONE: nativeFallbackRule = AspectRatioStrategy.FALLBACK_RULE_NONE; break; + case UNKNOWN: + default: + // Default to nativeFallbackRule -1. + break; } return new AspectRatioStrategy(nativeAspectRatio, nativeFallbackRule); } @@ -66,9 +75,9 @@ public AspectRatioStrategyFallbackRule getFallbackRule( return AspectRatioStrategyFallbackRule.AUTO; case AspectRatioStrategy.FALLBACK_RULE_NONE: return AspectRatioStrategyFallbackRule.NONE; + default: + return AspectRatioStrategyFallbackRule.UNKNOWN; } - - return AspectRatioStrategyFallbackRule.UNKNOWN; } @NonNull @@ -81,8 +90,8 @@ public AspectRatio getPreferredAspectRatio(@NonNull AspectRatioStrategy pigeonIn return AspectRatio.RATIO4TO3; case androidx.camera.core.AspectRatio.RATIO_DEFAULT: return AspectRatio.RATIO_DEFAULT; + default: + return AspectRatio.UNKNOWN; } - - return AspectRatio.UNKNOWN; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraControlProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraControlProxyApi.java index 4d41de7e4e9..40a4e71c870 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraControlProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraControlProxyApi.java @@ -52,10 +52,12 @@ public void addCaptureRequestOptions( Futures.addCallback( addCaptureRequestOptionsFuture, new FutureCallback<>() { + @Override public void onSuccess(Void voidResult) { ResultCompat.success(null, callback); } + @Override public void onFailure(@NonNull Throwable t) { ResultCompat.failure(t, callback); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraInfoProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraInfoProxyApi.java index f9ee09c07b8..87a8f38ef8f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraInfoProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraInfoProxyApi.java @@ -45,7 +45,7 @@ public Object getCameraCharacteristic( return null; } - if (key == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) { + if (CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL.equals(key)) { switch ((Integer) result) { case CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_3: return InfoSupportedHardwareLevel.LEVEL3; @@ -57,9 +57,11 @@ public Object getCameraCharacteristic( return InfoSupportedHardwareLevel.LEGACY; case CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED: return InfoSupportedHardwareLevel.LIMITED; + default: + // Fall through to return result. + break; } } - return result; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraCharacteristicsProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraCharacteristicsProxyApi.java index 5cab2f35e69..458f9315d0f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraCharacteristicsProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraCharacteristicsProxyApi.java @@ -25,7 +25,7 @@ public CameraCharacteristics.Key infoSupportedHardwareLevel() { @NonNull @Override - public android.hardware.camera2.CameraCharacteristics.Key sensorOrientation() { + public CameraCharacteristics.Key sensorOrientation() { return CameraCharacteristics.SENSOR_ORIENTATION; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraControlProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraControlProxyApi.java index cee3178df80..42b5d8a3121 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraControlProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraControlProxyApi.java @@ -42,10 +42,12 @@ public void enableTorch( Futures.addCallback( enableTorchFuture, new FutureCallback<>() { + @Override public void onSuccess(Void voidResult) { ResultCompat.success(null, callback); } + @Override public void onFailure(@NonNull Throwable t) { ResultCompat.failure(t, callback); } @@ -64,10 +66,12 @@ public void setZoomRatio( Futures.addCallback( setZoomRatioFuture, new FutureCallback<>() { + @Override public void onSuccess(Void voidResult) { ResultCompat.success(null, callback); } + @Override public void onFailure(@NonNull Throwable t) { if (t instanceof CameraControl.OperationCanceledException) { // Operation was canceled due to camera being closed or a new request was submitted, which @@ -93,10 +97,12 @@ public void startFocusAndMetering( Futures.addCallback( focusMeteringResultFuture, new FutureCallback<>() { + @Override public void onSuccess(FocusMeteringResult focusMeteringResult) { ResultCompat.success(focusMeteringResult, callback); } + @Override public void onFailure(@NonNull Throwable t) { if (t instanceof CameraControl.OperationCanceledException) { // Operation was canceled due to camera being closed or a new request was submitted, which @@ -120,10 +126,12 @@ public void cancelFocusAndMetering( Futures.addCallback( cancelFocusAndMeteringFuture, new FutureCallback<>() { + @Override public void onSuccess(Void voidResult) { ResultCompat.success(null, callback); } + @Override public void onFailure(@NonNull Throwable t) { ResultCompat.failure(t, callback); } @@ -142,10 +150,12 @@ public void setExposureCompensationIndex( Futures.addCallback( setExposureCompensationIndexFuture, new FutureCallback<>() { + @Override public void onSuccess(Integer integerResult) { ResultCompat.success(integerResult.longValue(), callback); } + @Override public void onFailure(@NonNull Throwable t) { if (t instanceof CameraControl.OperationCanceledException) { // Operation was canceled due to camera being closed or a new request was submitted, which diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraIntegerRangeProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraIntegerRangeProxyApi.java index 6ed0428990e..1da15481796 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraIntegerRangeProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraIntegerRangeProxyApi.java @@ -24,12 +24,12 @@ public Range pigeon_defaultConstructor(long lower, long upper) { } @Override - public long lower(android.util.Range pigeonInstance) { + public long lower(Range pigeonInstance) { return (Integer) pigeonInstance.getLower(); } @Override - public long upper(android.util.Range pigeonInstance) { + public long upper(Range pigeonInstance) { return (Integer) pigeonInstance.getUpper(); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraPermissionsManager.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraPermissionsManager.java index ed80da9ea2c..7afc7035934 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraPermissionsManager.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraPermissionsManager.java @@ -13,12 +13,11 @@ import androidx.annotation.VisibleForTesting; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; +import io.flutter.plugin.common.PluginRegistry; public final class CameraPermissionsManager { interface PermissionsRegistry { - @SuppressWarnings("deprecation") - void addListener( - io.flutter.plugin.common.PluginRegistry.RequestPermissionsResultListener handler); + void addListener(PluginRegistry.RequestPermissionsResultListener handler); } interface ResultCallback { @@ -84,9 +83,8 @@ private boolean hasAudioPermission(Activity activity) { } @VisibleForTesting - @SuppressWarnings("deprecation") static final class CameraRequestPermissionsListener - implements io.flutter.plugin.common.PluginRegistry.RequestPermissionsResultListener { + implements PluginRegistry.RequestPermissionsResultListener { // There's no way to unregister permission listeners in the v1 embedding, so we'll be called // duplicate times in cases where the user denies and then grants a permission. Keep track of if diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraSelectorProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraSelectorProxyApi.java index b1eb4121060..a84e16bcfc2 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraSelectorProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraSelectorProxyApi.java @@ -47,13 +47,13 @@ public CameraSelector pigeon_defaultConstructor(@Nullable LensFacing requireLens @NonNull @Override - public androidx.camera.core.CameraSelector defaultBackCamera() { + public CameraSelector defaultBackCamera() { return CameraSelector.DEFAULT_BACK_CAMERA; } @NonNull @Override - public androidx.camera.core.CameraSelector defaultFrontCamera() { + public CameraSelector defaultFrontCamera() { return CameraSelector.DEFAULT_FRONT_CAMERA; } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateProxyApi.java index 33f164a0193..fa415358669 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateProxyApi.java @@ -33,9 +33,8 @@ public CameraStateType type(CameraState pigeonInstance) { return CameraStateType.CLOSING; case CLOSED: return CameraStateType.CLOSED; - default: - return CameraStateType.UNKNOWN; } + return CameraStateType.UNKNOWN; } @Nullable diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateStateErrorProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateStateErrorProxyApi.java index 6864a3dd549..f4449c4e979 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateStateErrorProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraStateStateErrorProxyApi.java @@ -36,7 +36,7 @@ public CameraStateErrorCode code(CameraState.StateError pigeonInstance) { case CameraState.ERROR_STREAM_CONFIG: return CameraStateErrorCode.STREAM_CONFIG; default: - return io.flutter.plugins.camerax.CameraStateErrorCode.UNKNOWN; + return CameraStateErrorCode.UNKNOWN; } } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CaptureRequestProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CaptureRequestProxyApi.java index 9556baccc4b..543be292bb9 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CaptureRequestProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CaptureRequestProxyApi.java @@ -19,7 +19,7 @@ class CaptureRequestProxyApi extends PigeonApiCaptureRequest { @NonNull @Override - public android.hardware.camera2.CaptureRequest.Key controlAELock() { + public CaptureRequest.Key controlAELock() { return CaptureRequest.CONTROL_AE_LOCK; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java index 382dd2de8fb..f4b509bfe9a 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java @@ -4,6 +4,7 @@ package io.flutter.plugins.camerax; +import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -47,6 +48,8 @@ Context getContext() { *

When orientation information is updated, the callback method of the {@link * DeviceOrientationManagerProxyApi} is called with the new orientation. */ + @SuppressLint( + "UnprotectedReceiver") // orientationIntentFilter only listens to protected broadcast public void start() { stop(); @@ -68,7 +71,7 @@ protected OrientationEventListener createOrientationEventListener() { return new OrientationEventListener(getContext()) { @Override public void onOrientationChanged(int orientation) { - handleUIOrientationChange(); + handleUiOrientationChange(); } }; } @@ -91,8 +94,8 @@ public void stop() { * class. */ @VisibleForTesting - void handleUIOrientationChange() { - PlatformChannel.DeviceOrientation orientation = getUIOrientation(); + void handleUiOrientationChange() { + PlatformChannel.DeviceOrientation orientation = getUiOrientation(); handleOrientationChange(this, orientation, lastOrientation, api); lastOrientation = orientation; } @@ -143,7 +146,7 @@ public void run() { // Configuration.ORIENTATION_SQUARE is deprecated. @SuppressWarnings("deprecation") @NonNull - PlatformChannel.DeviceOrientation getUIOrientation() { + PlatformChannel.DeviceOrientation getUiOrientation() { final int rotation = getDefaultRotation(); final int orientation = getContext().getResources().getConfiguration().orientation; diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManagerProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManagerProxyApi.java index ef869884380..91da0727886 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManagerProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManagerProxyApi.java @@ -48,6 +48,6 @@ public long getDefaultDisplayRotation(@NonNull DeviceOrientationManager pigeonIn @NonNull @Override public String getUiOrientation(@NonNull DeviceOrientationManager pigeonInstance) { - return pigeonInstance.getUIOrientation().toString(); + return pigeonInstance.getUiOrientation().toString(); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/FocusMeteringActionBuilderProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/FocusMeteringActionBuilderProxyApi.java index a19a33c01b0..60f8daa6aab 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/FocusMeteringActionBuilderProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/FocusMeteringActionBuilderProxyApi.java @@ -51,8 +51,7 @@ public void disableAutoCancel(FocusMeteringAction.Builder pigeonInstance) { @NonNull @Override - public androidx.camera.core.FocusMeteringAction build( - FocusMeteringAction.Builder pigeonInstance) { + public FocusMeteringAction build(FocusMeteringAction.Builder pigeonInstance) { return pigeonInstance.build(); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/FocusMeteringActionProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/FocusMeteringActionProxyApi.java index cd38caecef7..e9ee875942c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/FocusMeteringActionProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/FocusMeteringActionProxyApi.java @@ -27,15 +27,13 @@ public List meteringPointsAe(FocusMeteringAction pigeonInstance) @NonNull @Override - public List meteringPointsAf( - FocusMeteringAction pigeonInstance) { + public List meteringPointsAf(FocusMeteringAction pigeonInstance) { return pigeonInstance.getMeteringPointsAf(); } @NonNull @Override - public List meteringPointsAwb( - FocusMeteringAction pigeonInstance) { + public List meteringPointsAwb(FocusMeteringAction pigeonInstance) { return pigeonInstance.getMeteringPointsAwb(); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisProxyApi.java index 8d5efdd05e4..b0eadba8d0f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageAnalysisProxyApi.java @@ -43,8 +43,7 @@ public ProxyApiRegistrar getPigeonRegistrar() { } @Override - public void setAnalyzer( - ImageAnalysis pigeonInstance, @NonNull androidx.camera.core.ImageAnalysis.Analyzer analyzer) { + public void setAnalyzer(ImageAnalysis pigeonInstance, @NonNull ImageAnalysis.Analyzer analyzer) { getPigeonRegistrar() .getInstanceManager() .setClearFinalizedWeakReferencesInterval( diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureProxyApi.java index a0970da5b33..161f91061d2 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ImageCaptureProxyApi.java @@ -38,7 +38,7 @@ public ProxyApiRegistrar getPigeonRegistrar() { @NonNull @Override public ImageCapture pigeon_defaultConstructor( - @Nullable androidx.camera.core.resolutionselector.ResolutionSelector resolutionSelector, + @Nullable ResolutionSelector resolutionSelector, @Nullable Long targetRotation, @Nullable CameraXFlashMode flashMode) { final ImageCapture.Builder builder = new ImageCapture.Builder(); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewProxyApi.java index 8fedd79f245..5ebb5fbb739 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewProxyApi.java @@ -8,6 +8,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.camera.core.Preview; +import androidx.camera.core.ResolutionInfo; import androidx.camera.core.SurfaceRequest; import androidx.camera.core.resolutionselector.ResolutionSelector; import io.flutter.view.TextureRegistry; @@ -85,7 +86,7 @@ public boolean surfaceProducerHandlesCropAndRotation(@NonNull Preview pigeonInst @Nullable @Override - public androidx.camera.core.ResolutionInfo getResolutionInfo(Preview pigeonInstance) { + public ResolutionInfo getResolutionInfo(Preview pigeonInstance) { return pigeonInstance.getResolutionInfo(); } @@ -103,6 +104,7 @@ Preview.SurfaceProvider createSurfaceProvider( // get destroyed. surfaceProducer.setCallback( new TextureRegistry.SurfaceProducer.Callback() { + @Override public void onSurfaceAvailable() { // Do nothing. The Preview.SurfaceProvider will handle this whenever a new // Surface is needed. diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderProxyApi.java index 86e62ec661a..05bf25209e4 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderProxyApi.java @@ -14,6 +14,7 @@ import androidx.lifecycle.LifecycleOwner; import com.google.common.util.concurrent.ListenableFuture; import java.util.List; +import java.util.concurrent.ExecutionException; import kotlin.Result; import kotlin.Unit; import kotlin.jvm.functions.Function1; @@ -45,7 +46,7 @@ public void getInstance( try { // Camera provider is now guaranteed to be available. ResultCompat.success(processCameraProviderFuture.get(), callback); - } catch (Exception e) { + } catch (InterruptedException | ExecutionException e) { ResultCompat.failure(e, callback); } }, diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProxyApiRegistrar.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProxyApiRegistrar.java index 42042488c02..58c36763df8 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProxyApiRegistrar.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProxyApiRegistrar.java @@ -140,7 +140,8 @@ long getDefaultClearFinalizedWeakReferencesInterval() { return 3000; } - @SuppressWarnings("deprecation") + @SuppressWarnings( + "deprecation") // getSystemService was the way of getting the default display prior to API 30 @Nullable Display getDisplay() { if (sdkIsAtLeast(Build.VERSION_CODES.R)) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/QualitySelectorProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/QualitySelectorProxyApi.java index 59d946dcf17..11881bf86db 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/QualitySelectorProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/QualitySelectorProxyApi.java @@ -7,6 +7,7 @@ import android.util.Size; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.camera.core.CameraInfo; import androidx.camera.video.FallbackStrategy; import androidx.camera.video.Quality; import androidx.camera.video.QualitySelector; @@ -53,8 +54,7 @@ public QualitySelector fromOrderedList( @Nullable @Override - public Size getResolution( - @NonNull androidx.camera.core.CameraInfo cameraInfo, @NonNull VideoQuality quality) { + public Size getResolution(@NonNull CameraInfo cameraInfo, @NonNull VideoQuality quality) { return QualitySelector.getResolution(cameraInfo, getNativeQuality(quality)); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/RecorderProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/RecorderProxyApi.java index 0f326281b9a..dc11e4a2b7f 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/RecorderProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/RecorderProxyApi.java @@ -33,7 +33,7 @@ public ProxyApiRegistrar getPigeonRegistrar() { public Recorder pigeon_defaultConstructor( @Nullable Long aspectRatio, @Nullable Long targetVideoEncodingBitRate, - @Nullable androidx.camera.video.QualitySelector qualitySelector) { + @Nullable QualitySelector qualitySelector) { final Recorder.Builder builder = new Recorder.Builder(); if (aspectRatio != null) { builder.setAspectRatio(aspectRatio.intValue()); @@ -71,7 +71,7 @@ public PendingRecording prepareRecording(Recorder pigeonInstance, @NonNull Strin } @NonNull - File openTempFile(@NonNull String path) throws RuntimeException { + File openTempFile(@NonNull String path) { try { return new File(path); } catch (NullPointerException | SecurityException e) { diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ResolutionInfoProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ResolutionInfoProxyApi.java index 2be20194da1..230854ebab4 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ResolutionInfoProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ResolutionInfoProxyApi.java @@ -4,6 +4,7 @@ package io.flutter.plugins.camerax; +import android.util.Size; import androidx.annotation.NonNull; import androidx.camera.core.ResolutionInfo; @@ -20,7 +21,7 @@ class ResolutionInfoProxyApi extends PigeonApiResolutionInfo { @NonNull @Override - public android.util.Size resolution(ResolutionInfo pigeonInstance) { + public Size resolution(ResolutionInfo pigeonInstance) { return pigeonInstance.getResolution(); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ResolutionStrategyProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ResolutionStrategyProxyApi.java index 531753b4eda..d0bd58c40c9 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ResolutionStrategyProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ResolutionStrategyProxyApi.java @@ -22,7 +22,7 @@ class ResolutionStrategyProxyApi extends PigeonApiResolutionStrategy { @NonNull @Override public ResolutionStrategy pigeon_defaultConstructor( - @NonNull android.util.Size boundSize, @NonNull ResolutionStrategyFallbackRule fallbackRule) { + @NonNull Size boundSize, @NonNull ResolutionStrategyFallbackRule fallbackRule) { int nativeFallbackRule = -1; switch (fallbackRule) { case CLOSEST_HIGHER: @@ -40,6 +40,9 @@ public ResolutionStrategy pigeon_defaultConstructor( case NONE: nativeFallbackRule = ResolutionStrategy.FALLBACK_RULE_NONE; break; + case UNKNOWN: + // Default to nativeFallbackRule -1. + break; } return new ResolutionStrategy(boundSize, nativeFallbackRule); } @@ -71,8 +74,8 @@ public ResolutionStrategyFallbackRule getFallbackRule( return ResolutionStrategyFallbackRule.CLOSEST_LOWER_THEN_HIGHER; case ResolutionStrategy.FALLBACK_RULE_NONE: return ResolutionStrategyFallbackRule.NONE; + default: + return ResolutionStrategyFallbackRule.UNKNOWN; } - - return ResolutionStrategyFallbackRule.UNKNOWN; } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/SystemServicesManagerProxyApi.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/SystemServicesManagerProxyApi.java index 53a1626414e..65aefe0f53d 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/SystemServicesManagerProxyApi.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/SystemServicesManagerProxyApi.java @@ -104,7 +104,7 @@ public String getTempFilePath( throw new RuntimeException( "getTempFilePath_failure", new Throwable( - "SystemServicesHostApiImpl.getTempFilePath encountered an exception: " + e)); + "SystemServicesHostApiImpl.getTempFilePath encountered an exception: " + e, e)); } } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/Camera2CameraInfoTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/Camera2CameraInfoTest.java index 8056de6496c..f4a60b19be5 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/Camera2CameraInfoTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/Camera2CameraInfoTest.java @@ -6,16 +6,23 @@ import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.when; import android.hardware.camera2.CameraCharacteristics; +import android.hardware.camera2.CameraMetadata; import androidx.camera.camera2.interop.Camera2CameraInfo; import androidx.camera.core.CameraInfo; +import java.util.Map; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.stubbing.Answer; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; +@RunWith(RobolectricTestRunner.class) public class Camera2CameraInfoTest { @Test public void from_createsInstanceFromCameraInfoInstance() { @@ -47,17 +54,54 @@ public void getCameraId_returnsExpectedId() { assertEquals(value, api.getCameraId(instance)); } + @Config(minSdk = 28) @SuppressWarnings("unchecked") @Test - public void getCameraCharacteristic_returnsCorrespondingValueOfKey() { + public void getCameraCharacteristic_returnsCorrespondingValueOfKeyWhenKeyNotRecognized() { final PigeonApiCamera2CameraInfo api = new TestProxyApiRegistrar().getPigeonApiCamera2CameraInfo(); final Camera2CameraInfo instance = mock(Camera2CameraInfo.class); - final CameraCharacteristics.Key key = mock(CameraCharacteristics.Key.class); - final int value = -1; + final CameraCharacteristics.Key key = CameraCharacteristics.INFO_VERSION; + final String value = "version info"; when(instance.getCameraCharacteristic(key)).thenReturn(value); assertEquals(value, api.getCameraCharacteristic(instance, key)); } + + @Config(minSdk = 21) + @SuppressWarnings("unchecked") + @Test + public void getCameraCharacteristic_returnsExpectedCameraHardwareLevelWhenRequested() { + final PigeonApiCamera2CameraInfo api = + new TestProxyApiRegistrar().getPigeonApiCamera2CameraInfo(); + + final Camera2CameraInfo instance = mock(Camera2CameraInfo.class); + final CameraCharacteristics.Key key = + CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL; + + // Test known values. + Map cameraHardwareLevelsToPigeonConstants = + Map.of( + CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_3, InfoSupportedHardwareLevel.LEVEL3, + CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL, + InfoSupportedHardwareLevel.EXTERNAL, + CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL, InfoSupportedHardwareLevel.FULL, + CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY, InfoSupportedHardwareLevel.LEGACY, + CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED, + InfoSupportedHardwareLevel.LIMITED); + + for (int cameraHardwareLevel : cameraHardwareLevelsToPigeonConstants.keySet()) { + when(instance.getCameraCharacteristic(key)).thenReturn(cameraHardwareLevel); + assertEquals( + cameraHardwareLevelsToPigeonConstants.get(cameraHardwareLevel), + api.getCameraCharacteristic(instance, key)); + reset(instance); + } + + // Test unknown value. + int testUnknownValue = -1; + when(instance.getCameraCharacteristic(key)).thenReturn(testUnknownValue); + assertEquals(testUnknownValue, api.getCameraCharacteristic(instance, key)); + } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerApiTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerApiTest.java index f3f7d0d579b..306f2332ad0 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerApiTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerApiTest.java @@ -58,7 +58,7 @@ public void getUiOrientation_returnsExpectedOrientation() { final DeviceOrientationManager instance = mock(DeviceOrientationManager.class); final PlatformChannel.DeviceOrientation orientation = PlatformChannel.DeviceOrientation.LANDSCAPE_RIGHT; - when(instance.getUIOrientation()).thenReturn(orientation); + when(instance.getUiOrientation()).thenReturn(orientation); assertEquals(orientation.toString(), api.getUiOrientation(instance)); } @@ -74,11 +74,11 @@ public void onDeviceOrientationChanged_shouldSendMessageWhenOrientationIsUpdated new DeviceOrientationManager(mockApi) { @NonNull @Override - PlatformChannel.DeviceOrientation getUIOrientation() { + PlatformChannel.DeviceOrientation getUiOrientation() { return orientation; } }; - instance.handleUIOrientationChange(); + instance.handleUiOrientationChange(); verify(mockApi).onDeviceOrientationChanged(eq(instance), eq(orientation.toString()), any()); } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java index 56456cf4ecc..de5faafe801 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java @@ -67,13 +67,13 @@ Display getDisplay() { public void start_createsExpectedOrientationEventListener() { DeviceOrientationManager deviceOrientationManagerSpy = spy(deviceOrientationManager); - doNothing().when(deviceOrientationManagerSpy).handleUIOrientationChange(); + doNothing().when(deviceOrientationManagerSpy).handleUiOrientationChange(); deviceOrientationManagerSpy.start(); deviceOrientationManagerSpy.orientationEventListener.onOrientationChanged( /* some device orientation */ 3); - verify(deviceOrientationManagerSpy).handleUIOrientationChange(); + verify(deviceOrientationManagerSpy).handleUiOrientationChange(); } @Test @@ -125,50 +125,50 @@ public void handleOrientationChange_shouldNotSendMessageWhenOrientationIsNotUpda } @Test - public void getUIOrientation() { + public void getUiOrientation() { // Orientation portrait and rotation of 0 should translate to "PORTRAIT_UP". setUpUIOrientationMocks(Configuration.ORIENTATION_PORTRAIT, Surface.ROTATION_0); - DeviceOrientation uiOrientation = deviceOrientationManager.getUIOrientation(); + DeviceOrientation uiOrientation = deviceOrientationManager.getUiOrientation(); assertEquals(DeviceOrientation.PORTRAIT_UP, uiOrientation); // Orientation portrait and rotation of 90 should translate to "PORTRAIT_UP". setUpUIOrientationMocks(Configuration.ORIENTATION_PORTRAIT, Surface.ROTATION_90); - uiOrientation = deviceOrientationManager.getUIOrientation(); + uiOrientation = deviceOrientationManager.getUiOrientation(); assertEquals(DeviceOrientation.PORTRAIT_UP, uiOrientation); // Orientation portrait and rotation of 180 should translate to "PORTRAIT_DOWN". setUpUIOrientationMocks(Configuration.ORIENTATION_PORTRAIT, Surface.ROTATION_180); - uiOrientation = deviceOrientationManager.getUIOrientation(); + uiOrientation = deviceOrientationManager.getUiOrientation(); assertEquals(DeviceOrientation.PORTRAIT_DOWN, uiOrientation); // Orientation portrait and rotation of 270 should translate to "PORTRAIT_DOWN". setUpUIOrientationMocks(Configuration.ORIENTATION_PORTRAIT, Surface.ROTATION_270); - uiOrientation = deviceOrientationManager.getUIOrientation(); + uiOrientation = deviceOrientationManager.getUiOrientation(); assertEquals(DeviceOrientation.PORTRAIT_DOWN, uiOrientation); // Orientation landscape and rotation of 0 should translate to "LANDSCAPE_LEFT". setUpUIOrientationMocks(Configuration.ORIENTATION_LANDSCAPE, Surface.ROTATION_0); - uiOrientation = deviceOrientationManager.getUIOrientation(); + uiOrientation = deviceOrientationManager.getUiOrientation(); assertEquals(DeviceOrientation.LANDSCAPE_LEFT, uiOrientation); // Orientation landscape and rotation of 90 should translate to "LANDSCAPE_LEFT". setUpUIOrientationMocks(Configuration.ORIENTATION_LANDSCAPE, Surface.ROTATION_90); - uiOrientation = deviceOrientationManager.getUIOrientation(); + uiOrientation = deviceOrientationManager.getUiOrientation(); assertEquals(DeviceOrientation.LANDSCAPE_LEFT, uiOrientation); // Orientation landscape and rotation of 180 should translate to "LANDSCAPE_RIGHT". setUpUIOrientationMocks(Configuration.ORIENTATION_LANDSCAPE, Surface.ROTATION_180); - uiOrientation = deviceOrientationManager.getUIOrientation(); + uiOrientation = deviceOrientationManager.getUiOrientation(); assertEquals(DeviceOrientation.LANDSCAPE_RIGHT, uiOrientation); // Orientation landscape and rotation of 270 should translate to "LANDSCAPE_RIGHT". setUpUIOrientationMocks(Configuration.ORIENTATION_LANDSCAPE, Surface.ROTATION_270); - uiOrientation = deviceOrientationManager.getUIOrientation(); + uiOrientation = deviceOrientationManager.getUiOrientation(); assertEquals(DeviceOrientation.LANDSCAPE_RIGHT, uiOrientation); // Orientation undefined should default to "PORTRAIT_UP". setUpUIOrientationMocks(Configuration.ORIENTATION_UNDEFINED, Surface.ROTATION_0); - uiOrientation = deviceOrientationManager.getUIOrientation(); + uiOrientation = deviceOrientationManager.getUiOrientation(); assertEquals(DeviceOrientation.PORTRAIT_UP, uiOrientation); } diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index 1299af343e3..f0cd8d8ace2 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android_camerax description: Android implementation of the camera plugin using the CameraX library. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.6.18 +version: 0.6.18+1 environment: sdk: ^3.7.0