From 4d389848225ba351279da70d4f217591cfa7ac35 Mon Sep 17 00:00:00 2001 From: Tim H Date: Fri, 10 Nov 2017 12:18:02 +0100 Subject: [PATCH] catch hardware error: "Fail to get camera info" --- .../com/otaliastudios/cameraview/Camera1.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java index 57a5f7c0..59623034 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java @@ -269,6 +269,11 @@ class Camera1 extends CameraController { if (error != null) throw error; } + /** + * + * @throws RuntimeException if Android failed to get the camera info. + * @return + */ private boolean collectCameraId() { int internalFacing = mMapper.map(mFacing); Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); @@ -332,9 +337,21 @@ class Camera1 extends CameraController { @Override void setFacing(Facing facing) { if (facing != mFacing) { - mFacing = facing; - if (collectCameraId() && isCameraAvailable()) { - restart(); + + // call these methods before actually changing the attribute's value, because + // collectCameraId may raise an exception that prevents us from changing anything here + try { + boolean restart = collectCameraId() && isCameraAvailable(); + + mFacing = facing; + if (restart) { + restart(); + } + } + catch (Exception e) { + CameraException cameraException = + new CameraConfigurationFailedException("Failed to set the camera facing.", e); + mCameraCallbacks.onError(cameraException); } } }