Prevent camera app crashes on changing hw.camera.* settings
am: 996546fcf4

* commit '996546fcf4058d98d9aceecb4086283e17ae6c9d':
  Prevent camera app crashes on changing hw.camera.* settings

Change-Id: I372bf5a00f021c89abda49966bc12eaca97a80c5
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 2ca7944..b50ab18 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -1085,7 +1085,21 @@
     private void getPreferredCameraId() {
         mPreferences = new ComboPreferences(this);
         CameraSettings.upgradeGlobalPreferences(mPreferences.getGlobal());
-        mCameraId = CameraSettings.readPreferredCameraId(mPreferences);
+
+        mNumberOfCameras = CameraHolder.instance().getNumberOfCameras();
+        int attemptedCameraId = CameraSettings.readPreferredCameraId(mPreferences);
+
+        // It is possible that the user can connect/disconnect cameras
+        // between device boots.
+        // We need to check that the preferred camera ID
+        // does not refer to a disconnected camera.
+        if (attemptedCameraId >= mNumberOfCameras) {
+            Log.v(TAG, "Preferred camera (id= " + attemptedCameraId +
+                       ") missing. Defaulting to the first one");
+            mCameraId = 0;
+        } else {
+            mCameraId = attemptedCameraId;
+        }
 
         // Testing purpose. Launch a specific camera through the intent extras.
         int intentCameraId = Util.getCameraFacingIntentExtras(this);
@@ -1144,7 +1158,6 @@
         mPreferences.setLocalId(this, mCameraId);
         CameraSettings.upgradeLocalPreferences(mPreferences.getLocal());
 
-        mNumberOfCameras = CameraHolder.instance().getNumberOfCameras();
         mQuickCapture = getIntent().getBooleanExtra(EXTRA_QUICK_CAPTURE, false);
 
         // we need to reset exposure for the preview