Add flash mode setting.
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 44af4be..338630b 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -84,4 +84,18 @@
<item>@string/pref_camera_focusmode_value_infinity</item>
</string-array>
+ <!-- Camera Preferences flash mode dialog box entries -->
+ <string-array name="pref_camera_flashmode_entries">
+ <item>@string/pref_camera_flashmode_entry_auto</item>
+ <item>@string/pref_camera_flashmode_entry_on</item>
+ <item>@string/pref_camera_flashmode_entry_off</item>
+ </string-array>
+
+ <!-- Do not localize entryvalues -->
+ <string-array name="pref_camera_flashmode_entryvalues">
+ <item>@string/pref_camera_flashmode_value_auto</item>
+ <item>@string/pref_camera_flashmode_value_on</item>
+ <item>@string/pref_camera_flashmode_value_off</item>
+ </string-array>
+
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e98cdd7..a168075 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -403,6 +403,25 @@
<!-- Settings screen, focus mode dialog title -->
<string name="pref_camera_focusmode_dialogtitle">Focus mode</string>
+ <!-- Default flash mode setting. Do not translate. -->
+ <string name="pref_camera_flashmode_default">auto</string>
+
+ <!-- Settings screen, Select Focus mode title -->
+ <string name="pref_camera_flashmode_title">Select flash mode</string>
+
+ <!-- Settings screen, Focue mode dialog radio button choices -->
+ <string name="pref_camera_flashmode_entry_auto">Auto</string>
+ <string name="pref_camera_flashmode_entry_on">On</string>
+ <string name="pref_camera_flashmode_entry_off">Off</string>
+
+ <!-- Focus mode entry values. Do not translate. -->
+ <string name="pref_camera_flashmode_value_auto">auto</string>
+ <string name="pref_camera_flashmode_value_on">on</string>
+ <string name="pref_camera_flashmode_value_off">off</string>
+
+ <!-- Settings screen, flash mode dialog title -->
+ <string name="pref_camera_flashmode_dialogtitle">Flash mode</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 d6d512b..a2f5ec4 100644
--- a/res/xml/camera_preferences.xml
+++ b/res/xml/camera_preferences.xml
@@ -54,6 +54,8 @@
android:key="pref_camera_picturesize_key"
android:defaultValue="@string/pref_camera_picturesize_default"
android:title="@string/pref_camera_picturesize_title"
+ android:entries="@array/pref_camera_picturesize_entries"
+ android:entryValues="@array/pref_camera_picturesize_entryvalues"
android:dialogTitle="@string/pref_camera_picturesize_dialogtitle" />
<ListPreference
@@ -71,6 +73,14 @@
android:entries="@array/pref_camera_focusmode_entries"
android:entryValues="@array/pref_camera_focusmode_entryvalues"
android:dialogTitle="@string/pref_camera_focusmode_dialogtitle" />
+
+ <ListPreference
+ android:key="pref_camera_flashmode_key"
+ android:defaultValue="@string/pref_camera_flashmode_default"
+ android:title="@string/pref_camera_flashmode_title"
+ android:entries="@array/pref_camera_flashmode_entries"
+ android:entryValues="@array/pref_camera_flashmode_entryvalues"
+ android:dialogTitle="@string/pref_camera_flashmode_dialogtitle" />
</PreferenceCategory>
</PreferenceScreen>
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index ff0471c..e14c3d9 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -71,6 +71,7 @@
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
+import java.util.StringTokenizer;
/**
* Activity of the Camera which used to see preview and take pictures.
@@ -115,8 +116,10 @@
public static final String PARM_GPS_LONGITUDE = "gps-longitude";
public static final String PARM_GPS_ALTITUDE = "gps-altitude";
public static final String PARM_GPS_TIMESTAMP = "gps-timestamp";
+ public static final String PARM_FLASH_MODE = "flash-mode";
public static final String SUPPORTED_ZOOM = "zoom-values";
public static final String SUPPORTED_PICTURE_SIZE = "picture-size-values";
+ public static final String SUPPORTED_FLASH_MODE = "flash-mode-values";
private OrientationEventListener mOrientationListener;
private int mLastOrientation = OrientationEventListener.ORIENTATION_UNKNOWN;
@@ -1381,24 +1384,58 @@
clearFocusState();
}
+ private ArrayList<String> getParameterArrayList(String supportedParamKey) {
+ String supportedParamStr = mParameters.get(supportedParamKey);
+ if (supportedParamStr == null) return null;
+
+ StringTokenizer tokenizer = new StringTokenizer(supportedParamStr, ",");
+ ArrayList<String> supportedParam = new ArrayList<String>();
+ while (tokenizer.hasMoreElements()) {
+ supportedParam.add(tokenizer.nextToken());
+ }
+ return supportedParam;
+ }
+
+ private boolean parameterExists(String supportedParamKey,
+ String paramValue) {
+ ArrayList<String> parameters = getParameterArrayList(supportedParamKey);
+ if (parameters == null) return false;
+
+ return (parameters.indexOf(paramValue) != -1);
+ }
+
private void setCameraParameter() {
- // request the preview size, the hardware may not honor it,
- // if we depended on it we would have to query the size again
mParameters = mCameraDevice.getParameters();
+
+ // Set preview size.
mParameters.setPreviewSize(mViewFinderWidth, mViewFinderHeight);
- // 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);
+ // Set picture size.
+ if (mParameters.get(Camera.SUPPORTED_PICTURE_SIZE) != null) {
+ String pictureSize = mPreferences.getString(
+ CameraSettings.KEY_PICTURE_SIZE,
+ getString(R.string.pref_camera_picturesize_default));
+ if (parameterExists(Camera.SUPPORTED_PICTURE_SIZE, pictureSize)) {
+ mParameters.set(PARM_PICTURE_SIZE, pictureSize);
+ }
+ }
- // Set JPEG quality parameter.
+ // Set JPEG quality.
String jpegQuality = mPreferences.getString(
CameraSettings.KEY_JPEG_QUALITY,
getString(R.string.pref_camera_jpegquality_default));
mParameters.set(PARM_JPEG_QUALITY, jpegQuality);
+ // Set flash mode.
+ if (mParameters.get(Camera.SUPPORTED_FLASH_MODE) != null) {
+ String flashMode = mPreferences.getString(
+ CameraSettings.KEY_FLASH_MODE,
+ getString(R.string.pref_camera_flashmode_default));
+ if (parameterExists(Camera.SUPPORTED_FLASH_MODE, flashMode)) {
+ mParameters.set(PARM_FLASH_MODE, flashMode);
+ }
+ }
+
mCameraDevice.setParameters(mParameters);
}
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index 3533a2e..1f015bd 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -21,7 +21,9 @@
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.preference.ListPreference;
+import android.preference.Preference;
import android.preference.PreferenceActivity;
+import android.preference.PreferenceGroup;
import java.util.ArrayList;
import java.util.StringTokenizer;
@@ -38,6 +40,7 @@
public static final String KEY_PICTURE_SIZE = "pref_camera_picturesize_key";
public static final String KEY_JPEG_QUALITY = "pref_camera_jpegquality_key";
public static final String KEY_FOCUS_MODE = "pref_camera_focusmode_key";
+ public static final String KEY_FLASH_MODE = "pref_camera_flashmode_key";
public static final boolean DEFAULT_VIDEO_QUALITY_VALUE = true;
public static final int DEFAULT_VIDEO_DURATION_VALUE = 1; // 1 minute
@@ -46,6 +49,7 @@
private ListPreference mPictureSize;
private ListPreference mJpegQuality;
private ListPreference mFocusMode;
+ private ListPreference mFlashMode;
private Parameters mParameters;
@Override
@@ -65,15 +69,16 @@
updatePictureSizeSummary();
updateJpegQualitySummary();
updateFocusModeSummary();
+ updateFlashModeSummary();
}
private void initUI() {
mVideoQuality = (ListPreference) findPreference(KEY_VIDEO_QUALITY);
mVideoDuration = (ListPreference) findPreference(KEY_VIDEO_DURATION);
-
mPictureSize = (ListPreference) findPreference(KEY_PICTURE_SIZE);
mJpegQuality = (ListPreference) findPreference(KEY_JPEG_QUALITY);
mFocusMode = (ListPreference) findPreference(KEY_FOCUS_MODE);
+ mFlashMode = (ListPreference) findPreference(KEY_FLASH_MODE);
getPreferenceScreen().getSharedPreferences().
registerOnSharedPreferenceChangeListener(this);
@@ -83,9 +88,7 @@
CameraHolder.instance().release();
// Create picture size settings.
- createSettings(mPictureSize, Camera.SUPPORTED_PICTURE_SIZE,
- R.array.pref_camera_picturesize_entries,
- R.array.pref_camera_picturesize_entryvalues);
+ createSettings(mPictureSize, Camera.SUPPORTED_PICTURE_SIZE);
// Set default JPEG quality value if it is empty.
if (mJpegQuality.getValue() == null) {
@@ -98,15 +101,30 @@
mFocusMode.setValue(getString(
R.string.pref_camera_focusmode_default));
}
+
+ // Create flash mode settings.
+ createSettings(mFlashMode, Camera.SUPPORTED_FLASH_MODE);
}
- private void createSettings(
- ListPreference pref, String paramName, int prefEntriesResId,
- int prefEntryValuesResId) {
- // Disable the preference if the parameter is not supported.
+ private boolean removePreference(PreferenceGroup group, Preference remove) {
+ if (group.removePreference(remove)) return true;
+
+ for (int i = 0; i < group.getPreferenceCount(); i++) {
+ final Preference child = group.getPreference(i);
+ if (child instanceof PreferenceGroup) {
+ if (removePreference((PreferenceGroup)child, remove)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void createSettings(ListPreference pref, String paramName) {
+ // Remove the preference if the parameter is not supported.
String supportedParamStr = mParameters.get(paramName);
if (supportedParamStr == null) {
- pref.setEnabled(false);
+ removePreference(getPreferenceScreen(), pref);
return;
}
@@ -118,9 +136,8 @@
}
// Prepare setting entries and entry values.
- String[] allEntries = getResources().getStringArray(prefEntriesResId);
- String[] allEntryValues = getResources().getStringArray(
- prefEntryValuesResId);
+ CharSequence[] allEntries = pref.getEntries();
+ CharSequence[] allEntryValues = pref.getEntryValues();
ArrayList<CharSequence> entries = new ArrayList<CharSequence>();
ArrayList<CharSequence> entryValues = new ArrayList<CharSequence>();
for (int i = 0, len = allEntryValues.length; i < len; i++) {
@@ -164,6 +181,10 @@
mFocusMode.setSummary(mFocusMode.getEntry());
}
+ private void updateFlashModeSummary() {
+ mFlashMode.setSummary(mFlashMode.getEntry());
+ }
+
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals(KEY_VIDEO_QUALITY)) {
@@ -176,6 +197,8 @@
updateJpegQualitySummary();
} else if (key.equals(KEY_FOCUS_MODE)) {
updateFocusModeSummary();
+ } else if (key.equals(KEY_FLASH_MODE)) {
+ updateFlashModeSummary();
}
}
}