Fix 2241232: Read system properties for quality setting.

Change-Id: Ic823abd0c352b3eca0b8ef504307bd1de7d1700f
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 084f17e..53d9edb 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -75,9 +75,9 @@
     </string-array>
 
     <string-array name="pref_camera_jpegquality_entryvalues" translatable="false">
-        <item>85</item>
-        <item>75</item>
-        <item>65</item>
+        <item>superfine</item>
+        <item>fine</item>
+        <item>normal</item>
     </string-array>
 
     <!-- Camera Preferences focus mode dialog box entries -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3289d5a..40b148d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -362,8 +362,9 @@
     <!-- Settings screen, picture size dialog title -->
     <string name="pref_camera_picturesize_dialogtitle">Picture size</string>
 
-    <!-- Default picture quality setting.-->
-    <string name="pref_camera_jpegquality_default" translatable="false">85</string>
+    <!-- Default picture quality setting. See
+         pref_camera_jpegquality_entryvalues for possible values -->
+    <string name="pref_camera_jpegquality_default" translatable="false">superfine</string>
 
     <!-- Settings screen, Picture quality title -->
     <string name="pref_camera_jpegquality_title">Picture quality</string>
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 30f427e..972476d 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -44,6 +44,7 @@
 import android.os.Handler;
 import android.os.Message;
 import android.os.SystemClock;
+import android.os.SystemProperties;
 import android.preference.PreferenceManager;
 import android.provider.MediaStore;
 import android.text.format.DateFormat;
@@ -874,6 +875,7 @@
         mSurfaceView = (SurfaceView) findViewById(R.id.camera_preview);
 
         mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
+        CameraSettings.upgradePreferences(mPreferences);
 
         /*
          * To reduce startup time, we start the preview in another thread.
@@ -1726,7 +1728,7 @@
         String jpegQuality = mPreferences.getString(
                 CameraSettings.KEY_JPEG_QUALITY,
                 getString(R.string.pref_camera_jpegquality_default));
-        mParameters.setJpegQuality(Integer.parseInt(jpegQuality));
+        mParameters.setJpegQuality(getQualityNumber(jpegQuality));
 
         // Set zoom.
         if (mParameters.isZoomSupported()) {
@@ -2039,6 +2041,28 @@
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
         mHandler.sendEmptyMessageDelayed(CLEAR_SCREEN_DELAY, SCREEN_DELAY);
     }
+
+    private static String[] mQualityStrings = {"superfine", "fine", "normal"};
+    private static String[] mQualityNumbers = SystemProperties.get(
+            "ro.media.enc.jpeg.quality", "85,75,65").split(",");
+    private static int DEFAULT_QUALITY = 85;
+
+    // Translate from a quality string to a quality number using the system
+    // properties.
+    private static int getQualityNumber(String jpegQuality) {
+        // Find the index of the input string
+        int index = Util.indexOf(mQualityStrings, jpegQuality);
+
+        if (index == -1 || index > mQualityNumbers.length - 1) {
+            return DEFAULT_QUALITY;
+        }
+
+        try {
+            return Integer.parseInt(mQualityNumbers[index]);
+        } catch (NumberFormatException ex) {
+            return DEFAULT_QUALITY;
+        }
+    }
 }
 
 class FocusRectangle extends View {
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index e7d7d0e..9b106ff 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -37,7 +37,7 @@
             "pref_camera_whitebalance_key";
     public static final String KEY_SCENE_MODE = "pref_camera_scenemode_key";
 
-    public static final int CURRENT_VERSION = 1;
+    public static final int CURRENT_VERSION = 2;
 
     // max mms video duration in seconds.
     public static final int MMS_VIDEO_DURATION =
@@ -249,6 +249,20 @@
             if (pref.getString(KEY_VIDEO_DURATION, "1").equals("1")) {
                 editor.putString(KEY_VIDEO_DURATION, "10");
             }
+            version = 1;
+        }
+        if (version == 1) {
+            // Change jpeg quality {65,75,85} to {normal,fine,superfine}
+            String quality = pref.getString(KEY_JPEG_QUALITY, "85");
+            if (quality.equals("65")) {
+                quality = "normal";
+            } else if (quality.equals("75")) {
+                quality = "fine";
+            } else {
+                quality = "superfine";
+            }
+            editor.putString(KEY_JPEG_QUALITY, quality);
+            version = 2;
         }
         editor.putInt(KEY_VERSION, CURRENT_VERSION);
         editor.commit();