OSDN Git Service

Catch potential RTE from Camera.
authorSascha Haeberling <haeberling@google.com>
Fri, 18 Apr 2014 15:13:55 +0000 (08:13 -0700)
committerSascha Haeberling <haeberling@google.com>
Sat, 19 Apr 2014 06:29:57 +0000 (23:29 -0700)
I got this one on a Nexus S running CM. So maybe not a real problem in
the wild. But given the amount of errors we see in the wild about camera
not connection, we should revisit and see if any of these errors are
catchable, like this one.

Change-Id: I02421bb6a1b5256bf23c2b5fe81f11a78d02cd57

src/com/android/camera/app/AndroidCameraManagerImpl.java

index 2385bc1..6cd9c35 100644 (file)
@@ -286,7 +286,11 @@ class AndroidCameraManagerImpl implements CameraManager {
         @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
         private void setAutoFocusMoveCallback(
                 android.hardware.Camera camera, Object cb) {
-            camera.setAutoFocusMoveCallback((AutoFocusMoveCallback) cb);
+            try {
+                camera.setAutoFocusMoveCallback((AutoFocusMoveCallback) cb);
+            } catch (RuntimeException ex) {
+                Log.w(TAG, ex.getMessage());
+            }
         }
 
         private void capture(final CaptureCallbacks cb) {
@@ -551,7 +555,7 @@ class AndroidCameraManagerImpl implements CameraManager {
 
     private class DispatchThread extends Thread {
 
-        private Queue<Runnable> mJobQueue;
+        private final Queue<Runnable> mJobQueue;
         private Boolean mIsEnded;
 
         public DispatchThread() {
@@ -1096,7 +1100,7 @@ class AndroidCameraManagerImpl implements CameraManager {
 
     private static class WaitDoneBundle {
         public Runnable mUnlockRunnable;
-        private Object mWaitLock;
+        private final Object mWaitLock;
 
         WaitDoneBundle() {
             mWaitLock = new Object();
@@ -1130,7 +1134,9 @@ class AndroidCameraManagerImpl implements CameraManager {
          */
         public static AFCallbackForward getNewInstance(
                 Handler handler, CameraProxy camera, CameraAFCallback cb) {
-            if (handler == null || camera == null || cb == null) return null;
+            if (handler == null || camera == null || cb == null) {
+                return null;
+            }
             return new AFCallbackForward(handler, camera, cb);
         }
 
@@ -1171,7 +1177,9 @@ class AndroidCameraManagerImpl implements CameraManager {
          */
         public static ErrorCallbackForward getNewInstance(
                 Handler handler, CameraProxy camera, CameraErrorCallback cb) {
-            if (handler == null || camera == null || cb == null) return null;
+            if (handler == null || camera == null || cb == null) {
+                return null;
+            }
             return new ErrorCallbackForward(handler, camera, cb);
         }
 
@@ -1211,7 +1219,9 @@ class AndroidCameraManagerImpl implements CameraManager {
          */
         public static AFMoveCallbackForward getNewInstance(
                 Handler handler, CameraProxy camera, CameraAFMoveCallback cb) {
-            if (handler == null || camera == null || cb == null) return null;
+            if (handler == null || camera == null || cb == null) {
+                return null;
+            }
             return new AFMoveCallbackForward(handler, camera, cb);
         }
 
@@ -1253,7 +1263,9 @@ class AndroidCameraManagerImpl implements CameraManager {
          */
         public static ShutterCallbackForward getNewInstance(
                 Handler handler, CameraProxy camera, CameraShutterCallback cb) {
-            if (handler == null || camera == null || cb == null) return null;
+            if (handler == null || camera == null || cb == null) {
+                return null;
+            }
             return new ShutterCallbackForward(handler, camera, cb);
         }
 
@@ -1294,7 +1306,9 @@ class AndroidCameraManagerImpl implements CameraManager {
          */
         public static PictureCallbackForward getNewInstance(
                 Handler handler, CameraProxy camera, CameraPictureCallback cb) {
-            if (handler == null || camera == null || cb == null) return null;
+            if (handler == null || camera == null || cb == null) {
+                return null;
+            }
             return new PictureCallbackForward(handler, camera, cb);
         }
 
@@ -1336,7 +1350,9 @@ class AndroidCameraManagerImpl implements CameraManager {
          */
         public static PreviewCallbackForward getNewInstance(
                 Handler handler, CameraProxy camera, CameraPreviewDataCallback cb) {
-            if (handler == null || camera == null || cb == null) return null;
+            if (handler == null || camera == null || cb == null) {
+                return null;
+            }
             return new PreviewCallbackForward(handler, camera, cb);
         }
 
@@ -1375,7 +1391,9 @@ class AndroidCameraManagerImpl implements CameraManager {
          */
         public static FaceDetectionCallbackForward getNewInstance(
                 Handler handler, CameraProxy camera, CameraFaceDetectionCallback cb) {
-            if (handler == null || camera == null || cb == null) return null;
+            if (handler == null || camera == null || cb == null) {
+                return null;
+            }
             return new FaceDetectionCallbackForward(handler, camera, cb);
         }