Add CTS for camera continuous autofocus modes.

- Also make sure focus position does not change after stopPreview
  or takePicture.

bug:5169599
Change-Id: I81577447e8943b1e136ac92e04564171635a352f
diff --git a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
index 78def20..fcf3a34 100644
--- a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
@@ -1386,11 +1386,42 @@
             assertEquals(focusMode, parameters.getFocusMode());
             checkFocusDistances(parameters);
             if (Parameters.FOCUS_MODE_AUTO.equals(focusMode)
-                    || Parameters.FOCUS_MODE_MACRO.equals(focusMode)) {
+                    || Parameters.FOCUS_MODE_MACRO.equals(focusMode)
+                    || Parameters.FOCUS_MODE_CONTINUOUS_VIDEO.equals(focusMode)
+                    || Parameters.FOCUS_MODE_CONTINUOUS_PICTURE.equals(focusMode)) {
+                Log.v(TAG, "Focus mode=" + focusMode);
                 mCamera.autoFocus(mAutoFocusCallback);
                 assertTrue(waitForFocusDone());
                 parameters = mCamera.getParameters();
                 checkFocusDistances(parameters);
+                float[] initialFocusDistances = new float[3];
+                parameters.getFocusDistances(initialFocusDistances);
+
+                // Focus position should not change after autoFocus call.
+                // Continuous autofocus should have stopped. Sleep some time and
+                // check. Make sure continuous autofocus is not working. If the
+                // focus mode is auto or macro, it is no harm to do the extra
+                // test.
+                Thread.sleep(500);
+                parameters = mCamera.getParameters();
+                float[] currentFocusDistances = new float[3];
+                parameters.getFocusDistances(currentFocusDistances);
+                assertEquals(initialFocusDistances, currentFocusDistances);
+
+                // Focus position should not change after stopping preview.
+                mCamera.stopPreview();
+                parameters = mCamera.getParameters();
+                parameters.getFocusDistances(currentFocusDistances);
+                assertEquals(initialFocusDistances, currentFocusDistances);
+
+                // Focus position should not change after taking a picture.
+                mCamera.startPreview();
+                mCamera.takePicture(mShutterCallback, mRawPictureCallback, mJpegPictureCallback);
+                waitForSnapshotDone();
+                parameters = mCamera.getParameters();
+                parameters.getFocusDistances(currentFocusDistances);
+                assertEquals(initialFocusDistances, currentFocusDistances);
+                mCamera.startPreview();
             }
         }
 
@@ -1865,6 +1896,13 @@
         assertEquals(expected.height, actual.height);
     }
 
+    private void assertEquals(float[] expected, float[] actual) {
+        assertEquals(expected.length, actual.length);
+        for (int i = 0; i < expected.length; i++) {
+            assertEquals(expected[i], actual[i], 0.000001f);
+        }
+    }
+
     private void assertNoLetters(String value, String key) {
         for (int i = 0; i < value.length(); i++) {
             char c = value.charAt(i);