Merge tag android-5.1.0_r1 into AOSP_5.1_MERGE
Change-Id: If83121d50c15c11988a2a135356290e82fb9e96e
diff --git a/apps/TestingCamera2/res/layout/main.xml b/apps/TestingCamera2/res/layout/main.xml
index ad12d43..52ec046 100644
--- a/apps/TestingCamera2/res/layout/main.xml
+++ b/apps/TestingCamera2/res/layout/main.xml
@@ -104,6 +104,14 @@
android:prompt="@string/focus_mode_spinner_prompt"
/>
+ <Spinner
+ android:id="@+id/cac_mode_spinner"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:spinnerMode="dropdown"
+ android:prompt="@string/cac_mode_spinner_prompt"
+ />
+
<CheckBox
android:id="@+id/use_media_codec"
android:layout_width="fill_parent"
diff --git a/apps/TestingCamera2/res/values/strings.xml b/apps/TestingCamera2/res/values/strings.xml
index dcca6bb..cde53ea 100644
--- a/apps/TestingCamera2/res/values/strings.xml
+++ b/apps/TestingCamera2/res/values/strings.xml
@@ -90,6 +90,7 @@
<string name="focus_lock_button_label">Focus Lock</string>
<string name="focus_unlock_button_label">Focus Unlock</string>
<string name="focus_mode_spinner_prompt">AF Mode</string>
+ <string name="cac_mode_spinner_prompt">CAC Mode</string>
<string name="recording_on_label">Recording On</string>
<string name="recording_off_label">Recording Off</string>
<string name="use_media_codec_label">Use MediaCodec</string>
@@ -112,4 +113,10 @@
<item>CONTINUOUS_PICTURE</item>
<item>EDOF</item>
</string-array>
+ <string-array name="cac_mode_spinner_arrays">
+ <!-- must be in same order as COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES* enums -->
+ <item>OFF</item>
+ <item>FAST</item>
+ <item>HIGH</item>
+ </string-array>
</resources>
diff --git a/apps/TestingCamera2/src/com/android/testingcamera2/v1/CameraControls.java b/apps/TestingCamera2/src/com/android/testingcamera2/v1/CameraControls.java
index 6a0763e..63d42c2 100644
--- a/apps/TestingCamera2/src/com/android/testingcamera2/v1/CameraControls.java
+++ b/apps/TestingCamera2/src/com/android/testingcamera2/v1/CameraControls.java
@@ -23,7 +23,18 @@
private final CameraManualControls manualControls = new CameraManualControls();
private final CameraAutoFocusControls afControls = new CameraAutoFocusControls();
+ private int cacMode;
+
public CameraControls() {
+ cacMode = 0;
+ }
+
+ public int getCacMode() {
+ return cacMode;
+ }
+
+ public void setCacMode(int cacMode) {
+ this.cacMode = cacMode;
}
public CameraManualControls getManualControls() {
diff --git a/apps/TestingCamera2/src/com/android/testingcamera2/v1/CameraOps.java b/apps/TestingCamera2/src/com/android/testingcamera2/v1/CameraOps.java
index aae07e9..2f259a1 100644
--- a/apps/TestingCamera2/src/com/android/testingcamera2/v1/CameraOps.java
+++ b/apps/TestingCamera2/src/com/android/testingcamera2/v1/CameraOps.java
@@ -549,6 +549,9 @@
updateCaptureRequest(builder, cameraControl.getManualControls());
// Update the AF control metadata for capture request (if manual is not used)
updateCaptureRequest(builder, cameraControl.getAfControls());
+ // Update cac mode
+ builder.set(CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE,
+ cameraControl.getCacMode());
}
}
diff --git a/apps/TestingCamera2/src/com/android/testingcamera2/v1/TestingCamera2.java b/apps/TestingCamera2/src/com/android/testingcamera2/v1/TestingCamera2.java
index 64fa8a4..cac7b01 100644
--- a/apps/TestingCamera2/src/com/android/testingcamera2/v1/TestingCamera2.java
+++ b/apps/TestingCamera2/src/com/android/testingcamera2/v1/TestingCamera2.java
@@ -91,6 +91,7 @@
private Button mFlushButton;
private ToggleButton mFocusLockToggle;
private Spinner mFocusModeSpinner;
+ private Spinner mCacModeSpinner;
private CheckBox mUseMediaCodecCheckBox;
private SeekBar mSensitivityBar;
@@ -136,6 +137,7 @@
mFocusLockToggle.setOnClickListener(mFocusLockToggleListener);
mFocusModeSpinner = (Spinner) findViewById(R.id.focus_mode_spinner);
mAutoControls.add(mFocusLockToggle);
+ mCacModeSpinner = (Spinner) findViewById(R.id.cac_mode_spinner);
mRecordingToggle = (ToggleButton) findViewById(R.id.start_recording);
mRecordingToggle.setOnClickListener(mRecordingToggleListener);
@@ -671,6 +673,48 @@
* Populate dynamic per-camera settings
*/
+ // Map available CAC Modes -> CAC mode spinner dropdown list of strings
+ int[] availableCacModes =
+ characteristics.get(
+ CameraCharacteristics.COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES);
+ String[] allCacModes = getResources().getStringArray(R.array.cac_mode_spinner_arrays);
+
+ final List<String> cacModeList = new ArrayList<>();
+ final int[] cacModePositions = new int[availableCacModes.length];
+
+ int i = 0;
+ for (int mode : availableCacModes) {
+ cacModeList.add(allCacModes[mode]);
+ cacModePositions[i++] = mode;
+ }
+
+ /*
+ * Change the CAC mode when CAC spinner's selected item changes
+ */
+ mCacModeSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
+
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position,
+ long id) {
+ int cacMode = cacModePositions[position];
+
+ Log.i(TAG, "Change CAC mode to " + cacModeList.get(position)
+ + " " + cacMode);
+
+ mCameraControl.setCacMode(cacMode);
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+ // Do nothing
+ }
+ });
+
+ ArrayAdapter<String> cacDataAdapter = new ArrayAdapter<>(TestingCamera2.this,
+ android.R.layout.simple_spinner_item, cacModeList);
+ cacDataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ mCacModeSpinner.setAdapter(cacDataAdapter);
+
// Map available AF Modes -> AF mode spinner dropdown list of strings
int[] availableAfModes =
characteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES);
@@ -680,7 +724,7 @@
final List<String> afModeList = new ArrayList<>();
final int[] afModePositions = new int[availableAfModes.length];
- int i = 0;
+ i = 0;
for (int mode : availableAfModes) {
afModeList.add(allAfModes[mode]);
afModePositions[i++] = mode;