diff options
author | Angus Kong <shkong@google.com> | 2013-09-16 14:25:35 -0700 |
---|---|---|
committer | Angus Kong <shkong@google.com> | 2013-09-17 14:50:53 -0700 |
commit | 4f795b878843e59810ec1dca05b7cdb37b5614c5 (patch) | |
tree | 24f810cea8691c797a69a1595c931de44cc4c5f0 /src/com/android/camera/AndroidCameraManagerImpl.java | |
parent | 5bee41c6d727c730c7b10fba886862284a489257 (diff) | |
download | android_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.java | 86 |
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); + } + }); + } + } } |