diff options
-rw-r--r-- | src/com/android/camera/AndroidCameraManagerImpl.java | 114 | ||||
-rw-r--r-- | src/com/android/camera/CameraManager.java | 24 | ||||
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 6 | ||||
-rw-r--r-- | src/com/android/camera/PhotoUI.java | 12 |
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); } |