]> Pileus Git - ~andy/freeotp/blobdiff - src/org/fedorahosted/freeotp/CameraDialogFragment.java
Make focus mode selection more flexible
[~andy/freeotp] / src / org / fedorahosted / freeotp / CameraDialogFragment.java
index f4c7760a91f8746dc9a2693ef45f5602a3a4638a..c3c23dd028cbcaad8c48c02d6bb2f85aae49d022 100644 (file)
@@ -20,6 +20,9 @@
 
 package org.fedorahosted.freeotp;
 
+import java.util.List;
+
+import android.annotation.TargetApi;
 import android.app.AlertDialog;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -84,6 +87,7 @@ public class CameraDialogFragment extends BaseAlertDialogFragment implements Sur
        }
 
        @Override
+       @TargetApi(14)
        public void surfaceCreated(SurfaceHolder holder) {
                try {
                        mCamera = Camera.open();
@@ -105,7 +109,13 @@ public class CameraDialogFragment extends BaseAlertDialogFragment implements Sur
 
                        // Set auto-focus mode
                        Parameters params = mCamera.getParameters();
-                       params.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
+                       List<String> modes = params.getSupportedFocusModes();
+                       if (modes.contains(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE))
+                               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))
+                               params.setFocusMode(Parameters.FOCUS_MODE_AUTO);
                        mCamera.setParameters(params);
                } catch (Exception e) {
                        SurfaceView sv = (SurfaceView) getDialog().findViewById(R.id.camera_surfaceview);