SnapdragonCamera: Fix compatibility issues with KK.

1. Remove openLegacy call to open camera.
2. Use generic camcorder profile query mechanism instead of
   hardcoding profile enums in app.
3. Fix NPE during startpreview if mParameters is null.

Change-Id: I7bfc00f68f512c3029ca8ba75863583f1b376094
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 71b4afc..68dcc83 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -31,32 +31,19 @@
         <item>@string/pref_video_quality_entry_qvga</item>
         <item>@string/pref_video_quality_entry_qcif</item>
    </string-array>
-
     <string-array name="pref_video_quality_entryvalues" translatable="false">
-        <!-- The integer value of CamcorderProfile.QUALITY_4kDCI -->
-        <item>13</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_2160P -->
-        <item>8</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_1080P -->
-        <item>6</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_720P -->
-        <item>5</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_480P -->
-        <item>4</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_FWVGA -->
-        <item>12</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_WVGA -->
-        <item>9</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_VGA -->
-        <item>10</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_WQVGA -->
-        <item>11</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_CIF -->
-        <item>@string/pref_video_quality_default</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_QVGA -->
-        <item>7</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_QCIF -->
-        <item>2</item>
+        <item>4096x2160</item>
+        <item>3840x2160</item>
+        <item>1920x1080</item>
+        <item>1280x720</item>
+        <item>720x480</item>
+        <item>864x480</item>
+        <item>800x480</item>
+        <item>640x480</item>
+        <item>400x240</item>
+        <item>352x288</item>
+        <item>320x240</item>
+        <item>176x144</item>
     </string-array>
 
     <!-- Camera Preference save path entries -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e091605..67bdc26 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -238,8 +238,8 @@
 
     <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
     <string name="pref_video_quality_title">Video quality</string>
-    <!-- The default quality value is 3 (CIF) -->
-    <string name="pref_video_quality_default" translatable="false">3</string>
+    <!-- The default quality value is (CIF) -->
+    <string name="pref_video_quality_default" translatable="false">352x288</string>
     <!-- Video quality setting entry.
     Videos will be recorded in 4k DCI quality. [CHAR LIMIT=24] -->
     <string name="pref_video_quality_entry_4kdci" translatable="false">
