AI 145839: Add UI for JPEG quality setting.
BUG=1761244
Automated import of CL 145839
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index c83124f..37e6c18 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -94,4 +94,18 @@
<item>1024x768</item>
</string-array>
+ <!-- Camera Preferences JPEG quality dialog box entries -->
+ <string-array name="pref_camera_jpegquality_entries">
+ <item>@string/pref_camera_jpegquality_entry_superfine</item>
+ <item>@string/pref_camera_jpegquality_entry_fine</item>
+ <item>@string/pref_camera_jpegquality_entry_normal</item>
+ </string-array>
+
+ <!-- Do not localize entryvalues -->
+ <string-array name="pref_camera_jpegquality_entryvalues">
+ <item>85</item>
+ <item>75</item>
+ <item>65</item>
+ </string-array>
+
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f035219..6082473 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -375,6 +375,20 @@
<!-- Settings screen, picture size dialog title -->
<string name="pref_camera_picturesize_dialogtitle">Picture size</string>
+ <!-- Default picture quality setting. Do not translate. -->
+ <string name="pref_camera_jpegquality_default">85</string>
+
+ <!-- Settings screen, Select Picture quality title -->
+ <string name="pref_camera_jpegquality_title">Select picture quality</string>
+
+ <!-- Settings screen, Picture quality dialog radio button choices -->
+ <string name="pref_camera_jpegquality_entry_superfine">Super fine</string>
+ <string name="pref_camera_jpegquality_entry_fine">Fine</string>
+ <string name="pref_camera_jpegquality_entry_normal">Normal</string>
+
+ <!-- Settings screen, picture quality dialog title -->
+ <string name="pref_camera_jpegquality_dialogtitle">Picture quality</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 fe1b013..76f0f42 100644
--- a/res/xml/camera_preferences.xml
+++ b/res/xml/camera_preferences.xml
@@ -60,6 +60,14 @@
android:defaultValue="@string/pref_camera_picturesize_default"
android:title="@string/pref_camera_picturesize_title"
android:dialogTitle="@string/pref_camera_picturesize_dialogtitle" />
+
+ <ListPreference
+ android:key="pref_camera_jpegquality_key"
+ android:defaultValue="@string/pref_camera_jpegquality_default"
+ android:title="@string/pref_camera_jpegquality_title"
+ android:entries="@array/pref_camera_jpegquality_entries"
+ android:entryValues="@array/pref_camera_jpegquality_entryvalues"
+ android:dialogTitle="@string/pref_camera_jpegquality_dialogtitle" />
</PreferenceCategory>
</PreferenceScreen>
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 943943d..fee6410 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -583,13 +583,9 @@
final int latchedOrientation =
ImageManager.roundOrientation(mLastOrientation + 90);
+ mParameters.set(PARM_ROTATION, latchedOrientation);
Location loc = mRecordLocation ? getCurrentLocation() : null;
- // Quality 75 has visible artifacts, and quality 90 looks great but
- // the files begin to get large. 85 is a good compromise between
- // the two.
- mParameters.set(PARM_JPEG_QUALITY, 85);
- mParameters.set(PARM_ROTATION, latchedOrientation);
mParameters.remove(PARM_GPS_LATITUDE);
mParameters.remove(PARM_GPS_LONGITUDE);
@@ -1372,34 +1368,7 @@
return;
}
- // 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();
- mParameters.setPreviewSize(w, h);
-
- // Set white balance parameter.
- String whiteBalance = mPreferences.getString(
- CameraSettings.KEY_WHITE_BALANCE,
- getString(R.string.pref_camera_whitebalance_default));
- mParameters.set(PARM_WHITE_BALANCE, whiteBalance);
-
- // Set effect parameter.
- String effect = mPreferences.getString(
- CameraSettings.KEY_EFFECT,
- 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) {
- // Ignore this error, it happens in the simulator.
- }
+ setCameraParameter();
final long wallTimeStart = SystemClock.elapsedRealtime();
final long threadTimeStart = Debug.threadCpuTimeNanos();
@@ -1469,6 +1438,39 @@
}
}
+ 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();
+ mParameters.setPreviewSize(mViewFinderWidth, mViewFinderHeight);
+
+ // Set white balance parameter.
+ String whiteBalance = mPreferences.getString(
+ CameraSettings.KEY_WHITE_BALANCE,
+ getString(R.string.pref_camera_whitebalance_default));
+ mParameters.set(PARM_WHITE_BALANCE, whiteBalance);
+
+ // Set effect parameter.
+ String effect = mPreferences.getString(
+ CameraSettings.KEY_EFFECT,
+ 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);
+
+ // Set JPEG quality parameter.
+ String jpegQuality = mPreferences.getString(
+ CameraSettings.KEY_JPEG_QUALITY,
+ getString(R.string.pref_camera_jpegquality_default));
+ mParameters.set(PARM_JPEG_QUALITY, jpegQuality);
+
+ mCameraDevice.setParameters(mParameters);
+ }
+
private void stopPreview() {
if (mCameraDevice != null && mPreviewing) {
mCameraDevice.stopPreview();
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index 8d0075a..d790b9f 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -38,12 +38,14 @@
"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 String KEY_JPEG_QUALITY = "pref_camera_jpegquality_key";
public static final boolean DEFAULT_VIDEO_QUALITY_VALUE = true;
private ListPreference mVideoQuality;
private ListPreference mWhiteBalance;
private ListPreference mEffect;
private ListPreference mPictureSize;
+ private ListPreference mJpegQuality;
private Parameters mParameters;
@Override
@@ -62,6 +64,7 @@
updateWhiteBalanceSummary();
updateEffectSummary();
updatePictureSizeSummary();
+ updateJpegQualitySummary();
}
private void initUI() {
@@ -69,6 +72,7 @@
mWhiteBalance = (ListPreference) findPreference(KEY_WHITE_BALANCE);
mEffect = (ListPreference) findPreference(KEY_EFFECT);
mPictureSize = (ListPreference) findPreference(KEY_PICTURE_SIZE);
+ mJpegQuality = (ListPreference) findPreference(KEY_JPEG_QUALITY);
getPreferenceScreen().getSharedPreferences().
registerOnSharedPreferenceChangeListener(this);
@@ -153,6 +157,10 @@
mPictureSize.setSummary(mPictureSize.getEntry());
}
+ private void updateJpegQualitySummary() {
+ mJpegQuality.setSummary(mJpegQuality.getEntry());
+ }
+
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals(KEY_VIDEO_QUALITY)) {
@@ -163,6 +171,8 @@
updateEffectSummary();
} else if (key.equals(KEY_PICTURE_SIZE)) {
updatePictureSizeSummary();
+ } else if (key.equals(KEY_JPEG_QUALITY)) {
+ updateJpegQualitySummary();
}
}
}