summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/camera/AndroidCameraManagerImpl.java114
-rw-r--r--src/com/android/camera/CameraManager.java24
-rw-r--r--src/com/android/camera/PhotoModule.java6
-rw-r--r--src/com/android/camera/PhotoUI.java12
4 files changed, 104 insertions, 52 deletions
diff --git a/src/com/android/camera/AndroidCameraManagerImpl.java b/src/com/android/camera/AndroidCameraManagerImpl.java
index 907cf1304..897aa9252 100644
--- a/src/com/android/camera/AndroidCameraManagerImpl.java
+++ b/src/com/android/camera/AndroidCameraManagerImpl.java
@@ -391,12 +391,12 @@ class AndroidCameraManagerImpl implements CameraManager {
@TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB)
@Override
- public void setPreviewTexture(final SurfaceTexture surfaceTexture) {
+ public void setPreviewTexture(SurfaceTexture surfaceTexture) {
mCameraHandler.obtainMessage(SET_PREVIEW_TEXTURE_ASYNC, surfaceTexture).sendToTarget();
}
@Override
- public void setPreviewDisplay(final SurfaceHolder surfaceHolder) {
+ public void setPreviewDisplay(SurfaceHolder surfaceHolder) {
mCameraHandler.obtainMessage(SET_PREVIEW_DISPLAY_ASYNC, surfaceHolder).sendToTarget();
}
@@ -413,18 +413,18 @@ class AndroidCameraManagerImpl implements CameraManager {
@Override
public void setPreviewDataCallback(
- Handler handler, final CameraPreviewDataCallback cb) {
+ Handler handler, CameraPreviewDataCallback cb) {
mCameraHandler.obtainMessage(
SET_PREVIEW_CALLBACK,
- PreviewCallbackForward.instance(handler, this, cb)).sendToTarget();
+ PreviewCallbackForward.getNewInstance(handler, this, cb)).sendToTarget();
}
@Override
public void setPreviewDataCallbackWithBuffer(
- Handler handler, final CameraPreviewDataCallback cb) {
+ Handler handler, CameraPreviewDataCallback cb) {
mCameraHandler.obtainMessage(
SET_PREVIEW_CALLBACK_WITH_BUFFER,
- PreviewCallbackForward.instance(handler, this, cb)).sendToTarget();
+ PreviewCallbackForward.getNewInstance(handler, this, cb)).sendToTarget();
}
@Override
@@ -436,7 +436,7 @@ class AndroidCameraManagerImpl implements CameraManager {
public void autoFocus(Handler handler, CameraAFCallback cb) {
mCameraHandler.obtainMessage(
AUTO_FOCUS,
- AFCallbackForward.instance(handler, this, cb)).sendToTarget();
+ AFCallbackForward.getNewInstance(handler, this, cb)).sendToTarget();
}
@Override
@@ -448,24 +448,24 @@ class AndroidCameraManagerImpl implements CameraManager {
@TargetApi(ApiHelper.VERSION_CODES.JELLY_BEAN)
@Override
public void setAutoFocusMoveCallback(
- Handler handler, final CameraAFMoveCallback cb) {
+ Handler handler, CameraAFMoveCallback cb) {
mCameraHandler.obtainMessage(
SET_AUTO_FOCUS_MOVE_CALLBACK,
- AFMoveCallbackForward.instance(handler, this, cb)).sendToTarget();
+ AFMoveCallbackForward.getNewInstance(handler, this, cb)).sendToTarget();
}
@Override
public void takePicture(
- final Handler handler,
- final CameraShutterCallback shutter,
- final CameraPictureCallback raw,
- final CameraPictureCallback post,
- final CameraPictureCallback jpeg) {
+ Handler handler,
+ CameraShutterCallback shutter,
+ CameraPictureCallback raw,
+ CameraPictureCallback post,
+ CameraPictureCallback jpeg) {
mCameraHandler.requestTakePicture(
- ShutterCallbackForward.instance(handler, this, shutter),
- PictureCallbackForward.instance(handler, this, raw),
- PictureCallbackForward.instance(handler, this, post),
- PictureCallbackForward.instance(handler, this, jpeg));
+ ShutterCallbackForward.getNewInstance(handler, this, shutter),
+ PictureCallbackForward.getNewInstance(handler, this, raw),
+ PictureCallbackForward.getNewInstance(handler, this, post),
+ PictureCallbackForward.getNewInstance(handler, this, jpeg));
}
@Override
@@ -480,8 +480,11 @@ class AndroidCameraManagerImpl implements CameraManager {
}
@TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
- public void setFaceDetectionListener(FaceDetectionListener listener) {
- mCameraHandler.obtainMessage(SET_FACE_DETECTION_LISTENER, listener).sendToTarget();
+ public void setFaceDetectionCallback(
+ Handler handler, CameraFaceDetectionCallback cb) {
+ mCameraHandler.obtainMessage(
+ SET_FACE_DETECTION_LISTENER,
+ FaceDetectionCallbackForward.getNewInstance(handler, this, cb)).sendToTarget();
}
@Override
@@ -537,15 +540,15 @@ class AndroidCameraManagerImpl implements CameraManager {
private final CameraAFCallback mCallback;
/**
- * Returns an instance of {@link AFCallbackForward}.
+ * Returns a new instance of {@link AFCallbackForward}.
*
* @param handler The handler in which the callback will be invoked in.
* @param camera The {@link CameraProxy} which the callback is from.
* @param cb The callback to be invoked.
* @return The instance of the {@link AFCallbackForward},
- * or null if any one of other parameters is null.
+ * or null if any parameter is null.
*/
- public static AFCallbackForward instance(
+ public static AFCallbackForward getNewInstance(
Handler handler, CameraProxy camera, CameraAFCallback cb) {
if (handler == null || camera == null || cb == null) return null;
return new AFCallbackForward(handler, camera, cb);
@@ -577,15 +580,15 @@ class AndroidCameraManagerImpl implements CameraManager {
private final CameraProxy mCamera;
/**
- * Returns an instance of {@link AFMoveCallbackForward}.
+ * Returns a new instance of {@link AFMoveCallbackForward}.
*
* @param handler The handler in which the callback will be invoked in.
* @param camera The {@link CameraProxy} which the callback is from.
* @param cb The callback to be invoked.
* @return The instance of the {@link AFMoveCallbackForward},
- * or null if any one of other parameters is null.
+ * or null if any parameter is null.
*/
- public static AFMoveCallbackForward instance(
+ public static AFMoveCallbackForward getNewInstance(
Handler handler, CameraProxy camera, CameraAFMoveCallback cb) {
if (handler == null || camera == null || cb == null) return null;
return new AFMoveCallbackForward(handler, camera, cb);
@@ -619,15 +622,15 @@ class AndroidCameraManagerImpl implements CameraManager {
private final CameraProxy mCamera;
/**
- * Returns an instance of {@link ShutterCallbackForward}.
+ * Returns a new instance of {@link ShutterCallbackForward}.
*
* @param handler The handler in which the callback will be invoked in.
* @param camera The {@link CameraProxy} which the callback is from.
* @param cb The callback to be invoked.
* @return The instance of the {@link ShutterCallbackForward},
- * or null if any one of other parameters is null.
+ * or null if any parameter is null.
*/
- public static ShutterCallbackForward instance(
+ public static ShutterCallbackForward getNewInstance(
Handler handler, CameraProxy camera, CameraShutterCallback cb) {
if (handler == null || camera == null || cb == null) return null;
return new ShutterCallbackForward(handler, camera, cb);
@@ -660,15 +663,15 @@ class AndroidCameraManagerImpl implements CameraManager {
private final CameraProxy mCamera;
/**
- * Returns an instance of {@link PictureCallbackForward}.
+ * Returns a new instance of {@link PictureCallbackForward}.
*
* @param handler The handler in which the callback will be invoked in.
* @param camera The {@link CameraProxy} which the callback is from.
* @param cb The callback to be invoked.
* @return The instance of the {@link PictureCallbackForward},
- * or null if any one of other parameters is null.
+ * or null if any parameters is null.
*/
- public static PictureCallbackForward instance(
+ public static PictureCallbackForward getNewInstance(
Handler handler, CameraProxy camera, CameraPictureCallback cb) {
if (handler == null || camera == null || cb == null) return null;
return new PictureCallbackForward(handler, camera, cb);
@@ -702,15 +705,15 @@ class AndroidCameraManagerImpl implements CameraManager {
private final CameraProxy mCamera;
/**
- * Returns an instance of {@link PreviewCallbackForward}.
+ * Returns a new instance of {@link PreviewCallbackForward}.
*
* @param handler The handler in which the callback will be invoked in.
* @param camera The {@link CameraProxy} which the callback is from.
* @param cb The callback to be invoked.
- * @return The instance of the {@link PictureCallbackForward},
- * or null if any one of other parameters is null.
+ * @return The instance of the {@link PreviewCallbackForward},
+ * or null if any parameters is null.
*/
- public static PreviewCallbackForward instance(
+ public static PreviewCallbackForward getNewInstance(
Handler handler, CameraProxy camera, CameraPreviewDataCallback cb) {
if (handler == null || camera == null || cb == null) return null;
return new PreviewCallbackForward(handler, camera, cb);
@@ -734,4 +737,43 @@ class AndroidCameraManagerImpl implements CameraManager {
});
}
}
+
+ private static class FaceDetectionCallbackForward implements FaceDetectionListener {
+ private final Handler mHandler;
+ private final CameraFaceDetectionCallback mCallback;
+ private final CameraProxy mCamera;
+
+ /**
+ * Returns a new instance of {@link FaceDetectionCallbackForward}.
+ *
+ * @param handler The handler in which the callback will be invoked in.
+ * @param camera The {@link CameraProxy} which the callback is from.
+ * @param cb The callback to be invoked.
+ * @return The instance of the {@link FaceDetectionCallbackForward},
+ * or null if any parameter is null.
+ */
+ public static FaceDetectionCallbackForward getNewInstance(
+ Handler handler, CameraProxy camera, CameraFaceDetectionCallback cb) {
+ if (handler == null || camera == null || cb == null) return null;
+ return new FaceDetectionCallbackForward(handler, camera, cb);
+ }
+
+ private FaceDetectionCallbackForward(
+ Handler h, CameraProxy camera, CameraFaceDetectionCallback cb) {
+ mHandler = h;
+ mCamera = camera;
+ mCallback = cb;
+ }
+
+ @Override
+ public void onFaceDetection(
+ final Camera.Face[] faces, Camera camera) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onFaceDetection(faces, mCamera);
+ }
+ });
+ }
+ }
}
diff --git a/src/com/android/camera/CameraManager.java b/src/com/android/camera/CameraManager.java
index e4a066701..90a838ca6 100644
--- a/src/com/android/camera/CameraManager.java
+++ b/src/com/android/camera/CameraManager.java
@@ -18,8 +18,8 @@ package com.android.camera;
import android.annotation.TargetApi;
import android.graphics.SurfaceTexture;
+import android.hardware.Camera;
import android.hardware.Camera.ErrorCallback;
-import android.hardware.Camera.FaceDetectionListener;
import android.hardware.Camera.OnZoomChangeListener;
import android.hardware.Camera.Parameters;
import android.os.Handler;
@@ -30,7 +30,7 @@ import com.android.gallery3d.common.ApiHelper;
import java.io.IOException;
/**
- * An interface which provides possible camera device operations.
+ * An interface which provides possible camera device operations.
*
* The client should call {@code CameraManager.cameraOpen} to get an instance
* of {@link CameraManager.CameraProxy} to control the camera. Classes
@@ -41,7 +41,6 @@ import java.io.IOException;
*
* TODO: provide callback interfaces for:
* {@code android.hardware.Camera.ErrorCallback},
- * {@code android.hardware.Camera.FaceDetectionListener},
* {@code android.hardware.Camera.OnZoomChangeListener}, and
* {@code android.hardware.Camera.Parameters}.
*/
@@ -88,6 +87,20 @@ public interface CameraManager {
}
/**
+ * An interface which wraps
+ * {@link android.hardware.Camera.FaceDetectionListener}.
+ */
+ public interface CameraFaceDetectionCallback {
+ /**
+ * Callback for face detection.
+ *
+ * @param faces Recognized face in the preview.
+ * @param camera The camera which the preview image comes from.
+ */
+ public void onFaceDetection(Camera.Face[] faces, CameraProxy camera);
+ }
+
+ /**
* Opens the camera of the specified ID synchronously.
*
* @param cameraId The camera ID to open.
@@ -248,10 +261,11 @@ public interface CameraManager {
/**
* Sets the face detection listener.
*
- * @param listener The listener for face detection results.
+ * @param handler The handler in which the callback will be invoked.
+ * @param callback The callback for face detection results.
*/
@TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
- public void setFaceDetectionListener(FaceDetectionListener listener);
+ public void setFaceDetectionCallback(Handler handler, CameraFaceDetectionCallback callback);
/**
* Starts the face detection.
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 6140848ec..c65a49ef9 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -664,7 +664,7 @@ public class PhotoModule
CameraInfo info = CameraHolder.instance().getCameraInfo()[mCameraId];
mUI.onStartFaceDetection(mDisplayOrientation,
(info.facing == CameraInfo.CAMERA_FACING_FRONT));
- mCameraDevice.setFaceDetectionListener(mUI);
+ mCameraDevice.setFaceDetectionCallback(mHandler, mUI);
mCameraDevice.startFaceDetection();
}
}
@@ -676,7 +676,7 @@ public class PhotoModule
if (!mFaceDetectionStarted) return;
if (mParameters.getMaxNumDetectedFaces() > 0) {
mFaceDetectionStarted = false;
- mCameraDevice.setFaceDetectionListener(null);
+ mCameraDevice.setFaceDetectionCallback(null, null);
mCameraDevice.stopFaceDetection();
mUI.clearFaces();
}
@@ -1502,7 +1502,7 @@ public class PhotoModule
if (mCameraDevice != null) {
mCameraDevice.setZoomChangeListener(null);
if(ApiHelper.HAS_FACE_DETECTION) {
- mCameraDevice.setFaceDetectionListener(null);
+ mCameraDevice.setFaceDetectionCallback(null, null);
}
mCameraDevice.setErrorCallback(null);
CameraHolder.instance().release();
diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java
index 22fcc059e..1e341a686 100644
--- a/src/com/android/camera/PhotoUI.java
+++ b/src/com/android/camera/PhotoUI.java
@@ -27,13 +27,11 @@ import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.hardware.Camera.Face;
import android.hardware.Camera.FaceDetectionListener;
-import android.hardware.Camera.Parameters;
import android.hardware.Camera.Size;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
-import android.view.MotionEvent;
import android.view.TextureView;
import android.view.View;
import android.view.View.OnClickListener;
@@ -42,20 +40,19 @@ import android.view.ViewGroup;
import android.view.ViewStub;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
-import android.widget.ImageView;
import android.widget.Toast;
import com.android.camera.CameraPreference.OnPreferenceChangedListener;
import com.android.camera.FocusOverlayManager.FocusUI;
import com.android.camera.ui.AbstractSettingPopup;
import com.android.camera.ui.CameraControls;
+import com.android.camera.ui.CameraRootView;
+import com.android.camera.ui.CameraSwitcher;
import com.android.camera.ui.CameraSwitcher.CameraSwitchListener;
import com.android.camera.ui.CountDownView;
import com.android.camera.ui.CountDownView.OnCountDownFinishedListener;
-import com.android.camera.ui.CameraSwitcher;
import com.android.camera.ui.FaceView;
import com.android.camera.ui.FocusIndicator;
-import com.android.camera.ui.CameraRootView;
import com.android.camera.ui.PieRenderer;
import com.android.camera.ui.PieRenderer.PieListener;
import com.android.camera.ui.RenderOverlay;
@@ -63,14 +60,13 @@ import com.android.camera.ui.ZoomRenderer;
import com.android.gallery3d.R;
import com.android.gallery3d.common.ApiHelper;
-import java.io.IOException;
import java.util.List;
public class PhotoUI implements PieListener,
PreviewGestures.SingleTapListener,
FocusUI, TextureView.SurfaceTextureListener,
LocationManager.Listener, CameraRootView.MyDisplayListener,
- FaceDetectionListener {
+ CameraManager.CameraFaceDetectionCallback {
private static final String TAG = "CAM_UI";
private static final int UPDATE_TRANSFORM_MATRIX = 1;
@@ -856,7 +852,7 @@ public class PhotoUI implements PieListener,
}
@Override
- public void onFaceDetection(Face[] faces, android.hardware.Camera camera) {
+ public void onFaceDetection(Face[] faces, CameraManager.CameraProxy camera) {
mFaceView.setFaces(faces);
}