Add scene mode preference in camera.

Change-Id: I56fe3a1fc942f18faefbbc06d0fdac013c791ed6
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index d4b2912..9232449 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -145,4 +145,36 @@
         <item>blue-tint</item>
         <item>green-tint</item>
     </string-array>
+
+    <!-- Camera Preferences Scene Mode dialog box entries -->
+    <string-array name="pref_camera_scenemode_entries" translatable="fasle">
+        <item>@string/pref_camera_scenemode_entry_auto</item>
+        <item>@string/pref_camera_scenemode_entry_action</item>
+        <item>@string/pref_camera_scenemode_entry_portrait</item>
+        <item>@string/pref_camera_scenemode_entry_landscape</item>
+        <item>@string/pref_camera_scenemode_entry_night</item>
+        <item>@string/pref_camera_scenemode_entry_night_portrait</item>
+        <item>@string/pref_camera_scenemode_entry_theatre</item>
+        <item>@string/pref_camera_scenemode_entry_beach</item>
+        <item>@string/pref_camera_scenemode_entry_snow</item>
+        <item>@string/pref_camera_scenemode_entry_sunset</item>
+        <item>@string/pref_camera_scenemode_entry_steadyphoto</item>
+        <item>@string/pref_camera_scenemode_entry_fireworks</item>
+    </string-array>
+
+    <!-- Do not localize entryvalues -->
+    <string-array name="pref_camera_scenemode_entryvalues" translatable="false">
+        <item>auto</item>
+        <item>action</item>
+        <item>portrait</item>
+        <item>landscape</item>
+        <item>night</item>
+        <item>night-portrait</item>
+        <item>theatre</item>
+        <item>beach</item>
+        <item>snow</item>
+        <item>sunset</item>
+        <item>steadyphoto</item>
+        <item>fireworks</item>
+    </string-array>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7b6c566..9eee607 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -459,6 +459,29 @@
     <string name="pref_camera_coloreffect_entry_bluetint">Blue Tint</string>
     <string name="pref_camera_coloreffect_entry_greentint">Green Tint</string>
 
+    <!-- Default scene mode setting. Do not translate. -->
+    <string name="pref_camera_scenemode_default" translatable="false">auto</string>
+
+    <!-- Settings screen, Select Scene mode -->
+    <string name="pref_camera_scenemode_title">Scene mode</string>
+
+    <!-- Settings screen, Select Scene mode -->
+    <string name="pref_camera_scenemode_dialogtitle">Scene mode</string>
+
+    <!-- Settings menu, scene mode choices -->
+    <string name="pref_camera_scenemode_entry_auto">Auto</string>
+    <string name="pref_camera_scenemode_entry_action">Action</string>
+    <string name="pref_camera_scenemode_entry_portrait">Portrait</string>
+    <string name="pref_camera_scenemode_entry_landscape">Landscape</string>
+    <string name="pref_camera_scenemode_entry_night">Night</string>
+    <string name="pref_camera_scenemode_entry_night_portrait">Night Portrait</string>
+    <string name="pref_camera_scenemode_entry_theatre">Theatre</string>
+    <string name="pref_camera_scenemode_entry_beach">Beach</string>
+    <string name="pref_camera_scenemode_entry_snow">Snow</string>
+    <string name="pref_camera_scenemode_entry_sunset">Sunset</string>
+    <string name="pref_camera_scenemode_entry_steadyphoto">Steady Photo</string>
+    <string name="pref_camera_scenemode_entry_fireworks">Fireworks</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 432c80b..2dd4ff3 100644
--- a/res/xml/camera_preferences.xml
+++ b/res/xml/camera_preferences.xml
@@ -89,6 +89,13 @@
                 android:entries="@array/pref_camera_coloreffect_entries"
                 android:entryValues="@array/pref_camera_coloreffect_entryvalues"
                 android:dialogTitle="@string/pref_camera_coloreffect_dialogtitle" />
-    </PreferenceCategory>
 
