AI 145679: Add picture size settings.
  BUG=1761248

Automated import of CL 145679
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index b23d54f..c83124f 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -80,4 +80,18 @@
         <item>mosaic</item>
     </string-array>
 
+    <!-- Camera Preferences Picture size dialog box entries -->
+    <string-array name="pref_camera_picturesize_entries">
+        <item>@string/pref_camera_picturesize_entry_2048x1536</item>
+        <item>@string/pref_camera_picturesize_entry_1600x1200</item>
+        <item>@string/pref_camera_picturesize_entry_1024x768</item>
+    </string-array>
+
+    <!-- Do not localize entryvalues -->
+    <string-array name="pref_camera_picturesize_entryvalues">
+        <item>2048x1536</item>
+        <item>1600x1200</item>
+        <item>1024x768</item>
+    </string-array>
+
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1277e2b..f035219 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -321,7 +321,7 @@
     <!-- Settings screen, Picture setting category title -->
     <string name="pref_camera_picture_settings_category">Picture settings</string>
 
-    <!-- Default video quality setting. Do not translate. -->
+    <!-- Default white balance setting. Do not translate. -->
     <string name="pref_camera_whitebalance_default">auto</string>
 
     <!-- Settings screen, Select White balance title -->
@@ -339,7 +339,7 @@
     <!-- Settings screen, white balance dialog title -->
     <string name="pref_camera_whitebalance_dialogtitle">White balance</string>
 
-    <!-- Default video quality setting. Do not translate. -->
+    <!-- Default effect setting. Do not translate. -->
     <string name="pref_camera_effect_default">off</string>
 
     <!-- Settings screen, Select Effect title -->
@@ -361,6 +361,20 @@
     <!-- Settings screen, effect dialog title -->
     <string name="pref_camera_effect_dialogtitle">Effect</string>
 
+    <!-- Default picture size setting. Do not translate. -->
+    <string name="pref_camera_picturesize_default">2048x1536</string>
+
+    <!-- Settings screen, Select Picture size title -->
+    <string name="pref_camera_picturesize_title">Select picture size</string>
+
+    <!-- Settings screen, Picture size dialog radio button choices -->
+    <string name="pref_camera_picturesize_entry_2048x1536">3M (2048x1536)</string>
+    <string name="pref_camera_picturesize_entry_1600x1200">2M (1600x1200)</string>
+    <string name="pref_camera_picturesize_entry_1024x768">1M (1024x768)</string>
+
+    <!-- Settings screen, picture size dialog title -->
+    <string name="pref_camera_picturesize_dialogtitle">Picture size</string>
+
     <!-- Menu item to go to the settings screen -->
     <string name="camerasettings">Settings</string>
 
diff --git a/res/xml/camera_preferences.xml b/res/xml/camera_preferences.xml
index 28deff7..fe1b013 100644
--- a/res/xml/camera_preferences.xml
+++ b/res/xml/camera_preferences.xml
@@ -42,19 +42,24 @@
 
     <PreferenceCategory
       android:title="@string/pref_camera_picture_settings_category">
-        <!-- android:summary, entries, entryValues are filled in by CameraSettings -->
+        <!-- summary, entries, entryValues are filled in by CameraSettings -->
         <ListPreference
                 android:key="pref_camera_whitebalance_key"
                 android:defaultValue="@string/pref_camera_whitebalance_default"
                 android:title="@string/pref_camera_whitebalance_title"
                 android:dialogTitle="@string/pref_camera_whitebalance_dialogtitle" />
 
-        <!-- android:summary, entries, entryValues are filled in by CameraSettings -->
         <ListPreference
                 android:key="pref_camera_effect_key"
                 android:defaultValue="@string/pref_camera_effect_default"
                 android:title="@string/pref_camera_effect_title"
                 android:dialogTitle="@string/pref_camera_effect_dialogtitle" />
+
+        <ListPreference
+                android:key="pref_camera_picturesize_key"
+                android:defaultValue="@string/pref_camera_picturesize_default"
+                android:title="@string/pref_camera_picturesize_title"
+                android:dialogTitle="@string/pref_camera_picturesize_dialogtitle" />
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 4542029..b919f63 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -114,6 +114,7 @@
     // The parameter strings to communicate with camera driver.
     public static final String PARM_WHITE_BALANCE = "whitebalance";
     public static final String PARM_EFFECT = "effect";
