Merge "Fix NPE in panorama when camera failed to connect." into ics-mr1
diff --git a/src/com/android/camera/panorama/PanoramaActivity.java b/src/com/android/camera/panorama/PanoramaActivity.java
index bda0381..69fcc83 100755
--- a/src/com/android/camera/panorama/PanoramaActivity.java
+++ b/src/com/android/camera/panorama/PanoramaActivity.java
@@ -320,7 +320,7 @@
         };
     }
 
-    private void setupCamera() {
+    private void setupCamera() throws CameraHardwareException, CameraDisabledException {
         openCamera();
         Parameters parameters = mCameraDevice.getParameters();
         setupCaptureParams(parameters);
@@ -336,18 +336,10 @@
         }
     }
 
-    private void openCamera() {
-        try {
-            int backCameraId = CameraHolder.instance().getBackCameraId();
-            mCameraDevice = Util.openCamera(this, backCameraId);
-            mCameraOrientation = Util.getCameraOrientation(backCameraId);
-        } catch (CameraHardwareException e) {
-            Util.showErrorAndFinish(this, R.string.cannot_connect_camera);
-            return;
-        } catch (CameraDisabledException e) {
-            Util.showErrorAndFinish(this, R.string.camera_disabled);
-            return;
-        }
+    private void openCamera() throws CameraHardwareException, CameraDisabledException {
+        int backCameraId = CameraHolder.instance().getBackCameraId();
+        mCameraDevice = Util.openCamera(this, backCameraId);
+        mCameraOrientation = Util.getCameraOrientation(backCameraId);
     }
 
     private boolean findBestPreviewSize(List<Size> supportedSizes, boolean need4To3,
@@ -994,15 +986,21 @@
         mOrientationEventListener.enable();
 
         mCaptureState = CAPTURE_STATE_VIEWFINDER;
-        setupCamera();
+        try {
+            setupCamera();
 
-        // Camera must be initialized before MosaicFrameProcessor is initialized. The preview size
-        // has to be decided by camera device.
-        initMosaicFrameProcessorIfNeeded();
-        mMosaicView.onResume();
+            // Camera must be initialized before MosaicFrameProcessor is initialized.
+            // The preview size has to be decided by camera device.
+            initMosaicFrameProcessorIfNeeded();
+            mMosaicView.onResume();
 
-        initThumbnailButton();
-        keepScreenOnAwhile();
+            initThumbnailButton();
+            keepScreenOnAwhile();
+        } catch (CameraHardwareException e) {
+            Util.showErrorAndFinish(this, R.string.cannot_connect_camera);
+        } catch (CameraDisabledException e) {
+            Util.showErrorAndFinish(this, R.string.camera_disabled);
+        }
     }
 
     /**