]> Pileus Git - ~andy/freeotp/commitdiff
Enable support for non-continuous autofocus
authorNathaniel McCallum <npmccallum@redhat.com>
Wed, 11 Dec 2013 23:17:13 +0000 (18:17 -0500)
committerNathaniel McCallum <npmccallum@redhat.com>
Wed, 11 Dec 2013 23:17:13 +0000 (18:17 -0500)
AndroidManifest.xml
src/org/fedorahosted/freeotp/CameraDialogFragment.java

index 7d9ecc5676f689411e3d7223aa70d14a604c1551..6d2426f30071802b312b251326e609a6becc683a 100644 (file)
@@ -21,7 +21,7 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="org.fedorahosted.freeotp"
-    android:versionCode="9"
+    android:versionCode="10"
     android:versionName="1.3" >
 
     <uses-sdk
index f81fe8e351dd6835f21742eb1df123343384830f..1e48159d177b7b3d4dcc266807cc91735a6218b9 100644 (file)
@@ -30,18 +30,22 @@ import android.hardware.Camera;
 import android.hardware.Camera.CameraInfo;
 import android.hardware.Camera.Parameters;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
 import android.view.Surface;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
 import android.view.View;
 import android.widget.TextView;
 
-public class CameraDialogFragment extends BaseAlertDialogFragment implements SurfaceHolder.Callback {
+public class CameraDialogFragment extends BaseAlertDialogFragment
+                       implements SurfaceHolder.Callback, Camera.AutoFocusCallback {
        public static final String FRAGMENT_TAG = "fragment_camera";
 
        private final CameraInfo mCameraInfo = new CameraInfo();
        private final DecodeAsyncTask mDecodeAsyncTask;
        private final int mCameraId;
+       private Handler mHandler;
        private Camera mCamera;
 
        public CameraDialogFragment() {
@@ -128,6 +132,9 @@ public class CameraDialogFragment extends BaseAlertDialogFragment implements Sur
 
                mCamera.setDisplayOrientation((mCameraInfo.orientation - rotation + 360) % 360);
                mCamera.startPreview();
+
+               if (mHandler != null)
+                       mHandler.sendEmptyMessageDelayed(0, 100);
        }
 
        @Override
@@ -160,8 +167,16 @@ public class CameraDialogFragment extends BaseAlertDialogFragment implements Sur
                        params.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
                else if (modes.contains(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO))
                        params.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
-               else if (modes.contains(Parameters.FOCUS_MODE_AUTO))
+               else if (modes.contains(Parameters.FOCUS_MODE_AUTO)) {
                        params.setFocusMode(Parameters.FOCUS_MODE_AUTO);
+                       mHandler = new Handler() {
+                               @Override
+                               public void handleMessage(Message msg) {
+                                       super.handleMessage(msg);
+                                       mCamera.autoFocus(CameraDialogFragment.this);
+                               }
+                       };
+               }
                mCamera.setParameters(params);
        }
 
@@ -170,9 +185,21 @@ public class CameraDialogFragment extends BaseAlertDialogFragment implements Sur
                if (mCamera == null)
                        return;
 
+               if (mHandler != null) {
+                       mCamera.cancelAutoFocus();
+                       mHandler.removeMessages(0);
+                       mHandler = null;
+               }
+
                mCamera.stopPreview();
                mCamera.setPreviewCallback(null);
                mCamera.release();
                mCamera = null;
        }
+
+       @Override
+       public void onAutoFocus(boolean success, Camera camera) {
+               if (mHandler != null)
+                       mHandler.sendEmptyMessageDelayed(0, 1000);
+       }
 }