From be8e609358e017a95a1aee3278cf8c19cb348b65 Mon Sep 17 00:00:00 2001 From: Craig Neuwirt Date: Thu, 4 Apr 2019 09:58:06 -0500 Subject: [PATCH] Added setAutoFocusResetDelay to api to control autofocus reset options --- .../com/otaliastudios/cameraview/Camera1.java | 5 +++-- .../cameraview/CameraController.java | 9 +++++++++ .../otaliastudios/cameraview/CameraView.java | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java index 758bb895..1d54cde2 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java @@ -31,7 +31,6 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera private Camera mCamera; private boolean mIsBound = false; - private final int mPostFocusResetDelay = 3000; private Runnable mPostFocusResetRunnable = new Runnable() { @Override public void run() { @@ -891,7 +890,9 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera // TODO lock auto exposure and white balance for a while mCameraCallbacks.dispatchOnFocusEnd(gesture, success, p); mHandler.get().removeCallbacks(mPostFocusResetRunnable); - mHandler.get().postDelayed(mPostFocusResetRunnable, mPostFocusResetDelay); + if (shouldResetAutoFocus()) { + mHandler.get().postDelayed(mPostFocusResetRunnable, getAutoFocusResetDelay()); + } } }); } catch (RuntimeException e) { diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java index 4b28bb31..555fa336 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java @@ -72,6 +72,7 @@ abstract class CameraController implements protected Size mCaptureSize; protected Size mPreviewStreamSize; protected int mPreviewFormat; + protected long mAutoFocusResetDelayMillis = CameraView.DEFAULT_AUTOFOCUS_RESET_DELAY_MILLIS; protected int mSensorOffset; private int mDisplayOffset; @@ -325,6 +326,8 @@ abstract class CameraController implements mSnapshotMaxHeight = maxHeight; } + final void setAutoFocusResetDelay(long delayMillis) { mAutoFocusResetDelayMillis = delayMillis; } + //endregion //region Abstract setters and APIs @@ -465,6 +468,12 @@ abstract class CameraController implements return mPictureRecorder != null; } + final long getAutoFocusResetDelay() { return mAutoFocusResetDelayMillis; } + + final boolean shouldResetAutoFocus() { + return mAutoFocusResetDelayMillis > 0 && mAutoFocusResetDelayMillis != Long.MAX_VALUE; + } + //endregion //region Orientation utils diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java index deafbe50..33643f12 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java @@ -47,6 +47,7 @@ public class CameraView extends FrameLayout implements LifecycleObserver { private static final CameraLogger LOG = CameraLogger.create(TAG); public final static int PERMISSION_REQUEST_CODE = 16; + public final static long DEFAULT_AUTOFOCUS_RESET_DELAY_MILLIS = 3000; final static boolean DEFAULT_PLAY_SOUNDS = true; @@ -1049,6 +1050,24 @@ public class CameraView extends FrameLayout implements LifecycleObserver { } + /** + * the current delay in milliseconds to reset the focus after an autofocus process. + * + * @param cameraAutoFocusResetDelayMillis desired delay (in milliseconds). If the delay + * is less than or equal to 0 or equal to Long.MAX_VALUE, + * the autofocus will not be reset. + */ + public void setAutoFocusResetDelay(long cameraAutoFocusResetDelayMillis) { + mCameraController.setAutoFocusResetDelay(cameraAutoFocusResetDelayMillis); + } + + /** + * Returns the current delay in milliseconds to reset the focus after an autofocus process. + * @return the current autofocus reset delay in milliseconds. + */ + public long getAutoFocusResetDelay() { return mCameraController.getAutoFocusResetDelay(); } + + /** * Starts an autofocus process at the given coordinates, with respect * to the view width and height.