Merge "Camera: cross check camera2 features" into lmp-sprout-dev
diff --git a/tests/tests/app/src/android/app/cts/SystemFeaturesTest.java b/tests/tests/app/src/android/app/cts/SystemFeaturesTest.java
index 165e67b..620c51f 100644
--- a/tests/tests/app/src/android/app/cts/SystemFeaturesTest.java
+++ b/tests/tests/app/src/android/app/cts/SystemFeaturesTest.java
@@ -32,6 +32,9 @@
import android.hardware.SensorManager;
import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.Parameters;
+import android.hardware.camera2.CameraCharacteristics;
+import android.hardware.camera2.CameraManager;
+import android.hardware.camera2.CameraMetadata;
import android.location.LocationManager;
import android.net.sip.SipManager;
import android.net.wifi.WifiManager;
@@ -59,6 +62,7 @@
private SensorManager mSensorManager;
private TelephonyManager mTelephonyManager;
private WifiManager mWifiManager;
+ private CameraManager mCameraManager;
@Override
protected void setUp() throws Exception {
@@ -77,6 +81,7 @@
mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
+ mCameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
}
/**
@@ -106,7 +111,7 @@
}
}
- public void testCameraFeatures() {
+ public void testCameraFeatures() throws Exception {
int numCameras = Camera.getNumberOfCameras();
if (numCameras == 0) {
assertNotAvailable(PackageManager.FEATURE_CAMERA);
@@ -114,6 +119,11 @@
assertNotAvailable(PackageManager.FEATURE_CAMERA_FLASH);
assertNotAvailable(PackageManager.FEATURE_CAMERA_FRONT);
assertNotAvailable(PackageManager.FEATURE_CAMERA_ANY);
+ assertNotAvailable(PackageManager.FEATURE_CAMERA_LEVEL_FULL);
+ assertNotAvailable(PackageManager.FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR);
+ assertNotAvailable(PackageManager.FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING);
+ assertNotAvailable(PackageManager.FEATURE_CAMERA_CAPABILITY_RAW);
+
assertFalse("Devices supporting external cameras must have a representative camera " +
"connected for testing",
mPackageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_EXTERNAL));
@@ -121,9 +131,48 @@
assertAvailable(PackageManager.FEATURE_CAMERA_ANY);
checkFrontCamera();
checkRearCamera();
+ checkCamera2Features();
}
}
+ private void checkCamera2Features() throws Exception {
+ String[] cameraIds = mCameraManager.getCameraIdList();
+ boolean fullCamera = false;
+ boolean manualSensor = false;
+ boolean manualPostProcessing = false;
+ boolean raw = false;
+ CameraCharacteristics[] cameraChars = new CameraCharacteristics[cameraIds.length];
+ for (String cameraId : cameraIds) {
+ CameraCharacteristics chars = mCameraManager.getCameraCharacteristics(cameraId);
+ Integer hwLevel = chars.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
+ int[] capabilities = chars.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES);
+ if (hwLevel == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL) {
+ fullCamera = true;
+ }
+ for (int capability : capabilities) {
+ switch (capability) {
+ case CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR:
+ manualSensor = true;
+ break;
+ case CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING:
+ manualPostProcessing = true;
+ break;
+ case CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_RAW:
+ raw = true;
+ break;
+ default:
+ // Capabilities don't have a matching system feature
+ break;
+ }
+ }
+ }
+ assertFeature(fullCamera, PackageManager.FEATURE_CAMERA_LEVEL_FULL);
+ assertFeature(manualSensor, PackageManager.FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR);
+ assertFeature(manualPostProcessing,
+ PackageManager.FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING);
+ assertFeature(raw, PackageManager.FEATURE_CAMERA_CAPABILITY_RAW);
+ }
+
private void checkFrontCamera() {
CameraInfo info = new CameraInfo();
int numCameras = Camera.getNumberOfCameras();
@@ -400,4 +449,12 @@
assertFalse("PackageManager#getSystemAvailableFeatures should NOT have " + feature,
mAvailableFeatures.contains(feature));
}
+
+ private void assertFeature(boolean exist, String feature) {
+ if (exist) {
+ assertAvailable(feature);
+ } else {
+ assertNotAvailable(feature);
+ }
+ }
}