+        <ListPreference
+                android:key="pref_camera_scenemode_key"
+                android:defaultValue="@string/pref_camera_scenemode_default"
+                android:title="@string/pref_camera_scenemode_title"
+                android:entries="@array/pref_camera_scenemode_entries"
+                android:entryValues="@array/pref_camera_scenemode_entryvalues"
+                android:dialogTitle="@string/pref_camera_scenemode_dialogtitle" />
+    </PreferenceCategory>
 </PreferenceScreen>
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index 6cf6892..7ed5461 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -49,6 +49,8 @@
     public static final String KEY_WHITE_BALANCE =
             "pref_camera_whitebalance_key";
     public static final String KEY_COLOR_EFFECT = "pref_camera_coloreffect_key";
+    public static final String KEY_SCENE_MODE = "pref_camera_scenemode_key";
+
     public static final boolean DEFAULT_VIDEO_QUALITY_VALUE = true;
 
     // MMS video length
@@ -65,6 +67,7 @@
     private ListPreference mFocusMode;
     private ListPreference mWhiteBalance;
     private ListPreference mColorEffect;
+    private ListPreference mSceneMode;
     private Parameters mParameters;
 
     @Override
@@ -86,6 +89,7 @@
         updateFocusModeSummary();
         updateWhiteBalanceSummary();
         updateEffectSummary();
+        updateSceneModeSummary();
     }
 
     private ArrayList<String> sizeToStr(List<Size> sizes) {
@@ -106,6 +110,7 @@
         mFocusMode = (ListPreference) findPreference(KEY_FOCUS_MODE);
         mWhiteBalance = (ListPreference) findPreference(KEY_WHITE_BALANCE);
         mColorEffect = (ListPreference) findPreference(KEY_COLOR_EFFECT);
+        mSceneMode = (ListPreference) findPreference(KEY_SCENE_MODE);
 
         SharedPreferences pref = getPreferenceScreen().getSharedPreferences();
         upgradePreferences(pref);
@@ -136,6 +141,9 @@
         // Create color effect settings.
         createSettings(mColorEffect, mParameters.getSupportedColorEffects());
 
+        // Create scene mode settings.
+        createSettings(mSceneMode, mParameters.getSupportedSceneModes());
+
         // Modify video duration settings.
         // The first entry is for MMS video duration, and we need to fill in the
         // device-dependent value (in seconds).
@@ -224,6 +232,10 @@
         mWhiteBalance.setSummary(mWhiteBalance.getEntry());
     }
 
+    private void updateSceneModeSummary() {
+        mSceneMode.setSummary(mSceneMode.getEntry());
+    }
+
     private void updateFocusModeSummary() {
         mFocusMode.setSummary(mFocusMode.getEntry());
     }
@@ -248,6 +260,8 @@
             updateWhiteBalanceSummary();
         } else if (key.equals(KEY_COLOR_EFFECT)) {
             updateEffectSummary();
+        } else if (key.equals(KEY_SCENE_MODE)) {
+            updateSceneModeSummary();
         }
     }
 
diff --git a/src/com/android/camera/CameraSettingsHelper.java b/src/com/android/camera/CameraSettingsHelper.java
index f0c8191..d7135d7 100644
--- a/src/com/android/camera/CameraSettingsHelper.java
+++ b/src/com/android/camera/CameraSettingsHelper.java
@@ -31,6 +31,7 @@
     public static final String KEY_COLOR_EFFECT = "pref_camera_coloreffect_key";
     public static final String KEY_WHITE_BALANCE =
             "pref_camera_whitebalance_key";
+    public static final String KEY_SCENE_MODE = "pref_camera_scenemode_key";
 
     // max mms video duration in seconds.
     public static final int MMS_VIDEO_DURATION =
@@ -77,6 +78,8 @@
                 (ListPreference) screen.findPreference(KEY_WHITE_BALANCE);
         ListPreference colorEffect =
                 (ListPreference) screen.findPreference(KEY_COLOR_EFFECT);
+        ListPreference sceneMode =
+            (ListPreference) screen.findPreference(KEY_SCENE_MODE);
 
         // Modify video duration settings.
         // The first entry is for MMS video duration, and we need to fill in the
@@ -91,6 +94,8 @@
                 whiteBalance, mParameters.getSupportedWhiteBalance());
         filterUnsupportedOptions(screen,
                 colorEffect, mParameters.getSupportedColorEffects());
+        filterUnsupportedOptions(screen,
+                sceneMode, mParameters.getSupportedSceneModes());
 
         setDefaultIfNull(
                 KEY_JPEG_QUALITY, R.string.pref_camera_jpegquality_default);