+    public static final String PARM_PICTURE_SIZE = "picture-size";
     public static final String PARM_JPEG_QUALITY = "jpeg-quality";
     public static final String PARM_ROTATION = "rotation";
     public static final String PARM_GPS_LATITUDE = "gps-latitude";
@@ -122,6 +123,7 @@
     public static final String PARM_GPS_TIMESTAMP = "gps-timestamp";
     public static final String SUPPORTED_WHITE_BALANCE = "whitebalance-values";
     public static final String SUPPORTED_EFFECT = "effect-values";
+    public static final String SUPPORTED_PICTURE_SIZE = "picture-size-values";
 
     private OrientationEventListener mOrientationListener;
     private int mLastOrientation = OrientationEventListener.ORIENTATION_UNKNOWN;
@@ -1388,6 +1390,12 @@
                 getString(R.string.pref_camera_effect_default));
         mParameters.set(PARM_EFFECT, effect);
 
+        // Set picture size parameter.
+        String pictureSize = mPreferences.getString(
+                CameraSettings.KEY_PICTURE_SIZE,
+                getString(R.string.pref_camera_picturesize_default));
+        mParameters.set(PARM_PICTURE_SIZE, pictureSize);
+
         try {
             mCameraDevice.setParameters(mParameters);
         } catch (IllegalArgumentException e) {
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index fc87524..8d0075a 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -37,11 +37,13 @@
     public static final String KEY_WHITE_BALANCE = 
             "pref_camera_whitebalance_key";
     public static final String KEY_EFFECT = "pref_camera_effect_key";
+    public static final String KEY_PICTURE_SIZE = "pref_camera_picturesize_key";
     public static final boolean DEFAULT_VIDEO_QUALITY_VALUE = true;
 
     private ListPreference mVideoQuality;
     private ListPreference mWhiteBalance;
     private ListPreference mEffect;
+    private ListPreference mPictureSize;
     private Parameters mParameters;
 
     @Override
@@ -59,12 +61,14 @@
         updateVideoQualitySummary();
         updateWhiteBalanceSummary();
         updateEffectSummary();
+        updatePictureSizeSummary();
     }
 
     private void initUI() {
         mVideoQuality = (ListPreference) findPreference(KEY_VIDEO_QUALITY);
         mWhiteBalance = (ListPreference) findPreference(KEY_WHITE_BALANCE);
         mEffect = (ListPreference) findPreference(KEY_EFFECT);
+        mPictureSize = (ListPreference) findPreference(KEY_PICTURE_SIZE);
         getPreferenceScreen().getSharedPreferences().
                 registerOnSharedPreferenceChangeListener(this);
 
@@ -82,13 +86,24 @@
         createSettings(mEffect, Camera.SUPPORTED_EFFECT,
                        R.array.pref_camera_effect_entries,
                        R.array.pref_camera_effect_entryvalues);
+
+        // Create picture size settings.
+        createSettings(mPictureSize, Camera.SUPPORTED_PICTURE_SIZE,
+                       R.array.pref_camera_picturesize_entries,
+                       R.array.pref_camera_picturesize_entryvalues);
     }
 
     private void createSettings(
             ListPreference pref, String paramName, int prefEntriesResId,
             int prefEntryValuesResId) {
-        // Get the supported parameter settings.
+        // Disable the preference if the parameter is not supported.
         String supportedParamStr = mParameters.get(paramName);
+        if (supportedParamStr == null) {  
+            pref.setEnabled(false);
+            return;
+        }
+
+        // Get the supported parameter settings.
         StringTokenizer tokenizer = new StringTokenizer(supportedParamStr, ",");
         ArrayList<CharSequence> supportedParam = new ArrayList<CharSequence>();
         while (tokenizer.hasMoreElements()) {
@@ -127,15 +142,17 @@
     }
 
     private void updateWhiteBalanceSummary() {
-        // Set preference summary.
         mWhiteBalance.setSummary(mWhiteBalance.getEntry());
     }
 
     private void updateEffectSummary() {
-        // Set preference summary.
         mEffect.setSummary(mEffect.getEntry());
     }
 
+    private void updatePictureSizeSummary() {
+        mPictureSize.setSummary(mPictureSize.getEntry());
+    }
+
     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
             String key) {
         if (key.equals(KEY_VIDEO_QUALITY)) {
@@ -144,6 +161,8 @@
             updateWhiteBalanceSummary();
         } else if (key.equals(KEY_EFFECT)) {
             updateEffectSummary();
+        } else if (key.equals(KEY_PICTURE_SIZE)) {
+            updatePictureSizeSummary();
         }
     }
 }