Set focus mode to camera driver and add macro focus.
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 6d25637..4687088 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -72,11 +72,13 @@
     <string-array name="pref_camera_focusmode_entries" translatable="false">
         <item>@string/pref_camera_focusmode_entry_auto</item>
         <item>@string/pref_camera_focusmode_entry_infinity</item>
+        <item>@string/pref_camera_focusmode_entry_macro</item>
     </string-array>
 
     <string-array name="pref_camera_focusmode_entryvalues" translatable="false">
         <item>auto</item>
         <item>infinity</item>
+        <item>macro</item>
     </string-array>
 
     <!-- Camera Preferences flash mode dialog box entries -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 96ae1aa..ecdd5f5 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -394,6 +394,7 @@
     <!-- Settings screen, Focue mode dialog radio button choices -->
     <string name="pref_camera_focusmode_entry_auto">Auto</string>
     <string name="pref_camera_focusmode_entry_infinity">Infinity</string>
+    <string name="pref_camera_focusmode_entry_macro">Macro</string>
 
     <!-- Settings screen, focus mode dialog title -->
     <string name="pref_camera_focusmode_dialogtitle">Focus mode</string>
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index fd50cd3..5b543df 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -1398,8 +1398,8 @@
     }
 
     private void doFocus(boolean pressed) {
-        // Do the focus if the mode is auto. No focus needed in infinity mode.
-        if (mFocusMode.equals(CameraSettings.VALUE_FOCUS_AUTO)) {
+        // Do the focus if the mode is not infinity.
+        if (!mFocusMode.equals(CameraSettings.VALUE_FOCUS_INFINITY)) {
             if (pressed) {  // Focus key down.
                 autoFocus();
             } else {  // Focus key up.
@@ -1623,7 +1623,8 @@
         // Set flash mode.
         if (mParameters.getSupportedFlashModes() != null) {
             String flashMode = mPreferences.getString(
-                    CameraSettings.KEY_FLASH_MODE, "auto");
+                    CameraSettings.KEY_FLASH_MODE,
+                    getString(R.string.pref_camera_flashmode_default));
             mParameters.setFlashMode(flashMode);
         }
 
@@ -1651,6 +1652,15 @@
             mParameters.setSceneMode(sceneMode);
         }
 
+        // Set focus mode.
+        // TODO: use camera parameters API after it is finished.
+        if (mParameters.get("focus-mode-values") != null) {
+            mFocusMode = mPreferences.getString(
+                    CameraSettings.KEY_FOCUS_MODE,
+                    getString(R.string.pref_camera_focusmode_default));
+            mParameters.set("focus-mode", mFocusMode);
+        }
+
         mCameraDevice.setParameters(mParameters);
     }
 
@@ -1839,44 +1849,17 @@
         // ignore the events after "onPause()"
         if (mPausing) return;
 
-        if (CameraSettings.KEY_FLASH_MODE.equals(key)) {
-            mParameters.setFlashMode(preferences.getString(key, "auto"));
-            mCameraDevice.setParameters(mParameters);
-        } else if (CameraSettings.KEY_FOCUS_MODE.equals(key)) {
-            mFocusMode = preferences.getString(key,
-                    getString(R.string.pref_camera_focusmode_default));
-        } else if (CameraSettings.KEY_PICTURE_SIZE.equals(key)) {
-            String pictureSize = preferences.getString(key,
-                    getString(R.string.pref_camera_picturesize_default));
-            setCameraPictureSizeIfSupported(pictureSize);
-            mCameraDevice.setParameters(mParameters);
-        } else if (CameraSettings.KEY_JPEG_QUALITY.equals(key)) {
-            String jpegQuality = preferences.getString(key,
-                    getString(R.string.pref_camera_jpegquality_default));
-            mParameters.setJpegQuality(Integer.parseInt(jpegQuality));
-            mCameraDevice.setParameters(mParameters);
-        } else if (CameraSettings.KEY_RECORD_LOCATION.equals(key)) {
+        if (CameraSettings.KEY_RECORD_LOCATION.equals(key)) {
             mRecordLocation = preferences.getBoolean(key, false);
             if (mRecordLocation) {
                 startReceivingLocationUpdates();
             } else {
                 stopReceivingLocationUpdates();
             }
-        } else if (CameraSettings.KEY_COLOR_EFFECT.equals(key)) {
-            String colorEffect = preferences.getString(key,
-                    getString(R.string.pref_camera_coloreffect_default));
-            mParameters.setColorEffect(colorEffect);
-            mCameraDevice.setParameters(mParameters);
-        } else if (CameraSettings.KEY_WHITE_BALANCE.equals(key)) {
-            String whiteBalance = preferences.getString(key,
-                    getString(R.string.pref_camera_whitebalance_default));
-            mParameters.setWhiteBalance(whiteBalance);
-            mCameraDevice.setParameters(mParameters);
-        } else if (CameraSettings.KEY_SCENE_MODE.equals(key)) {
-            String sceneMode = preferences.getString(key,
-                    getString(R.string.pref_camera_scenemode_default));
-            mParameters.setSceneMode(sceneMode);
-            mCameraDevice.setParameters(mParameters);
+        } else {
+            // All preferences except RECORD_LOCATION are camera parameters.
+            // Call setCameraParameters to take effect now.
+            setCameraParameters();
         }
     }
 
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index d26a801..905c134 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -35,6 +35,7 @@
             "pref_camera_whitebalance_key";
     public static final String KEY_SCENE_MODE = "pref_camera_scenemode_key";
 
+    // TODO: use camera parameters API after it is finished.
     public static final String VALUE_FOCUS_INFINITY = "infinity";
     public static final String VALUE_FOCUS_AUTO = "auto";