Merge changes I36883ceb,I8b01d280,I3cdcff28,Icd33de61,I54bfb7af, ... into android13-tests-dev
* changes:
Workaround issue in testApkInApex_nonClasspathClasses
Add duplicate class IUnloadSdkCallback to burndown list
Add duplicate classes from sdksandbox framework.jar to burndown list
Rename duplicate class ISdkSandboxLifecycleCallback in burndown list
Adds exception for aidl dependency
Add duplicate class ISharedPreferencesCallback to burndown list
Add duplicate classes from sdksandbox framework.jar to burndown list
diff --git a/apps/CameraITS/tests/scene1_1/test_ev_compensation_advanced.py b/apps/CameraITS/tests/scene1_1/test_ev_compensation_advanced.py
index 710e207..6c94a6f 100644
--- a/apps/CameraITS/tests/scene1_1/test_ev_compensation_advanced.py
+++ b/apps/CameraITS/tests/scene1_1/test_ev_compensation_advanced.py
@@ -44,6 +44,7 @@
req = capture_request_utils.auto_capture_request()
req['android.control.aeExposureCompensation'] = ev
req['android.control.aeLock'] = True
+ req['android.control.awbLock'] = True
# Use linear tonemap to avoid brightness being impacted by tone curves.
req['android.tonemap.mode'] = 0
req['android.tonemap.curve'] = {'red': LINEAR_TONEMAP_CURVE,
@@ -93,7 +94,9 @@
camera_properties_utils.ev_compensation(props) and
camera_properties_utils.manual_sensor(props) and
camera_properties_utils.manual_post_proc(props) and
- camera_properties_utils.per_frame_control(props))
+ camera_properties_utils.per_frame_control(props) and
+ camera_properties_utils.ae_lock(props) and
+ camera_properties_utils.awb_lock(props))
# Load chart for scene
its_session_utils.load_scene(
@@ -106,7 +109,8 @@
# dark/bright scene could make AF convergence fail and this test
# doesn't care the image sharpness.
mono_camera = camera_properties_utils.mono_camera(props)
- cam.do_3a(ev_comp=0, lock_ae=True, do_af=False, mono_camera=mono_camera)
+ cam.do_3a(ev_comp=0, lock_ae=True, lock_awb=True, do_af=False,
+ mono_camera=mono_camera)
# Create requests and capture
largest_yuv = capture_request_utils.get_largest_yuv_format(props)
diff --git a/apps/CameraITS/tests/scene1_1/test_ev_compensation_basic.py b/apps/CameraITS/tests/scene1_1/test_ev_compensation_basic.py
index e407fd6..5cf7f89 100644
--- a/apps/CameraITS/tests/scene1_1/test_ev_compensation_basic.py
+++ b/apps/CameraITS/tests/scene1_1/test_ev_compensation_basic.py
@@ -38,15 +38,18 @@
PATCH_X = 0.5 - PATCH_W/2
PATCH_Y = 0.5 - PATCH_H/2
THRESH_CONVERGE_FOR_EV = 8 # AE must converge within this num
+VGA_W, VGA_H = 640, 480
YUV_FULL_SCALE = 255.0
YUV_SAT_MIN = 250.0
YUV_SAT_TOL = 3.0
def create_request_with_ev(ev):
+ """Create request with EV value."""
req = capture_request_utils.auto_capture_request()
req['android.control.aeExposureCompensation'] = ev
req['android.control.aeLock'] = True
+ req['android.control.awbLock'] = True
return req
@@ -76,7 +79,8 @@
# check SKIP conditions
camera_properties_utils.skip_unless(
camera_properties_utils.ev_compensation(props) and
- camera_properties_utils.ae_lock(props))
+ camera_properties_utils.ae_lock(props) and
+ camera_properties_utils.awb_lock(props))
# Load chart for scene
its_session_utils.load_scene(
@@ -97,13 +101,17 @@
# dark/bright scene could make AF convergence fail and this test
# doesn't care the image sharpness.
mono_camera = camera_properties_utils.mono_camera(props)
- cam.do_3a(ev_comp=0, lock_ae=True, do_af=False, mono_camera=mono_camera)
+ cam.do_3a(ev_comp=0, lock_ae=True, lock_awb=True, do_af=False,
+ mono_camera=mono_camera)
# Do captures and extract information
largest_yuv = capture_request_utils.get_largest_yuv_format(props)
match_ar = (largest_yuv['width'], largest_yuv['height'])
fmt = capture_request_utils.get_smallest_yuv_format(
props, match_ar=match_ar)
+ if fmt['width'] * fmt['height'] > VGA_W * VGA_H:
+ fmt = {'format': 'yuv', 'width': VGA_W, 'height': VGA_H}
+ logging.debug('YUV size: %d x %d', fmt['width'], fmt['height'])
lumas = []
for j, ev in enumerate(evs):
luma_locked_rtol = luma_locked_rtols[j]
@@ -114,7 +122,9 @@
for i, cap in enumerate(caps):
if cap['metadata']['android.control.aeState'] == LOCKED:
ev_meta = cap['metadata']['android.control.aeExposureCompensation']
- logging.debug('cap EV compensation: %d', ev_meta)
+ exp = cap['metadata']['android.sensor.exposureTime']
+ iso = cap['metadata']['android.sensor.sensitivity']
+ logging.debug('cap EV: %d, exp: %dns, ISO: %d', ev_meta, exp, iso)
if ev != ev_meta:
raise AssertionError(
f'EV compensation cap != req! cap: {ev_meta}, req: {ev}')
@@ -124,7 +134,7 @@
lumas.append(luma)
if not math.isclose(min(luma_locked), max(luma_locked),
rel_tol=luma_locked_rtol):
- raise AssertionError(f'AE locked lumas: {luma_locked}, '
+ raise AssertionError(f'EV {ev} burst lumas: {luma_locked}, '
f'RTOL: {luma_locked_rtol}')
logging.debug('lumas per frame ev %d: %s', ev, str(luma_locked))
logging.debug('mean lumas in AE locked captures: %s', str(lumas))
diff --git a/apps/CtsVerifier/AndroidManifest.xml b/apps/CtsVerifier/AndroidManifest.xml
index 709f13d..d439b60 100644
--- a/apps/CtsVerifier/AndroidManifest.xml
+++ b/apps/CtsVerifier/AndroidManifest.xml
@@ -5259,6 +5259,8 @@
android:value="config_hdmi_source" />
<meta-data android:name="ApiTest"
android:value="android.media.AudioTrack#isDirectPlaybackSupported" />
+ <meta-data android:name="display_mode"
+ android:value="single_display_mode" />
</activity>
<activity android:name=".tv.display.HotplugTestActivity"
diff --git a/apps/CtsVerifier/res/layout-small/positive_device_owner.xml b/apps/CtsVerifier/res/layout-small/positive_device_owner.xml
index 81f97f6..6a9274c 100644
--- a/apps/CtsVerifier/res/layout-small/positive_device_owner.xml
+++ b/apps/CtsVerifier/res/layout-small/positive_device_owner.xml
@@ -17,17 +17,15 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
-
-
- <LinearLayout
+ <ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="vertical">
-
- <ScrollView
+ android:layout_weight="1"
+ android:fillViewport="true">
+ <LinearLayout
android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1">
+ android:layout_height="match_parent"
+ android:orientation="vertical">
<TextView
android:id="@+id/positive_device_owner_instructions"
@@ -35,22 +33,20 @@
android:layout_height="wrap_content"
android:text="@string/device_owner_positive_tests_instructions"
android:textSize="16dip" />
- </ScrollView>
- <Button
- android:id="@+id/set_device_owner_button"
- android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1"
- android:text="@string/set_device_owner_button_label" />
+ <Button
+ android:id="@+id/set_device_owner_button"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/set_device_owner_button_label" />
- <ListView
- android:id="@+id/android:list"
- android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1" />
+ <ListView
+ android:id="@+id/android:list"
+ android:layout_width="match_parent"
+ android:layout_height="1200dp"/>
- <include layout="@layout/pass_fail_buttons" />
- </LinearLayout>
-
+ </LinearLayout>
+ </ScrollView>
+ <include layout="@layout/pass_fail_buttons"
+ android:layout_weight="1"/>
</LinearLayout>
diff --git a/apps/CtsVerifier/res/values-car/dimens.xml b/apps/CtsVerifier/res/values-car/dimens.xml
new file mode 100644
index 0000000..b6083e4
--- /dev/null
+++ b/apps/CtsVerifier/res/values-car/dimens.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+ <!-- According to automotive guidelines, touch targets needs to be at least 76dp wide -->
+ <!-- Please refer to https://source.android.com/devices/automotive/hmi/car_ui/appendix_b -->
+ <dimen name="display_cutout_test_button_size">76dp</dimen>
+</resources>
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index 2852b77..e721e7d 100644
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -2138,10 +2138,6 @@
device was p2p device. Check the test case on the other device.</string>
<string name="p2p_connection_error">
Test failed.\n\nFailed to establish a p2p connection.</string>
- <string name="p2p_connection_latency_error">
- Test failed. \n\nConnection was expected to be established within %1$dms. But took=%2$dms.
- \n\nPlease ensure that the Group Owner is ready on the other device before running
- this test</string>
<string name="p2p_detect_disconnection_error">
Test failed.\n\nFailed to detect client disconnection.</string>
<string name="p2p_disconnect_error">
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 973e7a1..4a6b877 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
@@ -1849,8 +1849,8 @@
// s1440p which is the max supported stream size in a combination, when preview
// stabilization is on.
Size maxPreviewSize = new Size(1920, 1440);
- // QCIF, we test only sizes >= this.
- Size minPreviewSize = new Size(176, 144);
+ // 320 x 240, we test only sizes >= this.
+ Size minPreviewSize = new Size(320, 240);
Size[] outputSizes = configMap.getOutputSizes(ImageFormat.YUV_420_888);
if (outputSizes == null) {
mSocketRunnableObj.sendResponse("supportedPreviewSizes", "");
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/LockTaskUiTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/LockTaskUiTestActivity.java
index 562c665..91b29ca 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/LockTaskUiTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/LockTaskUiTestActivity.java
@@ -40,11 +40,12 @@
import android.database.DataSetObserver;
import android.os.AsyncTask;
import android.os.Bundle;
-import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import android.util.Log;
import android.widget.Button;
import android.widget.Toast;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+
import com.android.cts.verifier.ArrayTestListAdapter;
import com.android.cts.verifier.IntentDrivenTestActivity.ButtonInfo;
import com.android.cts.verifier.PassFailButtons;
@@ -126,7 +127,8 @@
}
private void addTestsToAdapter(final ArrayTestListAdapter adapter) {
- if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+ if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
+ && !getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
adapter.add(createSetLockTaskFeaturesTest(
TEST_ID_DEFAULT,
LOCK_TASK_FEATURE_NONE,
@@ -140,7 +142,8 @@
R.string.device_owner_lock_task_ui_system_info_test_info));
}
- if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+ if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
+ && !getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
adapter.add(createSetLockTaskFeaturesTest(
TEST_ID_NOTIFICATIONS,
LOCK_TASK_FEATURE_HOME | LOCK_TASK_FEATURE_NOTIFICATIONS,
@@ -148,7 +151,8 @@
R.string.device_owner_lock_task_ui_notifications_test_info));
}
- if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+ if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
+ && !getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
adapter.add(createSetLockTaskFeaturesTest(
TEST_ID_HOME,
LOCK_TASK_FEATURE_HOME,
@@ -156,7 +160,8 @@
R.string.device_owner_lock_task_ui_home_test_info));
}
- if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+ if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
+ && !getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
adapter.add(createSetLockTaskFeaturesTest(
TEST_ID_RECENTS,
LOCK_TASK_FEATURE_HOME | LOCK_TASK_FEATURE_OVERVIEW,
@@ -164,7 +169,8 @@
R.string.device_owner_lock_task_ui_recents_test_info));
}
- if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+ if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
+ && !getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
adapter.add(createSetLockTaskFeaturesTest(
TEST_ID_GLOBAL_ACTIONS,
LOCK_TASK_FEATURE_GLOBAL_ACTIONS,
@@ -175,6 +181,7 @@
// Disabled due to b/240590557. Will be re-enabled for Android 14+.
/*
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
+ && !getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEVISION)
&& getPackageManager().hasSystemFeature(
PackageManager.FEATURE_SECURE_LOCK_SCREEN)) {
adapter.add(createSetLockTaskFeaturesTest(
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/p2p/testcase/ConnectReqTestCase.java b/apps/CtsVerifier/src/com/android/cts/verifier/p2p/testcase/ConnectReqTestCase.java
index f0c62c4..20ce5ac 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/p2p/testcase/ConnectReqTestCase.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/p2p/testcase/ConnectReqTestCase.java
@@ -23,9 +23,7 @@
import android.net.wifi.p2p.WifiP2pGroup;
import android.net.wifi.p2p.WifiP2pInfo;
import android.net.wifi.p2p.WifiP2pManager;
-import android.os.Build;
-import com.android.compatibility.common.util.PropertyUtil;
import com.android.cts.verifier.R;
import java.lang.reflect.Method;
@@ -189,11 +187,21 @@
* @throws InterruptedException
*/
protected boolean connectTest(WifiP2pConfig config) throws InterruptedException {
+ notifyTestMsg(R.string.p2p_searching_target);
+
+ /*
+ * Search target device and check its capability.
+ */
ActionListenerTest actionListener = new ActionListenerTest();
+ mP2pMgr.discoverPeers(mChannel, actionListener);
+ if (!actionListener.check(ActionListenerTest.SUCCESS, TIMEOUT)) {
+ mReason = mContext.getString(R.string.p2p_discover_peers_error);
+ return false;
+ }
+
/*
* Try to connect the target device.
*/
- long startTime = System.currentTimeMillis();
mP2pMgr.connect(mChannel, config, actionListener);
if (!actionListener.check(ActionListenerTest.SUCCESS, TIMEOUT)) {
mReason = mContext.getString(R.string.p2p_connect_error);
@@ -216,15 +224,6 @@
WifiP2pGroup group = mReceiverTest.getWifiP2pGroup();
if (group != null) {
if (!group.isGroupOwner()) {
- long endTime = System.currentTimeMillis();
- long connectionLatency = endTime - startTime;
- if (PropertyUtil.isVndkApiLevelAtLeast(Build.VERSION_CODES.TIRAMISU)
- && connectionLatency
- > MAXIMUM_EXPECTED_CONNECTION_LATENCY_WITH_CONFIG_MS) {
- mReason = mContext.getString(R.string.p2p_connection_latency_error,
- MAXIMUM_EXPECTED_CONNECTION_LATENCY_WITH_CONFIG_MS, connectionLatency);
- return false;
- }
setTargetAddress(group.getOwner().deviceAddress);
} else {
mReason = mContext.getString(R.string.p2p_connection_error);
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/p2p/testcase/TestCase.java b/apps/CtsVerifier/src/com/android/cts/verifier/p2p/testcase/TestCase.java
index 2117419..7f608c5 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/p2p/testcase/TestCase.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/p2p/testcase/TestCase.java
@@ -44,7 +44,6 @@
protected static final int TIMEOUT = 25000;
protected static final int TIMEOUT_FOR_USER_ACTION = 60000;
- protected static final int MAXIMUM_EXPECTED_CONNECTION_LATENCY_WITH_CONFIG_MS = 1500;
protected static final int SUCCESS = 0;
protected Context mContext;
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/RVCVXCheckAnalyzer.java b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/RVCVXCheckAnalyzer.java
index 7912bd8..0987e1e 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/RVCVXCheckAnalyzer.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/RVCVXCheckAnalyzer.java
@@ -1072,10 +1072,10 @@
for (int i = 0; i < extractor.getTrackCount(); i++) {
MediaFormat format = extractor.getTrackFormat(i);
String mime = format.getString(MediaFormat.KEY_MIME);
- width = format.getInteger(MediaFormat.KEY_WIDTH);
- height = format.getInteger(MediaFormat.KEY_HEIGHT);
if (mime.startsWith("video/")) {
+ width = format.getInteger(MediaFormat.KEY_WIDTH);
+ height = format.getInteger(MediaFormat.KEY_HEIGHT);
extractor.selectTrack(i);
try {
decoder = MediaCodec.createDecoderByType(mime);
diff --git a/hostsidetests/appsecurity/test-apps/ApkVerityTestAppPrebuilt/Android.bp b/hostsidetests/appsecurity/test-apps/ApkVerityTestAppPrebuilt/Android.bp
index c140cf7..e68621a 100644
--- a/hostsidetests/appsecurity/test-apps/ApkVerityTestAppPrebuilt/Android.bp
+++ b/hostsidetests/appsecurity/test-apps/ApkVerityTestAppPrebuilt/Android.bp
@@ -29,9 +29,3 @@
],
}
-filegroup {
- name: "CtsApkVerityTestPrebuiltFilesArm64",
- srcs: [
- "arm64/*",
- ],
-}
diff --git a/hostsidetests/blobstore/src/com/android/cts/host/blob/BaseBlobStoreHostTest.java b/hostsidetests/blobstore/src/com/android/cts/host/blob/BaseBlobStoreHostTest.java
index e9e13a8..6210420 100644
--- a/hostsidetests/blobstore/src/com/android/cts/host/blob/BaseBlobStoreHostTest.java
+++ b/hostsidetests/blobstore/src/com/android/cts/host/blob/BaseBlobStoreHostTest.java
@@ -18,6 +18,7 @@
import static com.google.common.truth.Truth.assertWithMessage;
import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.device.TestDeviceOptions;
import com.android.tradefed.log.LogUtil.CLog;
import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
import com.android.tradefed.testtype.junit4.DeviceTestRunOptions;
@@ -52,6 +53,9 @@
protected static final String KEY_ALLOW_PUBLIC = "public";
protected static final String KEY_ALLOW_SAME_SIGNATURE = "same_signature";
+ private static final long REBOOT_TIMEOUT_MS = 3 * 60 * 1000;
+ private static final long ONLINE_TIMEOUT_MS = 3 * 60 * 1000;
+
protected void runDeviceTest(String testPkg, String testClass, String testMethod)
throws Exception {
runDeviceTest(testPkg, testClass, testMethod, null);
@@ -92,7 +96,22 @@
protected void rebootAndWaitUntilReady() throws Exception {
// TODO: use rebootUserspace()
- getDevice().reboot(); // reboot() waits for device available
+ TestDeviceOptions options = getDevice().getOptions();
+ final long prevRebootTimeoutMs = options.getRebootTimeout();
+ final long prevOnlineTimeoutMs = options.getOnlineTimeout();
+ updateDeviceOptions(options, REBOOT_TIMEOUT_MS, ONLINE_TIMEOUT_MS);
+ try {
+ getDevice().reboot(); // reboot() waits for device available
+ } finally {
+ updateDeviceOptions(options, prevRebootTimeoutMs, prevOnlineTimeoutMs);
+ }
+ }
+
+ private void updateDeviceOptions(TestDeviceOptions options,
+ long rebootTimeoutMs, long onlineTimeoutMs) throws Exception {
+ options.setRebootTimeout((int) rebootTimeoutMs);
+ options.setOnlineTimeout(onlineTimeoutMs);
+ getDevice().setOptions(options);
}
protected static boolean isMultiUserSupported(ITestDevice device) throws Exception {
diff --git a/hostsidetests/car/src/android/car/cts/PreCreateUsersHostTest.java b/hostsidetests/car/src/android/car/cts/PreCreateUsersHostTest.java
index e370374..fd2ac89 100644
--- a/hostsidetests/car/src/android/car/cts/PreCreateUsersHostTest.java
+++ b/hostsidetests/car/src/android/car/cts/PreCreateUsersHostTest.java
@@ -108,6 +108,7 @@
if (afterReboot) {
restartSystem();
+ waitForCarServiceReady();
// Checks again
assertAppInstalledForUser(APP_PKG, initialUserId);
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/OrgOwnedProfileOwnerTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/OrgOwnedProfileOwnerTest.java
index 32313a8..4051507 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/OrgOwnedProfileOwnerTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/OrgOwnedProfileOwnerTest.java
@@ -477,7 +477,7 @@
// Wait until IMS service is registered by the system.
waitForOutput("Failed waiting for IME to become available",
String.format("ime list --user %d -s -a", userId),
- s -> s.contains(imeComponent), 10 /* seconds */);
+ s -> s.contains(imeComponent), 45 /* seconds */);
executeShellCommand("ime enable " + imeComponent);
executeShellCommand("ime set " + imeComponent);
diff --git a/hostsidetests/os/src/android/os/cts/QuiescentBootTests.java b/hostsidetests/os/src/android/os/cts/QuiescentBootTests.java
index 1aa0941..34bb3ff 100644
--- a/hostsidetests/os/src/android/os/cts/QuiescentBootTests.java
+++ b/hostsidetests/os/src/android/os/cts/QuiescentBootTests.java
@@ -44,8 +44,7 @@
@RunWith(DeviceJUnit4ClassRunner.class)
public class QuiescentBootTests extends BaseHostJUnit4Test {
- private static final int REBOOT_TIMEOUT = 120000;
-
+ private static final String REBOOT_REASON_QUIESCENT = "quiescent";
private static final String FEATURE_LEANBACK_ONLY = "android.software.leanback_only";
private static final String CMD_DUMPSYS_POWER = "dumpsys power --proto";
private static final String CMD_INPUT_WAKEUP = "input keyevent WAKEUP";
@@ -71,15 +70,13 @@
@Test
public void testQuiescentBoot_asleep() throws Exception {
- mDevice.executeAdbCommand("reboot", "quiescent");
- mDevice.waitForBootComplete(REBOOT_TIMEOUT);
+ mDevice.reboot(REBOOT_REASON_QUIESCENT);
assertEquals("Expected to boot into sleep state.", WAKEFULNESS_ASLEEP, getWakefulness());
}
@Test
public void testQuiescentBoot_wakesUpWithPowerButton() throws Exception {
- mDevice.executeAdbCommand("reboot", "quiescent");
- mDevice.waitForBootComplete(REBOOT_TIMEOUT);
+ mDevice.reboot(REBOOT_REASON_QUIESCENT);
mDevice.executeShellCommand(CMD_INPUT_POWER);
assertEquals("Expected to wake up when pressing the power button.",
WAKEFULNESS_AWAKE, getWakefulness());
@@ -87,28 +84,20 @@
@Test
public void testQuiescentBoot_asleepAfterQuiescentReboot() throws Exception {
- mDevice.executeAdbCommand("reboot", "quiescent");
- mDevice.waitForBootComplete(REBOOT_TIMEOUT);
-
+ mDevice.reboot(REBOOT_REASON_QUIESCENT);
assertEquals("Expected to boot into sleep state.", WAKEFULNESS_ASLEEP, getWakefulness());
}
@Test
public void testQuiescentBoot_awakeAfterReboot() throws Exception {
- mDevice.executeAdbCommand("reboot", "quiescent");
- mDevice.waitForBootComplete(REBOOT_TIMEOUT);
-
- mDevice.executeAdbCommand("reboot");
- mDevice.waitForBootComplete(REBOOT_TIMEOUT);
-
+ mDevice.reboot(REBOOT_REASON_QUIESCENT);
+ mDevice.reboot();
assertEquals("Expected to boot in awake state.", WAKEFULNESS_AWAKE, getWakefulness());
}
@Test
public void testQuiescentBoot_activitiesNotResumedAfterBoot() throws Exception {
- mDevice.executeAdbCommand("reboot", "quiescent");
- mDevice.waitForBootComplete(REBOOT_TIMEOUT);
-
+ mDevice.reboot(REBOOT_REASON_QUIESCENT);
List<String> resumedActivities = WindowManagerUtil.getResumedActivities(getDevice());
assertEquals("Expected no resumed activities", 0, resumedActivities.size());
}
diff --git a/hostsidetests/statsdatom/src/android/cts/statsdatom/appcompatstate/AppCompatStateStatsTests.java b/hostsidetests/statsdatom/src/android/cts/statsdatom/appcompatstate/AppCompatStateStatsTests.java
index 9648d8c..da5799b 100644
--- a/hostsidetests/statsdatom/src/android/cts/statsdatom/appcompatstate/AppCompatStateStatsTests.java
+++ b/hostsidetests/statsdatom/src/android/cts/statsdatom/appcompatstate/AppCompatStateStatsTests.java
@@ -33,9 +33,11 @@
import com.android.os.AtomsProto.AppCompatStateChanged;
import com.android.os.StatsLog.EventMetricData;
import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.device.ITestDevice;
import com.android.tradefed.log.LogUtil.CLog;
import com.android.tradefed.testtype.DeviceTestCase;
import com.android.tradefed.testtype.IBuildReceiver;
+import com.android.tradefed.util.Pair;
import java.util.ArrayList;
import java.util.Arrays;
@@ -189,6 +191,12 @@
return;
}
+ Pair<Integer, Integer> displaySizeClosed = getDisplayRealSize(getDevice());
+ if (displaySizeClosed == null) {
+ CLog.i("Could not determine display size while CLOSED.");
+ return;
+ }
+
try (AutoCloseable a1 = DeviceUtils.withActivity(getDevice(),
DeviceUtils.STATSD_ATOM_TEST_PKG, activity, "action", "action.sleep_top")) {
Thread.sleep(AtomTestUtils.WAIT_TIME_LONG);
@@ -196,6 +204,16 @@
getDevice().executeShellCommand(
String.format(CMD_PUT_DEVICE_STATE_TEMPLATE, DEVICE_STATE_OPENED));
Thread.sleep(AtomTestUtils.WAIT_TIME_LONG);
+
+ Pair<Integer, Integer> displaySizeOpened = getDisplayRealSize(getDevice());
+ if (displaySizeOpened == null) {
+ CLog.i("Could not determine display size while OPENED.");
+ return;
+ }
+ if (displaySizeClosed.equals(displaySizeOpened)) {
+ CLog.i("Display size has not changed.");
+ return;
+ }
}
if (secondActivity != null) {
@@ -245,4 +263,26 @@
.map(Integer::valueOf)
.anyMatch(availableState -> availableState == state);
}
+
+
+ /**
+ * Returns the physical size of the current display used.
+ */
+ private Pair<Integer, Integer> getDisplayRealSize(ITestDevice device) throws Exception {
+ final String physicalSize = "Physical size: ";
+ String str = device.executeShellCommand("wm size");
+ if (!str.isEmpty()) {
+ String[] lines = str.split(System.getProperty("line.separator"));
+ for (String s : lines) {
+ if (s.contains(physicalSize)) {
+ String substring = s.substring(physicalSize.length());
+ if (!substring.isEmpty()) {
+ return Pair.create(Integer.parseInt(substring.split("x")[0]),
+ Integer.parseInt(substring.split("x")[1]));
+ }
+ }
+ }
+ }
+ return null;
+ }
}
diff --git a/hostsidetests/statsdatom/src/android/cts/statsdatom/appops/AppOpsTests.java b/hostsidetests/statsdatom/src/android/cts/statsdatom/appops/AppOpsTests.java
index f07f9d3..cd8c063 100644
--- a/hostsidetests/statsdatom/src/android/cts/statsdatom/appops/AppOpsTests.java
+++ b/hostsidetests/statsdatom/src/android/cts/statsdatom/appops/AppOpsTests.java
@@ -38,8 +38,7 @@
import java.util.Set;
public class AppOpsTests extends DeviceTestCase implements IBuildReceiver {
- private static final int NUM_APP_OPS = AtomsProto.AttributedAppOps.getDefaultInstance().getOp().
- getDescriptorForType().getValues().size() - 1;
+ private static final int NUM_APP_OPS = 116;
private static final int APP_OP_RECORD_AUDIO = 27;
private static final int APP_OP_RECORD_AUDIO_HOTWORD = 102;
diff --git a/hostsidetests/statsdatom/src/android/cts/statsdatom/devicestate/DeviceStateStatsTests.java b/hostsidetests/statsdatom/src/android/cts/statsdatom/devicestate/DeviceStateStatsTests.java
index 440bc94..200b718 100644
--- a/hostsidetests/statsdatom/src/android/cts/statsdatom/devicestate/DeviceStateStatsTests.java
+++ b/hostsidetests/statsdatom/src/android/cts/statsdatom/devicestate/DeviceStateStatsTests.java
@@ -26,9 +26,11 @@
import com.android.os.AtomsProto;
import com.android.os.StatsLog;
import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.device.DeviceFoldableState;
import com.android.tradefed.log.LogUtil.CLog;
import com.android.tradefed.testtype.DeviceTestCase;
import com.android.tradefed.testtype.IBuildReceiver;
+import com.android.compatibility.common.util.PollingCheck;
import java.util.Arrays;
import java.util.List;
@@ -99,6 +101,10 @@
private void testDeviceStateChange(int nextState) throws Exception {
getDevice().executeShellCommand("cmd device_state state " + nextState);
+ // wait device state change complete.
+ PollingCheck.waitFor(2000, () -> nextState == getDevice()
+ .getCurrentFoldableState().getIdentifier());
+
List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice());
assertThat(data.size()).isEqualTo(1);
diff --git a/tests/app/app/src/android/app/stubs/OrientationTestUtils.java b/tests/app/app/src/android/app/stubs/OrientationTestUtils.java
index dabeee7..9ecef54 100644
--- a/tests/app/app/src/android/app/stubs/OrientationTestUtils.java
+++ b/tests/app/app/src/android/app/stubs/OrientationTestUtils.java
@@ -59,7 +59,7 @@
*/
private static int[] getOrientations(final Activity activity) {
// Check the display dimension to get the current device orientation.
- Rect bounds = activity.getWindowManager().getCurrentWindowMetrics().getBounds();
+ final Rect bounds = activity.getWindowManager().getCurrentWindowMetrics().getBounds();
final int originalOrientation = bounds.width() > bounds.height()
? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
: ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
diff --git a/tests/app/src/android/app/cts/ActivityManagerProcessStateTest.java b/tests/app/src/android/app/cts/ActivityManagerProcessStateTest.java
index 05a0f9e..3fa4509 100644
--- a/tests/app/src/android/app/cts/ActivityManagerProcessStateTest.java
+++ b/tests/app/src/android/app/cts/ActivityManagerProcessStateTest.java
@@ -2359,6 +2359,7 @@
// Launch home activity, so the activity in app1 will be stopped, app1 now only has FGS,
// we're not "finishing" the activity because removing a task could result in service
// restart.
+ waitForAppFocus(PACKAGE_NAME_APP1,WAITFOR_MSEC);
final Intent homeIntent = new Intent();
homeIntent.setAction(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
diff --git a/tests/camera/src/android/hardware/camera2/cts/SurfaceViewPreviewTest.java b/tests/camera/src/android/hardware/camera2/cts/SurfaceViewPreviewTest.java
index 88f2710..8e0f1b9 100644
--- a/tests/camera/src/android/hardware/camera2/cts/SurfaceViewPreviewTest.java
+++ b/tests/camera/src/android/hardware/camera2/cts/SurfaceViewPreviewTest.java
@@ -299,11 +299,11 @@
if (mStaticInfo.isHardwareLevelAtLeastLimited()) {
mCollector.expectTrue(
String.format("Camera %s: Preview peak frame interval affected by use of new " +
- " stream: preview avg frame duration: %f ms, peak with new stream: %f ms",
+ " stream: preview peak frame interval: %f ms, peak with new stream: %f ms",
cameraId,
- frameDurationStats.first / 1e6, preparedFrameDurationStats.second / 1e6),
+ frameDurationStats.second / 1e6, preparedFrameDurationStats.second / 1e6),
(preparedFrameDurationStats.second <=
- Math.max(frameDurationStats.first, readerMinFrameDuration) *
+ Math.max(frameDurationStats.second, readerMinFrameDuration) *
(1 + PREPARE_PEAK_RATE_BOUNDS)));
mCollector.expectTrue(
String.format("Camera %s: Preview average frame interval affected by use of new " +
diff --git a/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/TestActivity.java b/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/TestActivity.java
index 76a78f8..948f6a4 100644
--- a/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/TestActivity.java
+++ b/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/TestActivity.java
@@ -19,6 +19,7 @@
import static android.server.wm.jetpack.utils.WindowManagerJetpackTestBase.getActivityBounds;
import android.app.Activity;
+import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Bundle;
@@ -44,7 +45,7 @@
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- final View contentView = new View(this);
+ final View contentView = new TestContentViewForConfigurationChange(this);
mRootViewId = View.generateViewId();
contentView.setId(mRootViewId);
setContentView(contentView);
@@ -74,17 +75,6 @@
sResumeLatch.countDown();
}
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
-
- final Rect newActivityBounds = getActivityBounds(this);
- if (!newActivityBounds.equals(mPreviousBounds)) {
- mPreviousBounds.set(newActivityBounds);
- mBoundsChangeLatch.countDown();
- }
- }
-
/**
* Resets layout counter when waiting for a layout to happen before calling
* {@link #waitForLayout()}.
@@ -151,4 +141,24 @@
return false;
}
}
+
+ /**
+ * Sometimes activity configuration change does not trigger when embedding status change, need
+ * to use View's instead.
+ */
+ class TestContentViewForConfigurationChange extends View {
+ public TestContentViewForConfigurationChange(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ final Rect newActivityBounds = getActivityBounds(TestActivity.this);
+ if (!newActivityBounds.equals(mPreviousBounds)) {
+ mPreviousBounds.set(newActivityBounds);
+ mBoundsChangeLatch.countDown();
+ }
+ }
+ }
}
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/ActivityTransitionTests.java b/tests/framework/base/windowmanager/src/android/server/wm/ActivityTransitionTests.java
index 7e87fb4..79c76a7 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/ActivityTransitionTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/ActivityTransitionTests.java
@@ -64,8 +64,6 @@
import androidx.annotation.Nullable;
import androidx.test.platform.app.InstrumentationRegistry;
-import com.android.compatibility.common.util.SystemUtil;
-
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -180,39 +178,6 @@
+ "actual=" + totalTime, !CUSTOM_ANIMATION_DURATION_RANGE.contains(totalTime));
}
- @Test
- public void testTaskTransitionOverride() {
- final CountDownLatch latch = new CountDownLatch(1);
- AtomicLong transitionStartTime = new AtomicLong();
- AtomicLong transitionEndTime = new AtomicLong();
-
- final ActivityOptions.OnAnimationStartedListener startedListener = transitionStartTime::set;
- final ActivityOptions.OnAnimationFinishedListener finishedListener = (t) -> {
- transitionEndTime.set(t);
- latch.countDown();
- };
-
- SystemUtil.runWithShellPermissionIdentity(() -> {
- // Overriding task transit animation is enabled, so custom animation is played.
- final Bundle bundle = ActivityOptions.makeCustomTaskAnimation(mContext,
- R.anim.alpha, 0, new Handler(Looper.getMainLooper()), startedListener,
- finishedListener).toBundle();
- final Intent intent = new Intent().setComponent(TEST_ACTIVITY)
- .addFlags(FLAG_ACTIVITY_NEW_TASK);
- mContext.startActivity(intent, bundle);
- mWmState.waitForAppTransitionIdleOnDisplay(DEFAULT_DISPLAY);
- waitAndAssertTopResumedActivity(TEST_ACTIVITY, DEFAULT_DISPLAY,
- "Activity must be launched");
-
- latch.await(5, TimeUnit.SECONDS);
- final long totalTime = transitionEndTime.get() - transitionStartTime.get();
- assertTrue("Actual transition duration should be in the range "
- + "<" + CUSTOM_ANIMATION_DURATION_RANGE.getLower() + ", "
- + CUSTOM_ANIMATION_DURATION_RANGE.getUpper() + "> ms, "
- + "actual=" + totalTime, CUSTOM_ANIMATION_DURATION_RANGE.contains(totalTime));
- });
- }
-
/**
* Checks that the activity's theme's background color is used as the default animation's
* background color when no override is specified.
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/ActivityVisibilityTests.java b/tests/framework/base/windowmanager/src/android/server/wm/ActivityVisibilityTests.java
index 74ef09e..165b057 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/ActivityVisibilityTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/ActivityVisibilityTests.java
@@ -353,6 +353,11 @@
.setWindowingMode(WINDOWING_MODE_FULLSCREEN)
.setIntentFlags(FLAG_ACTIVITY_NEW_TASK).execute();
waitAndAssertResumedActivity(BROADCAST_RECEIVER_ACTIVITY,"Activity must be resumed");
+ // Home activity can still be visible if the BROADCAST_RECEIVER_ACTIVITY is not in the
+ // same TaskDisplayArea.
+ assumeTrue("Should launch on same TaskDisplayArea" ,
+ mWmState.getTaskDisplayArea(BROADCAST_RECEIVER_ACTIVITY) ==
+ mWmState.getTaskDisplayArea(mWmState.getHomeActivityName()));
final int taskId = mWmState.getTaskByActivity(BROADCAST_RECEIVER_ACTIVITY).mTaskId;
try {
@@ -397,6 +402,14 @@
// Launch a different activity on top.
launchActivity(BROADCAST_RECEIVER_ACTIVITY, WINDOWING_MODE_FULLSCREEN);
mWmState.waitForActivityState(BROADCAST_RECEIVER_ACTIVITY, STATE_RESUMED);
+ // Assert activity state and visibility only if both tasks were launched
+ // in the same task display area.
+ WindowManagerState.DisplayArea firstTaskTda = mWmState
+ .getTaskDisplayArea(MOVE_TASK_TO_BACK_ACTIVITY);
+ WindowManagerState.DisplayArea secondTaskTda = mWmState
+ .getTaskDisplayArea(BROADCAST_RECEIVER_ACTIVITY);
+ assumeTrue("Tasks were not launched in the same display area ",
+ firstTaskTda == secondTaskTda);
mWmState.waitForActivityState(MOVE_TASK_TO_BACK_ACTIVITY,STATE_STOPPED);
final boolean shouldBeVisible =
!mWmState.isBehindOpaqueActivities(MOVE_TASK_TO_BACK_ACTIVITY);
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/AppConfigurationTests.java b/tests/framework/base/windowmanager/src/android/server/wm/AppConfigurationTests.java
index 719e666..028db21 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/AppConfigurationTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/AppConfigurationTests.java
@@ -492,6 +492,7 @@
// Start a portrait activity first to ensure that the orientation will change.
launchActivity(PORTRAIT_ORIENTATION_ACTIVITY);
mWmState.waitForLastOrientation(SCREEN_ORIENTATION_PORTRAIT);
+ final int prevRotation = mWmState.getRotation();
getLaunchActivityBuilder()
.setUseInstrumentation()
@@ -517,29 +518,34 @@
reportedSizes, onCreateConfigInfo.sizeInfo);
final WindowManagerState.DisplayContent dc = mWmState.getDisplay(Display.DEFAULT_DISPLAY);
- final Point expectedRealDisplaySize =
+ final Point realDisplaySize =
new Point(dc.getDisplayRect().width(), dc.getDisplayRect().height());
- final int expectedRotation = mWmState.getRotation();
+ final int currentRotation = mWmState.getRotation();
+ // Some devices may launch the activity in a letterboxed area so the display won't rotate.
+ final boolean displayRotationChanged = prevRotation != currentRotation;
+
assertEquals("The activity should get the final display rotation in onCreate",
- expectedRotation, onCreateConfigInfo.rotation);
+ currentRotation, onCreateConfigInfo.rotation);
assertEquals("The application should get the final display rotation in onCreate",
- expectedRotation, appConfigInfo.rotation);
+ currentRotation, appConfigInfo.rotation);
assertEquals("The orientation of application must be landscape",
ORIENTATION_LANDSCAPE, appConfigInfo.sizeInfo.orientation);
assertEquals("The orientation of system resources must be landscape",
ORIENTATION_LANDSCAPE, globalSizeInfo.orientation);
- assertEquals("The activity should get the final display size in onCreate",
- expectedRealDisplaySize, onCreateRealDisplaySize);
- final boolean isLandscape = expectedRealDisplaySize.x > expectedRealDisplaySize.y;
- assertEquals("The app size of activity should have the same orientation", isLandscape,
- onCreateSize.displayWidth > onCreateSize.displayHeight);
+ final boolean isLandscape = onCreateSize.displayWidth > onCreateSize.displayHeight;
+ if (displayRotationChanged) {
+ assertEquals("The activity should get the final display size in onCreate",
+ realDisplaySize, onCreateRealDisplaySize);
+ assertEquals("The app size of activity should have the same orientation", isLandscape,
+ realDisplaySize.x > realDisplaySize.y);
+ assertEquals("The display metrics of system resources must be landscape", isLandscape,
+ globalSizeInfo.metricsWidth > globalSizeInfo.metricsHeight);
+ }
assertEquals("The application should get the same orientation", isLandscape,
appConfigInfo.sizeInfo.displayWidth > appConfigInfo.sizeInfo.displayHeight);
assertEquals("The app display metrics must be landscape", isLandscape,
appConfigInfo.sizeInfo.metricsWidth > appConfigInfo.sizeInfo.metricsHeight);
- assertEquals("The display metrics of system resources must be landscape", isLandscape,
- globalSizeInfo.metricsWidth > globalSizeInfo.metricsHeight);
}
@Test
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/AspectRatioTestsBase.java b/tests/framework/base/windowmanager/src/android/server/wm/AspectRatioTestsBase.java
index 20e4c79..459ff76 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/AspectRatioTestsBase.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/AspectRatioTestsBase.java
@@ -25,6 +25,7 @@
import android.content.ComponentName;
import android.graphics.Point;
import android.graphics.Rect;
+import android.server.wm.WindowManagerState.DisplayArea;
import android.view.Display;
import android.view.WindowManager;
@@ -97,10 +98,8 @@
}
float getDisplayAspectRatio(ComponentName componentName) {
- final int displayId = mWmState.getDisplayByActivity(componentName);
- final WindowManagerState.DisplayContent display = mWmState.getDisplay(displayId);
-
- final Rect appRect = display.getAppRect();
+ final DisplayArea tda = mWmState.getTaskDisplayArea(componentName);
+ final Rect appRect = tda.getAppBounds();
final int shortSide = Math.min(appRect.width(), appRect.height());
final int longSide = Math.max(appRect.width(), appRect.height());
return (float) longSide / (float) shortSide;
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/AssistantStackTests.java b/tests/framework/base/windowmanager/src/android/server/wm/AssistantStackTests.java
index e491926..79bbe9c 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/AssistantStackTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/AssistantStackTests.java
@@ -352,6 +352,11 @@
// Launch a new fullscreen activity
// Using Animation Test Activity because it is opaque on all devices.
launchActivityOnDisplay(ANIMATION_TEST_ACTIVITY, WINDOWING_MODE_FULLSCREEN, mAssistantDisplayId);
+ // If the activity is not launched in same TDA, ASSISTANT_ACTIVITY will be visible.
+ assumeTrue("Should launch in same TDA",
+ mWmState.getTaskDisplayArea(ASSISTANT_ACTIVITY)
+ == mWmState.getTaskDisplayArea(ANIMATION_TEST_ACTIVITY)
+ );
// Wait for animation finished.
mWmState.waitForActivityState(ANIMATION_TEST_ACTIVITY, STATE_RESUMED);
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/KeyguardTests.java b/tests/framework/base/windowmanager/src/android/server/wm/KeyguardTests.java
index 3062980..d0e11d6 100755
--- a/tests/framework/base/windowmanager/src/android/server/wm/KeyguardTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/KeyguardTests.java
@@ -441,6 +441,12 @@
.setWaitForLaunched(false)
.setTargetActivity(BROADCAST_RECEIVER_ACTIVITY).execute();
mWmState.waitForKeyguardShowingAndNotOccluded();
+ // The activity should be launched in same TDA to ensure that
+ // keyguard is showing and not occluded.
+ assumeTrue("Should launch in same TDA",
+ mWmState.getTaskDisplayArea(occludingActivity)
+ == mWmState.getTaskDisplayArea(BROADCAST_RECEIVER_ACTIVITY)
+ );
mWmState.assertKeyguardShowingAndNotOccluded();
mBroadcastActionTrigger.finishBroadcastReceiverActivity();
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java b/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java
index 7182add..cd1fcda 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java
@@ -1092,6 +1092,11 @@
extraString(EXTRA_ON_PAUSE_DELAY, "350"),
extraString(EXTRA_ASSERT_NO_ON_STOP_BEFORE_PIP, "true"));
launchActivity(RESUME_WHILE_PAUSING_ACTIVITY);
+ // if the activity is not launched in same TDA, pip is not triggered.
+ assumeTrue("Should launch in same tda",
+ mWmState.getTaskDisplayArea(RESUME_WHILE_PAUSING_ACTIVITY)
+ == mWmState.getTaskDisplayArea(PIP_ACTIVITY)
+ );
assertPinnedStackExists();
}
@@ -1481,8 +1486,13 @@
launchActivity(PIP_ACTIVITY, extraString(EXTRA_ALLOW_AUTO_PIP, "true"));
assertPinnedStackDoesNotExist();
- // Launch a regular activity and ensure that there is a pinned stack.
+ // Launch another and ensure that there is a pinned stack.
launchActivity(TEST_ACTIVITY, WINDOWING_MODE_FULLSCREEN);
+ // if the activities do not launch in same TDA, pip is not triggered.
+ assumeTrue("Should launch in same tda",
+ mWmState.getTaskDisplayArea(PIP_ACTIVITY)
+ == mWmState.getTaskDisplayArea(TEST_ACTIVITY)
+ );
waitForEnterPip(PIP_ACTIVITY);
assertPinnedStackExists();
waitAndAssertActivityState(PIP_ACTIVITY, STATE_PAUSED, "activity must be paused");
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsLayoutTests.java b/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsLayoutTests.java
index 4838c01..b786191 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsLayoutTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsLayoutTests.java
@@ -73,7 +73,8 @@
testSetFitInsetsTypesInner(Type.statusBars(), activity, mainWindowRoot);
testSetFitInsetsTypesInner(Type.navigationBars(), activity, mainWindowRoot);
- testSetFitInsetsTypesInner(Type.systemBars(), activity, mainWindowRoot);
+ testSetFitInsetsTypesInner(Type.systemBars() & ~Type.captionBar(), activity,
+ mainWindowRoot);
}
private void testSetFitInsetsTypesInner(
@@ -123,7 +124,7 @@
private void testSetFitInsetsSidesInner(
int sides, TestActivity activity, View mainWindowRoot) {
- final int types = Type.systemBars();
+ final int types = Type.systemBars() & ~Type.captionBar();
getInstrumentation().runOnMainSync(() -> {
activity.addChildWindow(types, sides, false);
});
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsTestHelper.java b/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsTestHelper.java
index 430b2c5..37110e9 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsTestHelper.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsTestHelper.java
@@ -50,7 +50,11 @@
public static void assertMetricsMatchesLayout(WindowMetrics currentMetrics,
WindowMetrics maxMetrics, Rect layoutBounds, WindowInsets layoutInsets,
boolean isFreeform, boolean isFloating) {
- assertEquals(layoutBounds, currentMetrics.getBounds());
+ // Only validate the size portion of the bounds, regardless of the position on the screen to
+ // take into consideration multiple screen devices (e.g. the dialog is on another screen)
+ final Rect currentMetricsBounds = currentMetrics.getBounds();
+ assertEquals(layoutBounds.height(), currentMetricsBounds.height());
+ assertEquals(layoutBounds.width(), currentMetricsBounds.width());
// Freeform activities doesn't guarantee max window metrics bounds is larger than current
// window metrics bounds. The bounds of a freeform activity is unlimited except that
// it must be contained in display bounds.
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/intent/LaunchRunner.java b/tests/framework/base/windowmanager/src/android/server/wm/intent/LaunchRunner.java
index 678b7dd..aa3e453 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/intent/LaunchRunner.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/intent/LaunchRunner.java
@@ -25,6 +25,7 @@
import static com.google.common.collect.Iterables.getLast;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assume.assumeTrue;
import android.app.Activity;
import android.app.ActivityOptions;
@@ -97,14 +98,18 @@
// Launch the first activity from the start context
GenerationIntent firstIntent = initialState.get(0);
+ ComponentName firstLaunchActivity = firstIntent.getActualIntent().getComponent();
activityLog.add(launchFromContext(initialContext, firstIntent.getActualIntent()));
+ int firstActivityTaskDisplayAreaId =
+ mTestBase.getWmState().getTaskDisplayAreaFeatureId(firstLaunchActivity);
+
// launch the rest from the initial intents
for (int i = 1; i < initialState.size(); i++) {
GenerationIntent generationIntent = initialState.get(i);
Activity activityToLaunchFrom = activityLog.get(generationIntent.getLaunchFromIndex(i));
Activity result = launch(activityToLaunchFrom, generationIntent.getActualIntent(),
- generationIntent.startForResult());
+ generationIntent.startForResult(), firstActivityTaskDisplayAreaId);
activityLog.add(result);
}
@@ -119,7 +124,7 @@
Activity activityToLaunchFrom = activityLog.get(
generationIntent.getLaunchFromIndex(initialState.size() + i));
Activity result = launch(activityToLaunchFrom, generationIntent.getActualIntent(),
- generationIntent.startForResult());
+ generationIntent.startForResult(), firstActivityTaskDisplayAreaId);
activityLog.add(result);
}
@@ -256,6 +261,11 @@
}
public Activity launch(Activity activityContext, Intent intent, boolean startForResult) {
+ return launch(activityContext, intent, startForResult, -1);
+ }
+
+ public Activity launch(Activity activityContext, Intent intent, boolean startForResult,
+ int expectedTda) {
Instrumentation.ActivityMonitor monitor = getInstrumentation()
.addMonitor((String) null, null, false);
@@ -268,13 +278,21 @@
if (activity == null) {
return activityContext;
- } else if (startForResult && activityContext == activity) {
- // The result may have been sent back to caller activity and forced the caller activity
- // to be resumed again, before the started activity actually resumed. Just wait for idle
- // for that case.
- getInstrumentation().waitForIdleSync();
} else {
- waitAndAssertActivityLaunched(activity, intent);
+ if (expectedTda != -1) {
+ // If a expected TDA is given, we should check that the launched componentName
+ // is where it should be
+ assertActivityLaunchedOnSameTda(intent.getComponent(), expectedTda);
+ }
+
+ if (startForResult && activityContext == activity) {
+ // The result may have been sent back to caller activity and forced the caller activity
+ // to be resumed again, before the started activity actually resumed. Just wait for idle
+ // for that case.
+ getInstrumentation().waitForIdleSync();
+ } else {
+ waitAndAssertActivityLaunched(activity, intent);
+ }
}
return activity;
@@ -289,6 +307,22 @@
}
/**
+ * Checks if a component was launched on the expected Task Display Area or not.
+ *
+ * If the check fail, the test will have an assumption fail result.
+ * @param activity The component to be searched for
+ * @param expectedTda The task display in which the activity is expected to be launched
+ */
+ private void assertActivityLaunchedOnSameTda(ComponentName activity, int expectedTda) {
+ if (activity != null){
+ mTestBase.getWmState().computeState(activity);
+
+ assumeTrue("Should launch in same tda",
+ expectedTda == mTestBase.getWmState().getTaskDisplayAreaFeatureId(activity));
+ }
+ }
+
+ /**
* After the last activity has been launched we wait for a valid state + an extra three seconds
* so have a stable state of the system. Also all previously known tasks in
* {@link LaunchRunner#mBaseTasks} is excluded from the output.
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleTests.java b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleTests.java
index e7b2909..a312c9d 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleTests.java
@@ -76,6 +76,7 @@
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
import android.app.Activity;
import android.app.ActivityOptions;
@@ -721,6 +722,16 @@
final Activity testActivity = new Launcher(FirstActivity.class)
.setOptions(getLaunchOptionsForFullscreen())
.launch();
+
+ // FirstActivity should be in the same TDA as targetActivity in order to affect the
+ // targetActivity visibility.
+ mWmState.waitForValidState(testActivity.getComponentName());
+ final int targetActivityTDAFeatureId = mWmState.getTaskDisplayAreaFeatureId(targetActivity);
+ final int testActivityTDAFeatureId = mWmState.getTaskDisplayAreaFeatureId(
+ testActivity.getComponentName());
+ assumeTrue("Activities should be on the same TaskDisplayArea",
+ targetActivityTDAFeatureId == testActivityTDAFeatureId);
+
final boolean isTranslucent = isTranslucent(testActivity);
mWmState.waitForActivityState(
targetActivity, isTranslucent ? STATE_PAUSED : STATE_STOPPED);
diff --git a/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerState.java b/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerState.java
index ad7b7da..d009abd 100644
--- a/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerState.java
+++ b/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerState.java
@@ -30,6 +30,7 @@
import static android.util.DisplayMetrics.DENSITY_DEFAULT;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.window.DisplayAreaOrganizer.FEATURE_IME;
+import static android.window.DisplayAreaOrganizer.FEATURE_UNDEFINED;
import static androidx.test.InstrumentationRegistry.getInstrumentation;
@@ -37,6 +38,7 @@
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
import android.app.ActivityTaskManager;
import android.content.ComponentName;
@@ -49,6 +51,7 @@
import android.util.SparseArray;
import android.view.nano.DisplayInfoProto;
import android.view.nano.ViewProtoEnums;
+import android.window.DisplayAreaOrganizer;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -507,6 +510,15 @@
return result.stream().findFirst().orElse(null);
}
+ public int getTaskDisplayAreaFeatureId(ComponentName activityName) {
+ final DisplayArea taskDisplayArea = getTaskDisplayArea(activityName);
+ if (taskDisplayArea != null) {
+ return taskDisplayArea.getFeatureId();
+ }
+
+ return FEATURE_UNDEFINED;
+ }
+
@Nullable
DisplayArea getDisplayArea(String windowName) {
final List<DisplayArea> result = new ArrayList<>();
@@ -1263,6 +1275,14 @@
return result.stream().findFirst().orElse(null);
}
+ List<DisplayArea> getTaskDisplayAreas(ComponentName activityName) {
+ final List<DisplayArea> taskDisplayAreas = getAllTaskDisplayAreas();
+
+ return taskDisplayAreas.stream()
+ .filter(tda -> tda.containsActivity(activityName))
+ .collect(Collectors.toList());
+ }
+
List<DisplayArea> getAllChildDisplayAreas() {
final List<DisplayArea> displayAreas = new ArrayList<>();
collectDescendantsOfType(DisplayArea.class,this, displayAreas);
@@ -1913,6 +1933,10 @@
return mIsOrganized;
}
+ public Rect getAppBounds() {
+ return mFullConfiguration.windowConfiguration.getAppBounds();
+ }
+
@Override
public Rect getBounds() {
if (mBounds == null) {
diff --git a/tests/signature/lib/common/src/android/signature/cts/InterfaceChecker.java b/tests/signature/lib/common/src/android/signature/cts/InterfaceChecker.java
index bec80b7..b642efa 100644
--- a/tests/signature/lib/common/src/android/signature/cts/InterfaceChecker.java
+++ b/tests/signature/lib/common/src/android/signature/cts/InterfaceChecker.java
@@ -78,7 +78,7 @@
HIDDEN_INTERFACE_METHOD_ALLOW_LIST.add("public abstract void android.view.inputmethod.InputMethod.hideSoftInputWithToken(int,android.os.ResultReceiver,android.os.IBinder)");
HIDDEN_INTERFACE_METHOD_ALLOW_LIST.add("public abstract boolean android.view.WindowInsetsAnimationController.hasZeroInsetsIme()");
HIDDEN_INTERFACE_METHOD_ALLOW_LIST.add("public abstract void android.view.WindowInsetsController.setCaptionInsetsHeight(int)");
- HIDDEN_INTERFACE_METHOD_ALLOW_LIST.add("public abstract void android.view.WindowinsetsController.setSystemDrivenInsetsAnimationLoggingListener(android.view.WindowInsetsAnimationControlListener)");
+ HIDDEN_INTERFACE_METHOD_ALLOW_LIST.add("public abstract void android.view.WindowInsetsController.setSystemDrivenInsetsAnimationLoggingListener(android.view.WindowInsetsAnimationControlListener)");
HIDDEN_INTERFACE_METHOD_ALLOW_LIST.add("public abstract void android.view.inputmethod.InputMethod.setCurrentHideInputToken(android.os.IBinder)");
HIDDEN_INTERFACE_METHOD_ALLOW_LIST.add("public abstract void android.view.inputmethod.InputMethod.setCurrentShowInputToken(android.os.IBinder)");
HIDDEN_INTERFACE_METHOD_ALLOW_LIST.add("public abstract void android.view.inputmethod.InputMethodSession.notifyImeHidden()");
diff --git a/tests/tests/content/Android.bp b/tests/tests/content/Android.bp
index 3accfec..7a691f9 100644
--- a/tests/tests/content/Android.bp
+++ b/tests/tests/content/Android.bp
@@ -112,7 +112,7 @@
":CtsContentMaxSharedUserIdTestApp",
":CtsContentLongPackageNameTestApp",
":CtsContentNoApplicationTestApp",
- ":CtsApkVerityTestPrebuiltFilesArm64",
+ ":CtsApkVerityTestPrebuiltFiles",
// v1/v2/v3/v4 signed version of android.appsecurity.cts.tinyapp to keep checksums stable
"data/CtsPkgInstallTinyAppV1.apk",
"data/CtsPkgInstallTinyAppV2V3V4.apk",
diff --git a/tests/tests/content/src/android/content/pm/cts/ChecksumsTest.java b/tests/tests/content/src/android/content/pm/cts/ChecksumsTest.java
index 3fff855..e43a968 100644
--- a/tests/tests/content/src/android/content/pm/cts/ChecksumsTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/ChecksumsTest.java
@@ -137,8 +137,10 @@
private static final String TEST_FIXED_APK_FSVERITY = "CtsApkVerityTestAppPrebuilt.apk";
private static final String TEST_FIXED_APK_FSVERITY_FSVSIG =
"CtsApkVerityTestAppPrebuilt.apk.fsv_sig";
- private static final String TEST_FIXED_APK_FSVERITY_SHA256 =
+ private static final String TEST_FIXED_APK_FSVERITY_SHA256_ARM64 =
"b64007327096541dc9c548ad5540fd41e11ab209e7bce5b12295aac49074848f";
+ private static final String TEST_FIXED_APK_FSVERITY_SHA256_X86_64 =
+ "b7625fe0f151053e80b6da95bca1dfa1a2ac46319d8d2b483d3a58427688940c";
private static final String TEST_FIXED_APK_V2_SHA256 =
"1eec9e86e322b8d7e48e255fc3f2df2dbc91036e63982ff9850597c6a37bbeb3";
@@ -155,6 +157,8 @@
new Checksum(TYPE_WHOLE_SHA256, hexStringToBytes(TEST_FIXED_APK_SHA256)),
new Checksum(TYPE_WHOLE_MD5, hexStringToBytes(TEST_FIXED_APK_MD5))};
+ private static final String PRIMARY_ABI = Build.SUPPORTED_ABIS[0];
+
/** Default is to not use fs-verity since it depends on kernel support. */
private static final int FSVERITY_DISABLED = 0;
@@ -334,10 +338,21 @@
assertNotNull(checksums);
assertEquals(checksums.length, 2);
assertEquals(checksums[0].getType(), TYPE_WHOLE_MERKLE_ROOT_4K_SHA256);
- assertEquals(bytesToHexString(checksums[0].getValue()), TEST_FIXED_APK_FSVERITY_SHA256);
- assertEquals(checksums[1].getType(), TYPE_PARTIAL_MERKLE_ROOT_1M_SHA256);
- assertEquals(bytesToHexString(checksums[1].getValue()),
+ if ("x86_64".equals(PRIMARY_ABI) || "x86".equals(PRIMARY_ABI)) {
+ assertEquals(bytesToHexString(checksums[0].getValue()),
+ TEST_FIXED_APK_FSVERITY_SHA256_X86_64);
+ assertEquals(bytesToHexString(checksums[1].getValue()),
+ "413ba1b77fda86eda27bedd8ddb08c549650a802a3e59780226627e9b04127ac");
+ } else if ("arm64-v8a".equals(PRIMARY_ABI) || "armeabi".equals(PRIMARY_ABI)
+ || "armeabi-v7a".equals(PRIMARY_ABI)) {
+ assertEquals(bytesToHexString(checksums[0].getValue()),
+ TEST_FIXED_APK_FSVERITY_SHA256_ARM64);
+ assertEquals(bytesToHexString(checksums[1].getValue()),
"1edbfd7f5825f71840ada2b5b2c7e5ad54d459d3ef04f49b778c96baf319bbb9");
+ } else {
+ Assert.fail("Unsupported ABI: " + PRIMARY_ABI);
+ }
+ assertEquals(checksums[1].getType(), TYPE_PARTIAL_MERKLE_ROOT_1M_SHA256);
}
@LargeTest
@@ -358,7 +373,16 @@
assertNotNull(checksums);
assertEquals(checksums.length, 1);
assertEquals(checksums[0].getType(), TYPE_WHOLE_MERKLE_ROOT_4K_SHA256);
- assertEquals(bytesToHexString(checksums[0].getValue()), TEST_FIXED_APK_FSVERITY_SHA256);
+ if ("x86_64".equals(PRIMARY_ABI) || "x86".equals(PRIMARY_ABI)) {
+ assertEquals(bytesToHexString(checksums[0].getValue()),
+ TEST_FIXED_APK_FSVERITY_SHA256_X86_64);
+ } else if ("arm64-v8a".equals(PRIMARY_ABI) || "armeabi".equals(PRIMARY_ABI)
+ || "armeabi-v7a".equals(PRIMARY_ABI)) {
+ assertEquals(bytesToHexString(checksums[0].getValue()),
+ TEST_FIXED_APK_FSVERITY_SHA256_ARM64);
+ } else {
+ Assert.fail("Unsupported ABI: " + PRIMARY_ABI);
+ }
}
@Test
diff --git a/tests/tests/hardware/src/android/hardware/input/cts/tests/VirtualDeviceTestCase.java b/tests/tests/hardware/src/android/hardware/input/cts/tests/VirtualDeviceTestCase.java
index aff4b33..7177cc4 100644
--- a/tests/tests/hardware/src/android/hardware/input/cts/tests/VirtualDeviceTestCase.java
+++ b/tests/tests/hardware/src/android/hardware/input/cts/tests/VirtualDeviceTestCase.java
@@ -198,11 +198,16 @@
final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime,
MotionEvent.ACTION_DOWN, p.x, p.y, 0 /* metaState */);
downEvent.setDisplayId(displayId);
- mInstrumentation.sendPointerSync(downEvent);
final MotionEvent upEvent = MotionEvent.obtain(downTime, SystemClock.elapsedRealtime(),
MotionEvent.ACTION_UP, p.x, p.y, 0 /* metaState */);
upEvent.setDisplayId(displayId);
- mInstrumentation.sendPointerSync(upEvent);
+
+ try {
+ mInstrumentation.sendPointerSync(downEvent);
+ mInstrumentation.sendPointerSync(upEvent);
+ } catch (IllegalArgumentException e) {
+ fail("Failed to sending taps to the activity. Is the device unlocked?");
+ }
verifyEvents(ImmutableList.of(downEvent, upEvent));
}
diff --git a/tests/tests/mediastress/AndroidManifest.xml b/tests/tests/mediastress/AndroidManifest.xml
index 157cd3c..9f717fc 100644
--- a/tests/tests/mediastress/AndroidManifest.xml
+++ b/tests/tests/mediastress/AndroidManifest.xml
@@ -32,7 +32,7 @@
<activity android:label="@string/app_name"
android:name="android.mediastress.cts.MediaFrameworkTest"
android:screenOrientation="landscape"
- android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
+ android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
diff --git a/tests/tests/mediatranscoding/src/android/media/mediatranscoding/cts/MediaTranscodingManagerTest.java b/tests/tests/mediatranscoding/src/android/media/mediatranscoding/cts/MediaTranscodingManagerTest.java
index c265aa9..8cc567c 100644
--- a/tests/tests/mediatranscoding/src/android/media/mediatranscoding/cts/MediaTranscodingManagerTest.java
+++ b/tests/tests/mediatranscoding/src/android/media/mediatranscoding/cts/MediaTranscodingManagerTest.java
@@ -16,8 +16,12 @@
package android.media.mediatranscoding.cts;
-import static org.testng.Assert.assertThrows;
-
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
import android.content.ContentResolver;
import android.content.Context;
@@ -38,6 +42,7 @@
import android.os.Environment;
import android.os.FileUtils;
import android.os.ParcelFileDescriptor;
+import android.os.SystemProperties;
import android.platform.test.annotations.AppModeFull;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresDevice;
@@ -47,6 +52,7 @@
import androidx.test.filters.SdkSuppress;
import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
import com.android.compatibility.common.util.MediaUtils;
@@ -69,11 +75,17 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
-@Presubmit
+import org.junit.After;
+import org.junit.Assume;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
@RequiresDevice
@AppModeFull(reason = "Instant apps cannot access the SD card")
@SdkSuppress(minSdkVersion = 31, codeName = "S")
-public class MediaTranscodingManagerTest extends AndroidTestCase {
+@RunWith(AndroidJUnit4.class)
+public class MediaTranscodingManagerTest {
private static final String TAG = "MediaTranscodingManagerTest";
/** The time to wait for the transcode operation to complete before failing the test. */
private static final int TRANSCODE_TIMEOUT_SECONDS = 10;
@@ -162,10 +174,13 @@
return format;
}
- @Override
+ @Before
public void setUp() throws Exception {
Log.d(TAG, "setUp");
- super.setUp();
+
+ Assume.assumeTrue("Media transcoding disabled",
+ SystemProperties.getBoolean("sys.fuse.transcode_enabled", false));
+
mContext = InstrumentationRegistry.getInstrumentation().getContext();
mContentResolver = mContext.getContentResolver();
@@ -188,11 +203,10 @@
mDestinationUri = generateNewUri(mContext, "transcoded.mp4");
}
- @Override
+ @After
public void tearDown() throws Exception {
InstrumentationRegistry
.getInstrumentation().getUiAutomation().dropShellPermissionIdentity();
- super.tearDown();
}
// Skip the test for TV, Car and Watch devices.
@@ -207,6 +221,7 @@
/**
* Verify that setting null destination uri will throw exception.
*/
+ @Test
public void testCreateTranscodingRequestWithNullDestinationUri() throws Exception {
if (shouldSkip()) {
return;
@@ -222,6 +237,7 @@
/**
* Verify that setting invalid pid will throw exception.
*/
+ @Test
public void testCreateTranscodingWithInvalidClientPid() throws Exception {
if (shouldSkip()) {
return;
@@ -238,6 +254,7 @@
/**
* Verify that setting invalid uid will throw exception.
*/
+ @Test
public void testCreateTranscodingWithInvalidClientUid() throws Exception {
if (shouldSkip()) {
return;
@@ -254,6 +271,7 @@
/**
* Verify that setting null source uri will throw exception.
*/
+ @Test
public void testCreateTranscodingRequestWithNullSourceUri() throws Exception {
if (shouldSkip()) {
return;
@@ -269,6 +287,7 @@
/**
* Verify that not setting source uri will throw exception.
*/
+ @Test
public void testCreateTranscodingRequestWithoutSourceUri() throws Exception {
if (shouldSkip()) {
return;
@@ -284,6 +303,7 @@
/**
* Verify that not setting destination uri will throw exception.
*/
+ @Test
public void testCreateTranscodingRequestWithoutDestinationUri() throws Exception {
if (shouldSkip()) {
return;
@@ -300,6 +320,7 @@
/**
* Verify that setting video transcoding without setting video format will throw exception.
*/
+ @Test
public void testCreateTranscodingRequestWithoutVideoFormat() throws Exception {
if (shouldSkip()) {
return;
@@ -353,6 +374,7 @@
}
// Tests transcoding from invalid file uri and expects failure.
+ @Test
public void testTranscodingInvalidSrcUri() throws Exception {
if (shouldSkip()) {
return;
@@ -370,6 +392,7 @@
// Tests transcoding to a uri in res folder and expects failure as test could not write to res
// folder.
+ @Test
public void testTranscodingToResFolder() throws Exception {
if (shouldSkip()) {
return;
@@ -384,6 +407,7 @@
}
// Tests transcoding to a uri in internal cache folder and expects success.
+ @Test
public void testTranscodingToCacheDir() throws Exception {
if (shouldSkip()) {
return;
@@ -398,6 +422,7 @@
}
// Tests transcoding to a uri in internal files directory and expects success.
+ @Test
public void testTranscodingToInternalFilesDir() throws Exception {
if (shouldSkip()) {
return;
@@ -410,6 +435,7 @@
TranscodingSession.RESULT_SUCCESS);
}
+ @Test
public void testHevcTranscoding720PVideo30FramesWithoutAudio() throws Exception {
if (shouldSkip()) {
return;
@@ -418,6 +444,7 @@
"Video_HEVC_720p_30Frames.mp4"), false /* testFileDescriptor */);
}
+ @Test
public void testAvcTranscoding1080PVideo30FramesWithoutAudio() throws Exception {
if (shouldSkip()) {
return;
@@ -426,6 +453,7 @@
false /* testFileDescriptor */);
}
+ @Test
public void testHevcTranscoding1080PVideo30FramesWithoutAudio() throws Exception {
if (shouldSkip()) {
return;
@@ -436,6 +464,7 @@
}
// Enable this after fixing b/175641397
+ @Test
public void testHevcTranscoding1080PVideo1FrameWithAudio() throws Exception {
if (shouldSkip()) {
return;
@@ -444,6 +473,7 @@
"Video_HEVC_1Frame_Audio.mp4"), false /* testFileDescriptor */);
}
+ @Test
public void testHevcTranscoding1080PVideo37FramesWithAudio() throws Exception {
if (shouldSkip()) {
return;
@@ -452,6 +482,7 @@
"Video_HEVC_37Frames_Audio.mp4"), false /* testFileDescriptor */);
}
+ @Test
public void testHevcTranscoding1080PVideo72FramesWithAudio() throws Exception {
if (shouldSkip()) {
return;
@@ -461,6 +492,7 @@
}
// This test will only run when the device support decoding and encoding 4K video.
+ @Test
public void testHevcTranscoding4KVideo64FramesWithAudio() throws Exception {
if (shouldSkip()) {
return;
@@ -469,6 +501,7 @@
"Video_4K_HEVC_64Frames_Audio.mp4"), false /* testFileDescriptor */);
}
+ @Test
public void testHevcTranscodingWithFileDescriptor() throws Exception {
if (shouldSkip()) {
return;
@@ -604,6 +637,7 @@
assertNotNull(videoTrackFormat);
}
+ @Test
public void testVideoFormatResolverValidArgs() {
if (shouldSkip()) {
return;
@@ -612,6 +646,7 @@
FRAME_RATE);
}
+ @Test
public void testVideoFormatResolverAv1Mime() {
if (shouldSkip()) {
return;
@@ -646,6 +681,7 @@
});
}
+ @Test
public void testVideoFormatResolverZeroWidth() {
if (shouldSkip()) {
return;
@@ -654,6 +690,7 @@
HEIGHT, FRAME_RATE);
}
+ @Test
public void testVideoFormatResolverZeroHeight() {
if (shouldSkip()) {
return;
@@ -662,6 +699,7 @@
0 /* height */, FRAME_RATE);
}
+ @Test
public void testVideoFormatResolverZeroFrameRate() {
if (shouldSkip()) {
return;
@@ -670,6 +708,7 @@
HEIGHT, 0 /* frameRate */);
}
+ @Test
public void testVideoFormatResolverNegativeWidth() {
if (shouldSkip()) {
return;
@@ -678,6 +717,7 @@
HEIGHT, FRAME_RATE);
}
+ @Test
public void testVideoFormatResolverNegativeHeight() {
if (shouldSkip()) {
return;
@@ -686,6 +726,7 @@
-HEIGHT, FRAME_RATE);
}
+ @Test
public void testVideoFormatResolverNegativeFrameRate() {
if (shouldSkip()) {
return;
@@ -694,6 +735,7 @@
HEIGHT, -FRAME_RATE);
}
+ @Test
public void testVideoFormatResolverMissingWidth() {
if (shouldSkip()) {
return;
@@ -702,6 +744,7 @@
HEIGHT /* height */, FRAME_RATE);
}
+ @Test
public void testVideoFormatResolverMissingHeight() {
if (shouldSkip()) {
return;
@@ -710,6 +753,7 @@
INT_NOT_SET /* height */, FRAME_RATE);
}
+ @Test
public void testVideoFormatResolverMissingFrameRate() {
if (shouldSkip()) {
return;
@@ -729,6 +773,7 @@
MediaFormat.KEY_BIT_RATE));
}
+ @Test
public void testCancelTranscoding() throws Exception {
if (shouldSkip()) {
return;
@@ -785,6 +830,7 @@
assertTrue("Fails to cancel transcoding", finishedOnTime);
}
+ @Test
public void testTranscodingProgressUpdate() throws Exception {
if (shouldSkip()) {
return;
@@ -837,6 +883,7 @@
progressUpdateCount.get() > 10);
}
+ @Test
public void testAddingClientUids() throws Exception {
if (shouldSkip()) {
return;
diff --git a/tests/tests/os/src/android/os/cts/AppHibernationIntegrationTest.kt b/tests/tests/os/src/android/os/cts/AppHibernationIntegrationTest.kt
index 26473ed..cff7bef 100644
--- a/tests/tests/os/src/android/os/cts/AppHibernationIntegrationTest.kt
+++ b/tests/tests/os/src/android/os/cts/AppHibernationIntegrationTest.kt
@@ -67,6 +67,7 @@
import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
+import org.junit.Ignore
/**
* Integration test for app hibernation.
@@ -137,6 +138,7 @@
}
@Test
+ @Ignore("b/201545116")
fun testUnusedApp_getsForceStopped() {
withUnusedThresholdMs(TEST_UNUSED_THRESHOLD) {
withApp(APK_PATH_S_APP, APK_PACKAGE_NAME_S_APP) {
diff --git a/tests/tests/os/src/android/os/cts/AutoRevokeTest.kt b/tests/tests/os/src/android/os/cts/AutoRevokeTest.kt
index 9667a55..d95c72d 100644
--- a/tests/tests/os/src/android/os/cts/AutoRevokeTest.kt
+++ b/tests/tests/os/src/android/os/cts/AutoRevokeTest.kt
@@ -178,6 +178,7 @@
@AppModeFull(reason = "Uses separate apps for testing")
@Test
+ @Ignore("b/201545116")
fun testUnusedApp_uninstallApp() {
assumeFalse(
"Unused apps screen may be unavailable on TV",
diff --git a/tests/tests/os/src/android/os/storage/cts/StorageManagerTest.java b/tests/tests/os/src/android/os/storage/cts/StorageManagerTest.java
index e0edade..3beffbb 100644
--- a/tests/tests/os/src/android/os/storage/cts/StorageManagerTest.java
+++ b/tests/tests/os/src/android/os/storage/cts/StorageManagerTest.java
@@ -310,7 +310,9 @@
Log.d(TAG, "testGetStorageVolumeUSB#volumeName: " + volumeName);
List<StorageVolume> storageVolumes = mStorageManager.getStorageVolumes();
Optional<StorageVolume> usbStorageVolume =
- storageVolumes.stream().filter(sv->sv.getPath().contains(volumeName)).findFirst();
+ storageVolumes.stream().filter(sv->
+ sv != null && sv.getPath() != null && sv.getPath().contains(volumeName)
+ ).findFirst();
assertTrue("The USB storage volume mounted on the main user is not present in "
+ storageVolumes.stream().map(StorageVolume::getPath)
.collect(joining("\n")), usbStorageVolume.isPresent());
@@ -322,7 +324,9 @@
Log.d(TAG, "testGetStorageVolumeSDCard#volumeName: " + volumeName);
List<StorageVolume> storageVolumes = mStorageManager.getStorageVolumes();
Optional<StorageVolume> sdCardStorageVolume =
- storageVolumes.stream().filter(sv->sv.getPath().contains(volumeName)).findFirst();
+ storageVolumes.stream().filter(sv->
+ sv != null && sv.getPath() != null && sv.getPath().contains(volumeName)
+ ).findFirst();
assertTrue("The SdCard storage volume mounted on the main user is not present in "
+ storageVolumes.stream().map(StorageVolume::getPath)
.collect(joining("\n")), sdCardStorageVolume.isPresent());
diff --git a/tests/tests/preference/src/android/preference/cts/PreferenceRecycleTest.java b/tests/tests/preference/src/android/preference/cts/PreferenceRecycleTest.java
index f678d55..567c9d1 100644
--- a/tests/tests/preference/src/android/preference/cts/PreferenceRecycleTest.java
+++ b/tests/tests/preference/src/android/preference/cts/PreferenceRecycleTest.java
@@ -16,7 +16,6 @@
package android.preference.cts;
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -86,25 +85,7 @@
RecycleCheckPreference noRecyclePref =
(RecycleCheckPreference) screen.findPreference("pref_checkbox_no_recycle");
- // At the beginning the views must be always created (no recycling involved).
- assertEquals(1, recyclePref.getViewCalledCnt);
- assertTrue(recyclePref.wasConvertViewNullInLastCall);
-
- assertEquals(1, noRecyclePref.getViewCalledCnt);
- assertTrue(noRecyclePref.wasConvertViewNullInLastCall);
-
- // Change a value of some pref to force the list to refresh
- mActivityRule.runOnUiThread(() -> recyclePref.setChecked(!recyclePref.isChecked()));
-
- // Wait for the list to refresh
- PollingCheck.waitFor(TIMEOUT_MS,
- () -> recyclePref.getViewCalledCnt == 2 && noRecyclePref.getViewCalledCnt == 2);
-
- assertEquals(2, recyclePref.getViewCalledCnt);
- assertFalse(recyclePref.wasConvertViewNullInLastCall); // Recycling
-
- assertEquals(2, noRecyclePref.getViewCalledCnt);
- assertTrue(noRecyclePref.wasConvertViewNullInLastCall); // Not recycling
+ assertRecycle(recyclePref, noRecyclePref);
}
/**
@@ -140,8 +121,12 @@
RecycleCheckPreference noRecyclePref =
(RecycleCheckPreference) screen.findPreference("noRecyclePref");
- // Wait for the views to be created (because we may scroll the screen to display the
- // latest views, these views may get refreshed more than once).
+ assertRecycle(recyclePref, noRecyclePref);
+ }
+
+ private void assertRecycle(RecycleCheckPreference recyclePref,
+ RecycleCheckPreference noRecyclePref) throws Throwable {
+ // Wait for the views to be created.
PollingCheck.waitFor(TIMEOUT_MS,
() -> recyclePref.getViewCalledCnt > 0 && noRecyclePref.getViewCalledCnt > 0);
diff --git a/tests/tests/security/native/verified_boot/VerifiedBootTest.cpp b/tests/tests/security/native/verified_boot/VerifiedBootTest.cpp
index 31f3a1e..ac9074c 100644
--- a/tests/tests/security/native/verified_boot/VerifiedBootTest.cpp
+++ b/tests/tests/security/native/verified_boot/VerifiedBootTest.cpp
@@ -76,6 +76,12 @@
continue;
}
+ if (mount_points.find(entry.mount_point) == mount_points.end()) {
+ GTEST_LOG_(INFO) << entry.mount_point << " isn't mounted, skipping"
+ << " hashtree algorithm verification";
+ continue;
+ }
+
if (android::base::EqualsIgnoreCase(entry.fs_type, "emmc")) {
GTEST_LOG_(INFO) << entry.mount_point << " has emmc fs_type, skipping"
<< " hashtree algorithm verification";
diff --git a/tests/tests/textclassifier/src/android/view/textclassifier/cts/TextViewIntegrationTest.java b/tests/tests/textclassifier/src/android/view/textclassifier/cts/TextViewIntegrationTest.java
index 568277f..678ce90 100644
--- a/tests/tests/textclassifier/src/android/view/textclassifier/cts/TextViewIntegrationTest.java
+++ b/tests/tests/textclassifier/src/android/view/textclassifier/cts/TextViewIntegrationTest.java
@@ -88,16 +88,28 @@
UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
@Before
- public void setup() throws RemoteException {
+ public void setup() throws Exception {
Assume.assumeTrue(
ApplicationProvider.getApplicationContext().getPackageManager()
.hasSystemFeature(FEATURE_TOUCHSCREEN));
+ workAroundNotificationShadeWindowIssue();
mSimpleTextClassifier = new SimpleTextClassifier();
sDevice.wakeUp();
dismissKeyguard();
closeSystemDialog();
}
+ // Somehow there is a stale "NotificationShade" window from SysUI stealing the inputs.
+ // The window is in the "exiting" state and seems never finish exiting.
+ // The workaround here is to (hopefully) reset its state by expanding the notification panel
+ // and collapsing it again.
+ private void workAroundNotificationShadeWindowIssue() throws InterruptedException {
+ ShellUtils.runShellCommand("cmd statusbar expand-notifications");
+ Thread.sleep(1000);
+ ShellUtils.runShellCommand("cmd statusbar collapse");
+ Thread.sleep(1000);
+ }
+
private void dismissKeyguard() {
ShellUtils.runShellCommand("wm dismiss-keyguard");
}
diff --git a/tests/tests/view/src/android/view/cts/TextureViewTest.java b/tests/tests/view/src/android/view/cts/TextureViewTest.java
index 241b908..83d7944 100644
--- a/tests/tests/view/src/android/view/cts/TextureViewTest.java
+++ b/tests/tests/view/src/android/view/cts/TextureViewTest.java
@@ -22,6 +22,7 @@
import static android.opengl.GLES20.glClearColor;
import static android.opengl.GLES20.glEnable;
import static android.opengl.GLES20.glScissor;
+import static android.view.WindowInsets.Type.captionBar;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -130,11 +131,15 @@
activity.waitForSurface();
activity.initGl();
int updatedCount;
- updatedCount = activity.waitForSurfaceUpdateCount(0);
- assertEquals(0, updatedCount);
+ // If the caption bar is present, the surface update counts increase by 1
+ int extraSurfaceOffset =
+ window.getDecorView().getRootWindowInsets().getInsets(captionBar()).top == 0
+ ? 0 : 1;
+ updatedCount = activity.waitForSurfaceUpdateCount(0 + extraSurfaceOffset);
+ assertEquals(0 + extraSurfaceOffset, updatedCount);
activity.drawColor(Color.GREEN);
- updatedCount = activity.waitForSurfaceUpdateCount(1);
- assertEquals(1, updatedCount);
+ updatedCount = activity.waitForSurfaceUpdateCount(1 + extraSurfaceOffset);
+ assertEquals(1 + extraSurfaceOffset, updatedCount);
assertEquals(Color.WHITE, getPixel(window, center));
WidgetTestUtils.runOnMainAndDrawSync(mActivityRule,
activity.findViewById(android.R.id.content), () -> activity.removeCover());
@@ -142,8 +147,8 @@
int color = waitForChange(window, center, Color.WHITE);
assertEquals(Color.GREEN, color);
activity.drawColor(Color.BLUE);
- updatedCount = activity.waitForSurfaceUpdateCount(2);
- assertEquals(2, updatedCount);
+ updatedCount = activity.waitForSurfaceUpdateCount(2 + extraSurfaceOffset);
+ assertEquals(2 + extraSurfaceOffset, updatedCount);
color = waitForChange(window, center, color);
assertEquals(Color.BLUE, color);
}
diff --git a/tests/tests/view/surfacevalidator/src/android/view/cts/surfacevalidator/CapturedActivity.java b/tests/tests/view/surfacevalidator/src/android/view/cts/surfacevalidator/CapturedActivity.java
index 1937492..ba4c860 100644
--- a/tests/tests/view/surfacevalidator/src/android/view/cts/surfacevalidator/CapturedActivity.java
+++ b/tests/tests/view/surfacevalidator/src/android/view/cts/surfacevalidator/CapturedActivity.java
@@ -15,6 +15,8 @@
*/
package android.view.cts.surfacevalidator;
+import static android.view.WindowInsets.Type.statusBars;
+
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -25,6 +27,7 @@
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
+import android.graphics.Insets;
import android.graphics.Point;
import android.graphics.Rect;
import android.hardware.display.DisplayManager;
@@ -249,6 +252,10 @@
count++;
} while (!mCountDownLatch.await(timeOutMs, TimeUnit.MILLISECONDS));
+ FrameLayout marginedLayout = new FrameLayout(this);
+ FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ FrameLayout.LayoutParams.MATCH_PARENT);
mHandler.post(() -> {
Log.d(TAG, "Setting up test case");
@@ -257,8 +264,18 @@
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN);
+ // If Visibility for the system bar is true,
+ // set the status bar size margin because
+ // contentsArea is including status bar area.
+ Insets statusBarInsets = getWindow()
+ .getDecorView()
+ .getRootWindowInsets()
+ .getInsets(statusBars());
+ layoutParams.setMargins(statusBarInsets.left, statusBarInsets.top,
+ statusBarInsets.right, statusBarInsets.bottom);
+ setContentView(marginedLayout, layoutParams);
animationTestCase.start(getApplicationContext(),
- (FrameLayout) findViewById(android.R.id.content));
+ marginedLayout);
});
animationTestCase.waitForReady();
@@ -275,10 +292,19 @@
Context.DISPLAY_SERVICE);
final Display defaultDisplay = displayManager.getDisplay(Display.DEFAULT_DISPLAY);
final int rotation = defaultDisplay.getRotation();
+ Display.Mode mode = defaultDisplay.getMode();
- Rect boundsToCheck =
- animationTestCase.getBoundsToCheck(findViewById(android.R.id.content));
- if (boundsToCheck.width() < 40 || boundsToCheck.height() < 40) {
+ int testAreaWidth = marginedLayout.getWidth();
+ int testAreaHeight = marginedLayout.getHeight();
+
+ Log.d(TAG, "testAreaWidth: " + testAreaWidth
+ + ", testAreaHeight: " + testAreaHeight
+ + ", displayWidth: " + mode.getPhysicalWidth()
+ + ", displayHeight: " + mode.getPhysicalHeight());
+
+ Rect boundsToCheck = animationTestCase.getBoundsToCheck(marginedLayout);
+
+ if (boundsToCheck.width() < 90 || boundsToCheck.height() < 90) {
fail("capture bounds too small to be a fullscreen activity: " + boundsToCheck);
}
@@ -307,6 +333,8 @@
mHandler.postDelayed(() -> {
Log.d(TAG, "Ending test case");
animationTestCase.end();
+ FrameLayout contentLayout = (FrameLayout) findViewById(android.R.id.content);
+ contentLayout.removeAllViews();
mSurfacePixelValidator.finish(testResult);
latch.countDown();
mSurfacePixelValidator = null;
diff --git a/tools/cts-tradefed/res/config/cts-known-failures.xml b/tools/cts-tradefed/res/config/cts-known-failures.xml
index e04d932..e8a7147 100644
--- a/tools/cts-tradefed/res/config/cts-known-failures.xml
+++ b/tools/cts-tradefed/res/config/cts-known-failures.xml
@@ -282,6 +282,9 @@
<!-- b/208909067 -->
<option name="compatibility:exclude-filter" value="CtsDisplayTestCases android.display.cts.DisplayTest#testActivityContextGetMetrics" />
+ <!-- b/235453601 -->
+ <option name="compatibility:exclude-filter" value="CtsMediaPerformanceClassTestCases android.mediapc.cts.MultiDecoderPerfTest" />
+
<!-- b/237035040 -->
<option name="compatibility:exclude-filter" value="CtsGraphicsTestCases android.graphics.cts.ImageDecoderTest#testDecode10BitHeifWithLowRam" />
<option name="compatibility:exclude-filter" value="CtsGraphicsTestCases[instant] android.graphics.cts.ImageDecoderTest#testDecode10BitHeifWithLowRam" />
@@ -293,15 +296,4 @@
<option name="compatibility:exclude-filter" value="CtsDevicePolicyManagerTestCases com.android.cts.devicepolicy.DeviceOwnerTest#testBluetoothRestriction" />
<option name="compatibility:exclude-filter" value="CtsDevicePolicyManagerTestCases com.android.cts.devicepolicy.ManagedProfileTest#testBluetoothSharingRestriction" />
- <!-- b/233720451 -->
- <option name="compatibility:exclude-filter" value="CtsJvmtiRunTest910HostTestCases android.jvmti.cts.JvmtiHostTest910#testJvmti" />
- <option name="compatibility:exclude-filter" value="CtsJvmtiRunTest912HostTestCases android.jvmti.cts.JvmtiHostTest912#testJvmti" />
- <option name="compatibility:exclude-filter" value="CtsJvmtiRunTest913HostTestCases android.jvmti.cts.JvmtiHostTest913#testJvmti" />
- <option name="compatibility:exclude-filter" value="CtsJvmtiRunTest988HostTestCases android.jvmti.cts.JvmtiHostTest988#testJvmti" />
-
- <!-- b/238849936 -->
- <option name="compatibility:exclude-filter" value="CtsWindowManagerDeviceTestCases android.server.wm.PinnedStackTests#testPipFromTaskWithMultipleActivitiesAndFinishOriginalTask" />
- <option name="compatibility:exclude-filter" value="CtsWindowManagerDeviceTestCases android.server.wm.SplitActivityLifecycleTest#testTranslucentAdjacentTaskFragment" />
- <option name="compatibility:exclude-filter" value="CtsWindowManagerDeviceTestCases android.server.wm.TaskFragmentOrganizerPolicyTest#testStartAnotherAppActivityInTaskFragment" />
-
</configuration>