diff --git a/src/com/android/camera/AndroidCameraManagerImpl.java b/src/com/android/camera/AndroidCameraManagerImpl.java
index 42ae20f..637a5f5 100644
--- a/src/com/android/camera/AndroidCameraManagerImpl.java
+++ b/src/com/android/camera/AndroidCameraManagerImpl.java
@@ -201,14 +201,7 @@
             try {
                 switch (msg.what) {
                     case OPEN_CAMERA:
-                        try {
-                            mCamera = android.hardware.Camera.openLegacy(msg.arg1,
-                                    android.hardware.Camera.CAMERA_HAL_API_VERSION_1_0);
-                        } catch (RuntimeException e) {
-                            /* Retry with open if openLegacy fails */
-                            Log.v(TAG, "openLegacy failed. Using open instead");
-                            mCamera = android.hardware.Camera.open(msg.arg1);
-                        }
+                        mCamera = android.hardware.Camera.open(msg.arg1);
                         if (mCamera != null) {
                             mParametersIsDirty = true;
 
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index e27a08e..6f50fcb 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -28,6 +28,7 @@
 import android.hardware.Camera.Parameters;
 import android.hardware.Camera.Size;
 import android.media.CamcorderProfile;
+import java.util.HashMap;
 import android.util.Log;
 
 import com.android.camera.util.ApiHelper;
@@ -242,6 +243,26 @@
     private final CameraInfo[] mCameraInfo;
     private final int mCameraId;
 
+    public static final HashMap<String, Integer>
+            VIDEO_QUALITY_TABLE = new HashMap<String, Integer>();
+
+    static {
+        //video qualities
+        VIDEO_QUALITY_TABLE.put("4096x2160", CamcorderProfile.QUALITY_4kDCI);
+        VIDEO_QUALITY_TABLE.put("3840x2160", CamcorderProfile.QUALITY_2160P);
+        VIDEO_QUALITY_TABLE.put("1920x1080", CamcorderProfile.QUALITY_1080P);
+        VIDEO_QUALITY_TABLE.put("1280x720",  CamcorderProfile.QUALITY_720P);
+        VIDEO_QUALITY_TABLE.put("720x480",   CamcorderProfile.QUALITY_480P);
+        VIDEO_QUALITY_TABLE.put("864x480",   CamcorderProfile.QUALITY_FWVGA);
+        VIDEO_QUALITY_TABLE.put("800x480",   CamcorderProfile.QUALITY_WVGA);
+        VIDEO_QUALITY_TABLE.put("640x480",   CamcorderProfile.QUALITY_VGA);
+        VIDEO_QUALITY_TABLE.put("400x240",   CamcorderProfile.QUALITY_WQVGA);
+        VIDEO_QUALITY_TABLE.put("352x288",   CamcorderProfile.QUALITY_CIF);
+        VIDEO_QUALITY_TABLE.put("320x240",   CamcorderProfile.QUALITY_QVGA);
+        VIDEO_QUALITY_TABLE.put("176x144",   CamcorderProfile.QUALITY_QCIF);
+    }
+
+
     public CameraSettings(Activity activity, Parameters parameters,
                           int cameraId, CameraInfo[] cameraInfo) {
         mContext = activity;
@@ -262,7 +283,7 @@
             String defaultQuality,Parameters parameters) {
         // When launching the camera app first time, we will set the video quality
         // to the first one (i.e. highest quality) in the supported list
-        List<String> supported = getSupportedVideoQuality(cameraId,parameters);
+        List<String> supported = getSupportedVideoQualities(cameraId,parameters);
         if (supported == null) {
             Log.e(TAG, "No supported video quality is found");
             return defaultQuality;
@@ -714,7 +735,7 @@
         }
 
         if (videoQuality != null) {
-            filterUnsupportedOptions(group, videoQuality, getSupportedVideoQuality(
+            filterUnsupportedOptions(group, videoQuality, getSupportedVideoQualities(
                    mCameraId,mParameters));
         }
 
@@ -1128,6 +1149,20 @@
         }
 
     }
+
+    public static ArrayList<String> getSupportedVideoQualities(int cameraId,Parameters parameters) {
+        ArrayList<String> supported = new ArrayList<String>();
+        List<String> temp = sizeListToStringList(parameters.getSupportedVideoSizes());
+        for (String videoSize : temp) {
+            if (VIDEO_QUALITY_TABLE.containsKey(videoSize)) {
+                int profile = VIDEO_QUALITY_TABLE.get(videoSize);
+                if (CamcorderProfile.hasProfile(cameraId, profile)) {
+                      supported.add(videoSize);
+                }
+            }
+        }
+        return supported;
+    }
     public static int getVideoDurationInMillis(String quality) {
         if (VIDEO_QUALITY_MMS.equals(quality)) {
             return MMS_VIDEO_DURATION * 1000;
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index ec99573..76c6a21 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -2583,7 +2583,7 @@
     /** This can run on a background thread, so don't do UI updates here. Post any
              view updates to MainHandler or do it on onPreviewStarted() .  */
     private void startPreview() {
-        if (mPaused || mCameraDevice == null) {
+        if (mPaused || mCameraDevice == null || mParameters == null) {
             return;
         }
 
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 4e5b5ab..23f4042 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -768,11 +768,11 @@
         String videoQuality = mPreferences.getString(CameraSettings.KEY_VIDEO_QUALITY,
                         null);
         if (videoQuality == null) {
-             mParameters = mCameraDevice.getParameters();
+            mParameters = mCameraDevice.getParameters();
             String defaultQuality = mActivity.getResources().getString(
                     R.string.pref_video_quality_default);
             boolean hasProfile = CamcorderProfile.hasProfile(
-                     Integer.parseInt(defaultQuality));
+                     CameraSettings.VIDEO_QUALITY_TABLE.get(defaultQuality));
             if (hasProfile == true){
                 videoQuality = defaultQuality;
             } else {
@@ -782,7 +782,7 @@
             }
             mPreferences.edit().putString(CameraSettings.KEY_VIDEO_QUALITY, videoQuality);
         }
-        int quality = Integer.valueOf(videoQuality);
+        int quality = CameraSettings.VIDEO_QUALITY_TABLE.get(videoQuality);
 
         // Set video quality.
         Intent intent = mActivity.getIntent();