diff options
author | Sanjeev Garg <sangarg@codeaurora.org> | 2015-10-12 11:58:01 +0530 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2016-08-03 15:44:40 -0700 |
commit | a2794eab22238885f5a3e2ed95e9fd2a1c42e810 (patch) | |
tree | e6a6c6cb3a997fecb7f3709186c5108169f97c3d /src/com/android/camera | |
parent | 7383a2dc7fa69383bfca0a1693e5bbe3c9601d51 (diff) | |
download | android_packages_apps_Snap-a2794eab22238885f5a3e2ed95e9fd2a1c42e810.tar.gz android_packages_apps_Snap-a2794eab22238885f5a3e2ed95e9fd2a1c42e810.tar.bz2 android_packages_apps_Snap-a2794eab22238885f5a3e2ed95e9fd2a1c42e810.zip |
SnapdragonCamera: Handle startPreview exception in camera.
If any exception occurs in start preview then camera app
should handle this exception and should display error pop-up
and exit gracefully.
CRs-Fixed: 919778
Change-Id: I80b60224d5d47a96dad78c40f8a23e3e9be45e65
Diffstat (limited to 'src/com/android/camera')
-rw-r--r-- | src/com/android/camera/AndroidCameraManagerImpl.java | 28 | ||||
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 9 | ||||
-rw-r--r-- | src/com/android/camera/CameraManager.java | 9 |
3 files changed, 42 insertions, 4 deletions
diff --git a/src/com/android/camera/AndroidCameraManagerImpl.java b/src/com/android/camera/AndroidCameraManagerImpl.java index 97ec6af18..e67c7b463 100644 --- a/src/com/android/camera/AndroidCameraManagerImpl.java +++ b/src/com/android/camera/AndroidCameraManagerImpl.java @@ -118,6 +118,8 @@ class AndroidCameraManagerImpl implements CameraManager { } private class CameraHandler extends Handler { + CameraOpenErrorCallbackForward errorCbInstance; + CameraHandler(Looper looper) { super(looper); } @@ -251,6 +253,7 @@ class AndroidCameraManagerImpl implements CameraManager { return; } mCamera.release(); + errorCbInstance = null; mCamera = null; return; @@ -284,7 +287,13 @@ class AndroidCameraManagerImpl implements CameraManager { return; case START_PREVIEW_ASYNC: - mCamera.startPreview(); + try { + mCamera.startPreview(); + } catch (Exception e) { + e.printStackTrace(); + if (errorCbInstance != null) + errorCbInstance.onStartPreviewFailure(msg.arg1); + } return; case STOP_PREVIEW: @@ -415,9 +424,10 @@ class AndroidCameraManagerImpl implements CameraManager { @Override public CameraManager.CameraProxy cameraOpen( Handler handler, int cameraId, CameraOpenErrorCallback callback) { - mCameraHandler.obtainMessage(OPEN_CAMERA, cameraId, 0, - CameraOpenErrorCallbackForward.getNewInstance( - handler, callback)).sendToTarget(); + mCameraHandler.errorCbInstance = CameraOpenErrorCallbackForward + .getNewInstance(handler, callback); + mCameraHandler.obtainMessage(OPEN_CAMERA, cameraId, 0, mCameraHandler.errorCbInstance) + .sendToTarget(); mCameraHandler.waitDone(); if (mCamera != null) { return new AndroidCameraProxyImpl(); @@ -990,5 +1000,15 @@ class AndroidCameraManagerImpl implements CameraManager { } }); } + + @Override + public void onStartPreviewFailure(final int cameraId) { + mHandler.post(new Runnable() { + @Override + public void run() { + mCallback.onStartPreviewFailure(cameraId); + } + }); + } } } diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index b2705e2b2..186fa514a 100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -320,6 +320,15 @@ public class CameraActivity extends Activity CameraUtil.showErrorAndFinish(CameraActivity.this, R.string.cannot_connect_camera); } + + @Override + public void onStartPreviewFailure(int cameraId) { + UsageStatistics.onEvent(UsageStatistics.COMPONENT_CAMERA, + UsageStatistics.ACTION_START_PREVIEW_FAIL, "startpreview"); + + CameraUtil.showErrorAndFinish(CameraActivity.this, + R.string.cannot_connect_camera); + } }; // update the status of storage space when SD card status changed. diff --git a/src/com/android/camera/CameraManager.java b/src/com/android/camera/CameraManager.java index f6afce854..d379a2fe0 100644 --- a/src/com/android/camera/CameraManager.java +++ b/src/com/android/camera/CameraManager.java @@ -130,6 +130,15 @@ public interface CameraManager { * with the reconnect failure. */ public void onReconnectionFailure(CameraManager mgr); + + /** + * Callback when startPreview failure runtime exception is + * caught. + * + * @param cameraId The camera with the hardware failure. + */ + public void onStartPreviewFailure(int cameraId); + } /** |