diff options
-rw-r--r-- | res/values/arrays.xml | 14 | ||||
-rw-r--r-- | res/values/strings.xml | 19 | ||||
-rw-r--r-- | res/xml/camera_preferences.xml | 10 | ||||
-rw-r--r-- | src/com/android/camera/Camera.java | 53 | ||||
-rw-r--r-- | src/com/android/camera/CameraSettings.java | 47 |
5 files changed, 123 insertions, 20 deletions
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.FileOutputStream; 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 class Camera extends Activity implements View.OnClickListener, 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 @@ public class Camera extends Activity implements View.OnClickListener, 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.content.SharedPreferences.OnSharedPreferenceChangeListener; 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 class CameraSettings extends PreferenceActivity implements 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 @@ public class CameraSettings extends PreferenceActivity implements private ListPreference mPictureSize; private ListPreference mJpegQuality; private ListPreference mFocusMode; + private ListPreference mFlashMode; private Parameters mParameters; @Override @@ -65,15 +69,16 @@ public class CameraSettings extends PreferenceActivity implements 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 @@ public class CameraSettings extends PreferenceActivity implements 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 @@ public class CameraSettings extends PreferenceActivity implements 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 @@ public class CameraSettings extends PreferenceActivity implements } // 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 @@ public class CameraSettings extends PreferenceActivity implements 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 @@ public class CameraSettings extends PreferenceActivity implements updateJpegQualitySummary(); } else if (key.equals(KEY_FOCUS_MODE)) { updateFocusModeSummary(); + } else if (key.equals(KEY_FLASH_MODE)) { + updateFlashModeSummary(); } } } |