From f584b49506acac8d06f0a90c491ea4a4311dc97d Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Thu, 23 Feb 2023 08:44:52 +0100 Subject: [PATCH 01/19] Recreating PR 7062 from flutter/plugins --- packages/camera/camera_android/CHANGELOG.md | 5 +++++ .../camera/features/resolution/ResolutionFeature.java | 6 +++--- packages/camera/camera_android/pubspec.yaml | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index 4609b402058a..50b37f6b36e4 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.10.5 + +* Fixes false positive for CamcorderProfile deprecation warning + that was already fixed. + ## 0.10.4 * Temporarily fixes issue with requested video profiles being null by falling back to deprecated behavior in that case. diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java index 0ec2fbef87de..f401b05ec7d3 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java @@ -125,8 +125,7 @@ static Size computeBestPreviewSize(int cameraId, ResolutionPreset preset) } } - @SuppressWarnings("deprecation") - // TODO(camsim99): Suppression is currently safe because legacy code is used as a fallback for SDK >= S. + // TODO(camsim99): Suppression is currently safe because legacy code is used as a fallback for SDK < S. // This should be removed when reverting that fallback behavior: https://github.com/flutter/flutter/issues/119668. CamcorderProfile profile = getBestAvailableCamcorderProfileForResolutionPresetLegacy(cameraId, preset); @@ -144,6 +143,8 @@ static Size computeBestPreviewSize(int cameraId, ResolutionPreset preset) * @return The best possible {@link android.media.CamcorderProfile} that matches the supplied * {@link ResolutionPreset}. */ + @TargetApi(Build.VERSION_CODES.R) + @SuppressWarnings("deprecation") public static CamcorderProfile getBestAvailableCamcorderProfileForResolutionPresetLegacy( int cameraId, ResolutionPreset preset) { if (cameraId < 0) { @@ -256,7 +257,6 @@ private void configureResolution(ResolutionPreset resolutionPreset, int cameraId if (!captureSizeCalculated) { recordingProfile = null; - @SuppressWarnings("deprecation") CamcorderProfile camcorderProfile = getBestAvailableCamcorderProfileForResolutionPresetLegacy(cameraId, resolutionPreset); recordingProfileLegacy = camcorderProfile; diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index fb3371912911..d2c448ebdf44 100644 --- a/packages/camera/camera_android/pubspec.yaml +++ b/packages/camera/camera_android/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android description: Android implementation of the camera plugin. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.4 +version: 0.10.5 environment: sdk: ">=2.14.0 <3.0.0" From a03ebbe8e44899f27a16d5b0eba8cdd4807ef966 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Fri, 3 Mar 2023 14:02:37 +0100 Subject: [PATCH 02/19] enable javac options for camera_android example --- packages/camera/camera_android/example/android/build.gradle | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/camera/camera_android/example/android/build.gradle b/packages/camera/camera_android/example/android/build.gradle index e54be495b413..807cc56b1459 100644 --- a/packages/camera/camera_android/example/android/build.gradle +++ b/packages/camera/camera_android/example/android/build.gradle @@ -35,9 +35,7 @@ task clean(type: Delete) { gradle.projectsEvaluated { project(":camera_android") { tasks.withType(JavaCompile) { - // TODO(stuartmorgan): Enable this. See - // https://github.com/flutter/flutter/issues/91868 - //options.compilerArgs << "-Xlint:all" << "-Werror" + options.compilerArgs << "-Xlint:all" << "-Werror" } } } From d109aab41bddd6f66dd17fd9595f1d8cefd8b2cb Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Fri, 3 Mar 2023 14:14:07 +0100 Subject: [PATCH 03/19] fix redundant casts --- .../src/main/java/io/flutter/plugins/camera/Camera.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java index b02d6864b5b7..57d1647a9fd7 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java @@ -253,7 +253,7 @@ private void prepareMediaRecorder(String outputFilePath) throws IOException { } final PlatformChannel.DeviceOrientation lockedOrientation = - ((SensorOrientationFeature) cameraFeatures.getSensorOrientation()) + cameraFeatures.getSensorOrientation() .getLockedCaptureOrientation(); MediaRecorderBuilder mediaRecorderBuilder; @@ -637,7 +637,7 @@ private void takePictureAfterPrecapture() { // Orientation. final PlatformChannel.DeviceOrientation lockedOrientation = - ((SensorOrientationFeature) cameraFeatures.getSensorOrientation()) + cameraFeatures.getSensorOrientation() .getLockedCaptureOrientation(); stillBuilder.set( CaptureRequest.JPEG_ORIENTATION, From f720424ca14a84b1089d3252229a3ad242e4966b Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Fri, 3 Mar 2023 14:19:31 +0100 Subject: [PATCH 04/19] move CameraPropertiesImpl to its own file; make CameraPropertiesImpl public --- .../plugins/camera/CameraProperties.java | 124 ---------------- .../plugins/camera/CameraPropertiesImpl.java | 139 ++++++++++++++++++ 2 files changed, 139 insertions(+), 124 deletions(-) create mode 100644 packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraPropertiesImpl.java diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraProperties.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraProperties.java index a69bae43ee17..42c4a0c10526 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraProperties.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraProperties.java @@ -260,127 +260,3 @@ public interface CameraProperties { */ int[] getAvailableNoiseReductionModes(); } - -/** - * Implementation of the @see CameraProperties interface using the @see - * android.hardware.camera2.CameraCharacteristics class to access the different characteristics. - */ -class CameraPropertiesImpl implements CameraProperties { - private final CameraCharacteristics cameraCharacteristics; - private final String cameraName; - - public CameraPropertiesImpl(String cameraName, CameraManager cameraManager) - throws CameraAccessException { - this.cameraName = cameraName; - this.cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraName); - } - - @Override - public String getCameraName() { - return cameraName; - } - - @Override - public Range[] getControlAutoExposureAvailableTargetFpsRanges() { - return cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); - } - - @Override - public Range getControlAutoExposureCompensationRange() { - return cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE); - } - - @Override - public double getControlAutoExposureCompensationStep() { - Rational rational = - cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP); - - return rational == null ? 0.0 : rational.doubleValue(); - } - - @Override - public int[] getControlAutoFocusAvailableModes() { - return cameraCharacteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES); - } - - @Override - public Integer getControlMaxRegionsAutoExposure() { - return cameraCharacteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AE); - } - - @Override - public Integer getControlMaxRegionsAutoFocus() { - return cameraCharacteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AF); - } - - @RequiresApi(api = VERSION_CODES.P) - @Override - public int[] getDistortionCorrectionAvailableModes() { - return cameraCharacteristics.get(CameraCharacteristics.DISTORTION_CORRECTION_AVAILABLE_MODES); - } - - @Override - public Boolean getFlashInfoAvailable() { - return cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE); - } - - @Override - public int getLensFacing() { - return cameraCharacteristics.get(CameraCharacteristics.LENS_FACING); - } - - @Override - public Float getLensInfoMinimumFocusDistance() { - return cameraCharacteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE); - } - - @Override - public Float getScalerAvailableMaxDigitalZoom() { - return cameraCharacteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM); - } - - @RequiresApi(api = VERSION_CODES.R) - @Override - public Float getScalerMaxZoomRatio() { - return cameraCharacteristics.get(CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE).getUpper(); - } - - @RequiresApi(api = VERSION_CODES.R) - @Override - public Float getScalerMinZoomRatio() { - return cameraCharacteristics.get(CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE).getLower(); - } - - @Override - public Rect getSensorInfoActiveArraySize() { - return cameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE); - } - - @Override - public Size getSensorInfoPixelArraySize() { - return cameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE); - } - - @RequiresApi(api = VERSION_CODES.M) - @Override - public Rect getSensorInfoPreCorrectionActiveArraySize() { - return cameraCharacteristics.get( - CameraCharacteristics.SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE); - } - - @Override - public int getSensorOrientation() { - return cameraCharacteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); - } - - @Override - public int getHardwareLevel() { - return cameraCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL); - } - - @Override - public int[] getAvailableNoiseReductionModes() { - return cameraCharacteristics.get( - CameraCharacteristics.NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES); - } -} diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraPropertiesImpl.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraPropertiesImpl.java new file mode 100644 index 000000000000..fbd3dfadc6c3 --- /dev/null +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraPropertiesImpl.java @@ -0,0 +1,139 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.camera; + +import android.graphics.Rect; +import android.hardware.camera2.CameraAccessException; +import android.hardware.camera2.CameraCharacteristics; +import android.hardware.camera2.CameraManager; +import android.os.Build.VERSION_CODES; +import android.util.Range; +import android.util.Rational; +import android.util.Size; +import androidx.annotation.RequiresApi; + +/** + * Implementation of the @see CameraProperties interface using the @see + * android.hardware.camera2.CameraCharacteristics class to access the different characteristics. + */ +public class CameraPropertiesImpl implements CameraProperties { + private final CameraCharacteristics cameraCharacteristics; + private final String cameraName; + + public CameraPropertiesImpl(String cameraName, CameraManager cameraManager) + throws CameraAccessException { + this.cameraName = cameraName; + this.cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraName); + } + + @Override + public String getCameraName() { + return cameraName; + } + + @Override + public Range[] getControlAutoExposureAvailableTargetFpsRanges() { + return cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); + } + + @Override + public Range getControlAutoExposureCompensationRange() { + return cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE); + } + + @Override + public double getControlAutoExposureCompensationStep() { + Rational rational = + cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP); + + return rational == null ? 0.0 : rational.doubleValue(); + } + + @Override + public int[] getControlAutoFocusAvailableModes() { + return cameraCharacteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES); + } + + @Override + public Integer getControlMaxRegionsAutoExposure() { + return cameraCharacteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AE); + } + + @Override + public Integer getControlMaxRegionsAutoFocus() { + return cameraCharacteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AF); + } + + @RequiresApi(api = VERSION_CODES.P) + @Override + public int[] getDistortionCorrectionAvailableModes() { + return cameraCharacteristics.get(CameraCharacteristics.DISTORTION_CORRECTION_AVAILABLE_MODES); + } + + @Override + public Boolean getFlashInfoAvailable() { + return cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE); + } + + @Override + public int getLensFacing() { + return cameraCharacteristics.get(CameraCharacteristics.LENS_FACING); + } + + @Override + public Float getLensInfoMinimumFocusDistance() { + return cameraCharacteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE); + } + + @Override + public Float getScalerAvailableMaxDigitalZoom() { + return cameraCharacteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM); + } + + @RequiresApi(api = VERSION_CODES.R) + @Override + public Float getScalerMaxZoomRatio() { + return cameraCharacteristics.get(CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE).getUpper(); + } + + @RequiresApi(api = VERSION_CODES.R) + @Override + public Float getScalerMinZoomRatio() { + return cameraCharacteristics.get(CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE).getLower(); + } + + @Override + public Rect getSensorInfoActiveArraySize() { + return cameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE); + } + + @Override + public Size getSensorInfoPixelArraySize() { + return cameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE); + } + + @RequiresApi(api = VERSION_CODES.M) + @Override + public Rect getSensorInfoPreCorrectionActiveArraySize() { + return cameraCharacteristics.get( + CameraCharacteristics.SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE); + } + + @Override + public int getSensorOrientation() { + return cameraCharacteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); + } + + @Override + public int getHardwareLevel() { + return cameraCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL); + } + + @Override + public int[] getAvailableNoiseReductionModes() { + return cameraCharacteristics.get( + CameraCharacteristics.NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES); + } +} \ No newline at end of file From caf0c380ef4e6e6fcc4738686aa6cf57bc2d4bf7 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Fri, 3 Mar 2023 15:04:14 +0100 Subject: [PATCH 05/19] specify Object as type parameter for features map --- .../src/main/java/io/flutter/plugins/camera/Camera.java | 2 +- .../io/flutter/plugins/camera/features/CameraFeatures.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java index 57d1647a9fd7..50c363e5b4fd 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java @@ -239,7 +239,7 @@ public void onPrecapture() { * @param requestBuilder request builder to update. */ private void updateBuilderSettings(CaptureRequest.Builder requestBuilder) { - for (CameraFeature feature : cameraFeatures.getAllFeatures()) { + for (CameraFeature feature : cameraFeatures.getAllFeatures()) { Log.d(TAG, "Updating builder with feature: " + feature.getDebugName()); feature.updateBuilder(requestBuilder); } diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/CameraFeatures.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/CameraFeatures.java index 659fd15963e9..468458fc1c34 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/CameraFeatures.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/CameraFeatures.java @@ -74,14 +74,14 @@ public static CameraFeatures init( return cameraFeatures; } - private Map featureMap = new HashMap<>(); + private Map> featureMap = new HashMap<>(); /** * Gets a collection of all features that have been set. * * @return A collection of all features that have been set. */ - public Collection getAllFeatures() { + public Collection> getAllFeatures() { return this.featureMap.values(); } From fcee0e05372502ad00bd604ca41702a2f7762e42 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Fri, 3 Mar 2023 15:32:15 +0100 Subject: [PATCH 06/19] format --- .../src/main/java/io/flutter/plugins/camera/Camera.java | 7 ++----- .../java/io/flutter/plugins/camera/CameraProperties.java | 4 ---- .../io/flutter/plugins/camera/CameraPropertiesImpl.java | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java index 50c363e5b4fd..c4243ad76725 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java @@ -57,7 +57,6 @@ import io.flutter.plugins.camera.features.resolution.ResolutionFeature; import io.flutter.plugins.camera.features.resolution.ResolutionPreset; import io.flutter.plugins.camera.features.sensororientation.DeviceOrientationManager; -import io.flutter.plugins.camera.features.sensororientation.SensorOrientationFeature; import io.flutter.plugins.camera.features.zoomlevel.ZoomLevelFeature; import io.flutter.plugins.camera.media.MediaRecorderBuilder; import io.flutter.plugins.camera.types.CameraCaptureProperties; @@ -253,8 +252,7 @@ private void prepareMediaRecorder(String outputFilePath) throws IOException { } final PlatformChannel.DeviceOrientation lockedOrientation = - cameraFeatures.getSensorOrientation() - .getLockedCaptureOrientation(); + cameraFeatures.getSensorOrientation().getLockedCaptureOrientation(); MediaRecorderBuilder mediaRecorderBuilder; @@ -637,8 +635,7 @@ private void takePictureAfterPrecapture() { // Orientation. final PlatformChannel.DeviceOrientation lockedOrientation = - cameraFeatures.getSensorOrientation() - .getLockedCaptureOrientation(); + cameraFeatures.getSensorOrientation().getLockedCaptureOrientation(); stillBuilder.set( CaptureRequest.JPEG_ORIENTATION, lockedOrientation == null diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraProperties.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraProperties.java index 42c4a0c10526..7e061a24aabc 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraProperties.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraProperties.java @@ -5,12 +5,8 @@ package io.flutter.plugins.camera; import android.graphics.Rect; -import android.hardware.camera2.CameraAccessException; -import android.hardware.camera2.CameraCharacteristics; -import android.hardware.camera2.CameraManager; import android.os.Build.VERSION_CODES; import android.util.Range; -import android.util.Rational; import android.util.Size; import androidx.annotation.RequiresApi; diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraPropertiesImpl.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraPropertiesImpl.java index fbd3dfadc6c3..66bb2901b629 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraPropertiesImpl.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraPropertiesImpl.java @@ -136,4 +136,4 @@ public int[] getAvailableNoiseReductionModes() { return cameraCharacteristics.get( CameraCharacteristics.NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES); } -} \ No newline at end of file +} From fce7935ba20601fc5a81a7b1fbbfae4e41a07e46 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Sat, 4 Mar 2023 17:34:06 +0100 Subject: [PATCH 07/19] use a wildcard instead of Object as type parameter --- .../src/main/java/io/flutter/plugins/camera/Camera.java | 2 +- .../io/flutter/plugins/camera/features/CameraFeatures.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java index c4243ad76725..41ad7d0cbc78 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java @@ -238,7 +238,7 @@ public void onPrecapture() { * @param requestBuilder request builder to update. */ private void updateBuilderSettings(CaptureRequest.Builder requestBuilder) { - for (CameraFeature feature : cameraFeatures.getAllFeatures()) { + for (CameraFeature feature : cameraFeatures.getAllFeatures()) { Log.d(TAG, "Updating builder with feature: " + feature.getDebugName()); feature.updateBuilder(requestBuilder); } diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/CameraFeatures.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/CameraFeatures.java index 468458fc1c34..c7ed9bb205df 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/CameraFeatures.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/CameraFeatures.java @@ -74,14 +74,14 @@ public static CameraFeatures init( return cameraFeatures; } - private Map> featureMap = new HashMap<>(); + private Map> featureMap = new HashMap<>(); /** * Gets a collection of all features that have been set. * * @return A collection of all features that have been set. */ - public Collection> getAllFeatures() { + public Collection> getAllFeatures() { return this.featureMap.values(); } From 95c3ce624c83d7a1d405b551e6569d26fe08ae19 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Sat, 4 Mar 2023 17:35:59 +0100 Subject: [PATCH 08/19] fix version --- packages/camera/camera_android/CHANGELOG.md | 2 +- packages/camera/camera_android/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index f6a223a60e0e..b7520271d6e7 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.10.5 +## 0.10.4+2 * Updates compileSdkVersion to 33. * Fixes false positive for CamcorderProfile deprecation warning diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index 6b6e39c2b307..2bf536e29113 100644 --- a/packages/camera/camera_android/pubspec.yaml +++ b/packages/camera/camera_android/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android description: Android implementation of the camera plugin. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.5 +version: 0.10.4+2 environment: sdk: ">=2.14.0 <3.0.0" From 6d779be51d33bab19920c469c2e326d0cb2e0f3d Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Sat, 4 Mar 2023 17:51:07 +0100 Subject: [PATCH 09/19] fix a missing break --- .../plugins/camera/features/autofocus/AutoFocusFeature.java | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/autofocus/AutoFocusFeature.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/autofocus/AutoFocusFeature.java index 1789a964253b..818e4e9b6425 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/autofocus/AutoFocusFeature.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/autofocus/AutoFocusFeature.java @@ -76,6 +76,7 @@ public void updateBuilder(CaptureRequest.Builder requestBuilder) { recordingVideo ? CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_VIDEO : CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); + break; default: break; } From 1c2d40ba4deee788546508c26e24622c78ea737f Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Sat, 4 Mar 2023 17:55:45 +0100 Subject: [PATCH 10/19] suppress fallthrough in getBestAvailableCamcorderProfileForResolutionPreset() --- .../plugins/camera/features/resolution/ResolutionFeature.java | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java index f401b05ec7d3..fc69ce7cc5fd 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java @@ -189,6 +189,7 @@ public static CamcorderProfile getBestAvailableCamcorderProfileForResolutionPres } @TargetApi(Build.VERSION_CODES.S) + @SuppressWarnings("fallthrough") public static EncoderProfiles getBestAvailableCamcorderProfileForResolutionPreset( int cameraId, ResolutionPreset preset) { if (cameraId < 0) { From a9fd29a20eaf797c5bcb0c96b6321007f938c215 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Sat, 4 Mar 2023 17:58:46 +0100 Subject: [PATCH 11/19] Suppress fallthrough warning in getBestAvailableCamcorderProfileForResolutionPresetLegacy --- .../plugins/camera/features/resolution/ResolutionFeature.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java index fc69ce7cc5fd..87a8a47bbe4e 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java @@ -144,7 +144,7 @@ static Size computeBestPreviewSize(int cameraId, ResolutionPreset preset) * {@link ResolutionPreset}. */ @TargetApi(Build.VERSION_CODES.R) - @SuppressWarnings("deprecation") + @SuppressWarnings({"fallthrough", "deprecation"}) public static CamcorderProfile getBestAvailableCamcorderProfileForResolutionPresetLegacy( int cameraId, ResolutionPreset preset) { if (cameraId < 0) { From f2bc33d70189e215e57a7f247a8850523dca3164 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Sat, 4 Mar 2023 18:47:16 +0100 Subject: [PATCH 12/19] fix FpsRangeFeatureTest raw types warning --- .../plugins/camera/features/fpsrange/FpsRangeFeatureTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/fpsrange/FpsRangeFeatureTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/fpsrange/FpsRangeFeatureTest.java index 2bb4d849a277..a94512046338 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/fpsrange/FpsRangeFeatureTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/fpsrange/FpsRangeFeatureTest.java @@ -97,7 +97,7 @@ private static FpsRangeFeature createTestInstance() { when(rangeThree.getUpper()).thenReturn(13); @SuppressWarnings("unchecked") - Range[] ranges = new Range[] {rangeOne, rangeTwo, rangeThree}; + Range[] ranges = (Range[]) new Range[] {rangeOne, rangeTwo, rangeThree}; CameraProperties cameraProperties = mock(CameraProperties.class); From eae0d34d4794edc598bb72ab4335da8f946e07d1 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Sat, 4 Mar 2023 19:35:23 +0100 Subject: [PATCH 13/19] fix raw types for Range in CameraPropertiesImplTest --- .../flutter/plugins/camera/CameraPropertiesImplTest.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraPropertiesImplTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraPropertiesImplTest.java index c61be04465ab..2971b75fec2b 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraPropertiesImplTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraPropertiesImplTest.java @@ -50,7 +50,7 @@ public void ctor_shouldReturnValidInstance() throws CameraAccessException { @SuppressWarnings("unchecked") public void getControlAutoExposureAvailableTargetFpsRangesTest() { Range mockRange = mock(Range.class); - Range[] mockRanges = new Range[] {mockRange}; + Range[] mockRanges = (Range[]) new Range[] {mockRange}; when(mockCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES)) .thenReturn(mockRanges); @@ -203,7 +203,8 @@ public void getScalerAvailableMaxDigitalZoomTest() { @Test public void getScalerGetScalerMinZoomRatioTest() { - Range zoomRange = mock(Range.class); + @SuppressWarnings("unchecked") + Range zoomRange = (Range) mock(Range.class); when(mockCharacteristics.get(CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE)) .thenReturn(zoomRange); @@ -215,7 +216,8 @@ public void getScalerGetScalerMinZoomRatioTest() { @Test public void getScalerGetScalerMaxZoomRatioTest() { - Range zoomRange = mock(Range.class); + @SuppressWarnings("unchecked") + Range zoomRange = (Range) mock(Range.class); when(mockCharacteristics.get(CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE)) .thenReturn(zoomRange); From ff1c9bd1145eb54d04a2e2b7285eec44061b83ac Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Sat, 4 Mar 2023 19:36:02 +0100 Subject: [PATCH 14/19] use float literal in CameraPropertiesImplTest --- .../io/flutter/plugins/camera/CameraPropertiesImplTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraPropertiesImplTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraPropertiesImplTest.java index 2971b75fec2b..d17226bf56d8 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraPropertiesImplTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraPropertiesImplTest.java @@ -177,7 +177,7 @@ public void getLensFacingTest() { @Test public void getLensInfoMinimumFocusDistanceTest() { - Float expectedFocusDistance = new Float(3.14); + Float expectedFocusDistance = 3.14f; when(mockCharacteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE)) .thenReturn(expectedFocusDistance); @@ -190,7 +190,7 @@ public void getLensInfoMinimumFocusDistanceTest() { @Test public void getScalerAvailableMaxDigitalZoomTest() { - Float expectedDigitalZoom = new Float(3.14); + Float expectedDigitalZoom = 3.14f; when(mockCharacteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM)) .thenReturn(expectedDigitalZoom); From 9e735a6b43a8f005c73f48d6e95fa306cdb6d71b Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Sat, 4 Mar 2023 20:19:09 +0100 Subject: [PATCH 15/19] move CameraDeviceWrapper to its own file --- .../io/flutter/plugins/camera/Camera.java | 18 ---------- .../plugins/camera/CameraDeviceWrapper.java | 33 +++++++++++++++++++ 2 files changed, 33 insertions(+), 18 deletions(-) create mode 100644 packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java index 41ad7d0cbc78..264ab72f524b 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java @@ -78,24 +78,6 @@ interface ErrorCallback { void onError(String errorCode, String errorMessage); } -/** A mockable wrapper for CameraDevice calls. */ -interface CameraDeviceWrapper { - @NonNull - CaptureRequest.Builder createCaptureRequest(int templateType) throws CameraAccessException; - - @TargetApi(VERSION_CODES.P) - void createCaptureSession(SessionConfiguration config) throws CameraAccessException; - - @TargetApi(VERSION_CODES.LOLLIPOP) - void createCaptureSession( - @NonNull List outputs, - @NonNull CameraCaptureSession.StateCallback callback, - @Nullable Handler handler) - throws CameraAccessException; - - void close(); -} - class Camera implements CameraCaptureCallback.CameraCaptureStateListener, ImageReader.OnImageAvailableListener { diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java new file mode 100644 index 000000000000..5b2b13c43501 --- /dev/null +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java @@ -0,0 +1,33 @@ +package io.flutter.plugins.camera; + +import android.annotation.TargetApi; +import android.hardware.camera2.CameraAccessException; +import android.hardware.camera2.CameraCaptureSession; +import android.hardware.camera2.CaptureRequest; +import android.hardware.camera2.params.SessionConfiguration; +import android.os.Build; +import android.os.Handler; +import android.view.Surface; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import java.util.List; + +/** A mockable wrapper for CameraDevice calls. */ +interface CameraDeviceWrapper { + @NonNull + CaptureRequest.Builder createCaptureRequest(int templateType) throws CameraAccessException; + + @TargetApi(Build.VERSION_CODES.P) + void createCaptureSession(SessionConfiguration config) throws CameraAccessException; + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + void createCaptureSession( + @NonNull List outputs, + @NonNull CameraCaptureSession.StateCallback callback, + @Nullable Handler handler) + throws CameraAccessException; + + void close(); +} From e89cb7b846b405af9d4fb861fc1e2ae80ef9f279 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Sat, 4 Mar 2023 20:19:51 +0100 Subject: [PATCH 16/19] suppress warnings for unused try block variables --- .../camera/features/exposurepoint/ExposurePointFeatureTest.java | 1 + .../camera/features/focuspoint/FocusPointFeatureTest.java | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/exposurepoint/ExposurePointFeatureTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/exposurepoint/ExposurePointFeatureTest.java index b34a04fe26b7..8ca9a642fd7a 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/exposurepoint/ExposurePointFeatureTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/exposurepoint/ExposurePointFeatureTest.java @@ -143,6 +143,7 @@ public void setValue_shouldDetermineMeteringRectangleWhenValidBoundariesAndCoord } @Test(expected = AssertionError.class) + @SuppressWarnings("try") public void setValue_shouldThrowAssertionErrorWhenNoValidBoundariesAreSet() { CameraProperties mockCameraProperties = mock(CameraProperties.class); when(mockCameraProperties.getControlMaxRegionsAutoExposure()).thenReturn(1); diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/focuspoint/FocusPointFeatureTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/focuspoint/FocusPointFeatureTest.java index f03dc9f62e87..728d4058fa64 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/focuspoint/FocusPointFeatureTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/focuspoint/FocusPointFeatureTest.java @@ -144,6 +144,7 @@ public void setValue_shouldDetermineMeteringRectangleWhenValidBoundariesAndCoord } @Test(expected = AssertionError.class) + @SuppressWarnings("try") public void setValue_shouldThrowAssertionErrorWhenNoValidBoundariesAreSet() { CameraProperties mockCameraProperties = mock(CameraProperties.class); when(mockCameraProperties.getControlMaxRegionsAutoFocus()).thenReturn(1); From cd1ffa43a128a8bd428bddb6a9a575391aba0e40 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Sat, 4 Mar 2023 20:28:06 +0100 Subject: [PATCH 17/19] format --- .../plugins/camera/CameraDeviceWrapper.java | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java index 5b2b13c43501..d61f47164d9b 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java @@ -8,26 +8,24 @@ import android.os.Build; import android.os.Handler; import android.view.Surface; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; - import java.util.List; /** A mockable wrapper for CameraDevice calls. */ interface CameraDeviceWrapper { - @NonNull - CaptureRequest.Builder createCaptureRequest(int templateType) throws CameraAccessException; + @NonNull + CaptureRequest.Builder createCaptureRequest(int templateType) throws CameraAccessException; - @TargetApi(Build.VERSION_CODES.P) - void createCaptureSession(SessionConfiguration config) throws CameraAccessException; + @TargetApi(Build.VERSION_CODES.P) + void createCaptureSession(SessionConfiguration config) throws CameraAccessException; - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - void createCaptureSession( - @NonNull List outputs, - @NonNull CameraCaptureSession.StateCallback callback, - @Nullable Handler handler) - throws CameraAccessException; + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + void createCaptureSession( + @NonNull List outputs, + @NonNull CameraCaptureSession.StateCallback callback, + @Nullable Handler handler) + throws CameraAccessException; - void close(); + void close(); } From b306ed8a5e4e16a2b2ed27c3b59367855aa7b052 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Sat, 4 Mar 2023 21:07:24 +0100 Subject: [PATCH 18/19] Add missing license header to CameraDeviceWrapper --- .../java/io/flutter/plugins/camera/CameraDeviceWrapper.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java index d61f47164d9b..6a8a8f6bee0b 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java @@ -1,3 +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. + package io.flutter.plugins.camera; import android.annotation.TargetApi; From 0c6c15664361f24f98ceb62024df717bfecff532 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Mon, 6 Mar 2023 13:56:26 +0100 Subject: [PATCH 19/19] feedback --- packages/camera/camera_android/CHANGELOG.md | 1 + .../features/resolution/ResolutionFeature.java | 16 ++++++++++++++-- .../plugins/camera/CameraPropertiesImplTest.java | 2 ++ .../exposurepoint/ExposurePointFeatureTest.java | 6 +----- .../focuspoint/FocusPointFeatureTest.java | 6 +----- .../features/fpsrange/FpsRangeFeatureTest.java | 2 ++ 6 files changed, 21 insertions(+), 12 deletions(-) diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index b7520271d6e7..dca65cbadfc4 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -3,6 +3,7 @@ * Updates compileSdkVersion to 33. * Fixes false positive for CamcorderProfile deprecation warning that was already fixed. +* Changes the severity of `javac` warnings so that they are treated as errors and fixes the violations. ## 0.10.4+1 diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java index 87a8a47bbe4e..a80c340f89fa 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java @@ -144,6 +144,7 @@ static Size computeBestPreviewSize(int cameraId, ResolutionPreset preset) * {@link ResolutionPreset}. */ @TargetApi(Build.VERSION_CODES.R) + // All of these cases deliberately fall through to get the best available profile. @SuppressWarnings({"fallthrough", "deprecation"}) public static CamcorderProfile getBestAvailableCamcorderProfileForResolutionPresetLegacy( int cameraId, ResolutionPreset preset) { @@ -153,31 +154,36 @@ public static CamcorderProfile getBestAvailableCamcorderProfileForResolutionPres } switch (preset) { - // All of these cases deliberately fall through to get the best available profile. case max: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_HIGH)) { return CamcorderProfile.get(cameraId, CamcorderProfile.QUALITY_HIGH); } + // fall through case ultraHigh: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_2160P)) { return CamcorderProfile.get(cameraId, CamcorderProfile.QUALITY_2160P); } + // fall through case veryHigh: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_1080P)) { return CamcorderProfile.get(cameraId, CamcorderProfile.QUALITY_1080P); } + // fall through case high: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_720P)) { return CamcorderProfile.get(cameraId, CamcorderProfile.QUALITY_720P); } + // fall through case medium: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_480P)) { return CamcorderProfile.get(cameraId, CamcorderProfile.QUALITY_480P); } + // fall through case low: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_QVGA)) { return CamcorderProfile.get(cameraId, CamcorderProfile.QUALITY_QVGA); } + // fall through default: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_LOW)) { return CamcorderProfile.get(cameraId, CamcorderProfile.QUALITY_LOW); @@ -189,6 +195,7 @@ public static CamcorderProfile getBestAvailableCamcorderProfileForResolutionPres } @TargetApi(Build.VERSION_CODES.S) + // All of these cases deliberately fall through to get the best available profile. @SuppressWarnings("fallthrough") public static EncoderProfiles getBestAvailableCamcorderProfileForResolutionPreset( int cameraId, ResolutionPreset preset) { @@ -200,31 +207,36 @@ public static EncoderProfiles getBestAvailableCamcorderProfileForResolutionPrese String cameraIdString = Integer.toString(cameraId); switch (preset) { - // All of these cases deliberately fall through to get the best available profile. case max: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_HIGH)) { return CamcorderProfile.getAll(cameraIdString, CamcorderProfile.QUALITY_HIGH); } + // fall through case ultraHigh: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_2160P)) { return CamcorderProfile.getAll(cameraIdString, CamcorderProfile.QUALITY_2160P); } + // fall through case veryHigh: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_1080P)) { return CamcorderProfile.getAll(cameraIdString, CamcorderProfile.QUALITY_1080P); } + // fall through case high: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_720P)) { return CamcorderProfile.getAll(cameraIdString, CamcorderProfile.QUALITY_720P); } + // fall through case medium: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_480P)) { return CamcorderProfile.getAll(cameraIdString, CamcorderProfile.QUALITY_480P); } + // fall through case low: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_QVGA)) { return CamcorderProfile.getAll(cameraIdString, CamcorderProfile.QUALITY_QVGA); } + // fall through default: if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_LOW)) { return CamcorderProfile.getAll(cameraIdString, CamcorderProfile.QUALITY_LOW); diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraPropertiesImplTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraPropertiesImplTest.java index d17226bf56d8..297c09cd2270 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraPropertiesImplTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraPropertiesImplTest.java @@ -50,6 +50,8 @@ public void ctor_shouldReturnValidInstance() throws CameraAccessException { @SuppressWarnings("unchecked") public void getControlAutoExposureAvailableTargetFpsRangesTest() { Range mockRange = mock(Range.class); + // Use a wildcard, since `new Range[] {mockRange}` + // results in a 'Generic array creation' error. Range[] mockRanges = (Range[]) new Range[] {mockRange}; when(mockCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES)) .thenReturn(mockRanges); diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/exposurepoint/ExposurePointFeatureTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/exposurepoint/ExposurePointFeatureTest.java index 8ca9a642fd7a..800c3f74d1d1 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/exposurepoint/ExposurePointFeatureTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/exposurepoint/ExposurePointFeatureTest.java @@ -143,17 +143,13 @@ public void setValue_shouldDetermineMeteringRectangleWhenValidBoundariesAndCoord } @Test(expected = AssertionError.class) - @SuppressWarnings("try") public void setValue_shouldThrowAssertionErrorWhenNoValidBoundariesAreSet() { CameraProperties mockCameraProperties = mock(CameraProperties.class); when(mockCameraProperties.getControlMaxRegionsAutoExposure()).thenReturn(1); ExposurePointFeature exposurePointFeature = new ExposurePointFeature(mockCameraProperties, mockSensorOrientationFeature); - try (MockedStatic mockedCameraRegionUtils = - Mockito.mockStatic(CameraRegionUtils.class)) { - exposurePointFeature.setValue(new Point(0.5, 0.5)); - } + exposurePointFeature.setValue(new Point(0.5, 0.5)); } @Test diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/focuspoint/FocusPointFeatureTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/focuspoint/FocusPointFeatureTest.java index 728d4058fa64..bfc0ebc5d890 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/focuspoint/FocusPointFeatureTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/focuspoint/FocusPointFeatureTest.java @@ -144,17 +144,13 @@ public void setValue_shouldDetermineMeteringRectangleWhenValidBoundariesAndCoord } @Test(expected = AssertionError.class) - @SuppressWarnings("try") public void setValue_shouldThrowAssertionErrorWhenNoValidBoundariesAreSet() { CameraProperties mockCameraProperties = mock(CameraProperties.class); when(mockCameraProperties.getControlMaxRegionsAutoFocus()).thenReturn(1); FocusPointFeature focusPointFeature = new FocusPointFeature(mockCameraProperties, mockSensorOrientationFeature); - try (MockedStatic mockedCameraRegionUtils = - Mockito.mockStatic(CameraRegionUtils.class)) { - focusPointFeature.setValue(new Point(0.5, 0.5)); - } + focusPointFeature.setValue(new Point(0.5, 0.5)); } @Test diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/fpsrange/FpsRangeFeatureTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/fpsrange/FpsRangeFeatureTest.java index a94512046338..ea67636e2ed1 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/fpsrange/FpsRangeFeatureTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/fpsrange/FpsRangeFeatureTest.java @@ -96,6 +96,8 @@ private static FpsRangeFeature createTestInstance() { when(rangeTwo.getUpper()).thenReturn(12); when(rangeThree.getUpper()).thenReturn(13); + // Use a wildcard, since `new Range[] {rangeOne, rangeTwo, rangeThree}` + // results in a 'Generic array creation' error. @SuppressWarnings("unchecked") Range[] ranges = (Range[]) new Range[] {rangeOne, rangeTwo, rangeThree};