Set a camera parameter to force the flash off. Also fixed the uninstall build targets.
[zxing.git] / android / src / com / google / zxing / client / android / CameraManager.java
index 388c936..cb33dd0 100755 (executable)
@@ -16,6 +16,8 @@
 
 package com.google.zxing.client.android;
 
+import com.google.zxing.ResultPoint;
+
 import android.content.Context;
 import android.graphics.Point;
 import android.graphics.Rect;
@@ -26,7 +28,8 @@ import android.util.Log;
 import android.view.Display;
 import android.view.SurfaceHolder;
 import android.view.WindowManager;
-import com.google.zxing.ResultPoint;
+
+import java.io.IOException;
 
 /**
  * This object wraps the Camera service object and expects to be the only one talking to it. The
@@ -66,7 +69,7 @@ final class CameraManager {
     mPreviewing = false;
   }
 
-  public void openDriver(SurfaceHolder holder) {
+  public void openDriver(SurfaceHolder holder) throws IOException {
     if (mCamera == null) {
       mCamera = Camera.open();
       mCamera.setPreviewDisplay(holder);
@@ -116,7 +119,7 @@ final class CameraManager {
     if (mCamera != null && mPreviewing) {
       mPreviewHandler = handler;
       mPreviewMessage = message;
-      mCamera.setPreviewCallback(previewCallback);
+      mCamera.setOneShotPreviewCallback(previewCallback);
     }
   }
 
@@ -138,7 +141,7 @@ final class CameraManager {
    */
   public Rect getFramingRect() {
     if (mFramingRect == null) {
-      int size = ((mScreenResolution.x < mScreenResolution.y) ? mScreenResolution.x :
+      int size = (mScreenResolution.x < mScreenResolution.y ? mScreenResolution.x :
           mScreenResolution.y) * 3 / 4;
       int leftOffset = (mScreenResolution.x - size) / 2;
       int topOffset = (mScreenResolution.y - size) / 2;
@@ -173,7 +176,6 @@ final class CameraManager {
    */
   private final Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {
     public void onPreviewFrame(byte[] data, Camera camera) {
-      camera.setPreviewCallback(null);
       if (mPreviewHandler != null) {
         Message message = mPreviewHandler.obtainMessage(mPreviewMessage, mScreenResolution.x,
             mScreenResolution.y, data);
@@ -188,7 +190,7 @@ final class CameraManager {
       if (mAutoFocusHandler != null) {
         Message message = mAutoFocusHandler.obtainMessage(mAutoFocusMessage, success);
         // Simulate continuous autofocus by sending a focus request every 1.5 seconds.
-        mAutoFocusHandler.sendMessageDelayed(message, 1500);
+        mAutoFocusHandler.sendMessageDelayed(message, 1500L);
         mAutoFocusHandler = null;
       }
     }
@@ -202,6 +204,9 @@ final class CameraManager {
   private void setCameraParameters() {
     Camera.Parameters parameters = mCamera.getParameters();
     parameters.setPreviewSize(mScreenResolution.x, mScreenResolution.y);
+
+    // Disables the built-in flash if present. Hopefully devices will honor this setting.
+    parameters.set("flash-mode", "off");
     mCamera.setParameters(parameters);
     Log.v(TAG, "Setting params for preview: width " + mScreenResolution.x + " height " +
         mScreenResolution.y);