[camera] Add filter for unsupported cameras on Android (#4418)

diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraUtils.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraUtils.java
index 003d80a..11b6eea 100644
--- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraUtils.java
+++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraUtils.java
@@ -97,6 +97,16 @@
     String[] cameraNames = cameraManager.getCameraIdList();
     List<Map<String, Object>> cameras = new ArrayList<>();
     for (String cameraName : cameraNames) {
+      int cameraId;
+      try {
+        cameraId = Integer.parseInt(cameraName, 10);
+      } catch (NumberFormatException e) {
+        cameraId = -1;
+      }
+      if (cameraId < 0) {
+        continue;
+      }
+
       HashMap<String, Object> details = new HashMap<>();
       CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraName);
       details.put("name", cameraName);
diff --git a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraUtilsTest.java b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraUtilsTest.java
index 6b714ce..e59b05b 100644
--- a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraUtilsTest.java
+++ b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraUtilsTest.java
@@ -5,8 +5,20 @@
 package io.flutter.plugins.camera;
 
 import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
+import android.app.Activity;
+import android.content.Context;
+import android.hardware.camera2.CameraAccessException;
+import android.hardware.camera2.CameraCharacteristics;
+import android.hardware.camera2.CameraManager;
+import android.hardware.camera2.CameraMetadata;
 import io.flutter.embedding.engine.systemchannels.PlatformChannel;
+import java.util.List;
+import java.util.Map;
 import org.junit.Test;
 
 public class CameraUtilsTest {
@@ -52,4 +64,37 @@
   public void deserializeDeviceOrientation_throwsForNull() {
     CameraUtils.deserializeDeviceOrientation(null);
   }
+
+  @Test
+  public void getAvailableCameras_retrievesValidCameras()
+      throws CameraAccessException, NumberFormatException {
+    final Activity mockActivity = mock(Activity.class);
+    final CameraManager mockCameraManager = mock(CameraManager.class);
+    final CameraCharacteristics mockCameraCharacteristics = mock(CameraCharacteristics.class);
+    final String[] mockCameraIds = {"1394902", "-192930", "0283835", "foobar"};
+    final int mockSensorOrientation0 = 90;
+    final int mockSensorOrientation2 = 270;
+    final int mockLensFacing0 = CameraMetadata.LENS_FACING_FRONT;
+    final int mockLensFacing2 = CameraMetadata.LENS_FACING_EXTERNAL;
+
+    when(mockActivity.getSystemService(Context.CAMERA_SERVICE)).thenReturn(mockCameraManager);
+    when(mockCameraManager.getCameraIdList()).thenReturn(mockCameraIds);
+    when(mockCameraManager.getCameraCharacteristics(anyString()))
+        .thenReturn(mockCameraCharacteristics);
+    when(mockCameraCharacteristics.get(any()))
+        .thenReturn(mockSensorOrientation0)
+        .thenReturn(mockLensFacing0)
+        .thenReturn(mockSensorOrientation2)
+        .thenReturn(mockLensFacing2);
+
+    List<Map<String, Object>> availableCameras = CameraUtils.getAvailableCameras(mockActivity);
+
+    assertEquals(availableCameras.size(), 2);
+    assertEquals(availableCameras.get(0).get("name"), "1394902");
+    assertEquals(availableCameras.get(0).get("sensorOrientation"), mockSensorOrientation0);
+    assertEquals(availableCameras.get(0).get("lensFacing"), "front");
+    assertEquals(availableCameras.get(1).get("name"), "0283835");
+    assertEquals(availableCameras.get(1).get("sensorOrientation"), mockSensorOrientation2);
+    assertEquals(availableCameras.get(1).get("lensFacing"), "external");
+  }
 }