summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/AndroidCameraManagerImpl.java
diff options
context:
space:
mode:
authorAngus Kong <shkong@google.com>2013-09-16 14:25:35 -0700
committerAngus Kong <shkong@google.com>2013-09-17 14:50:53 -0700
commit4f795b878843e59810ec1dca05b7cdb37b5614c5 (patch)
tree24f810cea8691c797a69a1595c931de44cc4c5f0 /src/com/android/camera/AndroidCameraManagerImpl.java
parent5bee41c6d727c730c7b10fba886862284a489257 (diff)
downloadandroid_packages_apps_Snap-4f795b878843e59810ec1dca05b7cdb37b5614c5.tar.gz
android_packages_apps_Snap-4f795b878843e59810ec1dca05b7cdb37b5614c5.tar.bz2
android_packages_apps_Snap-4f795b878843e59810ec1dca05b7cdb37b5614c5.zip
Show dialog when camera device is not connected.
bug:10726516 Change-Id: I3d3433d0b2eced54027b19910473fd55135d0e1c
Diffstat (limited to 'src/com/android/camera/AndroidCameraManagerImpl.java')
-rw-r--r--src/com/android/camera/AndroidCameraManagerImpl.java86
1 files changed, 81 insertions, 5 deletions
diff --git a/src/com/android/camera/AndroidCameraManagerImpl.java b/src/com/android/camera/AndroidCameraManagerImpl.java
index 00fe905a9..bed7ba72e 100644
--- a/src/com/android/camera/AndroidCameraManagerImpl.java
+++ b/src/com/android/camera/AndroidCameraManagerImpl.java
@@ -202,6 +202,10 @@ class AndroidCameraManagerImpl implements CameraManager {
if (mParamsToSet == null) {
mParamsToSet = mCamera.getParameters();
}
+ } else {
+ if (msg.obj != null) {
+ ((CameraOpenErrorCallback) msg.obj).onDeviceOpenFailure(msg.arg1);
+ }
}
return;
@@ -336,8 +340,11 @@ class AndroidCameraManagerImpl implements CameraManager {
}
@Override
- public CameraManager.CameraProxy cameraOpen(int cameraId) {
- mCameraHandler.obtainMessage(OPEN_CAMERA, cameraId, 0).sendToTarget();
+ public CameraManager.CameraProxy cameraOpen(
+ Handler handler, int cameraId, CameraOpenErrorCallback callback) {
+ mCameraHandler.obtainMessage(OPEN_CAMERA, cameraId, 0,
+ CameraOpenErrorCallbackForward.getNewInstance(
+ handler, callback)).sendToTarget();
mCameraHandler.waitDone();
if (mCamera != null) {
return new AndroidCameraProxyImpl();
@@ -347,8 +354,10 @@ class AndroidCameraManagerImpl implements CameraManager {
}
/**
- * A class which implements {@link CameraManager.CameraProxy} and
+ * A class which implements {@link CameraManager.CameraProxy} and
* camera handler thread.
+ * TODO: Save the handler for the callback here to avoid passing the same
+ * handler multiple times.
*/
public class AndroidCameraProxyImpl implements CameraManager.CameraProxy {
@@ -370,12 +379,18 @@ class AndroidCameraManagerImpl implements CameraManager {
}
@Override
- public void reconnect() throws IOException {
+ public boolean reconnect(Handler handler, CameraOpenErrorCallback cb) {
mCameraHandler.sendEmptyMessage(RECONNECT);
mCameraHandler.waitDone();
+ CameraOpenErrorCallback cbforward =
+ CameraOpenErrorCallbackForward.getNewInstance(handler, cb);
if (mReconnectIOException != null) {
- throw mReconnectIOException;
+ if (cbforward != null) {
+ cbforward.onReconnectionFailure(AndroidCameraManagerImpl.this);
+ }
+ return false;
}
+ return true;
}
@Override
@@ -776,4 +791,65 @@ class AndroidCameraManagerImpl implements CameraManager {
});
}
}
+
+ /**
+ * A callback helps to invoke the original callback on another
+ * {@link android.os.Handler}.
+ */
+ private static class CameraOpenErrorCallbackForward implements CameraOpenErrorCallback {
+ private final Handler mHandler;
+ private final CameraOpenErrorCallback mCallback;
+
+ /**
+ * Returns a new instance of {@link FaceDetectionCallbackForward}.
+ *
+ * @param handler The handler in which the callback will be invoked in.
+ * @param cb The callback to be invoked.
+ * @return The instance of the {@link FaceDetectionCallbackForward}, or
+ * null if any parameter is null.
+ */
+ public static CameraOpenErrorCallbackForward getNewInstance(
+ Handler handler, CameraOpenErrorCallback cb) {
+ if (handler == null || cb == null) {
+ return null;
+ }
+ return new CameraOpenErrorCallbackForward(handler, cb);
+ }
+
+ private CameraOpenErrorCallbackForward(
+ Handler h, CameraOpenErrorCallback cb) {
+ mHandler = h;
+ mCallback = cb;
+ }
+
+ @Override
+ public void onCameraDisabled(final int cameraId) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onCameraDisabled(cameraId);
+ }
+ });
+ }
+
+ @Override
+ public void onDeviceOpenFailure(final int cameraId) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onDeviceOpenFailure(cameraId);
+ }
+ });
+ }
+
+ @Override
+ public void onReconnectionFailure(final CameraManager mgr) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onReconnectionFailure(mgr);
+ }
+ });
+ }
+ }
}