Fix NPE when only front cameras are available.

bug:6643208
Change-Id: Ie4eef4a671091cd9557d1c51ab5c3919b6b30652
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 8c74d24..2ca7944 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -2175,8 +2175,7 @@
                     .setOnMenuItemClickListener(new OnMenuItemClickListener() {
                 public boolean onMenuItemClick(MenuItem item) {
                     CameraSettings.writePreferredCameraId(mPreferences,
-                            ((mCameraId == mFrontCameraId)
-                            ? mBackCameraId : mFrontCameraId));
+                            (mCameraId + 1) % mNumberOfCameras);
                     onSharedPreferenceChanged();
                     return true;
                 }
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index c861366..2d33b69 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -225,16 +225,9 @@
             return;
         }
 
-        CharSequence[] entryValues = new CharSequence[2];
-        for (int i = 0; i < mCameraInfo.length; ++i) {
-            int index =
-                    (mCameraInfo[i].facing == CameraInfo.CAMERA_FACING_FRONT)
-                    ? CameraInfo.CAMERA_FACING_FRONT
-                    : CameraInfo.CAMERA_FACING_BACK;
-            if (entryValues[index] == null) {
-                entryValues[index] = "" + i;
-                if (entryValues[((index == 1) ? 0 : 1)] != null) break;
-            }
+        CharSequence[] entryValues = new CharSequence[numOfCameras];
+        for (int i = 0; i < numOfCameras; ++i) {
+            entryValues[i] = "" + i;
         }
         preference.setEntryValues(entryValues);
     }
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index e93fbca..b2626ed 100755
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -1481,8 +1481,7 @@
                     .setOnMenuItemClickListener(new OnMenuItemClickListener() {
                 public boolean onMenuItemClick(MenuItem item) {
                     CameraSettings.writePreferredCameraId(mPreferences,
-                            ((mCameraId == mFrontCameraId)
-                            ? mBackCameraId : mFrontCameraId));
+                            (mCameraId + 1) % mNumberOfCameras);
                     onSharedPreferenceChanged();
                     return true;
                 }
diff --git a/src/com/android/camera/ui/CameraPicker.java b/src/com/android/camera/ui/CameraPicker.java
index ac8b8a8..21d3efe 100644
--- a/src/com/android/camera/ui/CameraPicker.java
+++ b/src/com/android/camera/ui/CameraPicker.java
@@ -33,7 +33,6 @@
     private OnPreferenceChangedListener mListener;
     private ListPreference mPreference;
     private CharSequence[] mCameras;
-    private int mCameraFacing;
 
     public CameraPicker(Context context) {
         super(context);
@@ -55,23 +54,16 @@
         mCameras = pref.getEntryValues();
         if (mCameras == null) return;
         setOnClickListener(this);
-        String cameraId = pref.getValue();
         setVisibility(View.VISIBLE);
-        if (mCameras[CameraInfo.CAMERA_FACING_FRONT].equals(cameraId)) {
-            mCameraFacing = CameraInfo.CAMERA_FACING_FRONT;
-        } else {
-            mCameraFacing = CameraInfo.CAMERA_FACING_BACK;
-        }
     }
 
     @Override
     public void onClick(View v) {
         if (mCameras == null) return;
-        int newCameraIndex = (mCameraFacing == CameraInfo.CAMERA_FACING_BACK)
-                ? CameraInfo.CAMERA_FACING_FRONT
-                : CameraInfo.CAMERA_FACING_BACK;
-        mCameraFacing = newCameraIndex;
-        mPreference.setValue((String) mCameras[mCameraFacing]);
+        int index = mPreference.findIndexOfValue(mPreference.getValue());
+        CharSequence[] values = mPreference.getEntryValues();
+        index = (index + 1) % values.length;
+        mPreference.setValue((String) mCameras[index]);
         mListener.onSharedPreferenceChanged();
     }
 }