Merge "Camera: Fix incorrect hardware level comparisions in CTS" into pie-cts-dev
diff --git a/apps/CameraITS/tests/scene0/test_param_sensitivity_burst.py b/apps/CameraITS/tests/scene0/test_param_sensitivity_burst.py
index dfd9ed8..b716141 100644
--- a/apps/CameraITS/tests/scene0/test_param_sensitivity_burst.py
+++ b/apps/CameraITS/tests/scene0/test_param_sensitivity_burst.py
@@ -19,7 +19,7 @@
import its.target
NUM_STEPS = 3
-ERROR_TOLERANCE = 0.97 # Allow ISO to be rounded down by 3%
+ERROR_TOLERANCE = 0.96 # Allow ISO to be rounded down by 4%
def main():
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsService.java b/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsService.java
index fc2374e..ce07801 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsService.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsService.java
@@ -359,7 +359,8 @@
// Initialize memory quota on this device
for (String camId : devices) {
CameraCharacteristics chars = mCameraManager.getCameraCharacteristics(camId);
- Size maxYuvSize = ItsUtils.getYuvOutputSizes(chars)[0];
+ Size maxYuvSize = ItsUtils.getMaxOutputSize(
+ mCameraCharacteristics, ImageFormat.YUV_420_888);
// 4 bytes per pixel for RGBA8888 Bitmap and at least 3 Bitmaps per CDD
int quota = maxYuvSize.getWidth() * maxYuvSize.getHeight() * 4 * 3;
if (quota > mMemoryQuota) {
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/RVCVXCheckTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/RVCVXCheckTestActivity.java
index 789de68..9fbeba2 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/RVCVXCheckTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/RVCVXCheckTestActivity.java
@@ -167,7 +167,7 @@
// acquire a partial wake lock just in case CPU fall asleep
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
- PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
+ PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK,
"RVCVXCheckAnalyzer");
wl.acquire();
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/AdoptableHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/AdoptableHostTest.java
index ad98fa2..2e78272 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/AdoptableHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/AdoptableHostTest.java
@@ -117,6 +117,18 @@
// Unmount, remount and verify
getDevice().executeShellCommand("sm unmount " + vol.volId);
getDevice().executeShellCommand("sm mount " + vol.volId);
+
+ int attempt = 0;
+ String pkgPath = getDevice().executeShellCommand("pm path " + PKG);
+ while ((pkgPath == null || pkgPath.isEmpty()) && attempt++ < 15) {
+ Thread.sleep(1000);
+ pkgPath = getDevice().executeShellCommand("pm path " + PKG);
+ }
+
+ if (pkgPath == null || pkgPath.isEmpty()) {
+ throw new AssertionError("Package not ready yet");
+ }
+
runDeviceTests(PKG, CLASS, "testDataNotInternal");
runDeviceTests(PKG, CLASS, "testDataRead");
runDeviceTests(PKG, CLASS, "testNative");
diff --git a/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java b/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java
index 0041563..b32a054 100644
--- a/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java
+++ b/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java
@@ -891,6 +891,9 @@
* @throws Exception
*/
public void testCoredomainViolators() throws Exception {
+ if (!isFullTrebleDevice()) {
+ return;
+ }
assertSepolicyTests("CoredomainViolations", "/treble_sepolicy_tests");
}
diff --git a/tests/framework/base/activitymanager/app/AndroidManifest.xml b/tests/framework/base/activitymanager/app/AndroidManifest.xml
index c977b37..2b91190 100755
--- a/tests/framework/base/activitymanager/app/AndroidManifest.xml
+++ b/tests/framework/base/activitymanager/app/AndroidManifest.xml
@@ -179,10 +179,10 @@
android:resizeableActivity="true"
android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout"
android:exported="true">
- <layout android:defaultWidth="25%"
- android:defaultHeight="35%"
+ <layout android:defaultWidth="50%"
+ android:defaultHeight="70%"
android:gravity="top|right"
- android:minWidth="90dp"
+ android:minWidth="50dp"
android:minHeight="80dp"
/>
</activity>
@@ -190,10 +190,10 @@
android:resizeableActivity="true"
android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout"
android:exported="true">
- <layout android:defaultWidth="25%"
- android:defaultHeight="35%"
+ <layout android:defaultWidth="50%"
+ android:defaultHeight="70%"
android:gravity="bottom|left"
- android:minWidth="90dp"
+ android:minWidth="50dp"
android:minHeight="80dp"
/>
</activity>
diff --git a/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerManifestLayoutTests.java b/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerManifestLayoutTests.java
index 6b5c7c1..b491a9f 100644
--- a/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerManifestLayoutTests.java
+++ b/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerManifestLayoutTests.java
@@ -49,8 +49,8 @@
// Test parameters
private static final int DEFAULT_WIDTH_DP = 240;
private static final int DEFAULT_HEIGHT_DP = 160;
- private static final float DEFAULT_WIDTH_FRACTION = 0.25f;
- private static final float DEFAULT_HEIGHT_FRACTION = 0.35f;
+ private static final float DEFAULT_WIDTH_FRACTION = 0.50f;
+ private static final float DEFAULT_HEIGHT_FRACTION = 0.70f;
private static final int MIN_WIDTH_DP = 100;
private static final int MIN_HEIGHT_DP = 80;
diff --git a/tests/sensor/src/android/hardware/cts/SensorParameterRangeTest.java b/tests/sensor/src/android/hardware/cts/SensorParameterRangeTest.java
index 44135bc..c1c9fab 100644
--- a/tests/sensor/src/android/hardware/cts/SensorParameterRangeTest.java
+++ b/tests/sensor/src/android/hardware/cts/SensorParameterRangeTest.java
@@ -77,23 +77,23 @@
public void testAccelerometerRange() {
checkSensorRangeAndFrequency(
- mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
+ Sensor.TYPE_ACCELEROMETER,
ACCELEROMETER_MAX_RANGE,
ACCELEROMETER_MIN_FREQUENCY,
ACCELEROMETER_MAX_FREQUENCY);
- }
+ }
- public void testGyroscopeRange() {
+ public void testGyroscopeRange() {
checkSensorRangeAndFrequency(
- mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE),
+ Sensor.TYPE_GYROSCOPE,
GYRO_MAX_RANGE,
GYRO_MIN_FREQUENCY,
GYRO_MAX_FREQUENCY);
- }
+ }
public void testMagnetometerRange() {
checkSensorRangeAndFrequency(
- mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
+ Sensor.TYPE_MAGNETIC_FIELD,
MAGNETOMETER_MAX_RANGE,
MAGNETOMETER_MIN_FREQUENCY,
MAGNETOMETER_MAX_FREQUENCY);
@@ -102,7 +102,7 @@
public void testPressureRange() {
if (mHasHifiSensors) {
checkSensorRangeAndFrequency(
- mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE),
+ Sensor.TYPE_PRESSURE,
PRESSURE_MAX_RANGE,
PRESSURE_MIN_FREQUENCY,
PRESSURE_MAX_FREQUENCY);
@@ -110,8 +110,14 @@
}
private void checkSensorRangeAndFrequency(
- Sensor sensor, double maxRange, double minFrequency, double maxFrequency) {
+ int sensorType, double maxRange, double minFrequency, double maxFrequency) {
if (!mHasHifiSensors && !mVrModeHighPerformance) return;
+
+ Sensor sensor = mSensorManager.getDefaultSensor(sensorType);
+ if (sensor == null) {
+ fail(String.format("Must support sensor type %d", sensorType));
+ }
+
assertTrue(String.format("%s Range actual=%.2f expected=%.2f %s",
sensor.getName(), sensor.getMaximumRange(), maxRange,
SensorCtsHelper.getUnitsForSensor(sensor)),
diff --git a/tests/tests/car/AndroidManifest.xml b/tests/tests/car/AndroidManifest.xml
index 76e2e3c..2a52f2e 100644
--- a/tests/tests/car/AndroidManifest.xml
+++ b/tests/tests/car/AndroidManifest.xml
@@ -22,6 +22,12 @@
<application>
<uses-library android:name="android.test.runner" />
+ <activity android:name=".drivingstate.DistractionOptimizedActivity">
+ <meta-data android:name="distractionOptimized" android:value="true"/>
+ </activity>
+ <activity android:name=".drivingstate.NonDistractionOptimizedActivity">
+ <meta-data android:name="distractionOptimized" android:value="false"/>
+ </activity>
</application>
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
diff --git a/tests/tests/car/src/android/car/cts/CarPackageManagerTest.java b/tests/tests/car/src/android/car/cts/CarPackageManagerTest.java
index 0c3aebc..ec79572 100644
--- a/tests/tests/car/src/android/car/cts/CarPackageManagerTest.java
+++ b/tests/tests/car/src/android/car/cts/CarPackageManagerTest.java
@@ -82,50 +82,19 @@
} catch (IllegalArgumentException expected) {
// Expected.
}
- }
-
- @Test
- public void testSystemActivitiesAllowed() throws CarNotConnectedException {
- Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
- List<PackageInfo> packages = context.getPackageManager().getInstalledPackages(
- PackageManager.GET_ACTIVITIES | PackageManager.GET_META_DATA);
-
- for (PackageInfo info : packages) {
- if (info.applicationInfo == null) {
- continue;
- }
- if ((info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0 ||
- ((info.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0)) {
-
- Bundle metaData = info.applicationInfo.metaData;
- if (metaData == null || metaData.getInt(METADATA_ATTRIBUTE, 0) == 0) {
- continue; // No car metadata, ignoring this app.
- }
-
- if (info.activities != null && info.activities.length > 0) {
- String activity = info.activities[0].name;
- String packageName = info.packageName;
- assertTrue("Failed for package: " + packageName + ", activity: " + activity,
- mCarPm.isActivityDistractionOptimized(packageName, activity));
- }
- }
- }
}
@Test
- @Ignore // Enable when b/120125891 is fixed
- public void testServiceDistractionOptimized() throws Exception {
- assertFalse(mCarPm.isServiceDistractionOptimized("com.basic.package", ""));
- assertTrue(mCarPm.isServiceDistractionOptimized("com.android.settings", "Any"));
- assertTrue(mCarPm.isServiceDistractionOptimized("com.android.settings", ""));
- assertTrue(mCarPm.isServiceDistractionOptimized("com.android.settings", null));
-
- try {
- mCarPm.isServiceDistractionOptimized(null, "Any");
- fail();
- } catch (IllegalArgumentException expected) {
- // Expected.
- }
+ public void testDistractionOptimizedActivityIsAllowed() throws CarNotConnectedException {
+ // This test relies on test activity in installed apk, and AndroidManifest declaration.
+ assertTrue(mCarPm.isActivityDistractionOptimized("android.car.cts",
+ "android.car.cts.drivingstate.DistractionOptimizedActivity"));
}
+ @Test
+ public void testNonDistractionOptimizedActivityNotAllowed() throws CarNotConnectedException {
+ // This test relies on test activity in installed apk, and AndroidManifest declaration.
+ assertFalse(mCarPm.isActivityDistractionOptimized("android.car.cts",
+ "android.car.cts.drivingstate.NonDistractionOptimizedActivity"));
+ }
}
diff --git a/tests/tests/car/src/android/car/cts/drivingstate/DistractionOptimizedActivity.java b/tests/tests/car/src/android/car/cts/drivingstate/DistractionOptimizedActivity.java
new file mode 100644
index 0000000..00440b6
--- /dev/null
+++ b/tests/tests/car/src/android/car/cts/drivingstate/DistractionOptimizedActivity.java
@@ -0,0 +1,6 @@
+package android.car.cts.drivingstate;
+
+import android.app.Activity;
+
+public class DistractionOptimizedActivity extends Activity {
+}
\ No newline at end of file
diff --git a/tests/tests/car/src/android/car/cts/drivingstate/NonDistractionOptimizedActivity.java b/tests/tests/car/src/android/car/cts/drivingstate/NonDistractionOptimizedActivity.java
new file mode 100644
index 0000000..0c75a3a
--- /dev/null
+++ b/tests/tests/car/src/android/car/cts/drivingstate/NonDistractionOptimizedActivity.java
@@ -0,0 +1,6 @@
+package android.car.cts.drivingstate;
+
+import android.app.Activity;
+
+public class NonDistractionOptimizedActivity extends Activity {
+}
diff --git a/tests/tests/location/src/android/location/cts/TestMeasurementUtil.java b/tests/tests/location/src/android/location/cts/TestMeasurementUtil.java
index 222591b..26aedf8 100644
--- a/tests/tests/location/src/android/location/cts/TestMeasurementUtil.java
+++ b/tests/tests/location/src/android/location/cts/TestMeasurementUtil.java
@@ -68,6 +68,7 @@
// android/hardware/libhardware/include/hardware/gps.h
public static final Set<Integer> GNSS_NAVIGATION_MESSAGE_TYPE =
new HashSet<Integer>(Arrays.asList(
+ GnssNavigationMessage.TYPE_UNKNOWN,
GnssNavigationMessage.TYPE_GPS_L1CA,
GnssNavigationMessage.TYPE_GPS_L2CNAV,
GnssNavigationMessage.TYPE_GPS_L5CNAV,
diff --git a/tests/tests/media/src/android/media/cts/DecoderTest.java b/tests/tests/media/src/android/media/cts/DecoderTest.java
index 2193d33..6192c0f 100755
--- a/tests/tests/media/src/android/media/cts/DecoderTest.java
+++ b/tests/tests/media/src/android/media/cts/DecoderTest.java
@@ -2442,7 +2442,19 @@
// start decode loop
MediaCodec.BufferInfo info = new MediaCodec.BufferInfo();
- final long kTimeOutUs = 5000; // 5ms timeout
+ MediaFormat outFormat = codec.getOutputFormat();
+ long kTimeOutUs = 5000; // 5ms timeout
+ String outMime = format.getString(MediaFormat.KEY_MIME);
+ if ((surface == null) && (outMime != null) && outMime.startsWith("video/")) {
+ int outWidth = outFormat.getInteger(MediaFormat.KEY_WIDTH);
+ int outHeight = outFormat.getInteger(MediaFormat.KEY_HEIGHT);
+ // in the 4K decoding case in byte buffer mode, set kTimeOutUs to 10ms as decode may
+ // involve a memcpy
+ if (outWidth * outHeight >= 8000000) {
+ kTimeOutUs = 10000;
+ }
+ }
+
boolean sawInputEOS = false;
boolean sawOutputEOS = false;
int deadDecoderCounter = 0;
diff --git a/tests/tests/os/src/android/os/cts/EnvironmentTest.java b/tests/tests/os/src/android/os/cts/EnvironmentTest.java
index 6f259c3..0f2ac62 100644
--- a/tests/tests/os/src/android/os/cts/EnvironmentTest.java
+++ b/tests/tests/os/src/android/os/cts/EnvironmentTest.java
@@ -81,14 +81,17 @@
// inodes can result in wasted space.
final long maxsize = stat.f_blocks * stat.f_frsize;
final long maxInodes = maxsize / 4096;
- final long minsize = stat.f_bavail * stat.f_frsize;
- final long minInodes = minsize / 32768;
+ // Assuming the smallest storage would be 4GB, min # of free inodes
+ // in EXT4/F2FS must be larger than 128k for Android to work properly.
+ final long minInodes = 128 * 1024;
- if (stat.f_ffree >= minInodes && stat.f_ffree <= maxInodes) {
+ if (stat.f_ffree >= minInodes && stat.f_ffree <= maxInodes
+ && stat.f_favail <= stat.f_ffree) {
// Sweet, sounds great!
} else {
- fail("Number of inodes " + stat.f_ffree + " not within sane range for partition of "
- + minsize + "," + maxsize + " bytes; expected [" + minInodes + "," + maxInodes + "]");
+ fail("Number of inodes " + stat.f_ffree + "/" + stat.f_favail
+ + " not within sane range for partition of " + maxsize + " bytes; expected ["
+ + minInodes + "," + maxInodes + "]");
}
}
}
diff --git a/tests/tests/view/src/android/view/cts/WindowTest.java b/tests/tests/view/src/android/view/cts/WindowTest.java
index 41ad595..94b3ceb 100644
--- a/tests/tests/view/src/android/view/cts/WindowTest.java
+++ b/tests/tests/view/src/android/view/cts/WindowTest.java
@@ -704,8 +704,6 @@
mPresentation.button1.getWidth() / 2,
mPresentation.button1.getY() + mPresentation.button1.getHeight() / 2);
assertTrue(waitingSemaphore.tryAcquire(5, TimeUnit.SECONDS));
-
- destroyPresentation();
}
private void checkPresentationButtonFocus(final boolean button1Focused,
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewSslTest.java b/tests/tests/webkit/src/android/webkit/cts/WebViewSslTest.java
index 688fc33..08de524 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebViewSslTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewSslTest.java
@@ -731,12 +731,23 @@
mOnUiThread.clearSslPreferences();
mOnUiThread.loadUrlAndWaitForCompletion(url);
// Page NOT loaded OK...
- // In this case, we must NOT have received the onReceivedSslError callback as that is for
- // recoverable (e.g. server auth) errors, whereas failing mandatory client auth is non-
- // recoverable and should drop straight through to a load error.
- assertFalse(webViewClient.wasOnReceivedSslErrorCalled());
- assertFalse(TestHtmlConstants.HELLO_WORLD_TITLE.equals(mOnUiThread.getTitle()));
- assertEquals(WebViewClient.ERROR_FAILED_SSL_HANDSHAKE, webViewClient.onReceivedErrorCode());
+ //
+ // In this test, we expect both a recoverable and non-recoverable error:
+ //
+ // 1. WebView does not trust the test server's certificate. This is a recoverable error, so
+ // WebView invokes #onReceivedSslError (and the WebViewClient calls #proceed). We don't
+ // specifically intend to test this part of the scenario, but we can't easily mock out
+ // WebView's certificate roots.
+ // 2. WebView proceeds with the handshake without providing client authentication. The
+ // server fails the client. This is non-recoverable, so WebView invokes
+ // #onReceivedError.
+ //
+ // We only assert the second error, since earlier WebView versions had a bug in which
+ // WebView hit error 2 first, which prevented it from hitting error 1.
+ assertFalse("Title should not be updated, since page load should have failed",
+ TestHtmlConstants.HELLO_WORLD_TITLE.equals(mOnUiThread.getTitle()));
+ assertEquals("Expected ERROR_FAILED_SSL_HANDSHAKE in onReceivedError",
+ WebViewClient.ERROR_FAILED_SSL_HANDSHAKE, webViewClient.onReceivedErrorCode());
}
public void testProceedClientCertRequest() throws Throwable {