BasicCameraFactory: check if continuous picture af is available before requesting it.

Bug: 119284303

Test: Click a picture on a device without AF on front camera.

Change-Id: I5133d56d69f7a1f6e01d6682fff91202aaa9be17
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/src/com/android/camera/one/OneCameraCharacteristics.java b/src/com/android/camera/one/OneCameraCharacteristics.java
index 24584da..27504a2 100644
--- a/src/com/android/camera/one/OneCameraCharacteristics.java
+++ b/src/com/android/camera/one/OneCameraCharacteristics.java
@@ -135,6 +135,11 @@
     public boolean isAutoFocusSupported();
 
     /**
+     * @return true if this camera supports continuous picture autofocus.
+     */
+    public boolean isContinuousPictureAutoFocusSupported();
+
+    /**
      * @return true if this camera supports custom AutoExposure regions.
      */
     public boolean isAutoExposureSupported();
diff --git a/src/com/android/camera/one/v1/OneCameraCharacteristicsImpl.java b/src/com/android/camera/one/v1/OneCameraCharacteristicsImpl.java
index b14e66e..c525b57 100644
--- a/src/com/android/camera/one/v1/OneCameraCharacteristicsImpl.java
+++ b/src/com/android/camera/one/v1/OneCameraCharacteristicsImpl.java
@@ -176,6 +176,11 @@
     }
 
     @Override
+    public boolean isContinuousPictureAutoFocusSupported() {
+        return getCameraDirection() == Facing.BACK;
+    }
+
+    @Override
     public boolean isAutoExposureSupported() {
         // Custom AE is only supported on the back camera for legacy devices.
         return getCameraDirection() == Facing.BACK;
diff --git a/src/com/android/camera/one/v2/OneCameraCharacteristicsImpl.java b/src/com/android/camera/one/v2/OneCameraCharacteristicsImpl.java
index f7a2b7e..77e9a81 100644
--- a/src/com/android/camera/one/v2/OneCameraCharacteristicsImpl.java
+++ b/src/com/android/camera/one/v2/OneCameraCharacteristicsImpl.java
@@ -244,6 +244,20 @@
     }
 
     @Override
+    public boolean isContinuousPictureAutoFocusSupported() {
+        int[] availableAfModes =
+                mCameraCharacteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES);
+        boolean continuousPictureAfModeAvailable = false;
+        for (int i = 0; i < availableAfModes.length; i++) {
+            if (availableAfModes[i] == CameraCharacteristics.CONTROL_AF_MODE_CONTINUOUS_PICTURE) {
+                continuousPictureAfModeAvailable = true;
+                break;
+            }
+        }
+        return  isAutoFocusSupported() && continuousPictureAfModeAvailable;
+    }
+
+    @Override
     public boolean isAutoExposureSupported() {
         Integer maxAeRegions = mCameraCharacteristics.get(
               CameraCharacteristics.CONTROL_MAX_REGIONS_AE);
diff --git a/src/com/android/camera/one/v2/common/BasicCameraFactory.java b/src/com/android/camera/one/v2/common/BasicCameraFactory.java
index 0e30db4..44883ea 100644
--- a/src/com/android/camera/one/v2/common/BasicCameraFactory.java
+++ b/src/com/android/camera/one/v2/common/BasicCameraFactory.java
@@ -87,8 +87,12 @@
             Observable<Boolean> hdrSceneSetting,
             int templateType) {
         RequestTemplate requestTemplate = new RequestTemplate(rootTemplate);
-        requestTemplate.setParam(
-              CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
+        if (cameraCharacteristics.isContinuousPictureAutoFocusSupported()) {
+            requestTemplate.setParam(
+                    CaptureRequest.CONTROL_AF_MODE,
+                    CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
+        }
+
         requestTemplate.setParam(
               CaptureRequest.CONTROL_AE_MODE, new FlashBasedAEMode(flash, hdrSceneSetting));
         requestTemplate.setParam(