@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();
}
@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
public void autoFocus(Handler handler, CameraAFCallback cb) {
mCameraHandler.obtainMessage(
AUTO_FOCUS,
- AFCallbackForward.instance(handler, this, cb)).sendToTarget();
+ AFCallbackForward.getNewInstance(handler, this, cb)).sendToTarget();
}
@Override
@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
}
@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
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);
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);
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);
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);
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);
});
}
}
+
+ 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);
+ }
+ });
+ }
+ }
}
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;
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
*
* 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}.
*/
}
/**
+ * 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.
/**
* 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.
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;
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;
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;
}
@Override
- public void onFaceDetection(Face[] faces, android.hardware.Camera camera) {
+ public void onFaceDetection(Face[] faces, CameraManager.CameraProxy camera) {
mFaceView.setFaces(faces);
}