[camera_android] Fix camera android deprecation warning for CamcorderProfile.get() (#3273)

[camera_android] Fix camera android deprecation warning for CamcorderProfile.get()
diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md
index 8fa5a30..8b0b6c1 100644
--- a/packages/camera/camera_android/CHANGELOG.md
+++ b/packages/camera/camera_android/CHANGELOG.md
@@ -1,7 +1,10 @@
-## NEXT
+## 0.10.4+2
 
 * Aligns Dart and Flutter SDK constraints.
 * 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/Camera.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java
index b02d686..264ab72 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;
@@ -79,24 +78,6 @@
   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<Surface> outputs,
-      @NonNull CameraCaptureSession.StateCallback callback,
-      @Nullable Handler handler)
-      throws CameraAccessException;
-
-  void close();
-}
-
 class Camera
     implements CameraCaptureCallback.CameraCaptureStateListener,
         ImageReader.OnImageAvailableListener {
@@ -239,7 +220,7 @@
    * @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);
     }
@@ -253,8 +234,7 @@
     }
 
     final PlatformChannel.DeviceOrientation lockedOrientation =
-        ((SensorOrientationFeature) cameraFeatures.getSensorOrientation())
-            .getLockedCaptureOrientation();
+        cameraFeatures.getSensorOrientation().getLockedCaptureOrientation();
 
     MediaRecorderBuilder mediaRecorderBuilder;
 
@@ -637,8 +617,7 @@
 
     // Orientation.
     final PlatformChannel.DeviceOrientation lockedOrientation =
-        ((SensorOrientationFeature) 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/CameraDeviceWrapper.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java
new file mode 100644
index 0000000..6a8a8f6
--- /dev/null
+++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraDeviceWrapper.java
@@ -0,0 +1,35 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package io.flutter.plugins.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<Surface> outputs,
+      @NonNull CameraCaptureSession.StateCallback callback,
+      @Nullable Handler handler)
+      throws CameraAccessException;
+
+  void close();
+}
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 a69bae4..7e061a2 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;
 
@@ -260,127 +256,3 @@
    */
   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<Integer>[] getControlAutoExposureAvailableTargetFpsRanges() {
-    return cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
-  }
-
-  @Override
-  public Range<Integer> 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 0000000..66bb290
--- /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<Integer>[] getControlAutoExposureAvailableTargetFpsRanges() {
+    return cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
+  }
+
+  @Override
+  public Range<Integer> 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/features/CameraFeatures.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/features/CameraFeatures.java
index 659fd15..c7ed9bb 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 @@
     return cameraFeatures;
   }
 
-  private Map<String, CameraFeature> featureMap = new HashMap<>();
+  private Map<String, CameraFeature<?>> 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<CameraFeature> getAllFeatures() {
+  public Collection<CameraFeature<?>> getAllFeatures() {
     return this.featureMap.values();
   }
 
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 1789a96..818e4e9 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 @@
             recordingVideo
                 ? CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_VIDEO
                 : CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
+        break;
       default:
         break;
     }
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 0ec2fbe..a80c340 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 @@
       }
     }
 
-    @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,9 @@
    * @return The best possible {@link android.media.CamcorderProfile} that matches the supplied
    *     {@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) {
     if (cameraId < 0) {
@@ -152,31 +154,36 @@
     }
 
     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);
@@ -188,6 +195,8 @@
   }
 
   @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) {
     if (cameraId < 0) {
@@ -198,31 +207,36 @@
     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);
@@ -256,7 +270,6 @@
 
     if (!captureSizeCalculated) {
       recordingProfile = null;
-      @SuppressWarnings("deprecation")
       CamcorderProfile camcorderProfile =
           getBestAvailableCamcorderProfileForResolutionPresetLegacy(cameraId, resolutionPreset);
       recordingProfileLegacy = camcorderProfile;
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 c61be04..297c09c 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,9 @@
   @SuppressWarnings("unchecked")
   public void getControlAutoExposureAvailableTargetFpsRangesTest() {
     Range<Integer> mockRange = mock(Range.class);
-    Range<Integer>[] mockRanges = new Range[] {mockRange};
+    // Use a wildcard, since `new Range<Integer>[] {mockRange}`
+    // results in a 'Generic array creation' error.
+    Range<Integer>[] mockRanges = (Range<Integer>[]) new Range<?>[] {mockRange};
     when(mockCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES))
         .thenReturn(mockRanges);
 
@@ -177,7 +179,7 @@
 
   @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 +192,7 @@
 
   @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);
 
@@ -203,7 +205,8 @@
 
   @Test
   public void getScalerGetScalerMinZoomRatioTest() {
-    Range zoomRange = mock(Range.class);
+    @SuppressWarnings("unchecked")
+    Range<Float> zoomRange = (Range<Float>) mock(Range.class);
     when(mockCharacteristics.get(CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE))
         .thenReturn(zoomRange);
 
@@ -215,7 +218,8 @@
 
   @Test
   public void getScalerGetScalerMaxZoomRatioTest() {
-    Range zoomRange = mock(Range.class);
+    @SuppressWarnings("unchecked")
+    Range<Float> zoomRange = (Range<Float>) mock(Range.class);
     when(mockCharacteristics.get(CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE))
         .thenReturn(zoomRange);
 
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 b34a04f..800c3f7 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
@@ -149,10 +149,7 @@
     ExposurePointFeature exposurePointFeature =
         new ExposurePointFeature(mockCameraProperties, mockSensorOrientationFeature);
 
-    try (MockedStatic<CameraRegionUtils> 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 f03dc9f..bfc0ebc 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
@@ -150,10 +150,7 @@
     FocusPointFeature focusPointFeature =
         new FocusPointFeature(mockCameraProperties, mockSensorOrientationFeature);
 
-    try (MockedStatic<CameraRegionUtils> 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 2bb4d84..ea67636 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,8 +96,10 @@
     when(rangeTwo.getUpper()).thenReturn(12);
     when(rangeThree.getUpper()).thenReturn(13);
 
+    // Use a wildcard, since `new Range<Integer>[] {rangeOne, rangeTwo, rangeThree}`
+    // results in a 'Generic array creation' error.
     @SuppressWarnings("unchecked")
-    Range<Integer>[] ranges = new Range[] {rangeOne, rangeTwo, rangeThree};
+    Range<Integer>[] ranges = (Range<Integer>[]) new Range<?>[] {rangeOne, rangeTwo, rangeThree};
 
     CameraProperties cameraProperties = mock(CameraProperties.class);
 
diff --git a/packages/camera/camera_android/example/android/build.gradle b/packages/camera/camera_android/example/android/build.gradle
index e54be49..807cc56 100644
--- a/packages/camera/camera_android/example/android/build.gradle
+++ b/packages/camera/camera_android/example/android/build.gradle
@@ -35,9 +35,7 @@
 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"
         }
     }
 }
diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml
index e44e72c..5aab2cd 100644
--- a/packages/camera/camera_android/pubspec.yaml
+++ b/packages/camera/camera_android/pubspec.yaml
@@ -2,7 +2,7 @@
 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.4+1
+version: 0.10.4+2
 
 environment:
   sdk: ">=2.17.0 <3.0.0"