Merge "Fix blend name change." into klp-dev
diff --git a/apps/CtsVerifier/AndroidManifest.xml b/apps/CtsVerifier/AndroidManifest.xml
index 354775d..b9f7ceb 100644
--- a/apps/CtsVerifier/AndroidManifest.xml
+++ b/apps/CtsVerifier/AndroidManifest.xml
@@ -18,7 +18,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.cts.verifier"
android:versionCode="1"
- android:versionName="1337">
+ android:versionName="4.4_r0">
<!-- Using 10+ for more complete NFC support... -->
<uses-sdk android:minSdkVersion="12"></uses-sdk>
@@ -412,7 +412,23 @@
</service>
<service android:name="nls.NotificationListenerVerifierActivity$DismissService"/>
-
+ <activity android:name=".security.CAInstallNotificationVerifierActivity"
+ android:label="@string/cacert_test">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.cts.intent.category.MANUAL_TEST" />
+ </intent-filter>
+ <meta-data android:name="test_category" android:value="@string/test_category_notifications" />
+ </activity>
+ <activity android:name=".security.CANotifyOnBootActivity"
+ android:label="@string/caboot_test">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.cts.intent.category.MANUAL_TEST" />
+ </intent-filter>
+ <meta-data android:name="test_category" android:value="@string/test_category_notifications" />
+ </activity>
+
<activity android:name=".p2p.GoNegRequesterTestListActivity"
android:label="@string/p2p_go_neg_requester"
android:configChanges="keyboardHidden|orientation|screenSize" />
diff --git a/apps/CtsVerifier/assets/myCA.cer b/apps/CtsVerifier/assets/myCA.cer
new file mode 100644
index 0000000..3b98d3e
--- /dev/null
+++ b/apps/CtsVerifier/assets/myCA.cer
Binary files differ
diff --git a/apps/CtsVerifier/res/layout/ca_boot_notify.xml b/apps/CtsVerifier/res/layout/ca_boot_notify.xml
new file mode 100644
index 0000000..29fa549
--- /dev/null
+++ b/apps/CtsVerifier/res/layout/ca_boot_notify.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Copyright (C) 2013 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical" android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+
+
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:id="@+id/check_cert_desc"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/caboot_check_cert_installed"/>
+
+ <Button android:id="@+id/check_creds"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/caboot_check_creds" />
+
+ <TextView
+ android:id="@+id/need_to_install_cert"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/caboot_if_not_installed"/>
+
+ <Button android:id="@+id/install"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/caboot_install_cert" />
+
+ <TextView
+ android:id="@+id/reboot"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/caboot_reboot_desc"/>
+
+ <TextView
+ android:id="@+id/after_reboot"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/caboot_after_boot"/>
+ </LinearLayout>
+
+ <include layout="@layout/pass_fail_buttons" />
+
+</LinearLayout>
diff --git a/apps/CtsVerifier/res/layout/cainstallnotify_item.xml b/apps/CtsVerifier/res/layout/cainstallnotify_item.xml
new file mode 100644
index 0000000..1359cb4
--- /dev/null
+++ b/apps/CtsVerifier/res/layout/cainstallnotify_item.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2013 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.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+
+ <ImageView
+ android:id="@+id/ca_notify_status"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentTop="true"
+ android:layout_marginTop="10dip"
+ android:contentDescription="@string/pass_button_text"
+ android:padding="10dip"
+ android:src="@drawable/fs_indeterminate" />
+
+ <TextView
+ android:id="@+id/ca_notify_instructions"
+ style="@style/InstructionsSmallFont"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentTop="true"
+ android:layout_toRightOf="@id/ca_notify_status" />
+
+ <Button
+ android:id="@+id/ca_notify_do_something"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_below="@id/ca_notify_instructions"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_toRightOf="@id/ca_notify_status"
+ android:text="@string/cacert_do_something" />
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/apps/CtsVerifier/res/layout/cainstallnotify_main.xml b/apps/CtsVerifier/res/layout/cainstallnotify_main.xml
new file mode 100644
index 0000000..16882bd
--- /dev/null
+++ b/apps/CtsVerifier/res/layout/cainstallnotify_main.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2013 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:padding="10dip" >
+
+ <ScrollView
+ android:id="@+id/ca_notify_test_scroller"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:orientation="vertical"
+ android:padding="10dip" >
+
+ <LinearLayout
+ android:id="@+id/ca_notify_test_items"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" >
+ </LinearLayout>
+ </ScrollView>
+
+ <include
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0"
+ layout="@layout/pass_fail_buttons" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index 0f164ef..6df4b42 100644
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -607,6 +607,24 @@
<string name="nls_service_stopped">Service should stop once disabled.</string>
<string name="nls_note_missed">Check that notification was not received.</string>
+ <string name="cacert_test">CA Cert Notification Test</string>
+ <string name="cacert_info">This test checks that when a CA Certificate is installed, the user is notified.</string>
+ <string name="cacert_do_something">Do it</string>
+ <string name="cacert_done">Done</string>
+ <string name="cacert_install_cert">Use the CertInstaller to install the certificate. When it opens, just tap "Okay". If this button does nothing, pass the test and move on.</string>
+ <string name="cacert_check_cert_in_settings">Visit the user-installed trusted credentials page and confirm that the "Internet Widgits Pty Ltd" cert appears in the list.</string>
+ <string name="cacert_check_notification">Please look at the new notification and confirm: It say the network may be monitored. Tapping it brings up a more detailed explanation and a button to check trusted credentials. Tapping that button brings up the Trusted Credentials page you just visited.</string>
+ <string name="cacert_dismiss_notification">Dismiss the notification. If it cannot be dismissed, fail the test.</string>
+
+ <string name="caboot_test">CA Cert Notification on Boot test</string>
+ <string name="caboot_info">This test is to confirm that when the user has installed a trusted credential, the system notifies the user when it boots.</string>
+ <string name="caboot_check_cert_installed">Please check here to see whether a certificate is already installed. (If this button does nothing, pass the test and move on.)</string>
+ <string name="caboot_check_creds">Check Credentials</string>
+ <string name="caboot_if_not_installed">Only if there is no credential currently installed, install one. (If this button does nothing, pass the test and move on.)</string>
+ <string name="caboot_install_cert">Install credential</string>
+ <string name="caboot_reboot_desc">Please reboot the device and return to this test.</string>
+ <string name="caboot_after_boot">AFTER REBOOTING: Check that there is a notification that the network may be monitored. Opening that notification should show a dialog box giving more information, with a button to check trusted credentials. This should open up the same view of trusted credentials that you get via the "Check credentials" button.</string>
+
<!-- Strings for Widget -->
<string name="widget_framework_test">Widget Framework Test</string>
<string name="widget_framework_test_info">This test checks some basic features of the widget
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/nls/MockListener.java b/apps/CtsVerifier/src/com/android/cts/verifier/nls/MockListener.java
index 8549214..0b74fa3 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/nls/MockListener.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/nls/MockListener.java
@@ -49,12 +49,12 @@
static final int RESULT_TIMEOUT = Activity.RESULT_FIRST_USER;
static final int RESULT_NO_SERVER = Activity.RESULT_FIRST_USER + 1;
- static final String JSON_FLAGS = "flag";
- static final String JSON_ICON = "icon";
- static final String JSON_ID = "id";
- static final String JSON_PACKAGE = "pkg";
- static final String JSON_WHEN = "when";
- static final String JSON_TAG = "tag";
+ public static final String JSON_FLAGS = "flag";
+ public static final String JSON_ICON = "icon";
+ public static final String JSON_ID = "id";
+ public static final String JSON_PACKAGE = "pkg";
+ public static final String JSON_WHEN = "when";
+ public static final String JSON_TAG = "tag";
private ArrayList<String> mPosted = new ArrayList<String>();
private ArrayList<String> mPayloads = new ArrayList<String>();
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/security/CAInstallNotificationVerifierActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/security/CAInstallNotificationVerifierActivity.java
new file mode 100644
index 0000000..3e8110e
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/security/CAInstallNotificationVerifierActivity.java
@@ -0,0 +1,301 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+package com.android.cts.verifier.security;
+
+import android.app.Service;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.cts.verifier.PassFailButtons;
+import com.android.cts.verifier.R;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.concurrent.LinkedBlockingQueue;
+
+public class CAInstallNotificationVerifierActivity extends PassFailButtons.Activity
+implements Runnable {
+ static final String TAG = CAInstallNotificationVerifierActivity.class.getSimpleName();
+ private static final String STATE = "state";
+ private static final int PASS = 1;
+ private static final int FAIL = 2;
+ private static final int WAIT_FOR_USER = 3;
+ private static LinkedBlockingQueue<String> sDeletedQueue = new LinkedBlockingQueue<String>();
+
+ private int mState;
+ private int[] mStatus;
+ private LayoutInflater mInflater;
+ private ViewGroup mItemList;
+ private Runnable mRunner;
+ private View mHandler;
+
+ private static final String CERT_ASSET_NAME = "myCA.cer";
+ private File certStagingFile = new File("/sdcard/", CERT_ASSET_NAME);
+
+ protected boolean doneInstallingCert = false;
+ protected boolean doneCheckingInSettings = false;
+ protected boolean doneCheckingNotification = false;
+ protected boolean doneDismissingNotification = false;
+
+
+ public static class DismissService extends Service {
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public void onStart(Intent intent, int startId) {
+ sDeletedQueue.offer(intent.getAction());
+ }
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (savedInstanceState != null) {
+ mState = savedInstanceState.getInt(STATE, 0);
+ }
+ mRunner = this;
+ mInflater = getLayoutInflater();
+ View view = mInflater.inflate(R.layout.cainstallnotify_main, null);
+ mItemList = (ViewGroup) view.findViewById(R.id.ca_notify_test_items);
+ mHandler = mItemList;
+ createTestItems();
+ mStatus = new int[mItemList.getChildCount()];
+ setContentView(view);
+
+ setPassFailButtonClickListeners();
+ setInfoResources(R.string.cacert_test, R.string.cacert_info, -1);
+ }
+
+ @Override
+ protected void onSaveInstanceState (Bundle outState) {
+ outState.putInt(STATE, mState);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ next();
+ }
+
+ // Interface Utilities
+
+ private void createTestItems() {
+ createUserItem(R.string.cacert_install_cert, new InstallCert());
+ createUserItem(R.string.cacert_check_cert_in_settings, new OpenTrustedCredentials());
+ createUserItem(R.string.cacert_check_notification,
+ new DoneCheckingNotification(), R.string.cacert_done);
+ createUserItem(R.string.cacert_dismiss_notification,
+ new DoneCheckingDismissed(), R.string.cacert_done);
+ }
+
+ private void setItemState(int index, boolean passed) {
+ ViewGroup item = (ViewGroup) mItemList.getChildAt(index);
+ ImageView status = (ImageView) item.findViewById(R.id.ca_notify_status);
+ status.setImageResource(passed ? R.drawable.fs_good : R.drawable.fs_error);
+ View button = item.findViewById(R.id.ca_notify_do_something);
+ button.setClickable(false);
+ button.setEnabled(false);
+ status.invalidate();
+ }
+
+ private void markItemWaiting(int index) {
+ ViewGroup item = (ViewGroup) mItemList.getChildAt(index);
+ ImageView status = (ImageView) item.findViewById(R.id.ca_notify_status);
+ status.setImageResource(R.drawable.fs_warning);
+ status.invalidate();
+ }
+
+ private View createUserItem(int stringId, OnClickListener listener) {
+ return createUserItem(stringId, listener, 0);
+ }
+
+ private View createUserItem(int stringId, OnClickListener listener, int buttonLabel) {
+ View item = mInflater.inflate(R.layout.cainstallnotify_item, mItemList, false);
+ TextView instructions = (TextView) item.findViewById(R.id.ca_notify_instructions);
+ instructions.setText(stringId);
+ Button button = (Button) item.findViewById(R.id.ca_notify_do_something);
+ if (buttonLabel != 0) {
+ button.setText(buttonLabel);
+ }
+ button.setOnClickListener(listener);
+ mItemList.addView(item);
+ return item;
+ }
+
+ // Test management
+
+ public void run() {
+ while (mState < mStatus.length && mStatus[mState] != WAIT_FOR_USER) {
+ if (mStatus[mState] == PASS) {
+ setItemState(mState, true);
+ mState++;
+ } else if (mStatus[mState] == FAIL) {
+ setItemState(mState, false);
+ return;
+ } else {
+ break;
+ }
+ }
+
+ if (mState < mStatus.length && mStatus[mState] == WAIT_FOR_USER) {
+ markItemWaiting(mState);
+ }
+
+ switch (mState) {
+ case 0:
+ testInstalledCert(0);
+ break;
+ case 1:
+ testCheckedSettings(1);
+ break;
+ case 2:
+ testCheckedNotification(2);
+ break;
+ case 3:
+ testNotificationDismissed(3);
+ break;
+ }
+ }
+
+ /**
+ * Return to the state machine to progress through the tests.
+ */
+ private void next() {
+ mHandler.post(mRunner);
+ }
+
+ /**
+ * Wait for things to settle before returning to the state machine.
+ */
+ private void delay() {
+ mHandler.postDelayed(mRunner, 2000);
+ }
+
+ // Listeners
+
+ class InstallCert implements OnClickListener {
+ @Override
+ public void onClick(View v) {
+ InputStream is = null;
+ FileOutputStream os = null;
+ try {
+ try {
+ is = getAssets().open(CERT_ASSET_NAME);
+ os = new FileOutputStream(certStagingFile);
+ byte[] buffer = new byte[1024];
+ int length;
+ while ((length = is.read(buffer)) > 0) {
+ os.write(buffer, 0, length);
+ }
+ } finally {
+ if (is != null) is.close();
+ if (os != null) os.close();
+ certStagingFile.setReadable(true, false);
+ }
+ } catch (IOException ioe) {
+ Log.w(TAG, "Problem moving cert file to /sdcard/", ioe);
+ return;
+ }
+ try {
+ startActivity(new Intent("android.credentials.INSTALL"));
+ } catch (ActivityNotFoundException e) {
+ // do nothing
+ }
+ doneInstallingCert = true;
+ }
+ }
+
+ class OpenTrustedCredentials implements OnClickListener {
+ @Override
+ public void onClick(View v) {
+ try {
+ startActivity(new Intent("com.android.settings.TRUSTED_CREDENTIALS_USER"));
+ } catch (ActivityNotFoundException e) {
+ // do nothing
+ }
+ doneCheckingInSettings = true;
+ }
+ }
+
+ class DoneCheckingNotification implements OnClickListener {
+ @Override
+ public void onClick(View v) {
+ doneCheckingNotification = true;
+ }
+ }
+
+ class DoneCheckingDismissed implements OnClickListener {
+ @Override
+ public void onClick(View v) {
+ doneDismissingNotification = true;
+ }
+ }
+
+ // Tests
+
+ private void testInstalledCert(final int i) {
+ if (doneInstallingCert) {
+ mStatus[i] = PASS;
+ next();
+ } else {
+ delay();
+ }
+ }
+
+ private void testCheckedSettings(final int i) {
+ if (doneCheckingInSettings) {
+ mStatus[i] = PASS;
+ next();
+ } else {
+ delay();
+ }
+ }
+
+ private void testCheckedNotification(final int i) {
+ if (doneCheckingNotification) {
+ mStatus[i] = PASS;
+ next();
+ } else {
+ delay();
+ }
+ }
+
+ private void testNotificationDismissed(final int i) {
+ if (doneDismissingNotification) {
+ mStatus[i] = PASS;
+ next();
+ } else {
+ delay();
+ }
+ }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/security/CANotifyOnBootActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/security/CANotifyOnBootActivity.java
new file mode 100644
index 0000000..5537b15
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/security/CANotifyOnBootActivity.java
@@ -0,0 +1,88 @@
+package com.android.cts.verifier.security;
+
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.Toast;
+
+import com.android.cts.verifier.PassFailButtons;
+import com.android.cts.verifier.R;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class CANotifyOnBootActivity extends PassFailButtons.Activity {
+
+ private static final String TAG = CANotifyOnBootActivity.class.getSimpleName();
+ private static final String CERT_ASSET_NAME = "myCA.cer";
+ private File certStagingFile = new File("/sdcard/", CERT_ASSET_NAME);
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ View view = getLayoutInflater().inflate(R.layout.ca_boot_notify, null);
+ Button checkCredsButton = (Button) view.findViewById(R.id.check_creds);
+ Button installButton = (Button) view.findViewById(R.id.install);
+ checkCredsButton.setOnClickListener(new OpenTrustedCredentials());
+ installButton.setOnClickListener(new InstallCert());
+
+ setContentView(view);
+
+ setPassFailButtonClickListeners();
+ setInfoResources(R.string.caboot_test, R.string.caboot_info, -1);
+
+ getPassButton().setEnabled(true);
+ }
+
+ class OpenTrustedCredentials implements OnClickListener {
+ @Override
+ public void onClick(View v) {
+ try {
+ startActivity(new Intent("com.android.settings.TRUSTED_CREDENTIALS_USER"));
+ } catch (ActivityNotFoundException e) {
+ // do nothing
+ }
+ }
+ }
+
+ class InstallCert implements OnClickListener {
+ @Override
+ public void onClick(View v) {
+ InputStream is = null;
+ FileOutputStream os = null;
+ try {
+ try {
+ is = getAssets().open(CERT_ASSET_NAME);
+ os = new FileOutputStream(certStagingFile);
+ byte[] buffer = new byte[1024];
+ int length;
+ while ((length = is.read(buffer)) > 0) {
+ os.write(buffer, 0, length);
+ }
+ } finally {
+ if (is != null) is.close();
+ if (os != null) os.close();
+ certStagingFile.setReadable(true, false);
+ }
+ } catch (IOException ioe) {
+ Log.w(TAG, "Problem moving cert file to /sdcard/", ioe);
+ return;
+ }
+
+ try {
+ startActivity(new Intent("android.credentials.INSTALL"));
+ } catch (ActivityNotFoundException e) {
+ // do nothing
+ }
+ }
+ }
+
+
+}
diff --git a/hostsidetests/appsecurity/test-apps/ExternalStorageApp/src/com/android/cts/externalstorageapp/CommonExternalStorageTest.java b/hostsidetests/appsecurity/test-apps/ExternalStorageApp/src/com/android/cts/externalstorageapp/CommonExternalStorageTest.java
index 5f534c4..5d3bdb6 100644
--- a/hostsidetests/appsecurity/test-apps/ExternalStorageApp/src/com/android/cts/externalstorageapp/CommonExternalStorageTest.java
+++ b/hostsidetests/appsecurity/test-apps/ExternalStorageApp/src/com/android/cts/externalstorageapp/CommonExternalStorageTest.java
@@ -86,9 +86,10 @@
public void testAllPackageDirsWritable() throws Exception {
final List<File> paths = getAllPackageSpecificPaths(getContext());
for (File path : paths) {
- if (path == null) continue;
+ assertNotNull("Valid media must be inserted during CTS", path);
+ assertEquals("Valid media must be inserted during CTS", Environment.MEDIA_MOUNTED,
+ Environment.getStorageState(path));
- assertEquals(Environment.MEDIA_MOUNTED, Environment.getStorageState(path));
assertDirReadWriteAccess(path);
final File directChild = new File(path, "directChild");
diff --git a/hostsidetests/appsecurity/test-apps/PermissionDeclareApp/src/com/android/cts/permissiondeclareapp/GrantUriPermission.java b/hostsidetests/appsecurity/test-apps/PermissionDeclareApp/src/com/android/cts/permissiondeclareapp/GrantUriPermission.java
index 31a3f47..46e1dff 100644
--- a/hostsidetests/appsecurity/test-apps/PermissionDeclareApp/src/com/android/cts/permissiondeclareapp/GrantUriPermission.java
+++ b/hostsidetests/appsecurity/test-apps/PermissionDeclareApp/src/com/android/cts/permissiondeclareapp/GrantUriPermission.java
@@ -19,27 +19,82 @@
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.content.UriPermission;
+import android.net.Uri;
import android.util.Log;
+import java.util.List;
+
public class GrantUriPermission extends BroadcastReceiver {
+ public static final String ACTION_GRANT_URI = "grantUri";
+ public static final String ACTION_REVOKE_URI = "revokeUri";
+ public static final String ACTION_START_ACTIVITY = "startActivity";
+ public static final String ACTION_START_SERVICE = "startService";
+ public static final String ACTION_VERIFY_OUTGOING_PERSISTED = "verifyOutgoingPersisted";
+
+ public static final String EXTRA_PACKAGE_NAME = "packageName";
+ public static final String EXTRA_INTENT = Intent.EXTRA_INTENT;
+ public static final String EXTRA_URI = "uri";
+ public static final String EXTRA_MODE = "mode";
+
+ public static final int SUCCESS = 101;
+ public static final int FAILURE = 100;
+
@Override
public void onReceive(Context context, Intent intent) {
- Intent newIntent = (Intent)intent.getParcelableExtra("intent");
- boolean service = intent.getBooleanExtra("service", false);
try {
- if (!service) {
+ final String action = intent.getAction();
+ if (ACTION_GRANT_URI.equals(action)) {
+ final Uri uri = intent.getParcelableExtra(EXTRA_URI);
+ context.grantUriPermission(intent.getStringExtra(EXTRA_PACKAGE_NAME), uri,
+ intent.getIntExtra(EXTRA_MODE, 0));
+
+ } else if (ACTION_REVOKE_URI.equals(action)) {
+ final Uri uri = intent.getParcelableExtra(EXTRA_URI);
+ context.revokeUriPermission(uri, intent.getIntExtra(EXTRA_MODE, 0));
+
+ } else if (ACTION_START_ACTIVITY.equals(action)) {
+ final Intent newIntent = intent.getParcelableExtra(EXTRA_INTENT);
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(newIntent);
- } else {
+
+ } else if (ACTION_START_SERVICE.equals(action)) {
+ final Intent newIntent = intent.getParcelableExtra(EXTRA_INTENT);
context.startService(newIntent);
+
+ } else if (ACTION_VERIFY_OUTGOING_PERSISTED.equals(action)) {
+ verifyOutgoingPersisted(context, intent);
}
+
if (isOrderedBroadcast()) {
- setResultCode(101);
+ setResultCode(SUCCESS);
}
} catch (SecurityException e) {
Log.i("GrantUriPermission", "Security exception", e);
if (isOrderedBroadcast()) {
- setResultCode(100);
+ setResultCode(FAILURE);
+ }
+ }
+ }
+
+ private void verifyOutgoingPersisted(Context context, Intent intent) {
+ final Uri uri = intent.getParcelableExtra(EXTRA_URI);
+ final List<UriPermission> perms = context.getContentResolver()
+ .getOutgoingPersistedUriPermissions();
+ if (uri != null) {
+ // Should have a single persisted perm
+ if (perms.size() != 1) {
+ throw new SecurityException("Missing grant");
+ }
+ final UriPermission perm = perms.get(0);
+ if (!perm.getUri().equals(uri)) {
+ throw new SecurityException(
+ "Expected " + uri + " but found " + perm.getUri());
+ }
+ } else {
+ // Should have zero persisted perms
+ if (perms.size() != 0) {
+ throw new SecurityException("Unexpected grant");
}
}
}
diff --git a/hostsidetests/appsecurity/test-apps/ReadExternalStorageApp/src/com/android/cts/readexternalstorageapp/ReadExternalStorageTest.java b/hostsidetests/appsecurity/test-apps/ReadExternalStorageApp/src/com/android/cts/readexternalstorageapp/ReadExternalStorageTest.java
index 6e85c73..bbd1e7a 100644
--- a/hostsidetests/appsecurity/test-apps/ReadExternalStorageApp/src/com/android/cts/readexternalstorageapp/ReadExternalStorageTest.java
+++ b/hostsidetests/appsecurity/test-apps/ReadExternalStorageApp/src/com/android/cts/readexternalstorageapp/ReadExternalStorageTest.java
@@ -52,7 +52,9 @@
final String packageName = getContext().getPackageName();
for (File path : paths) {
- if (path == null) continue;
+ assertNotNull("Valid media must be inserted during CTS", path);
+ assertEquals("Valid media must be inserted during CTS", Environment.MEDIA_MOUNTED,
+ Environment.getStorageState(path));
assertTrue(path.getAbsolutePath().contains(packageName));
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionDiffCert/Android.mk b/hostsidetests/appsecurity/test-apps/UsePermissionDiffCert/Android.mk
index acf9f6f..d836042 100644
--- a/hostsidetests/appsecurity/test-apps/UsePermissionDiffCert/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionDiffCert/Android.mk
@@ -18,7 +18,8 @@
LOCAL_MODULE_TAGS := tests
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src) \
+ ../PermissionDeclareApp/src/com/android/cts/permissiondeclareapp/GrantUriPermission.java
LOCAL_SDK_VERSION := current
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionDiffCert/src/com/android/cts/usespermissiondiffcertapp/AccessPermissionWithDiffSigTest.java b/hostsidetests/appsecurity/test-apps/UsePermissionDiffCert/src/com/android/cts/usespermissiondiffcertapp/AccessPermissionWithDiffSigTest.java
index 8f40cf1..db26eec 100644
--- a/hostsidetests/appsecurity/test-apps/UsePermissionDiffCert/src/com/android/cts/usespermissiondiffcertapp/AccessPermissionWithDiffSigTest.java
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionDiffCert/src/com/android/cts/usespermissiondiffcertapp/AccessPermissionWithDiffSigTest.java
@@ -23,13 +23,17 @@
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
+import android.content.UriPermission;
import android.database.Cursor;
import android.net.Uri;
import android.os.SystemClock;
import android.test.AndroidTestCase;
import android.util.Log;
+import com.android.cts.permissiondeclareapp.GrantUriPermission;
+
import java.io.IOException;
+import java.util.List;
/**
* Tests that signature-enforced permissions cannot be accessed by apps signed
@@ -54,6 +58,14 @@
private static final String EXPECTED_MIME_TYPE_AMBIGUOUS = "got/theUnspecifiedMIME";
private static final Uri AMBIGUOUS_URI = Uri.parse("content://ctsambiguousprovider");
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+
+ // Always dispose, usually to clean up from failed tests
+ ReceiveUriActivity.finishCurInstanceSync();
+ }
+
private void assertReadingContentUriNotAllowed(Uri uri, String msg) {
try {
getContext().getContentResolver().query(uri, null, null, null, null);
@@ -423,11 +435,11 @@
synchronized (this) {
mHaveResult = true;
switch (getResultCode()) {
- case 100:
+ case GrantUriPermission.FAILURE:
mGoodResult = true;
mSucceeded = false;
break;
- case 101:
+ case GrantUriPermission.SUCCESS:
mGoodResult = true;
mSucceeded = true;
break;
@@ -491,8 +503,9 @@
service ? ReceiveUriService.class : ReceiveUriActivity.class);
Intent intent = new Intent();
intent.setComponent(GRANT_URI_PERM_COMP);
- intent.putExtra("intent", grantIntent);
- intent.putExtra("service", service);
+ intent.setAction(service ? GrantUriPermission.ACTION_START_SERVICE
+ : GrantUriPermission.ACTION_START_ACTIVITY);
+ intent.putExtra(GrantUriPermission.EXTRA_INTENT, grantIntent);
GrantResultReceiver receiver = new GrantResultReceiver();
getContext().sendOrderedBroadcast(intent, null, receiver, null, 0, null, null);
receiver.assertFailure("Able to grant URI permission to " + grantDataUri + " when should not");
@@ -502,8 +515,9 @@
service ? ReceiveUriService.class : ReceiveUriActivity.class);
intent = new Intent();
intent.setComponent(GRANT_URI_PERM_COMP);
- intent.putExtra("intent", grantIntent);
- intent.putExtra("service", service);
+ intent.setAction(service ? GrantUriPermission.ACTION_START_SERVICE
+ : GrantUriPermission.ACTION_START_ACTIVITY);
+ intent.putExtra(GrantUriPermission.EXTRA_INTENT, grantIntent);
receiver = new GrantResultReceiver();
getContext().sendOrderedBroadcast(intent, null, receiver, null, 0, null, null);
receiver.assertFailure("Able to grant URI permission to " + grantIntent.getClipData()
@@ -578,8 +592,9 @@
service ? ReceiveUriService.class : ReceiveUriActivity.class);
Intent intent = new Intent();
intent.setComponent(GRANT_URI_PERM_COMP);
- intent.putExtra("intent", grantIntent);
- intent.putExtra("service", service);
+ intent.setAction(service ? GrantUriPermission.ACTION_START_SERVICE
+ : GrantUriPermission.ACTION_START_ACTIVITY);
+ intent.putExtra(GrantUriPermission.EXTRA_INTENT, grantIntent);
getContext().sendBroadcast(intent);
}
@@ -843,7 +858,7 @@
doTestGrantActivityUriWritePermission(PRIV_URI_GRANTING, false);
}
- void doTestGrantServiceUriReadPermission(Uri uri, boolean useClip) {
+ private void doTestGrantServiceUriReadPermission(Uri uri, boolean useClip) {
final Uri subUri = Uri.withAppendedPath(uri, "foo");
final Uri subSubUri = Uri.withAppendedPath(subUri, "bar");
final Uri sub2Uri = Uri.withAppendedPath(uri, "yes");
@@ -1207,4 +1222,137 @@
assertEquals(EXPECTED_MIME_TYPE_AMBIGUOUS,
getContext().getContentResolver().getType(AMBIGUOUS_URI_COMPAT));
}
+
+ /**
+ * Validate behavior of persistable permission grants.
+ */
+ public void testGrantPersistableUriPermission() {
+ final ContentResolver resolver = getContext().getContentResolver();
+
+ final Uri target = Uri.withAppendedPath(PERM_URI_GRANTING, "foo");
+ final ClipData clip = makeSingleClipData(target);
+
+ // Make sure we can't see the target
+ assertReadingClipNotAllowed(clip, "reading should have failed");
+ assertWritingClipNotAllowed(clip, "writing should have failed");
+
+ // Make sure we can't take a grant we don't have
+ try {
+ resolver.takePersistableUriPermission(target, Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ fail("taking read should have failed");
+ } catch (SecurityException expected) {
+ }
+
+ // And since we were just installed, no persisted grants yet
+ assertNoPersistedUriPermission();
+
+ // Now, let's grant ourselves some access
+ ReceiveUriActivity.clearStarted();
+ grantClipUriPermission(clip, Intent.FLAG_GRANT_READ_URI_PERMISSION
+ | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION, false);
+ ReceiveUriActivity.waitForStart();
+
+ // We should now have reading access, even before taking the persistable
+ // grant. Persisted grants should still be empty.
+ assertReadingClipAllowed(clip);
+ assertWritingClipNotAllowed(clip, "writing should have failed");
+ assertNoPersistedUriPermission();
+
+ // Take the read grant and verify we have it!
+ long before = System.currentTimeMillis();
+ resolver.takePersistableUriPermission(target, Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ long after = System.currentTimeMillis();
+ assertPersistedUriPermission(target, Intent.FLAG_GRANT_READ_URI_PERMISSION, before, after);
+
+ // Make sure we can't take a grant we don't have
+ try {
+ resolver.takePersistableUriPermission(target, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+ fail("taking write should have failed");
+ } catch (SecurityException expected) {
+ }
+
+ // Launch again giving ourselves persistable read and write access
+ ReceiveUriActivity.clearNewIntent();
+ grantClipUriPermission(clip, Intent.FLAG_GRANT_READ_URI_PERMISSION
+ | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
+ | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION, false);
+ ReceiveUriActivity.waitForNewIntent();
+
+ // Previous persisted grant should be unchanged
+ assertPersistedUriPermission(target, Intent.FLAG_GRANT_READ_URI_PERMISSION, before, after);
+
+ // We should have both read and write; read is persisted, and write
+ // isn't persisted yet.
+ assertReadingClipAllowed(clip);
+ assertWritingClipAllowed(clip);
+
+ // Take again, but still only read; should just update timestamp
+ before = System.currentTimeMillis();
+ resolver.takePersistableUriPermission(target, Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ after = System.currentTimeMillis();
+ assertPersistedUriPermission(target, Intent.FLAG_GRANT_READ_URI_PERMISSION, before, after);
+
+ // And take yet again, both read and write
+ before = System.currentTimeMillis();
+ resolver.takePersistableUriPermission(target,
+ Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+ after = System.currentTimeMillis();
+ assertPersistedUriPermission(target,
+ Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION,
+ before, after);
+
+ // Now drop the persisted grant; write first, then read
+ resolver.releasePersistableUriPermission(target, Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ assertPersistedUriPermission(target, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, before, after);
+ resolver.releasePersistableUriPermission(target, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+ assertNoPersistedUriPermission();
+
+ // And even though we dropped the persistable grants, our activity is
+ // still running with the global grants (until reboot).
+ assertReadingClipAllowed(clip);
+ assertWritingClipAllowed(clip);
+
+ ReceiveUriActivity.finishCurInstanceSync();
+ }
+
+ private void assertNoPersistedUriPermission() {
+ assertPersistedUriPermission(null, 0, -1, -1);
+ }
+
+ private void assertPersistedUriPermission(Uri uri, int flags, long before, long after) {
+ // Assert local
+ final List<UriPermission> perms = getContext()
+ .getContentResolver().getPersistedUriPermissions();
+ if (uri != null) {
+ assertEquals("expected exactly one permission", 1, perms.size());
+
+ final UriPermission perm = perms.get(0);
+ assertEquals("unexpected uri", uri, perm.getUri());
+
+ final long actual = perm.getPersistedTime();
+ if (before != -1) {
+ assertTrue("found " + actual + " before " + before, actual >= before);
+ }
+ if (after != -1) {
+ assertTrue("found " + actual + " after " + after, actual <= after);
+ }
+
+ final boolean expectedRead = (flags & Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0;
+ final boolean expectedWrite = (flags & Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0;
+ assertEquals("unexpected read status", expectedRead, perm.isReadPermission());
+ assertEquals("unexpected write status", expectedWrite, perm.isWritePermission());
+
+ } else {
+ assertEquals("expected zero permissions", 0, perms.size());
+ }
+
+ // And assert remote
+ Intent intent = new Intent();
+ intent.setComponent(GRANT_URI_PERM_COMP);
+ intent.setAction(GrantUriPermission.ACTION_VERIFY_OUTGOING_PERSISTED);
+ intent.putExtra(GrantUriPermission.EXTRA_URI, uri);
+ GrantResultReceiver receiver = new GrantResultReceiver();
+ getContext().sendOrderedBroadcast(intent, null, receiver, null, 0, null, null);
+ receiver.assertSuccess("unexpected outgoing persisted Uri status");
+ }
}
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionDiffCert/src/com/android/cts/usespermissiondiffcertapp/ReceiveUriActivity.java b/hostsidetests/appsecurity/test-apps/UsePermissionDiffCert/src/com/android/cts/usespermissiondiffcertapp/ReceiveUriActivity.java
index 851d8da..dd9a5c5 100644
--- a/hostsidetests/appsecurity/test-apps/UsePermissionDiffCert/src/com/android/cts/usespermissiondiffcertapp/ReceiveUriActivity.java
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionDiffCert/src/com/android/cts/usespermissiondiffcertapp/ReceiveUriActivity.java
@@ -32,7 +32,7 @@
private static final Object sLock = new Object();
private static boolean sStarted;
private static boolean sNewIntent;
- private static boolean sDestroyed;
+ private static boolean sDestroyed = true;
private static ReceiveUriActivity sCurInstance;
private static final long TIMEOUT_MILLIS = 30 * SECOND_IN_MILLIS;
diff --git a/hostsidetests/appsecurity/test-apps/WriteExternalStorageApp/src/com/android/cts/writeexternalstorageapp/WriteExternalStorageTest.java b/hostsidetests/appsecurity/test-apps/WriteExternalStorageApp/src/com/android/cts/writeexternalstorageapp/WriteExternalStorageTest.java
index cef2639..6857236 100644
--- a/hostsidetests/appsecurity/test-apps/WriteExternalStorageApp/src/com/android/cts/writeexternalstorageapp/WriteExternalStorageTest.java
+++ b/hostsidetests/appsecurity/test-apps/WriteExternalStorageApp/src/com/android/cts/writeexternalstorageapp/WriteExternalStorageTest.java
@@ -20,7 +20,6 @@
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.PACKAGE_READ;
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.PACKAGE_WRITE;
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.TAG;
-import static com.android.cts.externalstorageapp.CommonExternalStorageTest.assertDirNoAccess;
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.assertDirNoWriteAccess;
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.assertDirReadOnlyAccess;
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.assertDirReadWriteAccess;
@@ -130,7 +129,10 @@
final String packageName = getContext().getPackageName();
for (File path : paths) {
- assertNotNull(path);
+ assertNotNull("Valid media must be inserted during CTS", path);
+ assertEquals("Valid media must be inserted during CTS", Environment.MEDIA_MOUNTED,
+ Environment.getStorageState(path));
+
assertTrue(path.getAbsolutePath().contains(packageName));
// Walk until we leave device, writing the whole way
@@ -205,7 +207,9 @@
final String packageName = getContext().getPackageName();
for (File path : paths) {
- if (path == null) continue;
+ assertNotNull("Valid media must be inserted during CTS", path);
+ assertEquals("Valid media must be inserted during CTS", Environment.MEDIA_MOUNTED,
+ Environment.getStorageState(path));
assertTrue(path.getAbsolutePath().contains(packageName));
@@ -233,7 +237,9 @@
// Require that .nomedia was created somewhere above each dir
for (File path : paths) {
- if (path == null) continue;
+ assertNotNull("Valid media must be inserted during CTS", path);
+ assertEquals("Valid media must be inserted during CTS", Environment.MEDIA_MOUNTED,
+ Environment.getStorageState(path));
final File start = path;
diff --git a/tests/expectations/knownfailures.txt b/tests/expectations/knownfailures.txt
index d7ef39f..6b0f214 100644
--- a/tests/expectations/knownfailures.txt
+++ b/tests/expectations/knownfailures.txt
@@ -6,5 +6,13 @@
{
name: "android.holo.cts.HoloTest",
bug: 8148617
+},
+{
+ name: "android.hardware.camera2.cts.ImageReaderTest",
+ name: "android.hardware.camera2.cts.CameraCharacteristicsTest",
+ name: "android.hardware.camera2.cts.CameraCaptureResultTest",
+ name: "android.hardware.camera2.cts.CameraDeviceTest",
+ name: "android.hardware.camera2.cts.CameraManagerTest",
+ bug: 11141002
}
]
diff --git a/tests/plans/CTS-flaky.xml b/tests/plans/CTS-flaky.xml
index 1c2c30d..4605f20 100644
--- a/tests/plans/CTS-flaky.xml
+++ b/tests/plans/CTS-flaky.xml
@@ -1,8 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<TestPlan version="1.0">
- <Entry uri="android.app" exclude="android.app.backup.cts.BackupAgentHelperTest#testAndroidtestCaseSetupProperly;android.app.backup.cts.BackupAgentHelperTest#testBackupAGentHelper;android.app.backup.cts.BackupAgentTest#testAndroidTestCaseSetupProperly;android.app.backup.cts.BackupAgentTest#testBackupAgent;android.app.backup.cts.BackupManagerTest#testAndroidTestCaseSetupProperly;android.app.backup.cts.BackupManagerTest#testBackupManager;android.app.backup"/>
- <Entry uri="android.hardware"/>
- <Entry uri="android.media"/>
- <Entry uri="android.net"/>
- <Entry uri="android.provider"/>
+ <Entry uri="android.app" exclude="android.app.cts.SystemFeaturesTest#testTelephonyFeatures;android.app.cts.InstrumentationTest#testCallActivityOnResume;android.app.cts.ActivityManagerRecentTaskInfoTest#testWriteToParcel;android.app.cts.InstrumentationTest#testMisc;android.app.cts.DialogTest#testSetContentView;android.app.cts.ServiceTest#testLocalBindAutoClassPermissionGranted;android.app.cts.ActivityManager_RunningAppProcessInfoTest#testAndroidTestCaseSetupProperly;android.app.cts.AlertDialog_BuilderTest#testSetSingleChoiceItemsWithParamInt;android.app.cts.LocalActivityManagerTest#testConstructor;android.app.cts.ActivityManager_RunningServiceInfoTest#testDescribeContents;android.app.cts.DialogTest#testTakeKeyEvents;android.app.cts.LifecycleTest#testBasic;android.app.cts.NotificationTest#testConstructor;android.app.cts.ActivityManagerMemoryInfoTest#testWriteToParcel;android.app.cts.DialogTest#testConstructor_protectedCancellable;android.app.cts.ProgressDialogTest#testIncrementProgressBy;android.app.cts.ApplicationTest#testApplication;android.app.cts.InstrumentationTest#testSendKeySync;android.app.cts.LocalActivityManagerTest#testDispatchCreate;android.app.cts.AlertDialogTest#testAlertDialogDeprecatedAPI;android.app.cts.AlertDialog_BuilderTest#testSetSingleChoiceItemsWithParamCursor;android.app.cts.InstrumentationTest#testCallActivityOnRestart;android.app.backup.cts.BackupAgentTest#testBackupAgent;android.app.cts.AlertDialog_BuilderTest#testSetSingleChoiceItemsWithParamCharSequence;android.app.cts.ActivityManager_RunningServiceInfoTest#testAndroidTestCaseSetupProperly;android.app.cts.ServiceTest#testLocalBindAutoAction;android.app.cts.DialogTest#testSetFeatureDrawableUri;android.app.cts.KeyguardManagerKeyguardLockTest#testDisableKeyguard;android.app.cts.LaunchTest#testClearTopWhilResumed;android.app.cts.WallpaperManagerTest#testSuggestDesiredDimensions;android.app.cts.SystemFeaturesTest#testLiveWallpaperFeature;android.app.cts.InstrumentationTest#testCallActivityOnUserLeaving;android.app.cts.AlertDialog_BuilderTest#testSetCancelable;android.app.cts.AlertDialogTest#testAlertDialogTheme;android.app.cts.PendingIntentTest#testGetBroadcast;android.app.cts.ActivityManager_RunningServiceInfoTest#testWriteToParcel;android.app.cts.InstrumentationTest#testGetComponentName;android.app.backup.cts.FileBackupHelperTest#testAndroidTestCaseSetupProperly;android.app.cts.DownloadManagerTest#testAndroidTestCaseSetupProperly;android.app.cts.SystemFeaturesTest#testTouchScreenFeatures;android.app.cts.AlarmManagerTest#testAlarmTriggersImmediatelyIfSetTimeIsNegative;android.app.cts.ActivityManagerMemoryInfoTest#testReadFromParcel;android.app.cts.NotificationTest#testAndroidTestCaseSetupProperly;android.app.cts.AlertDialog_BuilderTest#testSetOnCancelListener;android.app.cts.ServiceTest#testLocalBindClass;android.app.cts.ServiceTest#testLocalStartClass;android.app.cts.LauncherActivity_ListItemTest#testConstructor;android.app.cts.InstrumentationTest#testCallActivityOnCreate;android.app.cts.PendingIntentTest#testSendWithParamContextIntIntent;android.app.cts.InstrumentationTest#testSendPointerSync;android.app.cts.DialogTest#testRequestWindowFeature;android.app.cts.LocalActivityManagerTest#testDispatchPauseFalse;android.app.cts.Instrumentation_ActivityResultTest#testActivityResultOp;android.app.cts.ProgressDialogTest#testOnStartCreateStop;android.app.cts.AlertDialog_BuilderTest#testSetNegativeButtonWithParamInt;android.app.cts.KeyguardManagerKeyguardLockTest#testReenableKeyguard;android.app.cts.DialogTest#testShow;android.app.cts.ActivityManagerMemoryInfoTest#testDescribeContents;android.app.cts.SystemFeaturesTest#testFeatureNamespaces;android.app.cts.PendingIntent_CanceledExceptionTest#testConstructor;android.app.cts.AlertDialog_BuilderTest#testSetPositiveButtonWithParamInt;android.app.cts.PendingIntentTest#testSendWithParamInt;android.app.cts.PendingIntentTest#testGetActivity;android.app.cts.AlertDialog_BuilderTest#testSetCursor;android.app.cts.ActivityManagerProcessErrorStateInfoTest#testWriteToParcel;android.app.cts.AlertDialog_BuilderTest#testConstructor;android.app.cts.LocalActivityManagerTest#testDispatchDestroy;android.app.cts.DownloadManagerTest#testDownloadManager;android.app.cts.ServiceTest#testLocalBindAction;android.app.cts.LocalActivityManagerTest#testSaveInstanceState;android.app.cts.LifecycleTest#testTabDialog;android.app.cts.LaunchTest#testLocalActivity;android.app.cts.AlertDialog_BuilderTest#testSetInverseBackgroundForced;android.app.cts.SystemFeaturesTest#testLocationFeatures;android.app.cts.DialogTest#testOnStartCreateStop;android.app.cts.ActivityManagerRecentTaskInfoTest#testReadFromParcel;android.app.cts.ServiceTest#testLocalStartClassPermissions;android.app.cts.ServiceTest#testLocalUnbindTwice;android.app.cts.ActivityManagerProcessErrorStateInfoTest#testConstructor;android.app.cts.DialogTest#testSetFeatureDrawableResource;android.app.cts.ProgressDialogTest#testAccessProgress;android.app.cts.DialogTest#testTrackballEvent;android.app.cts.AlertDialog_BuilderTest#testSetSingleChoiceItems;android.app.cts.LaunchTest#testColdActivity;android.app.cts.ActivityManagerTest#testGetMemoryInfo;android.app.cts.PendingIntentTest#testAndroidTestCaseSetupProperly;android.app.cts.DialogTest#testOnContentChanged;android.app.cts.SearchManagerTest#testSetOnDismissListener;android.app.cts.InstrumentationTest#testContext;android.app.cts.LauncherActivity_IconResizerTest#testIconResizer;android.app.cts.DialogTest#testCancel_listener;android.app.cts.ActivityManagerTest#testIsUserAMonkey;android.app.cts.NotificationManagerTest#testCancelAll;android.app.cts.ActivityGroupTest#testAndroidTestCaseSetupProperly;android.app.cts.AlertDialog_BuilderTest#testCreate;android.app.cts.SystemFeaturesTest#testUsbAccessory;android.app.cts.ActivityManagerRecentTaskInfoTest#testDescribeContents;android.app.cts.ActivityManagerRunningTaskInfoTest#testDescribeContents;android.app.cts.AlertDialog_BuilderTest#testDisableCancelable;android.app.cts.InstrumentationTest#testSendKeyDownUpSync;android.app.cts.ActivityManagerRunningTaskInfoTest#testConstructor;android.app.cts.TimePickerDialogTest#testUpdateTime;android.app.cts.ActivityManagerRunningTaskInfoTest#testReadFromParcel;android.app.cts.ProgressDialogTest#testSetProgressStyle;android.app.cts.InstrumentationTest#testMonitor;android.app.cts.AliasActivityTest#testAliasActivity;android.app.cts.InstrumentationTest#testSendTrackballEventSync;android.app.cts.LifecycleTest#testScreen;android.app.cts.AlarmManagerTest#testCancel;android.app.cts.ActivityGroupTest#testTabDialog;android.app.cts.PendingIntentTest#testDescribeContents;android.app.cts.DialogTest#testOnSearchRequested;android.app.cts.SearchManagerTest#testSetOnCancelListener;android.app.cts.ProgressDialogTest#testAccessMax;android.app.cts.PendingIntentTest#testGetTargetPackage;android.app.cts.SystemFeaturesTest#testWifiFeature;android.app.cts.ActivityManagerRecentTaskInfoTest#testAndroidTestCaseSetupProperly;android.app.cts.DialogTest#testSetFeatureDrawableAlpha;android.app.cts.DialogTest#testSetTitle;android.app.cts.FragmentTest#testInstantiateNonFragment;android.app.cts.DialogTest#testSetDismissMessage;android.app.cts.PendingIntentTest#testWriteToParcel;android.app.cts.ActivityManagerMemoryInfoTest#testAndroidTestCaseSetupProperly;android.app.cts.AlertDialog_BuilderTest#testSetNeutralButtonWithParamCharSequence;android.app.cts.NotificationTest#testToString;android.app.cts.LaunchTest#testColdScreen;android.app.cts.AlertDialogTest#testAlertDialog;android.app.cts.SystemFeaturesTest#testSensorFeatures;android.app.cts.ProgressDialogTest#testShow1;android.app.cts.AlertDialog_BuilderTest#testSetNeutralButtonWithParamInt;android.app.cts.ActivityManagerRunningTaskInfoTest#testWriteToParcel;android.app.cts.ProgressDialogTest#testShow2;android.app.cts.ProgressDialogTest#testShow3;android.app.cts.ProgressDialogTest#testShow4;android.app.cts.InstrumentationTest#testCallActivityOnStart;android.app.cts.PendingIntentTest#testCancel;android.app.cts.InstrumentationTest#testConstructor;android.app.cts.ProgressDialogTest#testSetIndeterminate;android.app.cts.AlertDialog_BuilderTest#testShow;android.app.cts.AlertDialog_BuilderTest#testSetIconWithParamDrawable;android.app.cts.AlarmManagerTest#testSetTypes;android.app.cts.AlarmManagerTest#testSetInexactRepeating;android.app.cts.PendingIntentTest#testSendWithParamIntOnFinishedHandler;android.app.backup.cts.FileBackupHelperTest#testConstructor;android.app.cts.Instrumentation_ActivityResultTest#testAndroidTestCaseSetupProperly;android.app.cts.DownloadManagerTest#testDownloadManagerDestinationExtension;android.app.cts.LaunchTest#testClearTopInCreate;android.app.cts.InstrumentationTest#testRunOnMainSync;android.app.cts.DialogTest#testOnKeyDownKeyUp;android.app.cts.ServiceTest#testLocalStartActionPermissions;android.app.cts.KeyguardManagerTest#testInKeyguardRestrictedInputMode;android.app.cts.DialogTest#testConstructor;android.app.cts.AlertDialogTest#testCallback;android.app.cts.ActivityManagerTest#testGetRunningTasks;android.app.cts.ProgressDialogTest#testIncrementSecondaryProgressBy;android.app.cts.DialogTest#testAccessOwnerActivity;android.app.cts.LifecycleTest#testTabScreen;android.app.cts.TimePickerDialogTest#testOnRestoreInstanceState;android.app.cts.ActivityGroupTest#testTabBasic;android.app.cts.ServiceTest#testAndroidTestCaseSetupProperly;android.app.cts.PendingIntentTest#testSendWithParamContextIntIntentOnFinishedHandler;android.app.backup.cts.BackupManagerTest#testBackupManager;android.app.cts.ActivityManagerRecentTaskInfoTest#testConstructor;android.app.cts.DialogTest#testOnWindowFocusChanged;android.app.cts.DialogTest#testGetCurrentFocus;android.app.cts.TabActivityTest#testChildTitleCallback;android.app.cts.DialogTest#testSetOnDismissListener_listener;android.app.cts.ServiceTest#testLocalStartAction;android.app.cts.AlertDialog_BuilderTest#testSetMultiChoiceItemsWithParamInt;android.app.cts.DialogTest#testGetLayoutInflater;android.app.cts.InstrumentationTest#testInvokeContextMenuAction;android.app.cts.InstrumentationTest#testProfiling;android.app.cts.IntentServiceTest#testIntentServiceLifeCycle;android.app.cts.ProgressDialogTest#testAccessSecondaryProgress;android.app.cts.NotificationManagerTest#testAndroidTestCaseSetupProperly;android.app.backup.cts.BackupAgentTest#testAndroidTestCaseSetupProperly;android.app.cts.ActivityManagerTest#testGetProcessInErrorState;android.app.cts.SearchManagerTest#testStopSearch;android.app.cts.NotificationTest#testSetLatestEventInfo;android.app.cts.DialogTest#testSetCancellable_false;android.app.cts.PendingIntentTest#testSend;android.app.cts.LocalActivityManagerTest#testDispatchResume;android.app.cts.AlertDialog_BuilderTest#testSetViewCustom;android.app.cts.InstrumentationTest#testInvokeMenuActionSync;android.app.cts.DialogTest#testOnSaveInstanceState;android.app.cts.DialogTest#testOnKeyMultiple;android.app.cts.ActivityGroupTest#testTabScreen;android.app.cts.InstrumentationTest#testCallActivityOnSaveInstanceState;android.app.cts.ActivityManagerTest#testGetDeviceConfigurationInfo;android.app.cts.NotificationTest#testWriteToParcel;android.app.cts.InstrumentationTest#testWaitForIdle;android.app.cts.InstrumentationTest#testCallActivityOnStop;android.app.cts.InstrumentationTest#testSendCharacterSync;android.app.cts.TimePickerDialogTest#testOnTimeChanged;android.app.cts.PendingIntentTest#testEquals;android.app.cts.AlertDialog_BuilderTest#testSetIconWithParamInt;android.app.cts.DialogTest#testContextMenu;android.app.cts.SystemFeaturesTest#testBluetoothFeature;android.app.cts.ExpandableListActivityTest#testView;android.app.cts.AlarmManagerTest#testSetRepeating;android.app.cts.ActivityManager_RunningServiceInfoTest#testReadFromParcel;android.app.cts.ServiceTest#testLocalBindActionPermissions;android.app.cts.LocalActivityManagerTest#testDispatchStop;android.app.cts.LauncherActivity_ListItemTest#testAndroidTestCaseSetupProperly;android.app.cts.InstrumentationTest#testNewApplication;android.app.cts.LaunchTest#testForwardResult;android.app.cts.ProgressDialogTest#testSetMessage;android.app.cts.ActivityManagerTest#testGetRunningServices;android.app.cts.AlertDialogTest#testCustomAlertDialogView;android.app.backup.cts.SharedPreferencesBackupHelperTest#testConstructor;android.app.cts.LifecycleTest#testTabBasic;android.app.cts.FragmentTest#testInstantiateFragment;android.app.cts.ActivityManager_RunningAppProcessInfoTest#testRunningAppProcessInfo;android.app.cts.AlertDialogTest#testAlertDialogNotCancelable;android.app.cts.AlertDialog_BuilderTest#testSetItemsWithParamCharSequence;android.app.cts.ActivityManagerProcessErrorStateInfoTest#testDescribeContents;android.app.cts.DialogTest#testConstructor_protectedNotCancellable;android.app.cts.ExpandableListActivityTest#testSelect;android.app.cts.SystemFeaturesTest#testScreenFeatures;android.app.cts.LauncherActivityTest#testLaunchActivity;android.app.cts.LaunchTest#testAndroidTestCaseSetupProperly;android.app.cts.LifecycleTest#testAndroidTestCaseSetupProperly;android.app.cts.NotificationTest#testDescribeContents;android.app.cts.DialogTest#testOnWindowAttributesChanged;android.app.cts.ServiceTest#testLocalBindAutoActionPermissionGranted;android.app.cts.InstrumentationTest#testCallActivityOnPostCreate;android.app.cts.AlertDialogTest#testAlertDialogDeprecatedAPIWithMessage;android.app.cts.AlertDialog_BuilderTest#testSetPositiveButtonWithParamCharSequence;android.app.cts.AlarmManagerTest#testAndroidTestCaseSetupProperly;android.app.cts.AlertDialog_BuilderTest#testSetView;android.app.cts.ActivityManager_RunningServiceInfoTest#testConstructor;android.app.cts.InstrumentationTest#testPerformanceSnapshot;android.app.cts.InstrumentationTest#testCallApplicationOnCreate;android.app.cts.DialogTest#testSetFeatureDrawable;android.app.cts.AliasActivityTest#testAndroidTestCaseSetupProperly;android.app.cts.PendingIntentTest#testGetService;android.app.cts.IntentServiceTest#testIntents;android.app.cts.AlertDialog_BuilderTest#testSetOnItemSelectedListener;android.app.cts.LifecycleTest#testDialog;android.app.cts.DownloadManagerTest#testDownloadManagerDestination;android.app.cts.WallpaperManagerTest#testAndroidTestCaseSetupProperly;android.app.cts.ExpandableListActivityTest#testAndroidTestCaseSetupProperly;android.app.cts.InstrumentationTest#testNewActivity;android.app.cts.ProgressDialogTest#testSetProgressDrawable;android.app.backup.cts.BackupManagerTest#testAndroidTestCaseSetupProperly;android.app.cts.InstrumentationTest#testAllocCounting;android.app.cts.LocalActivityManagerTest#testRemoveAllActivities;android.app.cts.ServiceTest#testLocalBindAutoClass;android.app.backup.cts.BackupAgentHelperTest#testBackupAgentHelper;android.app.cts.ActivityManagerProcessErrorStateInfoTest#testReadFromParcel;android.app.cts.PendingIntent_CanceledExceptionTest#testAndroidTestCaseSetupProperly;android.app.cts.TimePickerDialogTest#testOnClick;android.app.cts.AlertDialog_BuilderTest#testSetOnKeyListener;android.app.cts.DialogTest#testTouchEvent;android.app.cts.ProgressDialogTest#testProgressDialog1;android.app.cts.InstrumentationTest#testCallActivityOnRestoreInstanceState;android.app.cts.ProgressDialogTest#testProgressDialog2;android.app.cts.InstrumentationTest#testCallActivityOnPause;android.app.cts.AlertDialog_BuilderTest#testSetMultiChoiceItemsWithParamCharSequence;android.app.cts.SystemFeaturesTest#testCameraFeatures;android.app.cts.ServiceTest#testLocalBindClassPermissions;android.app.cts.ActivityManagerTest#testGetRecentTasks;android.app.cts.SystemFeaturesTest#testNfcFeatures;android.app.cts.AlertDialogTest#testCustomAlertDialog;android.app.cts.SystemFeaturesTest#testSipFeatures;android.app.cts.InstrumentationTest#testSendStringSync;android.app.cts.ActivityManagerRunningTaskInfoTest#testAndroidTestCaseSetupProperly;android.app.cts.TabActivityTest#testTabActivity;android.app.cts.KeyguardManagerTest#testNewKeyguardLock;android.app.cts.NotificationManagerTest#testCancel;android.app.cts.AlertDialog_BuilderTest#testSetMultiChoiceItemsWithParamCursor;android.app.cts.ActivityManagerMemoryClassTest#testGetMemoryClass;android.app.cts.ActivityManagerTest#testGetRunningAppProcesses;android.app.cts.AlertDialog_BuilderTest#testSetAdapter;android.app.cts.AlertDialog_BuilderTest#testSetItemsWithParamInt;android.app.cts.DialogTest#testCancel_noListener;android.app.cts.DialogTest#testDispatchKeyEvent;android.app.cts.LaunchTest#testLocalScreen;android.app.cts.ActivityManagerTest#testRestartPackage;android.app.cts.FragmentTest#testAndroidTestCaseSetupProperly;android.app.cts.InstrumentationTest#testCallActivityOnNewIntent;android.app.cts.NotificationManagerTest#testNotify;android.app.cts.LocalActivityManagerTest#testDispatchPauseTrue;android.app.cts.ActivityManagerProcessErrorStateInfoTest#testAndroidTestCaseSetupProperly;android.app.backup.cts.BackupAgentHelperTest#testAndroidTestCaseSetupProperly;android.app.cts.ProgressDialogTest#testSetIndeterminateDrawable;android.app.backup.cts.SharedPreferencesBackupHelperTest#testAndroidTestCaseSetupProperly;android.app.cts.DownloadManagerTest#testMinimumDownload;android.app.cts.PendingIntentTest#testReadAndWritePendingIntentOrNullToParcel;android.app.cts.DialogTest#testSetOnDismissListener_noListener;android.app.cts.KeyguardManagerTest#testExitKeyguardSecurely;android.app.cts.AlertDialog_BuilderTest#testSetNegativeButtonWithParamCharSequence;android.app.cts.DialogTest#testSetCancelable_true;android.app.cts.Instrumentation_ActivityMonitorTest#testActivityMonitor;android.app.cts.LocalActivityManagerTest#testStartActivity;android.app.cts.IntentServiceTest#testAndroidTestCaseSetupProperly;android.app.cts.ActionBarTest#testAddTab;android.app.cts.DialogTest#testSetCancelMessage;android.app.cts.TimePickerDialogTest#testSaveInstanceState" />
+ <Entry uri="android.hardware" exclude="android.hardware.consumerir.cts.ConsumerIrTest#test_hasIrEmitter;android.hardware.consumerir.cts.ConsumerIrTest#test_getCarrierFrequencies;android.hardware.consumerir.cts.ConsumerIrTest#test_transmit;android.hardware.camera2.cts.CameraDeviceTest#testCameraDeviceCaptureBurst;android.hardware.camera2.cts.CameraDeviceTest#testCameraDeviceRepeatingBurst;android.hardware.cts.CameraGLTest#testSetPreviewTextureTextureCallback;android.hardware.cts.CameraTest#test3ALockInteraction;android.hardware.cts.CameraTest#testAutoExposureLock;android.hardware.cts.CameraTest#testAutoWhiteBalanceLock;android.hardware.cts.CameraTest#testCancelAutofocus;android.hardware.cts.CameraTest#testDisplayOrientation;android.hardware.cts.CameraTest#testEnableShutterSound;android.hardware.cts.CameraTest#testFaceDetection;android.hardware.cts.CameraTest#testFocusAreas;android.hardware.cts.CameraTest#testFocusDistances;android.hardware.cts.CameraTest#testGetParameterDuringFocus;android.hardware.cts.CameraTest#testInvalidParameters;android.hardware.cts.CameraTest#testJpegCallbackStartPreview;android.hardware.cts.CameraTest#testJpegExif;android.hardware.cts.CameraTest#testJpegThumbnailSize;android.hardware.cts.CameraTest#testLockUnlock;android.hardware.cts.CameraTest#testMeteringAreas;android.hardware.cts.CameraTest#testMultiCameraRelease;android.hardware.cts.CameraTest#testMultipleCameras;android.hardware.cts.CameraTest#testParameters;android.hardware.cts.CameraTest#testPreviewCallbackWithBuffer;android.hardware.cts.CameraTest#testPreviewCallbackWithPicture;android.hardware.cts.CameraTest#testPreviewFormats;android.hardware.cts.CameraTest#testPreviewFpsRange;android.hardware.cts.CameraTest#testPreviewPictureSizesCombination;android.hardware.cts.CameraTest#testRecordingHint;android.hardware.cts.CameraTest#testSceneMode;android.hardware.cts.CameraTest#testSetOneShotPreviewCallback;android.hardware.cts.CameraTest#testSetPreviewDisplay;android.hardware.cts.CameraTest#testTakePicture;android.hardware.camera2.cts.ImageReaderTest#testImageReaderInvalidAccessTest;android.hardware.cts.SensorAccelerometerTest#testEventJittering;android.hardware.cts.SensorGyroscopeTest#testEventsArriveInOrder;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidScalerAvailableJpegSizes;android.hardware.cts.SensorAccelerometerTest#testCanReceiveBatchEvents;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidSensorOrientation;android.hardware.camera2.cts.CameraCharacteristicsTest#testAndroidTestCaseSetupProperly;android.hardware.cts.SensorMagneticFieldTest#testUpdateRate;android.hardware.cts.SensorAccelerometerTest#testNotTriggerSensor;android.hardware.cts.SensorAccelerometerTest#testAndroidTestCaseSetupProperly;android.hardware.cts.SensorAccelerometerTest#testCanReceiveEvents;android.hardware.cts.SensorMagneticFieldTest#testVarianceWhileStatic;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidLensInfoHyperfocalDistance;android.hardware.camera2.cts.CameraManagerTest#testCameraManagerOpenCamerasSerially;android.hardware.camera2.cts.CameraDeviceTest#testCameraDeviceCreateCaptureBuilder;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidScalerAvailableProcessedMinDurations;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidFlashInfoAvailable;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidLensInfoShadingMapSize;android.hardware.cts.LowRamDeviceTest#testAndroidTestCaseSetupProperly;android.hardware.cts.SensorTest#testSensorOperations;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidControlAwbAvailableModes;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidSensorBaseGainFactor;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidSensorInfoPhysicalSize;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidInfoSupportedHardwareLevel;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidJpegAvailableThumbnailSizes;android.hardware.cts.SensorGyroscopeTest#testNotTriggerSensor;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidLensFacing;android.hardware.cts.Camera_ParametersTest#testAccessMethods;android.hardware.cts.SensorMagneticFieldTest#testCanRegisterListener;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidScalerAvailableFormats;android.hardware.cts.SensorTest#testBatchAndFlush;android.hardware.cts.SensorGyroscopeTest#testAndroidTestCaseSetupProperly;android.hardware.cts.SensorMagneticFieldTest#testCanReceiveEvents;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidControlAvailableEffects;android.hardware.camera2.cts.CameraManagerTest#testAndroidTestCaseSetupProperly;android.hardware.cts.SensorGyroscopeTest#testSeveralClientsBatching;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidControlAeAvailableAntibandingModes;android.hardware.cts.GeomagneticFieldTest#testAndroidTestCaseSetupProperly;android.hardware.cts.SensorAccelerometerTest#testStartStopRepeatedly;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidControlAfAvailableModes;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidSensorMaxAnalogSensitivity;android.hardware.cts.SensorTest#testRequestTriggerWithNonTriggerSensor;android.hardware.cts.SensorMagneticFieldTest#testBatchEventsArriveInOrder;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidLensInfoMinimumFocusDistance;android.hardware.cts.SensorTest#testValuesForAllSensors;android.hardware.cts.SensorMagneticFieldTest#testCanReceiveBatchEvents;android.hardware.cts.SensorAccelerometerTest#testUpdateRate;android.hardware.cts.SensorMagneticFieldTest#testStartStopRepeatedly;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidControlMaxRegions;android.hardware.cts.SensorMagneticFieldTest#testAndroidTestCaseSetupProperly;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidControlAeCompensationRange;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidRequestMaxNumOutputStreams;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidSensorInfoSensitivityRange;android.hardware.cts.SensorMagneticFieldTest#testNotTriggerSensor;android.hardware.cts.SensorGyroscopeTest#testBatchEventsArriveInOrder;android.hardware.camera2.cts.CameraManagerTest#testCameraManagerInvalidDevice;android.hardware.cts.LowRamDeviceTest#testLowRamProductProperty;android.hardware.cts.SensorTest#testCancelTriggerWithNonTriggerSensor;android.hardware.cts.SensorMagneticFieldTest#testEventsArriveInOrder;android.hardware.cts.SensorMagneticFieldTest#testMaxFrequency;android.hardware.cts.SensorAccelerometerTest#testSeveralClientsBatching;android.hardware.cts.SensorMagneticFieldTest#testEventJittering;android.hardware.cts.SensorGyroscopeTest#testEventValidity;android.hardware.camera2.cts.ImageReaderTest#testImageReaderFromCameraRaw;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidControlAeCompensationStep;android.hardware.cts.SensorMagneticFieldTest#testSeveralClientsBatching;android.hardware.camera2.cts.CameraManagerTest#testCameraManagerGetCameraCharacteristics;android.hardware.cts.SensorAccelerometerTest#testCanRegisterListener;android.hardware.camera2.cts.ImageReaderTest#testImageReaderFromCameraFlexibleYuv;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidControlAvailableVideoStabilizationModes;android.hardware.cts.SensorGyroscopeTest#testStartStopRepeatedly;android.hardware.cts.SensorAccelerometerTest#testEventsArriveInOrder;android.hardware.cts.SensorMagneticFieldTest#testRegisterForBatchingZeroReport;android.hardware.cts.SensorGyroscopeTest#testCanRegisterListener;android.hardware.cts.SensorGyroscopeTest#testMaxFrequency;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidScalerAvailableProcessedSizes;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidControlAeAvailableTargetFpsRanges;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidTonemapMaxCurvePoints;android.hardware.cts.SensorGyroscopeTest#testCanReceiveEvents;android.hardware.cts.SensorTest#testRegisterTwiceWithSameSensor;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidLensInfoAvailableOpticalStabilization;android.hardware.camera2.cts.ImageReaderTest#testAndroidTestCaseSetupProperly;android.hardware.cts.SensorMagneticFieldTest#testSeveralClients;android.hardware.camera2.cts.CameraManagerTest#testCameraManagerOpenCameraTwice;android.hardware.cts.SensorMagneticFieldTest#testStartStopBatchingRepeatedly;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidScalerAvailableMaxDigitalZoom;android.hardware.cts.SensorAccelerometerTest#testBatchEventsArriveInOrder;android.hardware.camera2.cts.CameraDeviceTest#testAndroidTestCaseSetupProperly;android.hardware.cts.SensorAccelerometerTest#testRegisterForBatchingZeroReport;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidStatisticsInfoMaxFaceCount;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidControlAvailableSceneModes;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidSensorInfoActiveArraySize;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidSensorInfoMaxFrameDuration;android.hardware.cts.SensorAccelerometerTest#testStartStopBatchingRepeatedly;android.hardware.cts.SensorGyroscopeTest#testEventJittering;android.hardware.camera2.cts.CameraDeviceTest#testCameraDeviceCapture;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidSensorInfoExposureTimeRange;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidLensInfoAvailableFocalLengths;android.hardware.cts.SensorGyroscopeTest#testCanReceiveBatchEvents;android.hardware.cts.SensorTest#testLegacySensorOperations;android.hardware.camera2.cts.CameraManagerTest#testCameraManagerListener;android.hardware.cts.GeomagneticFieldTest#testGeomagneticField;android.hardware.cts.SensorGyroscopeTest#testSeveralClients;android.hardware.cts.SensorGyroscopeTest#testStartStopBatchingRepeatedly;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidLensInfoAvailableFilterDensities;android.hardware.camera2.cts.CameraDeviceTest#testCameraDeviceSetErrorListener;android.hardware.cts.SensorGyroscopeTest#testRegisterForBatchingZeroReport;android.hardware.camera2.cts.CameraManagerTest#testCameraManagerGetDeviceIdList;android.hardware.cts.SensorAccelerometerTest#testMaxFrequency;android.hardware.camera2.cts.CameraManagerTest#testCameraManagerOpenAllCameras;android.hardware.cts.SensorAccelerometerTest#testSeveralClients;android.hardware.cts.SensorGyroscopeTest#testVarianceWhileStatic;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidScalerAvailableJpegMinDurations;android.hardware.cts.SensorTest#testAndroidTestCaseSetupProperly;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidStatisticsInfoAvailableFaceDetectModes;android.hardware.camera2.cts.CameraCharacteristicsTest#testCameraCharacteristicsAndroidLensInfoAvailableApertures;android.hardware.cts.SensorAccelerometerTest#testEventValidity;android.hardware.cts.SensorAccelerometerTest#testUpdateBatchRate;android.hardware.cts.SensorAccelerometerTest#testVarianceWhileStatic;android.hardware.cts.SensorGyroscopeTest#testUpdateBatchRate;android.hardware.cts.SensorGyroscopeTest#testUpdateRate;android.hardware.cts.SensorMagneticFieldTest#testEventValidity;android.hardware.cts.SensorMagneticFieldTest#testUpdateBatchRate;android.hardware.cts.SensorTest#testRegisterWithTriggerSensor;android.hardware.cts.Camera_SizeTest#testConstructor" />
+ <Entry uri="android.media" exclude="android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_300kbps_12fps_AAC_Stereo_24kbps_22050Hz;android.media.cts.AudioPreProcessingTest#test2_1AecCreateAndRelease;android.media.cts.MediaCodecTest#testConcurrentAudioVideoEncodings;android.media.cts.EnvReverbTest#test2_0SetEnabledGetEnabled;android.media.cts.EncodeDecodeTest#testEncodeDecodeVideoFromBufferToBufferQVGA;android.media.cts.AudioTrackTest#testSetLoopPointsStartTooFar;android.media.cts.RingtoneManagerTest#testStopPreviousRingtone;android.media.cts.EnvReverbTest#test1_3Reflections;android.media.cts.MediaPlayerTest#testGapless3;android.media.cts.MediaPlayerTest#testGapless2;android.media.cts.MediaPlayerTest#testGapless1;android.media.cts.BassBoostTest#testAndroidTestCaseSetupProperly;android.media.cts.EnvReverbTest#test3_1EnableStatusListener;android.media.cts.ExtractDecodeEditEncodeMuxTest#testExtractDecodeEditEncodeMuxQVGA;android.media.cts.MediaRecorderTest#testRecorderCamera;android.media.cts.MediaPlayerTest#testGetTrackInfo;android.media.cts.MediaDrmMockTest#testIsCryptoSchemeNotSupported;android.media.cts.AudioPreProcessingTest#testAndroidTestCaseSetupProperly;android.media.cts.DecodeEditEncodeTest#testVideoEditQCIF;android.media.cts.MediaPlayerTest#testDeselectTrack;android.media.cts.AudioEffectTest#test3_7SetParameterAfterRelease;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_56kbps_12fps_AAC_Mono_24kbps_22050Hz;android.media.cts.AudioEffectTest#test4_2ControlStatusListener;android.media.cts.StreamingMediaPlayerTest#testHTTP_MPEG4SP_AAC_Video1;android.media.cts.StreamingMediaPlayerTest#testHTTP_MPEG4SP_AAC_Video2;android.media.cts.JetPlayerTest#testLoadJetFromFd;android.media.cts.MediaDrmMockTest#testProvideProvisionResponse;android.media.cts.JetPlayerTest#testQueueJetSegmentMuteArray;android.media.cts.StreamingMediaPlayerTest#testPlayOggStream;android.media.cts.MediaPlayerTest#testLocalVideo_MP4_H264_480x360_1350kbps_25fps_AAC_Stereo_128kbps_44110Hz;android.media.cts.SoundPoolAacTest#testAndroidTestCaseSetupProperly;android.media.cts.PresetReverbTest#test3_2ParameterChangedListener;android.media.cts.MediaDrmMockTest#testNullPropertyString;android.media.cts.AudioEffectTest#test3_2SetParameterIntShort;android.media.cts.AudioRecord_BufferSizeTest#testGetMinBufferSize;android.media.cts.AudioEffectTest#test3_0SetParameterByteArrayByteArray;android.media.cts.MediaScannerConnectionTest#testAndroidTestCaseSetupProperly;android.media.cts.MediaPlayerTest#testLocalVideo_MP4_H264_480x360_1000kbps_30fps_AAC_Stereo_128kbps_44110Hz;android.media.cts.AudioTrackTest#testWriteShortSizeTooBig;android.media.cts.AudioTrackTest#testGetMinBufferSizeTooLowSR;android.media.cts.AudioEffectTest#test1_1ConstructorFromUuid;android.media.cts.ToneGeneratorTest#testSyncGenerate;android.media.cts.AudioEffectTest#test1_3GetEnabledAfterRelease;android.media.cts.BassBoostTest#test1_1Properties;android.media.cts.SoundPoolOggTest#testLoadMore;android.media.cts.AudioEffectTest#test1_7AuxiliaryOnAudioTrack;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_300kbps_12fps_AAC_Stereo_128kbps_11025Hz;android.media.cts.MediaCodecListTest#testMediaCodecXmlFileExist;android.media.cts.MediaPlayerTest#testLocalVideo_MP4_H264_480x360_1000kbps_25fps_AAC_Stereo_128kbps_44110Hz;android.media.cts.VisualizerTest#test2_1ListenerCapture;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_56kbps_25fps_AAC_Stereo_24kbps_11025Hz;android.media.cts.StreamingMediaPlayerTest#testPlayMp3Stream2;android.media.cts.StreamingMediaPlayerTest#testPlayMp3Stream1;android.media.cts.MediaPlayerTest#testPlayNullSource;android.media.cts.VirtualizerTest#testAndroidTestCaseSetupProperly;android.media.cts.EncodeVirtualDisplayWithCompositionTest#testSingleVirtualDisplay;android.media.cts.DecoderTest#testDecodeOgg;android.media.cts.MediaRecorderTest#testOnErrorListener;android.media.cts.EnvReverbTest#test2_1SetEnabledAfterRelease;android.media.cts.AudioTrackTest#testSetPlaybackRate;android.media.cts.AudioManagerTest#testVibrateNotification;android.media.cts.AudioManagerTest#testAccessMode;android.media.cts.EqualizerTest#test1_4SetBandLevelAfterRelease;android.media.cts.MediaPlayerTest#testPlayVideo;android.media.cts.MediaCodecTest#testSignalSurfaceEOS;android.media.cts.VisualizerTest#test0_0ConstructorAndRelease;android.media.cts.DecoderTest#testDecodeFlac;android.media.cts.MediaDrmMockTest#testEventWithSessionAndData;android.media.cts.MediaScannerConnectionTest#testMediaScannerConnection;android.media.cts.AudioTrackTest#testConstructorMono8MusicStatic;android.media.cts.AudioManagerTest#testMicrophoneMute;android.media.cts.MediaDrmMockTest#testMissingPropertyString;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_300kbps_25fps_AAC_Stereo_128kbps_22050Hz;android.media.cts.AudioTrackTest#testConstructorStereo16MusicStream;android.media.cts.Vp8EncoderTest#testAndroidTestCaseSetupProperly;android.media.cts.MediaDrmMockTest#testQueryKeyStatus;android.media.cts.BassBoostTest#test3_2ParameterChangedListener;android.media.cts.AudioManagerTest#testVibrateRinger;android.media.cts.AudioManagerTest#testMusicActive;android.media.cts.DecoderTest#testCodecResetsVP8WithoutSurface;android.media.cts.MediaPlayerTest#testRecordedVideoPlayback90;android.media.cts.MediaPlayerFlakyNetworkTest#test_S3P00001;android.media.cts.AudioTrackTest#testGetMinBufferSizeTooHighSR;android.media.cts.CamcorderProfileTest#testAndroidTestCaseSetupProperly;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_56kbps_25fps_AAC_Stereo_128kbps_11025Hz;android.media.cts.AudioManagerTest#testVolume;android.media.cts.MediaMuxerTest#testAudioOnly;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_56kbps_12fps_AAC_Stereo_128kbps_22050Hz;android.media.cts.AudioEffectTest#test1_6AuxiliaryOnMediaPlayerFailure;android.media.cts.DecoderTest#testCodecResetsMpeg4WithSurface;android.media.cts.AudioEffectTest#test4_1setParameterLowerPriority;android.media.cts.MediaPlayerTest#testLocalVideo_MP4_H264_480x360_500kbps_30fps_AAC_Stereo_128kbps_44110Hz;android.media.cts.DecoderTest#testCodecResetsVP8WithSurface;android.media.cts.CamcorderProfileTest#testGet;android.media.cts.DecoderTest#testDecodeMonoM4a;android.media.cts.MediaRecorderTest#testSetCamera;android.media.cts.AudioTrackTest#testSetGetPlaybackRate;android.media.cts.EncodeDecodeTest#testEncodeDecodeVideoFromSurfaceToSurfaceQVGA;android.media.cts.EnvReverbTest#testAndroidTestCaseSetupProperly;android.media.cts.DecoderTest#testFlush;android.media.cts.AudioEffectTest#testAndroidTestCaseSetupProperly;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_300kbps_12fps_AAC_Mono_24kbps_11025Hz;android.media.cts.DecoderTest#testDecodeMp3Lame;android.media.cts.EncoderTest#testAMRNBEncoders;android.media.cts.MediaScannerTest#testAndroidTestCaseSetupProperly;android.media.cts.MediaCodecListTest#testRequiredMediaCodecList;android.media.cts.DecoderTest#testCodecResetsMpeg4WithoutSurface;android.media.cts.MediaRecorderTest#testGetAudioSourceMax;android.media.cts.MediaPlayerTest#testLocalVideo_MP4_H264_480x360_500kbps_25fps_AAC_Stereo_128kbps_44110Hz;android.media.cts.AudioTrackTest#testSetLoopPointsLoopTooLong;android.media.cts.EqualizerTest#test1_1BandFrequency;android.media.cts.EncoderTest#testAMRWBEncoders;android.media.cts.AudioTrackTest#testWriteShortNegativeSize;android.media.cts.AudioTrackTest#testConstructorStreamType;android.media.cts.MediaPlayerTest#testCallback;android.media.cts.BassBoostTest#test2_0SetEnabledGetEnabled;android.media.cts.MediaPlayerFlakyNetworkTest#test_S2P00001;android.media.cts.EncodeVirtualDisplayTest#testEncodeVirtualDisplay;android.media.cts.EncodeDecodeTest#testEncodeDecodeVideoFromSurfaceToSurfaceQCIF;android.media.cts.DecoderTest#testCodecEarlyEOSVP9;android.media.cts.MediaPlayerTest#testLocalVideo_MP4_H264_480x360_1350kbps_30fps_AAC_Stereo_192kbps_44110Hz;android.media.cts.DecoderTest#testCodecEarlyEOSVP8;android.media.cts.MediaPlayerFlakyNetworkTest#test_S5P00001;android.media.cts.MediaRandomTest#testRecorderRandomAction;android.media.cts.MediaDrmMockTest#testBadSession;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_56kbps_12fps_AAC_Stereo_128kbps_11025Hz;android.media.cts.CameraProfileTest#testGetWithId;android.media.cts.EnvReverbTest#test1_0Room;android.media.cts.StreamingMediaPlayerTest#testPlayMp3StreamNoLength;android.media.cts.SoundPoolAacTest#testMultiSound;android.media.cts.AudioTrackTest#testReloadStaticData;android.media.cts.MediaDrmMockTest#testAndroidTestCaseSetupProperly;android.media.cts.MediaPlayerTest#testPlayAudio;android.media.cts.MediaDrmMockTest#testGetKeyRequestNoOptionalParameters;android.media.cts.MediaRecorderTest#testSetMaxDuration;android.media.cts.AudioPreProcessingTest#test2_2AecSetEnabledGetEnabled;android.media.cts.AsyncPlayerTest#testAsyncPlayer;android.media.cts.DecoderTest#testCodecBasicVP8;android.media.cts.DecoderTest#testCodecBasicVP9;android.media.cts.AudioTrackTest#testSetLoopPointsStream;android.media.cts.AudioTrackTest#testConstructorStereo8MusicStatic;android.media.cts.MediaCodecTest#testDequeueSurface;android.media.cts.EncodeDecodeTest#testEncodeDecodeVideoFromBufferToBuffer720p;android.media.cts.MediaRecorderTest#testRecorderTimelapsedVideo;android.media.cts.MediaCodecTest#testAndroidTestCaseSetupProperly;android.media.cts.AudioTrackTest#testSetPlaybackHeadPositionStopped;android.media.cts.AudioTrackTest#testWriteByteSizeTooBig;android.media.cts.MediaMuxerTest#testAndroidTestCaseSetupProperly;android.media.cts.EnvReverbTest#test1_1Decay;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_300kbps_12fps_AAC_Stereo_128kbps_22050Hz;android.media.cts.DecoderTest#testDecodeWav;android.media.cts.DecoderTest#testCodecEarlyEOSH263;android.media.cts.SoundPoolOggTest#testSoundPoolOp;android.media.cts.DecoderTest#testCodecEarlyEOSH264;android.media.cts.MediaPlayerFlakyNetworkTest#test_S6P00002;android.media.cts.EnvReverbTest#test1_2Reverb;android.media.cts.AudioManagerTest#testSoundEffects;android.media.cts.ToneGeneratorTest#testAndroidTestCaseSetupProperly;android.media.cts.MediaCodecTest#testReconfigureWithoutSurface;android.media.cts.RingtoneManagerTest#testConstructors;android.media.cts.MediaCodecListTest#testGetCapabilities;android.media.cts.MediaDrmMockTest#testIsMimeTypeSupported;android.media.cts.DecoderTest#testDecodeMonoMp3;android.media.cts.DecoderTest#testCodecResetsH263WithoutSurface;android.media.cts.MediaScannerNotificationTest#testMediaScannerNotification;android.media.cts.VisualizerTest#testAndroidTestCaseSetupProperly;android.media.cts.VirtualizerTest#test0_0ConstructorAndRelease;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_56kbps_25fps_AAC_Mono_24kbps_22050Hz;android.media.cts.AudioTrackTest#testWriteShort;android.media.cts.AudioRecordTest#testAndroidTestCaseSetupProperly;android.media.cts.ExtractDecodeEditEncodeMuxTest#testExtractDecodeEditEncodeMux720p;android.media.cts.EqualizerTest#test3_0ControlStatusListener;android.media.cts.MediaDrmMockTest#testRestoreKeys;android.media.cts.MediaMuxerTest#testVideoAudio;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_56kbps_25fps_AAC_Mono_24kbps_11025Hz;android.media.cts.AudioTrackTest#testConstructorStereo8MusicStream;android.media.cts.MediaPlayerTest#testSetNextMediaPlayerWithRelease;android.media.cts.VisualizerTest#test1_0CaptureRates;android.media.cts.CameraProfileTest#testAndroidTestCaseSetupProperly;android.media.cts.EncodeVirtualDisplayWithCompositionTest#testAndroidTestCaseSetupProperly;android.media.cts.EncodeDecodeTest#testEncodeDecodeVideoFromBufferToSurfaceQVGA;android.media.cts.VirtualizerTest#test1_1Properties;android.media.cts.AudioManagerTest#testRouting;android.media.cts.EqualizerTest#test3_1EnableStatusListener;android.media.cts.PresetReverbTest#test3_1EnableStatusListener;android.media.cts.EnvReverbTest#test0_0ConstructorAndRelease;android.media.cts.MediaPlayerTest#testChangeSubtitleTrack;android.media.cts.JetPlayerTest#testClone;android.media.cts.AudioEffectTest#test1_5AuxiliaryOnMediaPlayer;android.media.cts.MediaPlayerTest#testSetNextMediaPlayerWithReset;android.media.cts.AudioEffectTest#test2_0SetEnabledGetEnabled;android.media.cts.VisualizerTest#test1_1CaptureSize;android.media.cts.AudioTrackTest#testPlaybackHeadPositionAfterInit;android.media.cts.EqualizerTest#test1_3Properties;android.media.cts.AudioTrackTest#testWriteByte;android.media.cts.VirtualizerTest#test2_1SetEnabledAfterRelease;android.media.cts.AudioTrackTest#testSetStereoVolumeMin;android.media.cts.MediaRecorderTest#testRecorderVideo;android.media.cts.ExtractDecodeEditEncodeMuxTest#testExtractDecodeEditEncodeMuxAudioVideo;android.media.cts.EqualizerTest#test2_0SetEnabledGetEnabled;android.media.cts.MediaPlayerTest#testSetNextMediaPlayer;android.media.cts.AudioTrackTest#testSetStereoVolumeMid;android.media.cts.VirtualizerTest#test1_0Strength;android.media.cts.EncodeDecodeTest#testAndroidTestCaseSetupProperly;android.media.cts.AudioTrackTest#testAudioTrackProperties;android.media.cts.AudioTrackTest#testSetPlaybackHeadPositionPaused;android.media.cts.SoundPoolAacTest#testLoadMore;android.media.cts.ExtractDecodeEditEncodeMuxTest#testExtractDecodeEditEncodeMuxQCIF;android.media.cts.EncodeVirtualDisplayTest#testAndroidTestCaseSetupProperly;android.media.cts.RingtoneManagerTest#testSetType;android.media.cts.MediaDrmMockTest#testMultipleSessions;android.media.cts.MediaPlayerFlakyNetworkTest#test_S0P0;android.media.cts.SoundPoolOggTest#testLoad;android.media.cts.PresetReverbTest#test0_0ConstructorAndRelease;android.media.cts.RingtoneManagerTest#testAccessMethods;android.media.cts.EnvReverbTest#test1_4DiffusionAndDensity;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_56kbps_12fps_AAC_Stereo_24kbps_22050Hz;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_300kbps_25fps_AAC_Stereo_24kbps_22050Hz;android.media.cts.MediaDrmMockTest#testGetProvisionRequest;android.media.cts.CamcorderProfileTest#testGetWithId;android.media.cts.AudioEffectTest#test1_2ConstructorUnknownType;android.media.cts.SoundPoolOggTest#testAndroidTestCaseSetupProperly;android.media.cts.AudioTrackTest#testWriteByte8bit;android.media.cts.PresetReverbTest#testAndroidTestCaseSetupProperly;android.media.cts.EncoderTest#testAACEncoders;android.media.cts.ExtractDecodeEditEncodeMuxTest#testExtractDecodeEditEncodeMuxAudio;android.media.cts.DecoderTest#testCodecBasicH263;android.media.cts.DecoderTest#testCodecBasicH264;android.media.cts.AudioTrackTest#testSetLoopPointsSuccess;android.media.cts.MediaDrmMockTest#testRemoveKeys;android.media.cts.FaceDetectorTest#testFindFaces;android.media.cts.MediaDrmMockTest#testGetKeyRequest;android.media.cts.MediaCodecListTest#testIsAVCBaselineProfileSupported;android.media.cts.AudioEffectTest#test3_4SetParameterIntArrayIntArray;android.media.cts.MediaCodecListTest#testIsH263BaselineProfileSupported;android.media.cts.EqualizerTest#test0_0ConstructorAndRelease;android.media.cts.EqualizerTest#test3_2ParameterChangedListener;android.media.cts.AudioTrackTest#testSetPlaybackRateZero;android.media.cts.MediaDrmMockTest#testGetSecureStops;android.media.cts.EnvReverbTest#test3_2ParameterChangedListener;android.media.cts.StreamingMediaPlayerTest#testHTTP_H263_AMR_Video2;android.media.cts.MediaDrmMockTest#testGetKeyRequestRelease;android.media.cts.StreamingMediaPlayerTest#testHTTP_H263_AMR_Video1;android.media.cts.EqualizerTest#testAndroidTestCaseSetupProperly;android.media.cts.ExtractDecodeEditEncodeMuxTest#testAndroidTestCaseSetupProperly;android.media.cts.MediaDrmMockTest#testNullSession;android.media.cts.PresetReverbTest#test1_1Properties;android.media.cts.BassBoostTest#test3_1EnableStatusListener;android.media.cts.AudioTrack_ListenerTest#testAudioTrackCallbackWithHandler;android.media.cts.VirtualizerTest#test3_2ParameterChangedListener;android.media.cts.MediaPlayerTest#testLocalVideo_MP4_H264_480x360_1350kbps_30fps_AAC_Stereo_128kbps_44110Hz;android.media.cts.BassBoostTest#test1_0Strength;android.media.cts.AudioTrackTest#testPlaybackHeadPositionAfterFlushAndPlay;android.media.cts.PresetReverbTest#test2_1SetEnabledAfterRelease;android.media.cts.AudioTrackTest#testWriteShortNegativeOffset;android.media.cts.DecoderTest#testCodecResetsMp3;android.media.cts.AudioTrackTest#testPlaybackHeadPositionAfterFlush;android.media.cts.MediaScannerTest#testCanonicalize;android.media.cts.MediaDrmMockTest#testMediaDrmConstructorFails;android.media.cts.PresetReverbTest#test2_0SetEnabledGetEnabled;android.media.cts.MediaDrmMockTest#testCryptoSession;android.media.cts.DecoderTest#testCodecResetsH263WithSurface;android.media.cts.AudioPreProcessingTest#test1_1NsCreateAndRelease;android.media.cts.DecodeEditEncodeTest#testAndroidTestCaseSetupProperly;android.media.cts.AudioEffectTest#test3_6SetParameterIntArrayByteArray;android.media.cts.AudioTrackTest#testPlaybackHeadPositionAfterStop;android.media.cts.AsyncPlayerTest#testAndroidTestCaseSetupProperly;android.media.cts.AudioPreProcessingTest#test3_2AgcSetEnabledGetEnabled;android.media.cts.MediaDrmMockTest#testGetKeyRequestOffline;android.media.cts.MediaDrmMockTest#testReleaseSecureStops;android.media.cts.MediaPlayerFlakyNetworkTest#test_S4P00001;android.media.cts.MediaDrmMockTest#testNullPropertyByteArray;android.media.cts.EqualizerTest#test1_2Presets;android.media.cts.EnvReverbTest#test1_5Properties;android.media.cts.CameraProfileTest#testGetImageEncodingQualityParameter;android.media.cts.VirtualizerTest#test3_0ControlStatusListener;android.media.cts.AudioTrackTest#testWriteByteNegativeOffset;android.media.cts.StreamingMediaPlayerTest#testPlayMp3StreamRedirect;android.media.cts.DecoderTest#testCodecEarlyEOSMpeg4;android.media.cts.EnvReverbTest#test3_0ControlStatusListener;android.media.cts.EncodeDecodeTest#testEncodeDecodeVideoFromBufferToSurfaceQCIF;android.media.cts.EncodeDecodeTest#testEncodeDecodeVideoFromBufferToSurface720p;android.media.cts.MediaDrmMockTest#testCryptoSessionEncrypt;android.media.cts.EqualizerTest#test1_0BandLevel;android.media.cts.EncodeVirtualDisplayWithCompositionTest#testMultipleVirtualDisplays;android.media.cts.AudioTrack_ListenerTest#testAudioTrackCallback;android.media.cts.DecoderTest#testCodecResetsVP9WithoutSurface;android.media.cts.DecoderTest#testCodecResetsH264WithSurface;android.media.cts.DecodeEditEncodeTest#testVideoEdit720p;android.media.cts.AudioEffectTest#test1_0ConstructorFromType;android.media.cts.AudioTrackTest#testPlayStreamData;android.media.cts.MediaDrmMockTest#testCryptoSessionSign;android.media.cts.MediaDrmMockTest#testMediaDrmConstructor;android.media.cts.AudioTrackTest#testSetStereoVolumeMax;android.media.cts.MediaMuxerTest#testIllegalStateExceptions;android.media.cts.MediaCodecTest#testCreateInputSurfaceErrors;android.media.cts.AudioTrackTest#testConstructorMono16MusicStatic;android.media.cts.MediaDrmMockTest#testOpenCloseSession;android.media.cts.AudioManagerTest#testAndroidTestCaseSetupProperly;android.media.cts.DecoderTest#testEOSBehaviorMpeg4;android.media.cts.SoundPoolOggTest#testMultiSound;android.media.cts.AudioTrackTest#testConstructorMono8MusicStream;android.media.cts.MediaCodecListTest#testIsM4VSimpleProfileSupported;android.media.cts.VirtualizerTest#test1_2SetStrengthAfterRelease;android.media.cts.MediaDrmMockTest#testCryptoSessionVerify;android.media.cts.MediaMuxerTest#testVideoOnly;android.media.cts.AudioTrackTest#testWriteShortOffsetTooBig;android.media.cts.AudioManagerTest#testSetInvalidRingerMode;android.media.cts.MediaDrmMockTest#testIsMimeTypeNotSupported;android.media.cts.StreamingMediaPlayerTest#testPlayOggStreamNoLength;android.media.cts.MediaPlayerFlakyNetworkTest#test_S1P000005;android.media.cts.MediaRandomTest#testPlayerRandomAction;android.media.cts.EncoderTest#testAndroidTestCaseSetupProperly;android.media.cts.MediaPlayerTest#testRecordedVideoPlayback0;android.media.cts.AudioRecordTest#testAudioRecordProperties;android.media.cts.AudioTrackTest#testWriteByteOffsetTooBig;android.media.cts.PresetReverbTest#test3_0ControlStatusListener;android.media.cts.DecodeEditEncodeTest#testVideoEditQVGA;android.media.cts.MediaDrmMockTest#testMissingPropertyByteArray;android.media.cts.MediaPlayerTest#testRecordAndPlay;android.media.cts.PresentationSyncTest#testThroughput;android.media.cts.MediaPlayerTest#testVideoSurfaceResetting;android.media.cts.AudioTrack_ListenerTest#testAndroidTestCaseSetupProperly;android.media.cts.EncodeDecodeTest#testEncodeDecodeVideoFromBufferToBufferQCIF;android.media.cts.MediaPlayerTest#testRecordedVideoPlayback180;android.media.cts.MediaRecorderTest#testRecorderAudio;android.media.cts.EqualizerTest#test2_1SetEnabledAfterRelease;android.media.cts.AudioTrackTest#testPlaybackHeadPositionAfterPause;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_300kbps_25fps_AAC_Stereo_128kbps_11025Hz;android.media.cts.MediaRecorderTest#testSetMaxFileSize;android.media.cts.Vp8EncoderTest#testBasic;android.media.cts.AudioTrackTest#testPlaybackHeadPositionIncrease;android.media.cts.AudioTrackTest#testAndroidTestCaseSetupProperly;android.media.cts.MediaDrmMockTest#testEventNoSessionNoData;android.media.cts.MediaDrmMockTest#testByteArrayProperties;android.media.cts.DecoderTest#testCodecResetsM4a;android.media.cts.RingtoneTest#testAndroidTestCaseSetupProperly;android.media.cts.AudioPreProcessingTest#test3_1AgcCreateAndRelease;android.media.cts.AudioTrackTest#testSetPlaybackRateTwiceOutputSR;android.media.cts.PresetReverbTest#test1_0Presets;android.media.cts.StreamingMediaPlayerTest#testPlayOggStreamRedirect;android.media.cts.MediaCodecListTest#testAndroidTestCaseSetupProperly;android.media.cts.AudioTrackTest#testSetLoopPointsStartAfterEnd;android.media.cts.MediaRecorderTest#testOnInfoListener;android.media.cts.VirtualizerTest#test3_1EnableStatusListener;android.media.cts.DecoderTest#testCodecResetsH264WithoutSurface;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_300kbps_12fps_AAC_Stereo_24kbps_11025Hz;android.media.cts.MediaPlayerTest#testRecordedVideoPlayback270;android.media.cts.BassBoostTest#test3_0ControlStatusListener;android.media.cts.EncodeDecodeTest#testEncodeDecodeVideoFromSurfaceToSurface720p;android.media.cts.AudioTrackTest#testSetPlaybackRateUninit;android.media.cts.BassBoostTest#test2_1SetEnabledAfterRelease;android.media.cts.AudioEffectTest#test0_0QueryEffects;android.media.cts.VisualizerTest#test2_0PollingCapture;android.media.cts.MediaDrmMockTest#testStringProperties;android.media.cts.BassBoostTest#test0_0ConstructorAndRelease;android.media.cts.MediaScannerNotificationTest#testAndroidTestCaseSetupProperly;android.media.cts.AudioTrackTest#testConstructorMono16MusicStream;android.media.cts.MediaRecorderTest#testRecordingAudioInRawFormats;android.media.cts.AudioEffectTest#test3_1SetParameterIntInt;android.media.cts.DecoderTest#testEOSBehaviorVP8;android.media.cts.StreamingMediaPlayerTest#testHTTP_H264Base_AAC_Video2;android.media.cts.AudioEffectTest#test1_4InsertOnMediaPlayer;android.media.cts.StreamingMediaPlayerTest#testHTTP_H264Base_AAC_Video1;android.media.cts.DecoderTest#testCodecResetsVP9WithSurface;android.media.cts.JetPlayerTest#testLoadJetFromPath;android.media.cts.DecoderTest#testEOSBehaviorVP9;android.media.cts.MediaDrmMockTest#testProvideKeyResponse;android.media.cts.DecoderTest#testDecodeM4a;android.media.cts.AudioTrackTest#testWriteByteNegativeSize;android.media.cts.AudioEffectTest#test4_0setEnabledLowerPriority;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_300kbps_12fps_AAC_Mono_24kbps_22050Hz;android.media.cts.DecoderTest#testEOSBehaviorH264;android.media.cts.DecoderTest#testEOSBehaviorH263;android.media.cts.DecoderTest#testDecodeMonoOgg;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_56kbps_12fps_AAC_Stereo_24kbps_11025Hz;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_56kbps_25fps_AAC_Stereo_24kbps_22050Hz;android.media.cts.AudioTrackTest#testSetPlaybackHeadPositionTooFar;android.media.cts.AudioRecord_BufferSizeTest#testAndroidTestCaseSetupProperly;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_56kbps_12fps_AAC_Mono_24kbps_11025Hz;android.media.cts.MediaCodecListTest#testComponentInstantiation;android.media.cts.BassBoostTest#test1_2SetStrengthAfterRelease;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_300kbps_25fps_AAC_Stereo_24kbps_11025Hz;android.media.cts.AudioTrackTest#testSetLoopPointsEndTooFar;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_300kbps_25fps_AAC_Mono_24kbps_11025Hz;android.media.cts.MediaScannerTest#testMediaScanner;android.media.cts.RingtoneTest#testRingtone;android.media.cts.AudioEffectTest#test5_0Command;android.media.cts.DecoderTest#testDecodeMp3Smpb;android.media.cts.AudioTrackTest#testWriteShort8bit;android.media.cts.AudioEffectTest#test3_3SetParameterIntByteArray;android.media.cts.AudioEffectTest#test4_3EnableStatusListener;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_300kbps_25fps_AAC_Mono_24kbps_22050Hz;android.media.cts.JetPlayerTest#testAndroidTestCaseSetupProperly;android.media.cts.Vp8EncoderTest#testSyncFrame;android.media.cts.VirtualizerTest#test2_0SetEnabledGetEnabled;android.media.cts.MediaPlayerSurfaceTest#testSetSurface;android.media.cts.SoundPoolAacTest#testLoad;android.media.cts.AudioEffectTest#test3_5SetParameterIntArrayShortArray;android.media.cts.MediaDrmMockTest#testBadCryptoSession;android.media.cts.AudioTrackTest#testConstructorStereo16MusicStatic;android.media.cts.AudioPreProcessingTest#test1_2NsSetEnabledGetEnabled;android.media.cts.AudioEffectTest#test2_1SetEnabledAfterRelease;android.media.cts.AudioManagerTest#testAccessRingMode;android.media.cts.SoundPoolAacTest#testSoundPoolOp;android.media.cts.AudioEffectTest#test4_4ParameterChangedListener;android.media.cts.DecoderTest#testCodecBasicMpeg4;android.media.cts.AudioTrackTest#testSetPlaybackHeadPositionPlaying;android.media.cts.AudioRecordTest#testAudioRecordOP;android.media.cts.MediaScannerTest#testWildcardPaths;android.media.cts.AudioEffectTest#test3_8GetParameterAfterRelease;android.media.cts.FaceDetector_FaceTest#testFaceProperties;android.media.cts.MediaPlayerTest#testLocalVideo_3gp_H263_176x144_56kbps_25fps_AAC_Stereo_128kbps_22050Hz;android.media.cts.MediaDrmMockTest#testCryptoSessionDecrypt" />
+ <Entry uri="android.mediastress" exclude="android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay00;android.mediastress.cts.Vp8R480x360ShortPlayerTest#testPlay10;android.mediastress.cts.Vp8R480x360ShortPlayerTest#testPlay11;android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay07;android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay08;android.mediastress.cts.H264R480pAacShortPlayerTest#testPlay10;android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay05;android.mediastress.cts.H264R480pAacShortPlayerTest#testPlay11;android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay06;android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay03;android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay04;android.mediastress.cts.MediaRecorderStressTest#testStressRecorder;android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay01;android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay02;android.mediastress.cts.H263QcifShortPlayerTest#testPlay07;android.mediastress.cts.MediaRecorderStressTest#testStressCamera;android.mediastress.cts.H263QcifShortPlayerTest#testPlay08;android.mediastress.cts.H263QcifShortPlayerTest#testPlay05;android.mediastress.cts.H263QcifShortPlayerTest#testPlay06;android.mediastress.cts.H263QcifShortPlayerTest#testPlay03;android.mediastress.cts.H263QcifShortPlayerTest#testPlay04;android.mediastress.cts.H263QcifShortPlayerTest#testPlay01;android.mediastress.cts.H263QcifShortPlayerTest#testPlay02;android.mediastress.cts.H264R720pAacLongPlayerTest#testPlay01;android.mediastress.cts.H264R720pAacLongPlayerTest#testPlay00;android.mediastress.cts.MediaRecorderStressTest#testStressCameraSwitchRecorder;android.mediastress.cts.H263QcifShortPlayerTest#testPlay09;android.mediastress.cts.H264R480x360AacShortPlayerTest#testPlay06;android.mediastress.cts.NativeMediaTest#test1080pPlay;android.mediastress.cts.H264R480x360AacShortPlayerTest#testPlay05;android.mediastress.cts.NativeMediaTest#testDefaultPlay;android.mediastress.cts.H264R480x360AacShortPlayerTest#testPlay08;android.mediastress.cts.H264R480x360AacShortPlayerTest#testPlay07;android.mediastress.cts.Vp8R480x360ShortPlayerTest#testPlay02;android.mediastress.cts.Vp8R480x360ShortPlayerTest#testPlay03;android.mediastress.cts.H264R480x360AacShortPlayerTest#testPlay09;android.mediastress.cts.Vp8R480x360ShortPlayerTest#testPlay00;android.mediastress.cts.Vp8R480x360ShortPlayerTest#testPlay01;android.mediastress.cts.Vp8R480x360ShortPlayerTest#testPlay06;android.mediastress.cts.H263QcifShortPlayerTest#testPlay00;android.mediastress.cts.H264R1080pAacShortPlayerTest#testPlay00;android.mediastress.cts.Vp8R480x360ShortPlayerTest#testPlay07;android.mediastress.cts.Vp8R480x360ShortPlayerTest#testPlay04;android.mediastress.cts.H264R480x360AacShortPlayerTest#testPlay00;android.mediastress.cts.Vp8R480x360ShortPlayerTest#testPlay05;android.mediastress.cts.H264R480x360AacShortPlayerTest#testPlay02;android.mediastress.cts.H264R480x360AacShortPlayerTest#testPlay01;android.mediastress.cts.Vp8R480x360ShortPlayerTest#testPlay08;android.mediastress.cts.H264R1080pAacShortPlayerTest#testPlay02;android.mediastress.cts.H264R480x360AacShortPlayerTest#testPlay04;android.mediastress.cts.Vp8R480x360ShortPlayerTest#testPlay09;android.mediastress.cts.H264R1080pAacShortPlayerTest#testPlay01;android.mediastress.cts.H264R480x360AacShortPlayerTest#testPlay03;android.mediastress.cts.H264R1080pAacRepeatedPlayerTest#testPlay00;android.mediastress.cts.H263QcifShortPlayerTest#testPlay13;android.mediastress.cts.H263QcifShortPlayerTest#testPlay12;android.mediastress.cts.H263QcifShortPlayerTest#testPlay15;android.mediastress.cts.H263QcifShortPlayerTest#testPlay14;android.mediastress.cts.H263QcifLongPlayerTest#testPlay00;android.mediastress.cts.H263QcifShortPlayerTest#testPlay17;android.mediastress.cts.H264R480pAacLongPlayerTest#testPlay00;android.mediastress.cts.H263QcifShortPlayerTest#testPlay16;android.mediastress.cts.H263QcifShortPlayerTest#testPlay19;android.mediastress.cts.H263QcifShortPlayerTest#testPlay18;android.mediastress.cts.H263QcifShortPlayerTest#testPlay10;android.mediastress.cts.H263QcifShortPlayerTest#testPlay11;android.mediastress.cts.H264R480x360AacShortPlayerTest#testPlay11;android.mediastress.cts.H264R480x360AacShortPlayerTest#testPlay10;android.mediastress.cts.NativeMediaTest#test720pPlay;android.mediastress.cts.H264R1080pAacLongPlayerTest#testPlay00;android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay12;android.mediastress.cts.H264R480pAacShortPlayerTest#testPlay01;android.mediastress.cts.H264R480pAacShortPlayerTest#testPlay00;android.mediastress.cts.H263QcifShortPlayerTest#testPlay23;android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay11;android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay10;android.mediastress.cts.H263QcifShortPlayerTest#testPlay21;android.mediastress.cts.H263QcifShortPlayerTest#testPlay22;android.mediastress.cts.H263QcifShortPlayerTest#testPlay20;android.mediastress.cts.H264R480pAacShortPlayerTest#testPlay02;android.mediastress.cts.H264R480pAacShortPlayerTest#testPlay03;android.mediastress.cts.MediaRecorderStressTest#testStressRecordVideoAndPlayback;android.mediastress.cts.H264R720pAacShortPlayerTest#testPlay09;android.mediastress.cts.H264R480pAacShortPlayerTest#testPlay04;android.mediastress.cts.H264R480pAacShortPlayerTest#testPlay05;android.mediastress.cts.Vp8R480x360LongPlayerTest#testPlay00;android.mediastress.cts.H264R480pAacShortPlayerTest#testPlay06;android.mediastress.cts.H264R480pAacShortPlayerTest#testPlay07;android.mediastress.cts.H264R480pAacShortPlayerTest#testPlay08;android.mediastress.cts.H264R480pAacShortPlayerTest#testPlay09" />
+ <Entry uri="android.net" exclude="android.net.cts.ConnectivityManagerTest#testStartUsingNetworkFeature_enableHipri;android.net.wifi.cts.ScanResultTest#testScanResultProperties;android.net.wifi.cts.WifiManagerTest#testWifiManagerActions;android.net.cts.UriTest#testStringUri;android.net.cts.UrlQuerySanitizer_IllegalCharacterValueSanitizerTest#testAndroidTestCaseSetupProperly;android.net.rtp.cts.AudioGroupTest#testAdd;android.net.rtp.cts.AudioGroupTest#testAndroidTestCaseSetupProperly;android.net.rtp.cts.AudioGroupTest#testRemove;android.net.cts.LocalSocketTest#testAccessors;android.net.http.cts.SslErrorTest#testConstructorIgnoresInvalidValues;android.net.cts.UriTest#testCompareTo;android.net.http.cts.SslErrorTest#testAddErrorIgnoresInvalidValues;android.net.cts.VpnServiceTest#testProtect_DatagramSocket;android.net.wifi.cts.WifiConfigurationTest#testAndroidTestCaseSetupProperly;android.net.rtp.cts.AudioCodecTest#testGetCodecs;android.net.http.cts.ApacheHttpClientTest#testExecute_withWifi;android.net.cts.DnsTest#testAndroidTestCaseSetupProperly;android.net.cts.VpnServiceTest#testAndroidTestCaseSetupProperly;android.net.wifi.cts.SupplicantStateTest#testAndroidTestCaseSetupProperly;android.net.cts.NetworkInfo_StateTest#testValues;android.net.cts.UriTest#testAndroidTestCaseSetupProperly;android.net.cts.LocalSocketTest#testLocalConnections;android.net.wifi.cts.WifiManager_WifiLockTest#testAndroidTestCaseSetupProperly;android.net.wifi.cts.WifiManagerTest#testWifiManagerNetWork;android.net.cts.ConnectivityManagerTest#testGetAllNetworkInfo;android.net.rtp.cts.AudioGroupTest#testTraffic;android.net.cts.Uri_BuilderTest#testBuilderOperations;android.net.cts.UriTest#testBuildUpon;android.net.cts.TrafficStatsTest#testAndroidTestCaseSetupProperly;android.net.wifi.cts.ScanResultTest#testAndroidTestCaseSetupProperly;android.net.cts.ProxyTest#testConstructor;android.net.rtp.cts.AudioCodecTest#testGetCodec;android.net.wifi.cts.NsdManagerTest#testAndroidTestCaseSetupProperly;android.net.cts.DhcpInfoTest#testConstructor;android.net.cts.LocalSocketAddress_NamespaceTest#testValues;android.net.cts.ConnectivityManagerTest#testRequestRouteToHost;android.net.cts.ConnectivityManagerTest#testSetNetworkPreference;android.net.http.cts.SslCertificateTest#testState;android.net.cts.NetworkInfo_DetailedStateTest#testAndroidTestCaseSetupProperly;android.net.rtp.cts.AudioCodecTest#testConstants;android.net.http.cts.SslCertificateTest#testSslCertificate;android.net.cts.ProxyTest#testAccessProperties;android.net.cts.CredentialsTest#testCredentials;android.net.rtp.cts.AudioStreamTest#testDoubleRelease;android.net.cts.TrafficStatsTest#testValidMobileStats;android.net.http.cts.SslErrorTest#testGetUrlWithDeprecatedConstructor;android.net.cts.VpnServiceTest#testProtect_int;android.net.cts.ConnectivityManagerTest#testGetNetworkInfo;android.net.cts.MailToTest#testAndroidTestCaseSetupProperly;android.net.cts.LocalSocketTest#testAndroidTestCaseSetupProperly;android.net.cts.LocalSocketAddress_NamespaceTest#testAndroidTestCaseSetupProperly;android.net.cts.NetworkInfo_DetailedStateTest#testValueOf;android.net.cts.DhcpInfoTest#testAndroidTestCaseSetupProperly;android.net.cts.UriTest#testPathOperations;android.net.rtp.cts.AudioStreamTest#testAndroidTestCaseSetupProperly;android.net.http.cts.SslCertificate_DNameTest#testDName;android.net.wifi.cts.WifiManagerTest#testSignal;android.net.cts.UrlQuerySanitizerTest#testUrlQuerySanitizer;android.net.wifi.cts.WifiManager_WifiLockTest#testWifiLock;android.net.rtp.cts.AudioStreamTest#testSetCodec;android.net.cts.MailToTest#testParseMailToURI;android.net.cts.UriTest#testParcelling;android.net.cts.UrlQuerySanitizerTest#testAndroidTestCaseSetupProperly;android.net.wifi.cts.WifiConfigurationTest#testWifiConfiguration;android.net.cts.NetworkInfoTest#testAccessNetworkInfoProperties;android.net.cts.ConnectivityManagerTest#testTest;android.net.http.cts.SslErrorTest#testGetPrimaryError;android.net.cts.NetworkInfo_StateTest#testValueOf;android.net.cts.UriTest#testFromFile;android.net.cts.VpnServiceTest#testTunDevice;android.net.rtp.cts.AudioStreamTest#testSetDtmfType;android.net.cts.SSLCertificateSocketFactoryTest#testAndroidTestCaseSetupProperly;android.net.http.cts.SslCertificateTest#testConstructor;android.net.http.cts.SslErrorTest#testAddError;android.net.cts.UriTest#testNormalizeScheme;android.net.wifi.cts.WifiInfoTest#testAndroidTestCaseSetupProperly;android.net.cts.ConnectivityManagerTest#testStartUsingNetworkFeature;android.net.cts.UriTest#testHierarchicalUris;android.net.cts.DhcpInfoTest#testToString;android.net.rtp.cts.AudioStreamTest#testV6Stream;android.net.cts.LocalSocketAddressTest#testAndroidTestCaseSetupProperly;android.net.cts.UrlQuerySanitizer_IllegalCharacterValueSanitizerTest#testSanitize;android.net.rtp.cts.AudioStreamTest#testV4Stream;android.net.wifi.cts.ConcurrencyTest#testConcurrency;android.net.cts.LocalSocketAddress_NamespaceTest#testValueOf;android.net.wifi.cts.WifiManagerTest#testWifiWatchdog;android.net.cts.UriTest#testEqualsAndHashCode;android.net.cts.VpnServiceTest#testPrepare;android.net.cts.UriTest#testOpaqueUri;android.net.cts.UriTest#testQueryParameters;android.net.cts.TrafficStatsTest#testThreadStatsTag;android.net.wifi.cts.SupplicantStateTest#testIsValidState;android.net.http.cts.SslErrorTest#testHasError;android.net.cts.SSLCertificateSocketFactoryTest#testAccessProperties;android.net.cts.VpnServiceTest#testEstablish;android.net.ipv6.cts.PingTest#testAndroidTestCaseSetupProperly;android.net.cts.NetworkInfoTest#testAndroidTestCaseSetupProperly;android.net.cts.ConnectivityManagerTest#testAndroidTestCaseSetupProperly;android.net.cts.UriTest#testEncodeAndDecode;android.net.rtp.cts.AudioGroupTest#testClear;android.net.cts.NetworkInfo_StateTest#testAndroidTestCaseSetupProperly;android.net.cts.UrlQuerySanitizer_ParameterValuePairTest#testAndroidTestCaseSetupProperly;android.net.cts.ProxyTest#testAndroidTestCaseSetupProperly;android.net.cts.LocalServerSocketTest#testLocalServerSocket;android.net.cts.CredentialsTest#testAndroidTestCaseSetupProperly;android.net.rtp.cts.AudioCodecTest#testAndroidTestCaseSetupProperly;android.net.cts.UrlQuerySanitizer_ParameterValuePairTest#testConstructor;android.net.cts.NetworkInfo_DetailedStateTest#testValues;android.net.http.cts.SslErrorTest#testGetPrimaryErrorWithEmptySet;android.net.rtp.cts.AudioGroupTest#testSetMode;android.net.wifi.cts.WifiInfoTest#testWifiInfoProperties;android.net.wifi.cts.ConcurrencyTest#testAndroidTestCaseSetupProperly;android.net.http.cts.ApacheHttpClientTest#testAndroidTestCaseSetupProperly;android.net.wifi.cts.WifiManagerTest#testWifiManagerProperties;android.net.rtp.cts.AudioGroupTest#testDoubleClear;android.net.wifi.cts.WifiManagerTest#testAndroidTestCaseSetupProperly;android.net.cts.ConnectivityManagerTest#testGetActiveNetworkInfo;android.net.cts.LocalSocketAddressTest#testNewLocalSocketAddressWithDefaultNamespace;android.net.http.cts.SslErrorTest#testGetUrl;android.net.ipv6.cts.PingTest#testLoopbackPing;android.net.cts.TrafficStatsTest#testValidTotalStats;android.net.wifi.cts.WifiEnterpriseConfigTest#testAddEapNetwork;android.net.cts.VpnServiceTest#testProtect_Socket;android.net.wifi.cts.WifiEnterpriseConfigTest#testAndroidTestCaseSetupProperly;android.net.cts.ConnectivityManagerTest#testIsNetworkTypeValid;android.net.cts.ConnectivityManagerTest#testIsNetworkSupported;android.net.cts.LocalServerSocketTest#testAndroidTestCaseSetupProperly;android.net.wifi.cts.WifiEnterpriseConfigTest#testSettersAndGetters;android.net.http.cts.ApacheHttpClientTest#testExecute_withMobile" />
+ <Entry uri="android.provider" exclude="android.provider.cts.ContactsContract_CommonDataKinds_EventTest#testGetTypeLabel;android.provider.cts.MediaStore_Audio_Genres_MembersTest#testStoreAudioGenresMembersInternal;android.provider.cts.ContactsContract_DataTest#testDataInsert_updatesContactLastUpdatedTimestamp;android.provider.cts.ContactsContract_CommonDataKinds_EmailTest#testGetTypeLabel;android.provider.cts.Settings_NameValueTableTest#testPutString;android.provider.cts.CalendarTest#testCalendarEntityQuery;android.provider.cts.ContactsContract_DataUsageTest#testSingleDataUsageFeedback_incrementsCorrectDataItems;android.provider.cts.BrowserTest#testSendString;android.provider.cts.MediaStore_Video_MediaTest#testStoreVideoMediaInternal;android.provider.cts.UserDictionary_WordsTest#testAddWord_deprecated;android.provider.cts.MediaStoreIntentsTest#testAndroidTestCaseSetupProperly;android.provider.cts.ContactsContract_DeletedContacts#testQuerySinceTimestamp;android.provider.cts.BrowserTest#testRequestAllIcons;android.provider.cts.ContactsContract_CommonDataKinds_EmailTest#testAndroidTestCaseSetupProperly;android.provider.cts.CalendarTest#testReminders;android.provider.cts.MediaStore_Audio_ArtistsTest#testStoreAudioArtistsExternal;android.provider.cts.ContactsContractIntentsTest#testViewContactDir;android.provider.cts.CalendarTest#testBulkUpdate;android.provider.cts.ContactsContract_PhotoTest#testAddPhoto;android.provider.cts.Settings_NameValueTableTest#testAndroidTestCaseSetupProperly;android.provider.cts.ContactsProvider2_AccountRemovalTest#testAccountRemovalWithMergedContact_hasDeleteLogsForContacts;android.provider.cts.ContactsContract_PhotoTest#testAddEmptyPhoto;android.provider.cts.Settings_SecureTest#testGetPutFloat;android.provider.cts.MediaStore_Images_MediaTest#testGetContentUri;android.provider.cts.ContactsContract_DeletedContacts#testDelete_isUnsupported;android.provider.cts.CalendarTest#testCalendarCreationAndDeletion;android.provider.cts.BrowserTest#testBookmarksTable;android.provider.cts.Settings_SecureTest#testGetUriFor;android.provider.cts.ContactsContract_StatusUpdatesTest#testGetPresenceIconresourceId;android.provider.cts.MediaStore_Audio_Playlists_MembersTest#testStoreAudioPlaylistsMembersInternal;android.provider.cts.ContactsContract_CommonDataKinds_EventTest#testAndroidTestCaseSetupProperly;android.provider.cts.Contacts_PhonesTest#testGetDisplayLabel;android.provider.cts.ContactsContract_DeletedContacts#testInsert_isUnsupported;android.provider.cts.MediaStore_Audio_AlbumsTest#testStoreAudioAlbumsExternal;android.provider.cts.ContactsContract_DeletedContacts#testAndroidTestCaseSetupProperly;android.provider.cts.BrowserTest#testGetAllVisitedUrls;android.provider.cts.Contacts_ContactMethodsTest#testEncodeAndDecodeProtocol;android.provider.cts.ContactsContract_DeletedContacts#testQueryAll;android.provider.cts.MediaStore_Audio_MediaTest#testStoreAudioMediaInternal;android.provider.cts.ContactsContract_RawContactsTest#testRawContactPsuedoDelete_hasDeleteLogForContact;android.provider.cts.MediaStore_FilesTest#testAndroidTestCaseSetupProperly;android.provider.cts.MediaStore_Images_MediaTest#testStoreImagesMediaInternal;android.provider.cts.MediaStore_Audio_AlbumsTest#testAlbumArt;android.provider.cts.ContactsContract_ContactsTest#testLookupUri;android.provider.cts.MediaStoreIntentsTest#testPickVideoDir;android.provider.cts.MediaStore_Images_MediaTest#testInsertImageWithBitmap;android.provider.cts.MediaStoreIntentsTest#testViewAudioFile;android.provider.cts.MediaStore_Audio_Genres_MembersTest#testStoreAudioGenresMembersExternal;android.provider.cts.ContactsContract_CommonDataKinds_StructuredPostalTest#testAndroidTestCaseSetupProperly;android.provider.cts.CalendarTest#testInstanceSearch;android.provider.cts.VoicemailContractTest#testStatusTablePermissions;android.provider.cts.ContactsContract_CommonDataKinds_OrganizationTest#testAndroidTestCaseSetupProperly;android.provider.cts.SettingsTest#testAndroidTestCaseSetupProperly;android.provider.cts.MediaStore_Audio_PlaylistsTest#testStoreAudioPlaylistsInternal;android.provider.cts.ContactsContract_DumpFileProviderTest#testQuery_worksWithValidFileName;android.provider.cts.Settings_SecureTest#testAndroidTestCaseSetupProperly;android.provider.cts.MediaStore_Video_MediaTest#testAndroidTestCaseSetupProperly;android.provider.cts.BrowserTest#testAccessHistory;android.provider.cts.ContactsContract_DataTest#testContactablesFilterByPhonePrefix_returnsCorrectDataRows;android.provider.cts.MediaStore_Images_ThumbnailsTest#testStoreImagesMediaInternal;android.provider.cts.ContactsTest#testCallsTable;android.provider.cts.CalendarTest#testEventCreationAndDeletion;android.provider.cts.VoicemailContractTest#testVoicemailTablePermissions;android.provider.cts.CalendarTest#testEventsUid2445;android.provider.cts.MediaStore_VideoTest#testQuery;android.provider.cts.CalendarTest#testDefaultProjections;android.provider.cts.MediaStoreIntentsTest#testViewVideoDir;android.provider.cts.MediaStore_FilesTest#testGetContentUri;android.provider.cts.ContactsContract_ContactsTest#testInsert_isUnsupported;android.provider.cts.ContactsContract_CommonDataKinds_PhoneTest#testGetTypeLabel;android.provider.cts.VoicemailContractTest#testVoicemailsTable;android.provider.cts.ContactsContract_CommonDataKinds_RelationTest#testGetTypeLabel;android.provider.cts.Settings_SystemTest#testGetDefaultValues;android.provider.cts.ContactsContract_RawContactsTest#testAndroidTestCaseSetupProperly;android.provider.cts.MediaStoreTest#testGetMediaScannerUri;android.provider.cts.ContactsContract_RawContactsTest#testRawContactDelete_removesRecord;android.provider.cts.Settings_SecureTest#testGetPutString;android.provider.cts.ContactsTest#testGroupMembershipTable;android.provider.cts.MediaStore_Audio_MediaTest#testGetContentUri;android.provider.cts.CalendarTest#testFullRecurrenceUpdate;android.provider.cts.MediaStore_FilesTest#testCaseSensitivity;android.provider.cts.MediaStore_Audio_AlbumsTest#testAndroidTestCaseSetupProperly;android.provider.cts.MediaStore_Audio_ArtistsTest#testStoreAudioArtistsInternal;android.provider.cts.ContactsContract_ContactsTest#testContactDelete_hasDeleteLog;android.provider.cts.ContactsContract_DataUsageTest#testMultiIdDataUsageFeedback_incrementsCorrectDataItems;android.provider.cts.CalendarTest#testSyncOnlyInsertEnforcement;android.provider.cts.VoicemailContractTest#testDataColumnUpdate_throwsIllegalArgumentException;android.provider.cts.CalendarTest#testColorWriteRequirements;android.provider.cts.CalendarTest#testWhenByDayQuery;android.provider.cts.ContactsContract_StreamItemsTest#testAndroidTestCaseSetupProperly;android.provider.cts.ContactsContract_CommonDataKinds_ImTest#testAndroidTestCaseSetupProperly;android.provider.cts.MediaStore_AudioTest#testKeyFor;android.provider.cts.ContactsContract_ContactsTest#testAndroidTestCaseSetupProperly;android.provider.cts.MediaStore_Images_ThumbnailsTest#testQueryInternalThumbnails;android.provider.cts.ContactsContract_DumpFileProviderTest#testOpenFileDescriptor_throwsErrorWithIllegalFileName;android.provider.cts.CalendarTest#testEventColors;android.provider.cts.SettingsTest#testBluetoothDevicesTable;android.provider.cts.ContactsContract_RawContactsTest#testRawContactUpdate_updatesContactUpdatedTimestamp;android.provider.cts.ContactsContract_CommonDataKinds_RelationTest#testAndroidTestCaseSetupProperly;android.provider.cts.MediaStoreTest#testGetVersion;android.provider.cts.MediaStore_Audio_GenresTest#testGetContentUri;android.provider.cts.ContactsContract_DataTest#testDataDelete_updatesContactLastUpdatedTimestamp;android.provider.cts.ContactsContract_CommonDataKinds_SipAddressTest#testGetTypeLabel;android.provider.cts.BrowserTest#testSaveBookmark;android.provider.cts.ContactsProvider2_AccountRemovalTest#testAndroidTestCaseSetupProperly;android.provider.cts.MediaStore_Video_MediaTest#testGetContentUri;android.provider.cts.CalendarTest#testExtendedProperties;android.provider.cts.Settings_SystemTest#testAndroidTestCaseSetupProperly;android.provider.cts.CalendarTest#testNonAdapterRecurrenceExceptions;android.provider.cts.CalendarTest#testOutOfOrderRecurrenceExceptions;android.provider.cts.CalendarTest#testConversionToRecurring;android.provider.cts.MediaStore_Audio_Playlists_MembersTest#testStoreAudioPlaylistsMembersExternal;android.provider.cts.CalendarTest#testMultiRuleRecurrence;android.provider.cts.MediaStoreIntentsTest#testPickAudioDir;android.provider.cts.MediaStore_Audio_GenresTest#testStoreAudioGenresExternal;android.provider.cts.MediaStoreIntentsTest#testViewVideoFile;android.provider.cts.ContactsProvider2_AccountRemovalTest#testAccountRemoval_deletesContacts;android.provider.cts.Contacts_ContactMethodsTest#testAndroidTestCaseSetupProperly;android.provider.cts.ContactsContract_GroupMembershipTest#testAddGroupMembershipWithGroupRowId;android.provider.cts.TelephonyProviderTest#testOpeningAnyFile;android.provider.cts.MediaStore_Audio_GenresTest#testGetContentUriForAudioId;android.provider.cts.ContactsContract_CommonDataKinds_PhoneTest#testAndroidTestCaseSetupProperly;android.provider.cts.Contacts_PeopleTest#testMarkAsContacted;android.provider.cts.MediaStore_FilesTest#testAccess;android.provider.cts.ContactsContract_CommonDataKinds_ImTest#testGetTypeLabel;android.provider.cts.SearchRecentSuggestionsTest#testSuggestionsTable;android.provider.cts.CalendarTest#testAttendees;android.provider.cts.SettingsTest#testAccessNonTable;android.provider.cts.MediaStoreIntentsTest#testPickImageDir;android.provider.cts.BrowserTest#testSearchesTable;android.provider.cts.Contacts_SettingsTest#testAccessSetting;android.provider.cts.ContactsContract_StreamItemPhotosTest#testContentPhotoUri;android.provider.cts.ContactsContract_DataTest#testGetLookupUriByDisplayName;android.provider.cts.ContactsContract_StatusUpdatesTest#testInsertStatus;android.provider.cts.MediaStore_Video_ThumbnailsTest#testGetContentUri;android.provider.cts.MediaStore_Audio_GenresTest#testStoreAudioGenresInternal;android.provider.cts.MediaStore_Images_MediaTest#testInsertImageWithImagePath;android.provider.cts.CalendarTest#testForwardRecurrenceExceptions;android.provider.cts.Settings_SecureTest#testUnknownSourcesOffByDefault;android.provider.cts.CalendarTest#testBadRequests;android.provider.cts.ContactsTest#testSettingsTable;android.provider.cts.VoicemailContractTest#testInsert_doesNotUpdateDataColumn;android.provider.cts.ContactsContract_RawContactsTest#testRawContactCreate_updatesContactUpdatedTimestamp;android.provider.cts.MediaStoreIntentsTest#testViewImageDir;android.provider.cts.ContactsContract_ContactsTest#testContactDelete_removesContactRecord;android.provider.cts.MediaStore_Images_ThumbnailsTest#testQueryExternalMiniThumbnails;android.provider.cts.ContactsContract_ContactsTest#testContactUpdate_updatesContactUpdatedTimestamp;android.provider.cts.Settings_SettingNotFoundExceptionTest#testAndroidTestCaseSetupProperly;android.provider.cts.ContactsContract_RawContactsTest#testGetLookupUriByDisplayName;android.provider.cts.BrowserTest#testAccessSearches;android.provider.cts.ContactsContract_CommonDataKinds_SipAddressTest#testAndroidTestCaseSetupProperly;android.provider.cts.ContactsContract_GroupMembershipTest#testAddGroupMembershipWithUnknownGroupSourceId;android.provider.cts.MediaStore_Audio_MediaTest#testStoreAudioMediaExternal;android.provider.cts.MediaStore_Audio_PlaylistsTest#testGetContentUri;android.provider.cts.ContactsTest#testGroupsTable;android.provider.cts.MediaStore_Audio_AlbumsTest#testGetContentUri;android.provider.cts.Settings_SystemTest#testGetUriFor;android.provider.cts.ContactsContract_StreamItemPhotosTest#testContentDirectoryUri;android.provider.cts.SearchRecentSuggestionsTest#testSearchRecentSuggestions;android.provider.cts.Contacts_ContactMethodsTest#testAddPostalLocation;android.provider.cts.MediaStore_Audio_Artists_AlbumsTest#testGetContentUri;android.provider.cts.SearchRecentSuggestionsTest#testConstructor;android.provider.cts.ContactsContract_ContactsTest#testMarkAsContacted;android.provider.cts.ContactsTest#testPeopleTable;android.provider.cts.CalendarTest#testCalendarColors;android.provider.cts.CalendarTest#testCalendarIsPrimary;android.provider.cts.ContactsContract_RawContactsTest#testRawContactDelete_hasDeleteLogForContact;android.provider.cts.Settings_SystemTest#testSystemSettings;android.provider.cts.CalendarTest#testRecurrence;android.provider.cts.ContactsContract_GroupMembershipTest#testAddGroupMembershipWithGroupSourceId;android.provider.cts.MediaStore_Audio_Genres_MembersTest#testGetContentUri;android.provider.cts.VoicemailContractTest#testStatusTable;android.provider.cts.ContactsContract_DataTest#testContactablesFilterByFirstName_returnsCorrectDataRows;android.provider.cts.Settings_NameValueTableTest#testGetUriFor;android.provider.cts.ContactsContract_DumpFileProviderTest#testQuery_throwsErrorWithIllegalFileName;android.provider.cts.ContactsTest#testContactMethodsTable;android.provider.cts.ContactsContractIntentsTest#testPickContactDir;android.provider.cts.MediaStore_Audio_AlbumsTest#testStoreAudioAlbumsInternal;android.provider.cts.Contacts_PeopleTest#testAddToGroup;android.provider.cts.ContactsContract_DataTest#testContactablesFilterByEmailPrefix_returnsCorrectDataRows;android.provider.cts.ContactsContract_StatusUpdatesTest#testGetPresencePrecedence;android.provider.cts.BrowserTest#testUpdateVisitedHistory;android.provider.cts.SettingsTest#testSecureTable;android.provider.cts.ContactsContract_StreamItemsTest#testContentUri;android.provider.cts.MediaStore_Audio_Artists_AlbumsTest#testStoreAudioArtistsAlbumsInternal;android.provider.cts.MediaStore_Video_ThumbnailsTest#testGetThumbnail;android.provider.cts.ContactsContractIntentsTest#testGetContentContactDir;android.provider.cts.SettingsTest#testSystemTable;android.provider.cts.CalendarTest#testEventUpdateAsApp;android.provider.cts.MediaStore_Images_MediaTest#testStoreImagesMediaExternal;android.provider.cts.CalendarTest#testEventsEntityQuery;android.provider.cts.ContactsContractIntentsTest#testAndroidTestCaseSetupProperly;android.provider.cts.CalendarTest#testSyncState;android.provider.cts.MediaStore_Video_ThumbnailsTest#testAndroidTestCaseSetupProperly;android.provider.cts.ContactsContract_DataTest#testGetLookupUriBySourceId;android.provider.cts.UserDictionary_WordsTest#testAndroidTestCaseSetupProperly;android.provider.cts.ContactsTest#testExtensionsTable;android.provider.cts.ContactsContract_DataTest#testContactablesUri;android.provider.cts.ContactsContract_CommonDataKinds_ImTest#testGetProtocolLabel;android.provider.cts.Settings_SettingNotFoundExceptionTest#testConstructor;android.provider.cts.CalendarTest#testEventsIsOrganizer;android.provider.cts.ContactsContract_StreamItemsTest#testContentDirectoryUri;android.provider.cts.Contacts_PeopleTest#testAccessPhotoData;android.provider.cts.UserDictionary_WordsTest#testAddWord;android.provider.cts.CalendarTest#testSingleRecurrenceExceptions;android.provider.cts.BrowserTest#testGetAllBookmarks;android.provider.cts.ContactsContract_RawContactsTest#testRawContactDelete_setsDeleteFlag;android.provider.cts.MediaStoreIntentsTest#testViewImageFile;android.provider.cts.Settings_SecureTest#testGetPutLong;android.provider.cts.ContactsContract_DataTest#testContactablesFilterByLastName_returnsCorrectDataRows;android.provider.cts.SearchRecentSuggestionsTest#testAndroidTestCaseSetupProperly;android.provider.cts.Contacts_PhonesTest#testGetDisplayLabelCharSequenceArray;android.provider.cts.SettingsTest#testUserDictionarySettingsExists;android.provider.cts.Contacts_OrganizationsTest#testGetDisplayLabel;android.provider.cts.Settings_SecureTest#testGetDefaultValues;android.provider.cts.ContactsContract_ContactsTest#testContactDelete_marksRawContactsForDeletion;android.provider.cts.ContactsTest#testPhotosTable;android.provider.cts.ContactsContract_ContactsTest#testContentUri;android.provider.cts.MediaStore_Audio_Artists_AlbumsTest#testStoreAudioArtistsAlbumsExternal;android.provider.cts.Contacts_PhonesTest#testAndroidTestCaseSetupProperly;android.provider.cts.ContactsProvider2_AccountRemovalTest#testAccountRemovalWithMergedContact_doesNotDeleteContactAndTimestampUpdated;android.provider.cts.ContactsTest#testOrganizationsTable;android.provider.cts.MediaStore_Audio_Playlists_MembersTest#testGetContentUri;android.provider.cts.MediaStore_Audio_PlaylistsTest#testStoreAudioPlaylistsExternal;android.provider.cts.Contacts_OrganizationsTest#testAndroidTestCaseSetupProperly;android.provider.cts.ContactsTest#testPhonesTable;android.provider.cts.Settings_SecureTest#testGetPutInt;android.provider.cts.ContactsContract_StatusUpdatesTest#testAndroidTestCaseSetupProperly;android.provider.cts.MediaStore_Audio_MediaTest#testGetContentUriForPath;android.provider.cts.CalendarTest#testCalendarUpdateAsApp;android.provider.cts.ContactsContract_DeletedContacts#testQueryByContactId;android.provider.cts.ContactsProvider2_AccountRemovalTest#testAccountRemoval_hasDeleteLogsForContacts;android.provider.cts.ContactsContract_StreamItemPhotosTest#testAndroidTestCaseSetupProperly;android.provider.cts.MediaStore_Audio_ArtistsTest#testGetContentUri;android.provider.cts.ContactsContract_DumpFileProviderTest#testAndroidTestCaseSetupProperly;android.provider.cts.ContactsContract_DataTest#testDataUpdate_updatesContactLastUpdatedTimestamp;android.provider.cts.ContactsProvider2_AccountRemovalTest#testAccountRemovalWithMergedContact_deletesContacts;android.provider.cts.ContactsContract_RawContactsTest#testGetLookupUriBySourceId;android.provider.cts.MediaStore_Images_ThumbnailsTest#testGetContentUri;android.provider.cts.ContactsContract_DumpFileProviderTest#testOpenFileDescriptor_worksWithValidFileName;android.provider.cts.ContactsContract_CommonDataKinds_StructuredPostalTest#testGetTypeLabel;android.provider.cts.ContactsContract_DataUsageTest#testAndroidTestCaseSetupProperly;android.provider.cts.Contacts_ContactMethodsTest#test;android.provider.cts.MediaStore_Video_MediaTest#testStoreVideoMediaExternal;android.provider.cts.ContactsContract_CommonDataKinds_OrganizationTest#testGetTypeLabel;android.provider.cts.MediaStore_Images_ThumbnailsTest#testStoreImagesMediaExternal;android.provider.cts.ContactsContract_DataTest#testContactablesFilter_doesNotExist_returnsCorrectDataRows;android.provider.cts.ContactsContract_DeletedContacts#testQuery_returnsProperColumns" />
+ <Entry uri="android.security" exclude="android.security.cts.KeystoreExploitTest#testAndroidTestCaseSetupProperly;android.security.cts.CharDeviceTest#testExynosKernelMemoryRead;android.security.cts.VoldExploitTest#testAndroidTestCaseSetupProperly;android.security.cts.LoadEffectLibraryTest#testLoadLibrary;android.security.cts.BrowserTest#testAndroidTestCaseSetupProperly;android.security.cts.LinuxRngTest#testDevUrandomMajorMinor;android.security.cts.ServicePermissionsTest#testDumpProtected;android.security.cts.BannedFilesTest#testNoSetuidTcpdump;android.security.cts.SqliteJournalLeakTest#testShm;android.security.cts.LinuxRngTest#testDevRandomMajorMinor;android.security.cts.ClonedSecureRandomTest#testCheckForDuplicateOutput;android.security.cts.BrowserTest#testBrowserPrivateDataAccess;android.security.cts.BrowserTest#testTabExhaustion;android.security.cts.KeystoreExploitTest#testKeystoreCrash;android.security.cts.SqliteJournalLeakTest#testJournal;android.security.cts.BannedFilesTest#testNoCmdClient;android.security.cts.BannedFilesTest#testNoSetuidIp;android.security.cts.BannedFilesTest#testNoSyncAgent;android.security.cts.ListeningPortsTest#testNoListeningLoopbackTcp6Ports;android.security.cts.KernelSettingsTest#testKptrRestrict;android.security.cts.AslrTest#testVaRandomize;android.security.cts.ListeningPortsTest#testNoRemotelyAccessibleListeningUdp6Ports;android.security.cts.KernelSettingsTest#testMmapMinAddr;android.security.cts.CertificateTest#testBlockCertificates;android.security.cts.BrowserTest#testTabReuse;android.security.cts.KernelSettingsTest#testSELinuxEnforcing;android.security.cts.ListeningPortsTest#testNoListeningLoopbackUdp6Ports;android.security.cts.NativeCodeTest#testPerfEvent;android.security.cts.KernelSettingsTest#testSetuidDumpable;android.security.cts.PackageSignatureTest#testAndroidTestCaseSetupProperly;android.security.cts.ServicePermissionsTest#testAndroidTestCaseSetupProperly;android.security.cts.CertificateTest#testCertificates;android.security.cts.KernelSettingsTest#testNoConfigGz;android.security.cts.ListeningPortsTest#testNoRemotelyAccessibleListeningUdpPorts;android.security.cts.KernelSettingsTest#testDmesgRestrict;android.security.cts.ListeningPortsTest#testAndroidTestCaseSetupProperly;android.security.cts.SqliteJournalLeakTest#testAndroidTestCaseSetupProperly;android.security.cts.ListeningPortsTest#testNoRemotelyAccessibleListeningTcp6Ports;android.security.cts.ListeningPortsTest#testNoListeningLoopbackTcpPorts;android.security.cts.ClonedSecureRandomTest#testAndroidTestCaseSetupProperly;android.security.cts.VoldExploitTest#testTryCommandInjection;android.security.cts.VoldExploitTest#testZergRushCrash;android.security.cts.AslrTest#testOneExecutableIsPie;android.security.cts.VoldExploitTest#testTryToCrashVold;android.security.cts.ListeningPortsTest#testNoListeningLoopbackUdpPorts;android.security.cts.CertificateTest#testAndroidTestCaseSetupProperly;android.security.cts.SqliteJournalLeakTest#testWal;android.security.cts.ListeningPortsTest#testNoRemotelyAccessibleListeningTcpPorts;android.security.cts.CharDeviceTest#testExynosRootingVuln" />
+ <Entry uri="android.webkit" exclude="android.webkit.cts.WebViewTest#testDocumentHasImages;android.webkit.cts.WebViewTest#testScrollBarOverlay;android.webkit.cts.WebViewTest#testGoBackAndForward;android.webkit.cts.WebViewTest#testGetContentHeight;android.webkit.cts.WebChromeClientTest#testOnJsConfirm;android.webkit.cts.WebChromeClientTest#testOnProgressChanged;android.webkit.cts.WebViewTest#testAddJavascriptInterfaceNullObject;android.webkit.cts.WebViewTest#testConstructor;android.webkit.cts.WebViewTest#testInvokeZoomPicker;android.webkit.cts.WebSettingsTest#testAccessMinimumLogicalFontSize;android.webkit.cts.WebViewStartupTest#testCookieManagerBlockingUiThread;android.webkit.cts.WebViewTest#testInternals;android.webkit.cts.WebViewClientTest#testShouldOverrideUrlLoading;android.webkit.cts.GeolocationTest#testSimpleGeolocationRequestAcceptOnce;android.webkit.cts.WebSettingsTest#testDatabaseDisabled;android.webkit.cts.WebView_WebViewTransportTest#testAccessWebView;android.webkit.cts.WebSettingsTest#testAccessJavaScriptCanOpenWindowsAutomatically;android.webkit.cts.WebSettingsTest#testAppCacheEnabled;android.webkit.cts.WebSettingsTest#testAccessUserAgentString;android.webkit.cts.WebViewTest#testClearHistory;android.webkit.cts.WebSettingsTest#testAccessSerifFontFamily;android.webkit.cts.WebSettingsTest#testAccessLayoutAlgorithm;android.webkit.cts.WebSettingsTest#testAccessFantasyFontFamily;android.webkit.cts.WebViewTest#testAddJavascriptInterface;android.webkit.cts.WebSettingsTest#testAccessCacheMode;android.webkit.cts.WebViewTest#testDebugDump;android.webkit.cts.WebViewTest#testSslErrorProceedResponseNotReusedForDifferentHost;android.webkit.cts.WebSettingsTest#testLocalImageLoads;android.webkit.cts.WebViewTest#testSslErrorProceedResponseReusedForSameHost;android.webkit.cts.HttpAuthHandlerTest#testUseHttpAuthUsernamePassword;android.webkit.cts.WebViewTest#testSetLayoutParams;android.webkit.cts.WebViewTest#testAppInjectedXRequestedWithHeaderIsNotOverwritten;android.webkit.cts.WebSettingsTest#testAccessUseDoubleTree;android.webkit.cts.WebViewTest#testOnReceivedSslErrorCancel;android.webkit.cts.URLUtilTest#testIsHttpUrl;android.webkit.cts.DateSorterTest#testConstants;android.webkit.cts.WebSettingsTest#testAccessFixedFontFamily;android.webkit.cts.WebSettingsTest#testSetRenderPriority;android.webkit.cts.WebViewTest#testRemoveJavascriptInterface;android.webkit.cts.WebViewTest#testAndroidAssetAnchor;android.webkit.cts.WebViewTest#testOnReceivedSslError;android.webkit.cts.CookieTest#testEmptyValue;android.webkit.cts.WebViewTest#testPauseResumeTimers;android.webkit.cts.URLUtilTest#testIsContentUrl;android.webkit.cts.WebChromeClientTest#testBlockWindowsAsync;android.webkit.cts.WebViewTest#testGetVisibleTitleHeight;android.webkit.cts.WebBackForwardListTest#testClone;android.webkit.cts.WebSettingsTest#testAccessDefaultTextEncodingName;android.webkit.cts.URLUtilTest#testGuessUrl;android.webkit.cts.MimeTypeMapTest#testAndroidTestCaseSetupProperly;android.webkit.cts.WebChromeClientTest#testOnReceivedIcon;android.webkit.cts.CookieTest#testAndroidTestCaseSetupProperly;android.webkit.cts.CookieManagerTest#testRemoveCookies;android.webkit.cts.WebSettingsTest#testAccessPluginsPath;android.webkit.cts.WebSettingsTest#testAccessAllowFileAccess;android.webkit.cts.WebSettingsTest#testAccessSupportMultipleWindows;android.webkit.cts.WebViewTest#testAppCanInjectHeadersViaImmutableMap;android.webkit.cts.WebViewTest#testSecureSiteSetsCertificate;android.webkit.cts.WebViewTest#testSetWebViewClient;android.webkit.cts.WebViewTest#testSetScrollBarStyle;android.webkit.cts.CookieTest#testDomain;android.webkit.cts.WebViewTest#testZoom;android.webkit.cts.URLUtilTest#testIsDataUrl;android.webkit.cts.CookieManagerTest#testAcceptCookie;android.webkit.cts.WebChromeClientTest#testOnReceivedTitle;android.webkit.cts.URLUtilTest#testIsFileUrl;android.webkit.cts.WebSettingsTest#testAccessJavaScriptEnabled;android.webkit.cts.URLUtilTest#testIsNetworkUrl;android.webkit.cts.WebViewTest#testFindAddress;android.webkit.cts.WebViewTest#testSetNetworkAvailable;android.webkit.cts.WebViewTest#testClearSslPreferences;android.webkit.cts.URLUtilTest#testIsHttpsUrl;android.webkit.cts.MimeTypeMapTest#testGetFileExtensionFromUrl;android.webkit.cts.WebViewTest#testGetOriginalUrl;android.webkit.cts.WebChromeClientTest#testBlockWindowsSync;android.webkit.cts.WebViewTest#testLoadData;android.webkit.cts.WebViewTest#testInsecureSiteClearsCertificate;android.webkit.cts.WebBackForwardListTest#testGetCurrentItem;android.webkit.cts.URLUtilTest#testStripAnchor;android.webkit.cts.URLUtilTest#testGuessFileName;android.webkit.cts.URLUtilTest#testAndroidTestCaseSetupProperly;android.webkit.cts.WebViewTest#testEvaluateJavascript;android.webkit.cts.DateSorterTest#testConstructor;android.webkit.cts.WebViewTest#testPageScroll;android.webkit.cts.WebSettingsTest#testIframesWhenAccessFromFileURLsEnabled;android.webkit.cts.WebViewTest#testFlingScroll;android.webkit.cts.WebSettingsTest#testXHRWhenAccessFromFileURLsEnabled;android.webkit.cts.WebChromeClientTest#testOnJsPrompt;android.webkit.cts.WebSettingsTest#testAccessSupportZoom;android.webkit.cts.WebSettingsTest#testLoadsImagesAutomatically;android.webkit.cts.URLUtilTest#testIsValidUrl;android.webkit.cts.WebViewTest#testRequestFocusNodeHref;android.webkit.cts.WebViewTest#testLoadDataWithBaseUrl;android.webkit.cts.WebChromeClientTest#testOnJsAlert;android.webkit.cts.WebSettingsTest#testAccessSansSerifFontFamily;android.webkit.cts.CookieManagerTest#testCookieManager;android.webkit.cts.WebViewTest#testSetMapTrackballToArrowKeys;android.webkit.cts.WebViewTest#testCreatingWebViewCreatesCookieSyncManager;android.webkit.cts.DateSorterTest#testGetIndex;android.webkit.cts.GeolocationTest#testGeolocationPermissions;android.webkit.cts.WebChromeClientTest#testOnJsBeforeUnload;android.webkit.cts.CookieManagerTest#testClone;android.webkit.cts.CookieManagerTest#testGetInstance;android.webkit.cts.WebViewTest#testGetZoomControls;android.webkit.cts.CookieTest#testSubDomain;android.webkit.cts.WebSettingsTest#testUserAgentString_default;android.webkit.cts.MimeTypeMapTest#testGetMimeTypeFromExtension;android.webkit.cts.WebSettingsTest#testBlockNetworkImage;android.webkit.cts.WebViewTest#testPlatformNotifications;android.webkit.cts.URLUtilTest#testIsAboutUrl;android.webkit.cts.WebViewTest#testSetPictureListener;android.webkit.cts.MimeTypeMapTest#testHasMimeType;android.webkit.cts.WebViewTest#testOnReceivedSslErrorProceed;android.webkit.cts.DateSorterTest#testGetLabel;android.webkit.cts.GeolocationTest#testSimpleGeolocationRequestAcceptAlways;android.webkit.cts.URLUtilTest#testDecode;android.webkit.cts.HttpAuthHandlerTest#testProceed;android.webkit.cts.WebSettingsTest#testSetNeedInitialFocus;android.webkit.cts.WebSettingsTest#testIframesWhenAccessFromFileURLsDisabled;android.webkit.cts.WebSettingsTest#testAccessCursiveFontFamily;android.webkit.cts.WebViewTest#testFindAll;android.webkit.cts.WebViewTest#testStopLoading;android.webkit.cts.DateSorterTest#testAndroidTestCaseSetupProperly;android.webkit.cts.WebSettingsTest#testAccessDefaultFixedFontSize;android.webkit.cts.CookieManagerTest#testb3167208;android.webkit.cts.WebSettingsTest#testAccessMinimumFontSize;android.webkit.cts.WebSettingsTest#testAccessUseWideViewPort;android.webkit.cts.WebSettingsTest#testAccessSaveFormData;android.webkit.cts.WebViewTest#testRequestChildRectangleOnScreen;android.webkit.cts.URLUtilTest#testIsJavaScriptUrl;android.webkit.cts.WebViewTest#testFindNext;android.webkit.cts.MimeTypeMapTest#testHasExtension;android.webkit.cts.WebViewTest#testSetDownloadListener;android.webkit.cts.WebSettingsTest#testXHRWhenAccessFromFileURLsDisabled;android.webkit.cts.WebViewTest#testDestroy;android.webkit.cts.MimeTypeMapTest#testGetSingleton;android.webkit.cts.WebViewTest#testAndroidAssetQueryParam;android.webkit.cts.WebViewTest#testAccessPluginList;android.webkit.cts.CookieTest#testPath;android.webkit.cts.WebViewTest#testAccessHttpAuthUsernamePassword;android.webkit.cts.WebViewTest#testUseRemovedJavascriptInterface;android.webkit.cts.WebSettingsTest#testAccessTextSize;android.webkit.cts.URLUtilTest#testIsAssetUrl;android.webkit.cts.CookieTest#testInvalidDomain;android.webkit.cts.CookieSyncManagerTest#testCookieSyncManager;android.webkit.cts.URLUtilTest#testComposeSearchUrl;android.webkit.cts.WebChromeClientTest#testWindows;android.webkit.cts.WebViewTest#testRequestImageRef;android.webkit.cts.WebSettingsTest#testAccessDefaultFontSize;android.webkit.cts.WebViewClientTest#testShouldOverrideKeyEvent;android.webkit.cts.WebHistoryItemTest#testWebHistoryItem;android.webkit.cts.WebSettingsTest#testAccessBuiltInZoomControls;android.webkit.cts.WebSettingsTest#testAppCacheDisabled;android.webkit.cts.WebViewTest#testSetWebChromeClient;android.webkit.cts.WebViewTest#testGetHitTestResult;android.webkit.cts.WebSettingsTest#testAccessStandardFontFamily;android.webkit.cts.GeolocationTest#testSimpleGeolocationRequestReject;android.webkit.cts.WebSettingsTest#testBlockNetworkLoads;android.webkit.cts.DateSorterTest#testGetBoundary;android.webkit.cts.WebViewTest#testCapturePicture;android.webkit.cts.WebSettingsTest#testAccessPluginsEnabled;android.webkit.cts.WebViewTest#testSaveAndRestoreState;android.webkit.cts.WebViewTest#testLoadUrl;android.webkit.cts.HttpAuthHandlerTest#testCancel;android.webkit.cts.URLUtilTest#testIsCookielessProxyUrl;android.webkit.cts.WebViewTest#testGetFavicon;android.webkit.cts.MimeTypeMapTest#testGetExtensionFromMimeType" />
+ <Entry uri="android.widget" exclude="android.widget.cts.ImageSwitcherTest#testSetImageDrawable;android.widget.cts.ExpandableListViewTest#testOnSaveInstanceState;android.widget.cts.RemoteViewsTest#testSetFloat;android.widget.cts.ToggleButtonTest#testConstructor;android.widget.cts.CursorTreeAdapterTest#testOnGroupCollapsed;android.widget.cts.ListViewTest#testDispatchDraw;android.widget.cts.HorizontalScrollViewTest#testRequestLayout;android.widget.cts.TextViewTest#testDrawableResolution;android.widget.cts.CursorTreeAdapterTest#testGetGroup;android.widget.cts.RemoteViewsTest#testSetBoolean;android.widget.cts.SimpleExpandableListAdapterTest#testGetChildrenCount;android.widget.cts.TimePickerTest#testSetEnabled;android.widget.cts.RemoteViewsTest#testSetChronometer;android.widget.cts.BaseExpandableListAdapterTest#testNotifyDataSetChanged;android.widget.cts.TextViewTest#testConstructor;android.widget.cts.FrameLayoutTest#testGenerateLayoutParams2;android.widget.cts.FrameLayoutTest#testGenerateLayoutParams1;android.widget.cts.DialerFilterTest#testClearText;android.widget.cts.ListViewTest#testFindViewWithTagTraversal;android.widget.cts.TextViewTest#testGetResolvedTextAlignmentWithInheritance;android.widget.cts.SimpleAdapterTest#testSetDropDownViewResource;android.widget.cts.GalleryTest#testShowContextMenu;android.widget.cts.ExpandableListViewTest#testSetChildIndicator;android.widget.cts.GalleryTest#testConstructor;android.widget.cts.CursorTreeAdapterTest#testGetGroupCount;android.widget.cts.TextViewTest#testDebug;android.widget.cts.ExpandableListViewTest#testSetIndicatorBounds;android.widget.cts.AutoCompleteTextViewTest#testOnKeyPreIme;android.widget.cts.TextViewTest#testOnTrackballEvent;android.widget.cts.ExpandableListViewTest#testAndroidTestCaseSetupProperly;android.widget.cts.PopupWindowTest#testAccessBackground;android.widget.cts.PopupWindowTest#testGetMaxAvailableHeight;android.widget.cts.TextViewTest#testGetTotalPaddingLeft;android.widget.cts.AutoCompleteTextViewTest#testAccessAdapter;android.widget.cts.AutoCompleteTextViewTest#testPerformCompletion;android.widget.cts.ZoomButtonTest#testDispatchUnhandledMove;android.widget.cts.AbsSpinnerTest#testOnMeasure;android.widget.cts.TextViewTest#testOnWindowFocusChanged;android.widget.cts.PopupWindowTest#testUpdateDimensionAndAlignAnchorViewWithOffsets;android.widget.cts.GridLayoutTest#testCheckLayoutParams;android.widget.cts.TabHostTest#testNewTabSpec;android.widget.cts.ViewAnimatorTest#testGetCurrentView;android.widget.cts.ListViewTest#testDispatchKeyEvent;android.widget.cts.TextViewTest#testSetMinEms;android.widget.cts.FrameLayoutTest#testGatherTransparentRegion;android.widget.cts.AbsListViewTest#testDraw;android.widget.cts.ZoomControlsTest#testHasFocus;android.widget.cts.RemoteViews_ActionExceptionTest#testConstructor;android.widget.cts.ViewFlipperTest#testActivityTestCaseSetUpProperly;android.widget.cts.RemoteViewsTest#testSetString;android.widget.cts.SimpleExpandableListAdapterTest#testConstructor;android.widget.cts.GalleryTest#testComputeHorizontalScrollExtent;android.widget.cts.DialerFilterTest#testGetFilterText;android.widget.cts.RadioGroupTest#testGenerateDefaultLayoutParams;android.widget.cts.DialerFilterTest#testSetFilterWatcher;android.widget.cts.CheckBoxTest#testConstructor;android.widget.cts.ProgressBarTest#testDrawableStateChanged;android.widget.cts.MultiAutoCompleteTextViewTest#testPerformFiltering;android.widget.cts.TextViewTest#testOnKeyMultiple;android.widget.cts.ProgressBarTest#testPostInvalidate;android.widget.cts.SlidingDrawerTest#testOpenAndClose;android.widget.cts.AutoCompleteTextViewTest#testConstructor;android.widget.cts.TextViewTest#testSetLineSpacing;android.widget.cts.ListViewTest#testFindViewTraversal;android.widget.cts.RadioGroupTest#testGetCheckedRadioButtonId;android.widget.cts.TabHostTest#testSetup2;android.widget.cts.TableLayout_LayoutParamsTest#testConstructor;android.widget.cts.HorizontalScrollViewTest#testRequestChildFocus;android.widget.cts.TabWidgetTest#testDispatchDraw;android.widget.cts.PopupWindowTest#testUpdate;android.widget.cts.BaseAdapterTest#testNotifyDataSetInvalidated;android.widget.cts.ProgressBarTest#testOnSaveAndRestoreInstanceState;android.widget.cts.TabHostTest#testSetup1;android.widget.cts.TextViewTest#testOnMeasure;android.widget.cts.CompoundButtonTest#testAccessInstanceState;android.widget.cts.TabWidgetTest#testOnFocusChange;android.widget.cts.DialerFilterTest#testOnFinishInflate;android.widget.cts.ImageViewTest#testSetSelected;android.widget.cts.TextViewTest#testDrawableResolution2;android.widget.cts.ExpandableListViewWithHeadersTest#testPreconditions;android.widget.cts.AbsListViewTest#testSetFilterText;android.widget.cts.ExpandableListViewTest#testGetAdapter;android.widget.cts.TextViewTest#testSingleLine;android.widget.cts.HorizontalScrollViewTest#testComputeScroll;android.widget.cts.CursorAdapterTest#testRunQueryOnBackgroundThread;android.widget.cts.ToastTest#testMakeText2;android.widget.cts.CursorAdapterTest#testGetView;android.widget.cts.ViewSwitcherTest#testSetFactory;android.widget.cts.ToastTest#testMakeText1;android.widget.cts.GridViewTest#testAccessStretchMode;android.widget.cts.AutoCompleteTextViewTest#testGetThreshold;android.widget.cts.RemoteViewsTest#testConstructor;android.widget.cts.AbsListViewTest#testCheckLayoutParams;android.widget.cts.ViewAnimatorTest#testSetAnimateFirstView;android.widget.cts.DigitalClockTest#testActivityTestCaseSetUpProperly;android.widget.cts.SlidingDrawerTest#testAnimateOpenAndClose;android.widget.cts.PopupWindowTest#testAccessFocusable;android.widget.cts.TimePickerTest#testSetOnTimeChangedListener;android.widget.cts.ScrollViewTest#testGetMaxScrollAmount;android.widget.cts.CursorAdapterTest#testOnContentChanged;android.widget.cts.TextViewTest#testGetTotalPaddingBottom;android.widget.cts.AnalogClockTest#testOnMeasure;android.widget.cts.RadioGroupTest#testCheck;android.widget.cts.CursorTreeAdapterTest#testNotifyDataSetChanged;android.widget.cts.TwoLineListItemTest#testActivityTestCaseSetUpProperly;android.widget.cts.AbsListViewTest#testGetContextMenuInfo;android.widget.cts.ViewAnimatorTest#testAccessOutAnimation;android.widget.cts.SlidingDrawerTest#testConstructor;android.widget.cts.TimePickerTest#testOnSaveInstanceStateAndOnRestoreInstanceState;android.widget.cts.AbsListViewTest#testAccessFastScrollEnabled;android.widget.cts.BaseAdapterTest#testGetItemViewType;android.widget.cts.AbsListViewTest#testSetOnScrollListener;android.widget.cts.ImageViewTest#testSetImageURI;android.widget.cts.RadioGroupTest#testOnFinishInflate;android.widget.cts.TableRowTest#testGenerateLayoutParams;android.widget.cts.DialerFilterTest#testGetLetters;android.widget.cts.HorizontalScrollViewTest#testComputeHorizontalScrollRange;android.widget.cts.TextViewTest#testSetPadding;android.widget.cts.VideoViewTest#testPlayVideo1;android.widget.cts.ArrayAdapterTest#testRemove;android.widget.cts.GridViewTest#testGetNumColumns;android.widget.cts.AbsSpinnerTest#testSetSelectionIntBoolean;android.widget.cts.LayoutDirectionTest#testDirectionForAllLayoutsWithCode;android.widget.cts.SimpleCursorAdapterTest#testAccessStringConversionColumn;android.widget.cts.ViewAnimatorTest#testGetBaseline;android.widget.cts.ChronometerTest#testConstructor;android.widget.cts.ResourceCursorTreeAdapterTest#testConstructor;android.widget.cts.AdapterViewTest#testGetPositionForView;android.widget.cts.GridViewTest#testSetVerticalSpacing;android.widget.cts.ButtonTest#testAndroidTestCaseSetupProperly;android.widget.cts.ToggleButtonTest#testToggleText;android.widget.cts.RatingBarTest#testSetMax;android.widget.cts.RemoteViewsTest#testSetViewVisibility;android.widget.cts.ScrollViewTest#testOnTouchEvent;android.widget.cts.BaseAdapterTest#testIsEnabled;android.widget.cts.ExpandableListViewTest#testSetOnChildClickListener;android.widget.cts.EditTextTest#testAndroidTestCaseSetupProperly;android.widget.cts.TextViewTest#testMarquee;android.widget.cts.ImageViewTest#testActivityTestCaseSetUpProperly;android.widget.cts.RadioGroupTest#testConstructors;android.widget.cts.DialerFilterTest#testAccessMode;android.widget.cts.DatePickerTest#testInit;android.widget.cts.TextViewTest#testGetTextColors;android.widget.cts.ProgressBarTest#testAccessProgress;android.widget.cts.TextViewTest#testGetPaint;android.widget.cts.SimpleExpandableListAdapterTest#testNewGroupView;android.widget.cts.AdapterView_AdapterContextMenuInfoTest#testConstructor;android.widget.cts.CompoundButtonTest#testConstructor;android.widget.cts.ImageViewTest#testSetImageLevel;android.widget.cts.SimpleCursorTreeAdapterTest#testBindGroupView;android.widget.cts.SimpleExpandableListAdapterTest#testGetGroup;android.widget.cts.TabWidgetTest#testFocusCurrentTab;android.widget.cts.RelativeLayoutTest#testOnLayout;android.widget.cts.ScrollViewTest#testComputeScroll;android.widget.cts.TextViewTest#testAccessHintTextColor;android.widget.cts.TableLayoutTest#testAccessShrinkAllColumns;android.widget.cts.RemoteViewsTest#testGetPackage;android.widget.cts.GridViewTest#testAttachLayoutAnimationParameters;android.widget.cts.LinearLayout_LayoutParamsTest#testAndroidTestCaseSetupProperly;android.widget.cts.CompoundButtonTest#testAndroidTestCaseSetupProperly;android.widget.cts.ImageViewTest#testSetImageDrawable;android.widget.cts.AdapterViewTest#testAccessVisiblePosition;android.widget.cts.ListViewTest#testSaveAndRestoreInstanceState;android.widget.cts.CompoundButtonTest#testToggle;android.widget.cts.TextViewTest#testMoveCursorToVisibleOffset;android.widget.cts.AutoCompleteTextViewTest#testAccessDropDownWidth;android.widget.cts.RadioGroupTest#testGenerateLayoutParams;android.widget.cts.AdapterViewTest#testCanAnimate;android.widget.cts.ScrollViewTest#testOnLayout;android.widget.cts.AutoCompleteTextViewTest#testEnoughToFilter;android.widget.cts.CheckedTextViewTest#testOnCreateDrawableState;android.widget.cts.RelativeLayout_LayoutParamsTest#testDebug;android.widget.cts.ToastTest#testAccessDuration;android.widget.cts.ToggleButtonTest#testSetChecked;android.widget.cts.HeaderViewListAdapterTest#testGetFootersCount;android.widget.cts.GridLayoutTest#testGenerateDefaultLayoutParams;android.widget.cts.AbsListViewTest#testAccessSmoothScrollbarEnabled;android.widget.cts.SlidingDrawerTest#testSetOnDrawerOpenListener;android.widget.cts.HeaderViewListAdapterTest#testGetHeadersCount;android.widget.cts.RemoteViewsTest#testSetLong;android.widget.cts.SlidingDrawerTest#testSetOnDrawerCloseListener;android.widget.cts.TextViewTest#testGetResolvedTextDirectionLtrWithInheritance;android.widget.cts.ScrollViewTest#testFullScroll;android.widget.cts.RelativeLayout_LayoutParamsTest#testAccessRule1;android.widget.cts.BaseExpandableListAdapterTest#testAreAllItemsEnabled;android.widget.cts.RelativeLayout_LayoutParamsTest#testAccessRule2;android.widget.cts.RemoteViewsActivityTest#testDerivedClass;android.widget.cts.ToastTest#testShowFailure;android.widget.cts.SimpleAdapterTest#testSetViewImage;android.widget.cts.TextViewTest#testAccessPrivateImeOptions;android.widget.cts.AdapterView_AdapterContextMenuInfoTest#testAndroidTestCaseSetupProperly;android.widget.cts.TwoLineListItemTest#testOnFinishInflate;android.widget.cts.ExpandableListViewTest#testGetExpandableListPosition;android.widget.cts.AbsListViewTest#testAccessListPadding;android.widget.cts.ExpandableListViewTest#testExpandGroup;android.widget.cts.TextViewTest#testGetUrls;android.widget.cts.LinearLayoutTest#testAccessBaselineAlignedChildIndex;android.widget.cts.CheckBoxTest#testAndroidTestCaseSetupProperly;android.widget.cts.ZoomControlsTest#testSetOnZoomInClickListener;android.widget.cts.AbsSpinnerTest#testGetCount;android.widget.cts.SimpleExpandableListAdapterTest#testNewChildView;android.widget.cts.ViewSwitcherTest#testConstructor;android.widget.cts.AutoCompleteTextViewTest#testReplaceText;android.widget.cts.ScrollViewTest#testAccessFillViewport;android.widget.cts.ToastTest#testShow;android.widget.cts.TextViewTest#testDrawableStateChanged;android.widget.cts.TimePickerTest#testGetBaseline;android.widget.cts.TextViewTest#testOnTouchEvent;android.widget.cts.ListViewTest#testOnFocusChanged;android.widget.cts.ImageViewTest#testDrawableStateChanged;android.widget.cts.FrameLayoutTest#testOnLayout;android.widget.cts.ListViewTest#testAccessItemsCanFocus;android.widget.cts.AutoCompleteTextViewTest#testOnCommitCompletion;android.widget.cts.ScrollViewTest#testAccessSmoothScrollingEnabled;android.widget.cts.TextViewTest#testSelection;android.widget.cts.CheckedTextViewTest#testOnDraw;android.widget.cts.ViewAnimatorTest#testConstructor;android.widget.cts.RadioGroupTest#testInternalPassThroughHierarchyChangeListener;android.widget.cts.SimpleCursorAdapterTest#testSetViewImage;android.widget.cts.AdapterViewTest#testGetSelected;android.widget.cts.ExpandableListViewWithHeadersTest#testSelectedPosition;android.widget.cts.ProgressBarTest#testAccessIndeterminateDrawable;android.widget.cts.TableLayoutTest#testSetOnHierarchyChangeListener;android.widget.cts.ExpandableListViewTest#testSetOnItemClickListener;android.widget.cts.ProgressBarTest#testSetVisibility;android.widget.cts.AutoCompleteTextViewTest#testConvertSelectionToString;android.widget.cts.ImageViewTest#testSetImageResource;android.widget.cts.ScrollViewTest#testGetVerticalFadingEdgeStrengths;android.widget.cts.FilterTest#testFilter2;android.widget.cts.CursorTreeAdapterTest#testAndroidTestCaseSetupProperly;android.widget.cts.FilterTest#testFilter1;android.widget.cts.ZoomControlsTest#testSetIsZoomOutEnabled;android.widget.cts.ScrollViewTest#testMeasureChildWithMargins;android.widget.cts.CompoundButtonTest#testSetOnCheckedChangeListener;android.widget.cts.TextViewTest#testGetEditableText;android.widget.cts.HorizontalScrollViewTest#testOnRequestFocusInDescendants;android.widget.cts.AbsSpinnerTest#testAccessAdapter;android.widget.cts.ChronometerTest#testAccessOnChronometerTickListener;android.widget.cts.HeaderViewListAdapterTest#testConstructor;android.widget.cts.FrameLayoutTest#testSetForegroundGravity;android.widget.cts.AbsSpinnerTest#testGetSelectedView;android.widget.cts.TextViewTest#testSetGetTextAlignment;android.widget.cts.TextViewTest#testGetLayout;android.widget.cts.ImageViewTest#testConstructor;android.widget.cts.ImageViewTest#testInvalidateDrawable;android.widget.cts.PopupWindowTest#testShowAsDropDownWithOffsets;android.widget.cts.PopupWindowTest#testIsAboveAnchor;android.widget.cts.AutoCompleteTextViewTest#testPerformFiltering;android.widget.cts.ViewFlipperTest#testConstructor;android.widget.cts.DatePickerTest#testUpdateDate;android.widget.cts.MultiAutoCompleteTextViewTest#testMultiAutoCompleteTextView;android.widget.cts.MultiAutoCompleteTextView_CommaTokenizerTest#testConstructor;android.widget.cts.RemoteViewsTest#testSetOnClickPendingIntent;android.widget.cts.HorizontalScrollViewTest#testScrollTo;android.widget.cts.HorizontalScrollViewTest#testOnTouchEvent;android.widget.cts.ListViewTest#testOnMeasure;android.widget.cts.TextViewTest#testSetHighlightColor;android.widget.cts.BaseExpandableListAdapterTest#testNotifyDataSetInvalidated;android.widget.cts.ExpandableListViewWithHeadersTest#testConvertionBetweenFlatAndPacked;android.widget.cts.HeaderViewListAdapterTest#testRemoveFooter;android.widget.cts.ListViewTest#testTransientStateStableIds;android.widget.cts.ScrollViewTest#testSmoothScrollBy;android.widget.cts.ViewSwitcherTest#testAndroidTestCaseSetupProperly;android.widget.cts.TextViewTest#testAccessAutoLinkMask;android.widget.cts.ScrollerTest#testScrollModeWithDefaultDuration;android.widget.cts.GalleryTest#testComputeHorizontalScrollRange;android.widget.cts.CheckedTextViewTest#testSetPadding;android.widget.cts.CursorTreeAdapterTest#testGetGroupId;android.widget.cts.RemoteViewsTest#testApply;android.widget.cts.DialerFilterTest#testIsQwertyKeyboard;android.widget.cts.GalleryTest#testShowContextMenuForChild;android.widget.cts.ScrollViewTest#testPageScroll;android.widget.cts.SimpleCursorTreeAdapterTest#testSetViewImage;android.widget.cts.TableLayoutTest#testOnLayout;android.widget.cts.ArrayAdapterTest#testGetPosition;android.widget.cts.TabWidgetTest#testOnSizeChanged;android.widget.cts.SimpleCursorAdapterTest#testNewDropDownView;android.widget.cts.AutoCompleteTextViewTest#testAccessListSelection;android.widget.cts.TextViewTest#testSetText1;android.widget.cts.TextViewTest#testSetText2;android.widget.cts.RemoteViewsActivityTest#testWebView;android.widget.cts.TextViewTest#testSetText3;android.widget.cts.ToastTest#testAccessGravity;android.widget.cts.HorizontalScrollViewTest#testAddViewWithIndex;android.widget.cts.ResourceCursorTreeAdapterTest#testNewChildView;android.widget.cts.HeaderViewListAdapterTest#testAndroidTestCaseSetupProperly;android.widget.cts.ExpandableListViewTest#testGetPackedPositionForGroup;android.widget.cts.ZoomControlsTest#testShowAndHide;android.widget.cts.CompoundButtonTest#testAccessChecked;android.widget.cts.SimpleAdapterTest#testGetView;android.widget.cts.DialerFilterTest#testGetDigits;android.widget.cts.ArrayAdapterTest#testDataChangeEvent;android.widget.cts.ImageSwitcherTest#testAndroidTestCaseSetupProperly;android.widget.cts.SimpleExpandableListAdapterTest#testGetChildView;android.widget.cts.ZoomControlsTest#testConstructor;android.widget.cts.CompoundButtonTest#testVerifyDrawable;android.widget.cts.TextViewTest#testSetEms;android.widget.cts.AbsSpinnerTest#testGenerateDefaultLayoutParams;android.widget.cts.TextViewTest#testAccessError;android.widget.cts.ZoomButtonTest#testOnTouchEvent;android.widget.cts.TextViewTest#testSetMaxLinesException;android.widget.cts.CompoundButtonTest#testSetButtonDrawableById;android.widget.cts.FrameLayoutTest#testGenerateDefaultLayoutParams;android.widget.cts.HorizontalScrollViewTest#testComputeScrollDeltaToGetChildRectOnScreen;android.widget.cts.ExpandableListViewTest#testSetSelectedChild;android.widget.cts.MediaControllerTest#testShow;android.widget.cts.CursorAdapterTest#testGetDropDownView;android.widget.cts.ListViewTest#testNoSelectableItems;android.widget.cts.TextViewTest#testGetBaseLine;android.widget.cts.AbsSpinnerTest#testConstructor;android.widget.cts.ListViewTest#testAccessDividerHeight;android.widget.cts.TabWidgetTest#testChildDrawableStateChanged;android.widget.cts.AbsListViewTest#testAccessSelectedItem;android.widget.cts.ScrollerTest#testTimePassed;android.widget.cts.ArrayAdapterTest#testGetItem;android.widget.cts.ImageViewTest#testVerifyDrawable;android.widget.cts.ProgressBarTest#testConstructor;android.widget.cts.ProgressBarTest#testIncrementSecondaryProgressBy;android.widget.cts.CursorTreeAdapterTest#testSetChildrenCursor;android.widget.cts.FrameLayoutTest#testCheckLayoutParams;android.widget.cts.AbsoluteLayoutTest#testGenerateDefaultLayoutParams;android.widget.cts.ZoomButtonTest#testOnKeyUp;android.widget.cts.BaseExpandableListAdapterTest#testGetCombinedId;android.widget.cts.ListViewTest#testSetSelection;android.widget.cts.SimpleCursorAdapterTest#testNewView;android.widget.cts.AutoCompleteTextViewTest#testPopupWindow;android.widget.cts.TextView_SaveStateTest#testWriteToParcel;android.widget.cts.TabHost_TabSpecTest#testSetContent2;android.widget.cts.SeekBarTest#testConstructor;android.widget.cts.TabHost_TabSpecTest#testSetContent1;android.widget.cts.TextViewTest#testSetExtractedText;android.widget.cts.TabHost_TabSpecTest#testSetContent3;android.widget.cts.SimpleExpandableListAdapterTest#testGetGroupCount;android.widget.cts.TextViewTest#testComputeVerticalScrollRange;android.widget.cts.GridLayoutTest#testAlignment;android.widget.cts.ExpandableListViewTest#testGetPackedPositionForChild;android.widget.cts.FrameLayoutTest#testConstructor;android.widget.cts.CursorAdapterTest#testAndroidTestCaseSetupProperly;android.widget.cts.RelativeLayoutTest#testSetHorizontalGravity;android.widget.cts.GalleryTest#testDispatchKeyEvent;android.widget.cts.ToastTest#testSetText1;android.widget.cts.HorizontalScrollViewTest#testFullScroll;android.widget.cts.RemoteViewsTest#testSetCharSequence;android.widget.cts.ToastTest#testSetText2;android.widget.cts.HeaderViewListAdapterTest#testRemoveHeader;android.widget.cts.TextSwitcherTest#testSetCurrentText;android.widget.cts.TwoLineListItemTest#testConstructor;android.widget.cts.MediaControllerTest#testMediaController;android.widget.cts.ListViewTest#testConstructor;android.widget.cts.AbsListViewTest#testAccessSelector;android.widget.cts.BaseExpandableListAdapterTest#testDataSetObserver;android.widget.cts.BaseAdapterTest#testHasStableIds;android.widget.cts.TextViewTest#testAccessImeActionLabel;android.widget.cts.CompoundButtonTest#testSetButtonDrawableByDrawable;android.widget.cts.AbsListViewTest#testLayoutChildren;android.widget.cts.ImageViewTest#testClearColorFilter;android.widget.cts.TextViewTest#testGetResolvedTextDirectionRtl;android.widget.cts.CheckedTextViewTest#testChecked;android.widget.cts.MultiAutoCompleteTextViewTest#testReplaceText;android.widget.cts.DigitalClockTest#testOnDetachedFromWindow;android.widget.cts.CursorTreeAdapterTest#testGetChildView;android.widget.cts.FrameLayout_LayoutParamsTest#testAndroidTestCaseSetupProperly;android.widget.cts.ImageViewTest#testSetMaxWidth;android.widget.cts.TabHostTest#testDispatchWindowFocusChanged;android.widget.cts.DigitalClockTest#testConstructor;android.widget.cts.DialerFilterTest#testOnKeyUpDown;android.widget.cts.TextViewTest#testSetHorizontallyScrolling;android.widget.cts.HeaderViewListAdapterTest#testGetViewTypeCount;android.widget.cts.AbsSeekBarTest#testAccessKeyProgressIncrement;android.widget.cts.AbsSeekBarTest#testSetThumb;android.widget.cts.ProgressBarTest#testOnDraw;android.widget.cts.TextViewTest#testSetText;android.widget.cts.PopupWindowTest#testAccessContentView;android.widget.cts.GridLayoutTest#testConstructor;android.widget.cts.PopupWindowTest#testAccessHeight;android.widget.cts.ToggleButtonTest#testAndroidTestCaseSetupProperly;android.widget.cts.ProgressBarTest#testVerifyDrawable;android.widget.cts.TableRowTest#testOnLayout;android.widget.cts.RadioGroupTest#testInternalCheckedStateTracker;android.widget.cts.HorizontalScrollViewTest#testOnSizeChanged;android.widget.cts.ResourceCursorAdapterTest#testNewView;android.widget.cts.MultiAutoCompleteTextView_CommaTokenizerTest#testFindTokenEnd;android.widget.cts.ZoomButtonTest#testOnLongClick;android.widget.cts.AnalogClockTest#testOnDetachedFromWindow;android.widget.cts.TextViewTest#testSetMaxLines;android.widget.cts.ExpandableListViewTest#testPerformItemClick;android.widget.cts.TextViewTest#testResetTextDirection;android.widget.cts.ScrollViewTest#testScrollTo;android.widget.cts.TableLayoutTest#testGenerateDefaultLayoutParams;android.widget.cts.ImageViewTest#testSetAdjustViewBounds;android.widget.cts.TableRowTest#testCheckLayoutParams;android.widget.cts.CheckedTextViewTest#testToggle;android.widget.cts.RemoteViewsTest#testSetProgressBar;android.widget.cts.VideoViewTest#testSetOnErrorListener;android.widget.cts.GalleryTest#testDispatchSetPressed;android.widget.cts.HorizontalScrollViewTest#testSmoothScrollTo;android.widget.cts.ZoomControlsTest#testSetZoomSpeed;android.widget.cts.ExpandableListViewTest#testSetAdapter;android.widget.cts.AutoCompleteTextViewTest#testOnFilterComplete;android.widget.cts.ImageViewTest#testGetDrawable;android.widget.cts.CursorTreeAdapterTest#testRunQueryOnBackgroundThread;android.widget.cts.SlidingDrawerTest#testGetHandle;android.widget.cts.BaseAdapterTest#testAndroidTestCaseSetupProperly;android.widget.cts.MediaControllerTest#testOnTrackballEvent;android.widget.cts.GalleryTest#testGenerateLayoutParams;android.widget.cts.PopupWindowTest#testConstructor;android.widget.cts.GalleryTest#testFoo;android.widget.cts.PopupWindowTest#testAccessAnimationStyle;android.widget.cts.ToggleButtonTest#testAccessTextOn;android.widget.cts.AbsoluteLayoutTest#testGenerateLayoutParams1;android.widget.cts.TextViewTest#testGetDefaultEditable;android.widget.cts.AbsoluteLayoutTest#testGenerateLayoutParams2;android.widget.cts.ArrayAdapterTest#testGetFilter;android.widget.cts.CheckedTextViewTest#testSetCheckMarkDrawableById;android.widget.cts.ScrollerTest#testAbortAnimation;android.widget.cts.LinearLayout_LayoutParamsTest#testConstructor;android.widget.cts.TextViewTest#testComputeVerticalScrollExtent;android.widget.cts.AbsSpinnerTest#testSetSelectionInt;android.widget.cts.TabHostTest#testGetTabContentView;android.widget.cts.TextViewTest#testGetDefaultMovementMethod;android.widget.cts.ScrollViewTest#testRequestChildRectangleOnScreen;android.widget.cts.TabHostTest#testGetCurrentView;android.widget.cts.TextViewTest#testAccessFilters;android.widget.cts.GalleryTest#testCheckLayoutParams;android.widget.cts.RadioGroup_LayoutParamsTest#testConstructor;android.widget.cts.BaseExpandableListAdapterTest#testOnGroupExpanded;android.widget.cts.MultiAutoCompleteTextView_CommaTokenizerTest#testTerminateToken;android.widget.cts.ScrollViewTest#testConstructor;android.widget.cts.ListViewTest#testLayoutChildren;android.widget.cts.RemoteViewsTest#testSetImageViewUri;android.widget.cts.ViewAnimatorTest#testAccessDisplayedChild;android.widget.cts.ExpandableListViewTest#testCollapseGroup;android.widget.cts.AnalogClockTest#testConstructor;android.widget.cts.CursorAdapterTest#testConvertToString;android.widget.cts.BaseAdapterTest#testIsEmpty;android.widget.cts.ResourceCursorTreeAdapterTest#testNewGroupView;android.widget.cts.ScrollViewTest#testFling;android.widget.cts.SlidingDrawerTest#testOnMeasure;android.widget.cts.TextViewTest#testSetMaxEms;android.widget.cts.LinearLayoutTest#testGenerateLayoutParams;android.widget.cts.PopupWindowTest#testAccessInputMethodMode;android.widget.cts.ListViewTest#testPerformItemClick;android.widget.cts.TextViewTest#testOnTextChanged;android.widget.cts.GridViewTest#testSetSelection;android.widget.cts.CursorAdapterTest#testHasStableIds;android.widget.cts.ProgressBarTest#testSetIndeterminate;android.widget.cts.TableRowTest#testGetVirtualChildCount;android.widget.cts.AutoCompleteTextViewTest#testOnTextChanged;android.widget.cts.TextViewTest#testSetLinesException;android.widget.cts.TextViewTest#testLength;android.widget.cts.RelativeLayoutTest#testSetGravity;android.widget.cts.RelativeLayoutTest#testConstructor;android.widget.cts.TextViewTest#testGetLineHeight;android.widget.cts.GalleryTest#testSetAnimationDuration;android.widget.cts.PopupWindowTest#testAccessTouchable;android.widget.cts.RelativeLayoutTest#testSetVerticalGravity;android.widget.cts.CursorTreeAdapterTest#testConstructor;android.widget.cts.AbsSpinnerTest#testRequestLayout;android.widget.cts.TextViewTest#testOnKeyShortcut;android.widget.cts.TableRowTest#testGetVirtualChildAt;android.widget.cts.SpinnerTest#testConstructor;android.widget.cts.SimpleAdapterTest#testGetDropDownView;android.widget.cts.ScrollViewTest#testAddViewWithLayoutParams;android.widget.cts.HeaderViewListAdapterTest#testGetItemViewType;android.widget.cts.RadioGroupTest#testSetOnCheckedChangeListener;android.widget.cts.ToggleButtonTest#testOnFinishInflate;android.widget.cts.DialerFilterTest#testAppend;android.widget.cts.HorizontalScrollViewTest#testRequestChildRectangleOnScreen;android.widget.cts.RadioButtonTest#testConstructor;android.widget.cts.PopupWindowTest#testDismiss;android.widget.cts.TableLayoutTest#testAddView2;android.widget.cts.TableLayoutTest#testAddView3;android.widget.cts.TabHostTest#testOnTouchModeChanged;android.widget.cts.TableLayoutTest#testAddView4;android.widget.cts.HeaderViewListAdapterTest#testGetWrappedAdapter;android.widget.cts.TableLayoutTest#testAddView1;android.widget.cts.ImageSwitcherTest#testSetImageResource;android.widget.cts.ToggleButtonTest#testDrawableStateChanged;android.widget.cts.EditTextTest#testSetSelectionIndex;android.widget.cts.EditTextTest#testExtendSelection;android.widget.cts.AbsSeekBarTest#testSetMax;android.widget.cts.CursorTreeAdapterTest#testChangeCursor;android.widget.cts.AdapterViewTest#testItemOrItemIdAtPosition;android.widget.cts.HorizontalScrollViewTest#testDispatchKeyEvent;android.widget.cts.TableRowTest#testGenerateDefaultLayoutParams;android.widget.cts.AbsListViewTest#testSetRecyclerListener;android.widget.cts.GalleryTest#testGetContextMenuInfo;android.widget.cts.AbsListViewTest#testAccessStackFromBottom;android.widget.cts.TextViewTest#testAccessText;android.widget.cts.SpinnerTest#testGetBaseline;android.widget.cts.ScrollViewTest#testRequestChildFocus;android.widget.cts.LinearLayoutTest#testGenerateDefaultLayoutParams;android.widget.cts.ButtonTest#testConstructor;android.widget.cts.ResourceCursorAdapterTest#testSetViewResource;android.widget.cts.ExpandableListViewBasicTest#testContextMenus;android.widget.cts.FrameLayoutTest#testVerifyDrawable;android.widget.cts.ExpandableListViewTest#testGetPackedPositionType;android.widget.cts.LinearLayoutTest#testLayoutHorizontal;android.widget.cts.ScrollViewTest#testComputeVerticalScrollRange;android.widget.cts.GridViewTest#testOnFocusChanged;android.widget.cts.ZoomControlsTest#testOnTouchEvent;android.widget.cts.GridViewTest#testActivityTestCaseSetUpProperly;android.widget.cts.ListViewTest#testAccessItemChecked;android.widget.cts.AbsoluteLayoutTest#testConstructor;android.widget.cts.TextViewTest#testComputeHorizontalScrollRange;android.widget.cts.HorizontalScrollViewTest#testAddViewWithLayoutParams;android.widget.cts.RemoteViewsTest#testGetLayoutId;android.widget.cts.CursorTreeAdapterTest#testNotifyDataSetChangedBoolean;android.widget.cts.TableRow_LayoutParamsTest#testSetBaseAttributes;android.widget.cts.HorizontalScrollViewTest#testMeasureChildWithMargins;android.widget.cts.TextViewTest#testSetIncludeFontPadding;android.widget.cts.HorizontalScrollViewTest#testAddView;android.widget.cts.TimePickerTest#testAccessCurrentMinute;android.widget.cts.TextViewTest#testGetExtendedPaddingBottom;android.widget.cts.BaseExpandableListAdapterTest#testIsEmpty;android.widget.cts.SimpleAdapterTest#testAccessViewBinder;android.widget.cts.SpinnerTest#testOnLayout;android.widget.cts.AutoCompleteTextViewTest#testAccessValidater;android.widget.cts.ScrollViewTest#testAddViewWithIndex;android.widget.cts.FrameLayoutTest#testDrawableStateChanged;android.widget.cts.PopupWindowTest#testSetTouchInterceptor;android.widget.cts.SimpleAdapterTest#testGetItem;android.widget.cts.ImageViewTest#testSetColorFilter1;android.widget.cts.ImageViewTest#testSetColorFilter2;android.widget.cts.SlidingDrawerTest#testDispatchDraw;android.widget.cts.TextViewTest#testSetOnEditorActionListener;android.widget.cts.DatePickerTest#testSetEnabled;android.widget.cts.RemoteViewsTest#testReapply;android.widget.cts.TextViewTest#testCompound;android.widget.cts.AdapterViewTest#testAccessEmptyView;android.widget.cts.Gallery_LayoutParamsTest#testConstructor;android.widget.cts.TextViewTest#testGetResolvedTextDirectionRtlWithInheritance;android.widget.cts.PopupWindowTest#testShowAtLocation;android.widget.cts.TextViewTest#testPerformLongClick;android.widget.cts.ExpandableListViewTest#testSetChildDivider;android.widget.cts.PopupWindowTest#testAccessClippingEnabled;android.widget.cts.RemoteViewsTest#testSetTextViewText;android.widget.cts.ScrollViewTest#testMeasureChild;android.widget.cts.TableLayoutTest#testAccessColumnShrinkable;android.widget.cts.TableRow_LayoutParamsTest#testConstructor;android.widget.cts.GalleryTest#testComputeHorizontalScrollOffset;android.widget.cts.ProgressBarTest#testOnMeasure;android.widget.cts.ProgressBarTest#testAccessProgressDrawable;android.widget.cts.SimpleAdapterTest#testGetFilter;android.widget.cts.RadioGroupTest#testSetOnHierarchyChangeListener;android.widget.cts.AbsListViewTest#testHandleDataChanged;android.widget.cts.AbsListViewTest#testShowContextMenuForChild;android.widget.cts.ExpandableListViewTest#testConstructor;android.widget.cts.HeaderViewListAdapterTest#testIsEmpty;android.widget.cts.AlphabetIndexerTest#testAlphabetIndexer;android.widget.cts.ChronometerTest#testAccessBase;android.widget.cts.TextViewTest#testAccessRawContentType;android.widget.cts.ScrollViewTest#testExecuteKeyEvent;android.widget.cts.SpinnerTest#testAccessPrompt;android.widget.cts.AnalogClockTest#testOnDraw;android.widget.cts.ChronometerTest#testStartAndStop;android.widget.cts.TabWidgetTest#testSetCurrentTab;android.widget.cts.CursorTreeAdapterTest#testGetFilter;android.widget.cts.ImageSwitcherTest#testSetImageURI;android.widget.cts.TabHostTest#testSetOnTabChangedListener;android.widget.cts.ScrollViewTest#testSmoothScrollTo;android.widget.cts.SimpleExpandableListAdapterTest#testGetGroupId;android.widget.cts.AbsListViewTest#testAccessCacheColorHint;android.widget.cts.TabHostTest#testSetCurrentTabByTag;android.widget.cts.HeaderViewListAdapterTest#testIsEnabled;android.widget.cts.ImageViewTest#testSetImageState;android.widget.cts.ExpandableListViewTest#testSetSelectedGroup;android.widget.cts.DialerFilterTest#testRemoveFilterWatcher;android.widget.cts.ToggleButtonTest#testAccessTextOff;android.widget.cts.TextViewTest#testSetSelectAllOnFocus;android.widget.cts.TextViewTest#testAccessKeyListener;android.widget.cts.ArrayAdapterTest#testInsert;android.widget.cts.MediaControllerTest#testSetPrevNextListeners;android.widget.cts.PopupWindowTest#testUpdatePositionAndDimension;android.widget.cts.TextViewTest#testOnDraw;android.widget.cts.TextViewTest#testSetFrame;android.widget.cts.ScrollerTest#testAccessFinalX;android.widget.cts.ScrollerTest#testAccessFinalY;android.widget.cts.AdapterViewTest#testOnLayout;android.widget.cts.ScrollViewTest#testOnRequestFocusInDescendants;android.widget.cts.TextViewTest#testCancelLongPress;android.widget.cts.GridViewTest#testAccessAdapter;android.widget.cts.ZoomButtonTest#testSetZoomSpeed;android.widget.cts.ExpandableListViewTest#testGetPackedPositionGroup;android.widget.cts.ExpandableListViewTest#testSetGroupIndicator;android.widget.cts.TextViewTest#testGetResolvedTextDirectionLtr;android.widget.cts.BaseAdapterTest#testGetDropDownView;android.widget.cts.ViewAnimatorTest#testShowPrevious;android.widget.cts.TextViewTest#testOnCreateContextMenu;android.widget.cts.TextViewTest#testAppend;android.widget.cts.DialerFilterTest#testOnFocusChanged;android.widget.cts.SlidingDrawerTest#testOnLayout;android.widget.cts.TextViewTest#testGetFocusedRect;android.widget.cts.TextSwitcherTest#testAddView;android.widget.cts.ExpandableListViewTest#testSetChildIndicatorBounds;android.widget.cts.RemoteViewsTest#testSetImageViewBitmap;android.widget.cts.CursorTreeAdapterTest#testHasStableIds;android.widget.cts.ToastTest#testConstructor;android.widget.cts.CursorTreeAdapterTest#testConvertToString;android.widget.cts.AbsListViewTest#testGetTopBottomFadingEdgeStrength;android.widget.cts.EditTextTest#testGetDefaultMovementMethod;android.widget.cts.AbsListViewTest#testAddTouchables;android.widget.cts.SeekBarTest#testSetOnSeekBarChangeListener;android.widget.cts.TextViewTest#testAccessLinkTextColor;android.widget.cts.TextViewTest#testAccessEllipsize;android.widget.cts.RatingBarTest#testAccessNumStars;android.widget.cts.ImageViewTest#testGetBaseline;android.widget.cts.AnalogClockTest#testOnAttachedToWindow;android.widget.cts.LayoutDirectionTest#testDirectionInheritanceForAllLayoutsWithCode;android.widget.cts.AutoCompleteTextViewTest#testAccessItemSelectedListener;android.widget.cts.TextSwitcherTest#testConstructor;android.widget.cts.TextViewTest#testGetResolvedTextAlignment;android.widget.cts.ExpandableListView_ExpandableListContextMenuInfoTest#testConstructor;android.widget.cts.HeaderViewListAdapterTest#testGetFilter;android.widget.cts.AbsSeekBarTest#testConstructor;android.widget.cts.ZoomControlsTest#testSetOnZoomOutClickListener;android.widget.cts.ArrayAdapterTest#testSort;android.widget.cts.HorizontalScrollViewTest#testFling;android.widget.cts.GridViewTest#testConstructor;android.widget.cts.RemoteViewsTest#testNotFeasibleSetters;android.widget.cts.RemoteViewsTest#testWriteToParcel;android.widget.cts.ScrollViewTest#testAddView;android.widget.cts.FilterTest#testConstructor;android.widget.cts.SimpleExpandableListAdapterTest#testGetChildId;android.widget.cts.AutoCompleteTextViewTest#testOnDetachedFromWindow;android.widget.cts.ScrollViewTest#testRequestLayout;android.widget.cts.ImageButtonTest#testConstructor;android.widget.cts.EditTextTest#testSelectAll;android.widget.cts.PopupWindowTest#testSetOnDismissListener;android.widget.cts.TimePickerTest#testAccessCurrentHour;android.widget.cts.ArrayAdapterTest#testCreateFromResource;android.widget.cts.TextViewTest#testSetShadowLayer;android.widget.cts.CompoundButtonTest#testOnCreateDrawableState;android.widget.cts.SimpleCursorAdapterTest#testChangeCursorAndColumns;android.widget.cts.ImageViewTest#testSetFrame;android.widget.cts.ArrayAdapterTest#testSetDropDownViewResouce;android.widget.cts.ResourceCursorAdapterTest#testNewDropDownView;android.widget.cts.ToastTest#testCancel;android.widget.cts.RatingBarTest#testAccessStepSize;android.widget.cts.CheckedTextViewTest#testSetCheckMarkDrawableByDrawable;android.widget.cts.TextViewTest#testInstanceState;android.widget.cts.AbsListViewTest#testGetFocusedRect;android.widget.cts.ViewAnimatorTest#testAddView;android.widget.cts.AdapterViewTest#testUnsupportedMethods;android.widget.cts.TextViewTest#testOnPrivateIMECommand;android.widget.cts.CursorAdapterTest#testAccessCursor;android.widget.cts.TextViewTest#testBringPointIntoView;android.widget.cts.SpinnerTest#testOnClick;android.widget.cts.TextViewTest#testSetEditableFactory;android.widget.cts.ViewSwitcherTest#testGetNextView;android.widget.cts.AbsSeekBarTest#testAccessThumbOffset;android.widget.cts.AbsoluteLayout_LayoutParamsTest#testDebug;android.widget.cts.DatePickerTest#testAccessDate;android.widget.cts.CursorAdapterTest#testConstructor;android.widget.cts.HorizontalScrollViewTest#testPageScroll;android.widget.cts.AutoCompleteTextViewTest#testPerformValidation;android.widget.cts.TextViewTest#testAccessLinksClickable;android.widget.cts.SlidingDrawerTest#testGetContent;android.widget.cts.ViewAnimatorTest#testShowNext;android.widget.cts.TextViewTest#testResetTextAlignment;android.widget.cts.ScrollerTest#testFlingMode;android.widget.cts.SlidingDrawerTest#testOnInterceptTouchEvent;android.widget.cts.DatePickerTest#testConstructor;android.widget.cts.TableLayoutTest#testAccessColumnCollapsed;android.widget.cts.AbsSeekBarTest#testVerifyDrawable;android.widget.cts.ScrollViewTest#testOnSizeChanged;android.widget.cts.TimePickerTest#testConstructors;android.widget.cts.TextViewTest#testAccessTransformationMethod;android.widget.cts.SimpleCursorTreeAdapterTest#testBindChildView;android.widget.cts.ScrollerTest#testExtendDuration;android.widget.cts.RatingBarTest#testAccessRating;android.widget.cts.RelativeLayoutTest#testCheckLayoutParams;android.widget.cts.GalleryTest#testGenerateDefaultLayoutParams;android.widget.cts.AbsoluteLayoutTest#testCheckLayoutParams;android.widget.cts.SlidingDrawerTest#testOnFinishInflate;android.widget.cts.EditTextTest#testSetSelectionStartstop;android.widget.cts.ToggleButtonTest#testSetBackgroundDrawable;android.widget.cts.HeaderViewListAdapterTest#testRegisterDataSetObserver;android.widget.cts.TextViewTest#testAccessFreezesText;android.widget.cts.ArrayAdapterTest#testAndroidTestCaseSetupProperly;android.widget.cts.ExpandableListViewTest#testGetSelectedPosition;android.widget.cts.TabHostTest#testGetCurrentTabTag;android.widget.cts.GridViewTest#testOnMeasure;android.widget.cts.HeaderViewListAdapterTest#testGetItemId;android.widget.cts.RadioButtonTest#testToggle;android.widget.cts.TextViewTest#testOnFocusChanged;android.widget.cts.AbsoluteLayout_LayoutParamsTest#testAndroidTestCaseSetupProperly;android.widget.cts.ViewAnimatorTest#testAccessInAnimation;android.widget.cts.AdapterViewTest#testDispatchSaveInstanceState;android.widget.cts.HeaderViewListAdapterTest#testHasStableIds;android.widget.cts.RelativeLayoutTest#testOnMeasure;android.widget.cts.HorizontalScrollViewTest#testSmoothScrollBy;android.widget.cts.ListViewTest#testTransientStateUnstableIds;android.widget.cts.TableRowTest#testConstructor;android.widget.cts.TabHost_TabSpecTest#testSetIndicator2;android.widget.cts.ArrayAdapterTest#testAccessView;android.widget.cts.TabHost_TabSpecTest#testSetIndicator1;android.widget.cts.HorizontalScrollViewTest#testAccessSmoothScrollingEnabled;android.widget.cts.TextViewTest#testSetCursorVisible;android.widget.cts.FrameLayout_LayoutParamsTest#testConstructor;android.widget.cts.AutoCompleteTextViewTest#testOnAttachedToWindow;android.widget.cts.CursorAdapterTest#testInit;android.widget.cts.SimpleAdapterTest#testGetItemId;android.widget.cts.TableLayout_LayoutParamsTest#testSetBaseAttributes;android.widget.cts.ExpandableListViewBasicTest#testExpandedGroupMovement;android.widget.cts.TextViewTest#testAccessPaintFlags;android.widget.cts.CursorAdapterTest#testGetItemId;android.widget.cts.GalleryTest#testSetSpacing;android.widget.cts.TextViewTest#testSetLines;android.widget.cts.ScrollerTest#testConstructor;android.widget.cts.CompoundButtonTest#testOnDraw;android.widget.cts.ListViewTest#testGetMaxScrollAmount;android.widget.cts.TwoLineListItemTest#testGetTexts;android.widget.cts.AbsListViewTest#testBeforeAndAfterTextChanged;android.widget.cts.AdapterViewTest#testConstructor;android.widget.cts.SimpleAdapterTest#testSetViewText;android.widget.cts.ExpandableListViewTest#testGetSelectedId;android.widget.cts.TableLayoutTest#testOnMeasure;android.widget.cts.DialerFilterTest#testSetDigitsWatcher;android.widget.cts.AbsListViewTest#testPointToPosition;android.widget.cts.ExpandableListViewTest#testGetPackedPositionChild;android.widget.cts.ExpandableListViewBasicTest#testSelectedPosition;android.widget.cts.RemoteViewsTest#testSetBitmap;android.widget.cts.TextViewTest#testFoo;android.widget.cts.EditTextTest#testAccessText;android.widget.cts.AbsListViewTest#testComputeVerticalScrollValues;android.widget.cts.VideoViewTest#testConstructor;android.widget.cts.EditTextTest#testGetDefaultEditable;android.widget.cts.EditTextTest#testConstructor;android.widget.cts.ExpandableListViewWithHeadersTest#testExpandOnFirstGroup;android.widget.cts.RelativeLayout_LayoutParamsTest#testStartEnd;android.widget.cts.ScrollViewTest#testAddViewWithIndexAndLayoutParams;android.widget.cts.ViewFlipperTest#testSetFlipInterval;android.widget.cts.ZoomButtonTest#testConstructor;android.widget.cts.TableRowTest#testOnMeasure;android.widget.cts.TableLayoutTest#testAccessStretchAllColumns;android.widget.cts.GridViewTest#testSetHorizontalSpacing;android.widget.cts.ExpandableListViewWithHeadersTest#testContextMenus;android.widget.cts.ListViewTest#testRequestChildRectangleOnScreen;android.widget.cts.VideoViewTest#testSetMediaController;android.widget.cts.AdapterViewTest#testAccessOnItemClickAndLongClickListener;android.widget.cts.RemoteViewsTest#testSetImageViewResource;android.widget.cts.TextViewTest#testScroll;android.widget.cts.VideoViewTest#testResolveAdjustedSize;android.widget.cts.ScrollViewTest#testOnInterceptTouchEvent;android.widget.cts.ViewAnimatorTest#testRemoveViews;android.widget.cts.AlphabetIndexerTest#testAndroidTestCaseSetupProperly;android.widget.cts.ImageViewTest#testSetMaxHeight;android.widget.cts.ImageViewTest#testOnMeasure;android.widget.cts.RadioGroup_LayoutParamsTest#testSetBaseAttributes;android.widget.cts.AbsoluteLayoutTest#testOnMeasure;android.widget.cts.CompoundButtonTest#testPerformClick;android.widget.cts.ExpandableListViewTest#testAccessExpandableListAdapter;android.widget.cts.TextView_SaveStateTest#testToString;android.widget.cts.CursorTreeAdapterTest#testGetGroupView;android.widget.cts.TextViewTest#testPressKey;android.widget.cts.ProgressBarTest#testAccessMax;android.widget.cts.TextViewTest#testBeginEndBatchEdit;android.widget.cts.HeaderViewListAdapterTest#testGetItem;android.widget.cts.LinearLayoutTest#testActivityTestCaseSetUpProperly;android.widget.cts.TextViewTest#testSetGetTextDirection;android.widget.cts.HeaderViewListAdapterTest#testGetView;android.widget.cts.ScrollerTest#testScrollMode;android.widget.cts.ProgressBarTest#testAccessInterpolator;android.widget.cts.TextViewTest#testTextAttr;android.widget.cts.AbsListViewTest#testAccessScrollingCacheEnabled;android.widget.cts.MediaControllerTest#testSetEnabled;android.widget.cts.SimpleCursorAdapterTest#testConvertToString;android.widget.cts.ExpandableListViewTest#testDispatchDraw;android.widget.cts.DigitalClockTest#testOnAttachedToWindow;android.widget.cts.BaseAdapterTest#testGetViewTypeCount;android.widget.cts.CursorAdapterTest#testGetCount;android.widget.cts.ToastTest#testAccessView;android.widget.cts.FrameLayoutTest#testOnMeasure;android.widget.cts.HorizontalScrollViewTest#testGetMaxScrollAmount;android.widget.cts.AbsListViewTest#testSetScrollIndicators;android.widget.cts.TabHostTest#testOnAttachedToAndDetachedFromWindow;android.widget.cts.CursorAdapterTest#testGetFilter;android.widget.cts.CursorTreeAdapterTest#testGetChild;android.widget.cts.SlidingDrawerTest#testSetOnDrawerScrollListener;android.widget.cts.ProgressBarTest#testOnSizeChange;android.widget.cts.TextViewTest#testGetTotalPaddingRight;android.widget.cts.GridViewTest#testPressKey;android.widget.cts.CheckedTextViewTest#testDrawableStateChanged;android.widget.cts.ScrollerTest#testGetDuration;android.widget.cts.TableLayoutTest#testRequestLayout;android.widget.cts.ImageViewTest#testAccessImageMatrix;android.widget.cts.PopupWindowTest#testAccessWidth;android.widget.cts.BaseAdapterTest#testDataSetObserver;android.widget.cts.SpinnerTest#testPerformClick;android.widget.cts.MediaControllerTest#testConstructor;android.widget.cts.SimpleCursorTreeAdapterTest#testConstructor;android.widget.cts.TextViewTest#testGetTextColor;android.widget.cts.DialerFilterTest#testOnModechange;android.widget.cts.AdapterViewTest#testDispatchRestoreInstanceState;android.widget.cts.ImageViewTest#testOnCreateDrawableState;android.widget.cts.CursorTreeAdapterTest#testNotifyDataSetInvalidated;android.widget.cts.SimpleExpandableListAdapterTest#testGetGroupView;android.widget.cts.ListViewTest#testRequestLayout;android.widget.cts.Gallery_LayoutParamsTest#testAndroidTestCaseSetupProperly;android.widget.cts.SimpleExpandableListAdapterTest#testGetChild;android.widget.cts.TableRowTest#testSetOnHierarchyChangeListener;android.widget.cts.TextViewTest#testGetExtendedPaddingTop;android.widget.cts.ResourceCursorAdapterTest#testSetDropDownViewResource;android.widget.cts.LinearLayoutTest#testAccessBaselineAligned;android.widget.cts.CursorTreeAdapterTest#testGetChildId;android.widget.cts.GridViewTest#testSetColumnWidth;android.widget.cts.AbsListViewTest#testAccessTranscriptMode;android.widget.cts.VideoViewTest#testGetBufferPercentage;android.widget.cts.LinearLayoutTest#testConstructor;android.widget.cts.TextViewTest#testAccessContentType;android.widget.cts.SimpleCursorAdapterTest#testBindView;android.widget.cts.SlidingDrawerTest#testOnTouchEvent;android.widget.cts.ListViewTest#testOnKeyUpDown;android.widget.cts.SimpleCursorAdapterTest#testAccessCursorToStringConverter;android.widget.cts.TabWidgetTest#testAddView;android.widget.cts.TextViewTest#testIsInputMethodTarget;android.widget.cts.AbsoluteLayout_LayoutParamsTest#testConstructor;android.widget.cts.RelativeLayoutTest#testGetBaseline;android.widget.cts.TextViewTest#testGetLineCount;android.widget.cts.GridLayoutTest#testActivityTestCaseSetUpProperly;android.widget.cts.ProgressBarTest#testInvalidateDrawable;android.widget.cts.AbsSpinnerTest#testOnSaveAndRestoreInstanceState;android.widget.cts.MultiAutoCompleteTextViewTest#testConstructor;android.widget.cts.ExpandableListViewTest#testGetFlatListPosition;android.widget.cts.ArrayAdapterTest#testAddAllParams;android.widget.cts.CursorTreeAdapterTest#testSetGroupCursor;android.widget.cts.TextViewTest#testDidTouchFocusSelect;android.widget.cts.SimpleCursorAdapterTest#testConstructor;android.widget.cts.TextViewTest#testAccessImeOptions;android.widget.cts.TabHostTest#testClearAllTabs;android.widget.cts.TextViewTest#testGetFadingEdgeStrength;android.widget.cts.TextViewTest#testSetMinLines;android.widget.cts.DialerFilterTest#testConstructor;android.widget.cts.AbsListViewTest#testConstructor;android.widget.cts.HorizontalScrollViewTest#testAddViewWithIndexAndLayoutParams;android.widget.cts.TextViewTest#testTextDirectionDefault;android.widget.cts.TextViewTest#testGetLineBounds;android.widget.cts.HorizontalScrollViewTest#testConstructor;android.widget.cts.AutoCompleteTextViewTest#testSetFrame;android.widget.cts.RelativeLayoutTest#testGenerateLayoutParams2;android.widget.cts.RelativeLayoutTest#testGenerateLayoutParams1;android.widget.cts.ArrayAdapterTest#testAdd;android.widget.cts.PopupWindowTest#testUpdateDimensionAndAlignAnchorView;android.widget.cts.ToastTest#testAccessMargin;android.widget.cts.RemoteViewsActivityTest#testGood;android.widget.cts.TextViewTest#testAccessTextSize;android.widget.cts.TableLayoutTest#testColumnStretchableEffect;android.widget.cts.CompoundButtonTest#testDrawableStateChanged;android.widget.cts.CursorAdapterTest#testAccessFilterQueryProvider;android.widget.cts.HorizontalScrollViewTest#testArrowScroll;android.widget.cts.ScrollViewTest#testOnMeasure;android.widget.cts.TextViewTest#testTextChangedListener;android.widget.cts.AutoCompleteTextViewTest#testSetCompletionHint;android.widget.cts.TextViewTest#testAccessTextColor;android.widget.cts.FrameLayoutTest#testAccessMeasureAllChildren;android.widget.cts.LinearLayoutTest#testAccessWeightSum;android.widget.cts.HorizontalScrollViewTest#testOnMeasure;android.widget.cts.ResourceCursorAdapterTest#testConstructor;android.widget.cts.FrameLayoutTest#testOnSizeChanged;android.widget.cts.LinearLayoutTest#testCheckLayoutParams;android.widget.cts.PopupWindowTest#testSetWindowLayoutMode;android.widget.cts.ExpandableListView_ExpandableListContextMenuInfoTest#testAndroidTestCaseSetupProperly;android.widget.cts.ListViewTest#testAccessHeaderView;android.widget.cts.RatingBarTest#testAccessOnRatingBarChangeListener;android.widget.cts.GridViewTest#testSetGravity;android.widget.cts.TextViewTest#testAccessHint;android.widget.cts.HorizontalScrollViewTest#testOnLayout;android.widget.cts.ListViewTest#testAccessAdapter;android.widget.cts.ArrayAdapterTest#testGetItemId;android.widget.cts.ImageButtonTest#testAndroidTestCaseSetupProperly;android.widget.cts.TextViewTest#testOnDetachedFromWindow;android.widget.cts.ProgressBarTest#testAccessSecondaryProgress;android.widget.cts.SimpleExpandableListAdapterTest#testIsChildSelectable;android.widget.cts.TextViewTest#testTextAlignmentDefault;android.widget.cts.TableLayoutTest#testCheckLayoutParams;android.widget.cts.AnalogClockTest#testOnSizeChanged;android.widget.cts.DialerFilterTest#testSetLettersWatcher;android.widget.cts.ViewAnimatorTest#testAccessDisplayedChildBoundary;android.widget.cts.TextViewTest#testSetSpannableFactory;android.widget.cts.ImageSwitcherTest#testConstructor;android.widget.cts.TextViewTest#testAccessMovementMethod;android.widget.cts.AbsSeekBarTest#testDrawableStateChanged;android.widget.cts.RadioGroupTest#testAddView;android.widget.cts.HorizontalScrollViewTest#testOnInterceptTouchEvent;android.widget.cts.TabHostTest#testConstructor;android.widget.cts.CursorTreeAdapterTest#testGetChildrenCount;android.widget.cts.SimpleCursorAdapterTest#testChangeCursor;android.widget.cts.HorizontalScrollViewTest#testAccessFillViewport;android.widget.cts.AbsSeekBarTest#testFoo;android.widget.cts.TableLayoutTest#testConstructor;android.widget.cts.GalleryTest#testSetUnselectedAlpha;android.widget.cts.AbsListViewTest#testInvalidateViews;android.widget.cts.HeaderViewListAdapterTest#testGetCount;android.widget.cts.RatingBarTest#testAccessIndicator;android.widget.cts.RelativeLayout_LayoutParamsTest#testConstructor;android.widget.cts.CursorAdapterTest#testNewDropDownView;android.widget.cts.ChronometerTest#testAccessFormat;android.widget.cts.ExpandableListViewBasicTest#testPreconditions;android.widget.cts.AbsListViewTest#testFoo;android.widget.cts.ListViewTest#testOnTouchEvent;android.widget.cts.TabHostTest#testAddTab;android.widget.cts.AdapterViewTest#testChangeFocusable;android.widget.cts.ListViewTest#testAccessDivider;android.widget.cts.ListViewTest#testAccessFooterView;android.widget.cts.SimpleCursorAdapterTest#testAccessViewBinder;android.widget.cts.ZoomButtonTest#testSetEnabled;android.widget.cts.CheckedTextViewTest#testConstructor;android.widget.cts.GridViewTest#testLayoutChildren;android.widget.cts.ImageViewTest#testSetAlpha;android.widget.cts.TextViewTest#testClearComposingText;android.widget.cts.ZoomControlsTest#testSetIsZoomInEnabled;android.widget.cts.TabWidgetTest#testConstructor;android.widget.cts.TableRowTest#testGenerateLayoutParams2;android.widget.cts.TextViewTest#testSetTextAppearance;android.widget.cts.FilterTest#testConvertResultToString;android.widget.cts.MultiAutoCompleteTextViewTest#testPerformValidation;android.widget.cts.TextViewTest#testHeightAndWidth;android.widget.cts.CursorTreeAdapterTest#testIsChildSelectable;android.widget.cts.ArrayAdapterTest#testAddAllCollection;android.widget.cts.AbsListView_LayoutParamsTest#testConstructors;android.widget.cts.ScrollViewTest#testDispatchKeyEvent;android.widget.cts.TabHostTest#testAccessCurrentTab;android.widget.cts.ViewSwitcherTest#testReset;android.widget.cts.TimePickerTest#testAccessIs24HourView;android.widget.cts.TextViewTest#testGetTotalPaddingTop;android.widget.cts.HorizontalScrollViewTest#testExecuteKeyEvent;android.widget.cts.AbsoluteLayoutTest#testOnLayout;android.widget.cts.ImageViewTest#testAccessScaleType;android.widget.cts.TabHostTest#testGetTabWidget;android.widget.cts.SlidingDrawerTest#testAnimateToggle;android.widget.cts.SlidingDrawerTest#testLockAndUnlock;android.widget.cts.GalleryTest#testSetGravity;android.widget.cts.ListViewTest#testOnFinishInflate;android.widget.cts.ScrollViewTest#testArrowScroll;android.widget.cts.ScrollViewTest#testComputeScrollDeltaToGetChildRectOnScreen;android.widget.cts.TabHostTest#testGetCurrentTabView;android.widget.cts.ExpandableListViewBasicTest#testExpandGroup;android.widget.cts.TextViewTest#testExtractText;android.widget.cts.RemoteViewsTest#testOnLoadClass;android.widget.cts.RadioGroupTest#testCheckLayoutParams;android.widget.cts.TextSwitcherTest#testSetText;android.widget.cts.AbsListViewTest#testGenerateLayoutParams;android.widget.cts.TabWidgetTest#testSetEnabled;android.widget.cts.AutoCompleteTextViewTest#testAccessItemClickListener;android.widget.cts.ChronometerTest#testFoo;android.widget.cts.ExpandableListViewBasicTest#testConvertionBetweenFlatAndPacked;android.widget.cts.DatePickerTest#testOnSaveInstanceState;android.widget.cts.DatePickerTest#testAndroidTestCaseSetupProperly;android.widget.cts.ImageButtonTest#testOnSetAlpha;android.widget.cts.AdapterViewTest#testAccessOnItemSelectedListener;android.widget.cts.BaseExpandableListAdapterTest#testOnGroupCollapsed;android.widget.cts.TableLayoutTest#testGenerateLayoutParams1;android.widget.cts.TableLayoutTest#testGenerateLayoutParams2;android.widget.cts.LinearLayoutTest#testLayoutVertical;android.widget.cts.CursorTreeAdapterTest#testAccessQueryProvider;android.widget.cts.TextViewTest#testSetTextKeepState1;android.widget.cts.ArrayAdapterTest#testConstructor;android.widget.cts.RemoteViewsTest#testDescribeContents;android.widget.cts.RelativeLayoutTest#testGenerateDefaultLayoutParams;android.widget.cts.SimpleExpandableListAdapterTest#testHasStableIds;android.widget.cts.TextViewTest#testOnPreDraw;android.widget.cts.ExpandableListViewBasicTest#testCollapseGroup;android.widget.cts.ExpandableListViewWithHeadersTest#testExpandOnFirstPosition;android.widget.cts.SimpleCursorAdapterTest#testSetViewText;android.widget.cts.RelativeLayoutTest#testSetIgnoreGravity;android.widget.cts.RadioGroup_LayoutParamsTest#testAndroidTestCaseSetupProperly;android.widget.cts.BaseAdapterTest#testAreAllItemsEnabled;android.widget.cts.RemoteViewsTest#testSetInt;android.widget.cts.AutoCompleteTextViewTest#testAccessDropDownAnchor;android.widget.cts.ScrollerTest#testIsFinished;android.widget.cts.TextViewTest#testAccessGravity;android.widget.cts.TableLayoutTest#testAccessColumnStretchable;android.widget.cts.ExpandableListViewTest#testSetOnGroupClickListener;android.widget.cts.AlphabetIndexerTest#testCompare;android.widget.cts.AbsListView_LayoutParamsTest#testAndroidTestCaseSetupProperly;android.widget.cts.LayoutDirectionTest#testLayoutDirectionDefaults;android.widget.cts.HeaderViewListAdapterTest#testAreAllItemsEnabled;android.widget.cts.LinearLayout_LayoutParamsTest#testDebug;android.widget.cts.CursorTreeAdapterTest#testGetCursor;android.widget.cts.ImageViewTest#testOnDraw;android.widget.cts.GalleryTest#testGetChildDrawingOrder;android.widget.cts.TextViewTest#testAccessInputExtras;android.widget.cts.LinearLayoutTest#testGetBaseline;android.widget.cts.RatingBarTest#testConstructor;android.widget.cts.RemoteViewsTest#testSetUri;android.widget.cts.SpinnerTest#testsetPromptId;android.widget.cts.RemoteViewsTest#testSetTextColor;android.widget.cts.VideoViewTest#testGetDuration;android.widget.cts.AdapterViewTest#testGetCount;android.widget.cts.MultiAutoCompleteTextView_CommaTokenizerTest#testFindTokenStart;android.widget.cts.ImageViewTest#testSetImageBitmap;android.widget.cts.HeaderViewListAdapterTest#testUnregisterDataSetObserver;android.widget.cts.PopupWindowTest#testAccessOutsideTouchable;android.widget.cts.EditTextTest#testSetEllipsize;android.widget.cts.SimpleAdapterTest#testGetCount;android.widget.cts.SpinnerTest#testSetOnItemClickListener;android.widget.cts.SlidingDrawerTest#testToggle;android.widget.cts.AbsSpinnerTest#testPointToPosition;android.widget.cts.ViewFlipperTest#testViewFlipper;android.widget.cts.TabHostTest#testDispatchKeyEvent;android.widget.cts.ExpandableListViewTest#testIsGroupExpanded;android.widget.cts.LayoutDirectionTest#testDirectionFromXml;android.widget.cts.TextViewTest#testVerifyDrawable;android.widget.cts.ProgressBarTest#testIncrementProgressBy;android.widget.cts.PopupWindowTest#testShowAsDropDown;android.widget.cts.ListViewTest#testCanAnimate;android.widget.cts.HorizontalScrollViewTest#testMeasureChild;android.widget.cts.RadioGroupTest#testClearCheck;android.widget.cts.SimpleAdapterTest#testConstructor;android.widget.cts.HorizontalScrollViewTest#testGetHorizontalFadingEdgeStrengths;android.widget.cts.CursorAdapterTest#testGetItem" />
</TestPlan>
diff --git a/tests/plans/CTS-stable.xml b/tests/plans/CTS-stable.xml
index 984d709..1a46a3e 100644
--- a/tests/plans/CTS-stable.xml
+++ b/tests/plans/CTS-stable.xml
@@ -7,11 +7,13 @@
<Entry uri="android.accounts"/>
<Entry uri="android.admin"/>
<Entry uri="android.animation"/>
- <Entry uri="android.app" exclude="android.app.cts.AlertDialogTest#testAlertDialogCancelable;android.app.cts.AlertDialogTest#testCallback"/>
+ <Entry uri="android.app" exclude="android.app.cts.ActivityManagerTest#testIsRunningInTestHarness;android.app.cts.AlertDialogTest#testAlertDialogCancelable;android.app.cts.ExpandableListActivityTest#testCallback" />
+ <Entry uri="android.bionic"/>
<Entry uri="android.bluetooth"/>
<Entry uri="android.calendarcommon"/>
<Entry uri="android.content"/>
<Entry uri="android.core.tests.libcore.package.com"/>
+ <Entry uri="android.core.tests.libcore.package.conscrypt"/>
<Entry uri="android.core.tests.libcore.package.dalvik"/>
<Entry uri="android.core.tests.libcore.package.libcore"/>
<Entry uri="android.core.tests.libcore.package.org"/>
@@ -29,18 +31,18 @@
<Entry uri="android.gesture"/>
<Entry uri="android.graphics"/>
<Entry uri="android.graphics2"/>
- <Entry uri="android.hardware" exclude="android.hardware.cts.CameraTest#testCancelAutofocus"/>
+ <Entry uri="android.hardware" exclude="android.hardware.cts.SensorIntegrationTests#testAccelerometerDoesNotStopGyroscope;android.hardware.cts.SensorIntegrationTests#testsAccelerometerDoesnNotStopMagnetometer;android.hardware.cts.SensorIntegrationTests#testAndroidTestCaseSetupProperly;android.hardware.cts.SensorIntegrationTests#testBatchAndFlush;android.hardware.cts.SensorIntegrationTests#testGyroscopeDoesNotStopAccelerometer;android.hardware.cts.SensorIntegrationTests#testGyroscopeDoesNotStopMagnetometer;android.hardware.cts.SensorIntegrationTests#testMagnetometerDoesNotStopAccelerometer;android.hardware.cts.SensorIntegrationTests#testMagnetometerDoesNotStopGyroscope;android.hardware.cts.SensorMagneticFieldTest#testBatchingStoppingOtherClients;android.hardware.cts.SensorMagneticFieldTest#testBatchingStoppingOtherClientsBatching;android.hardware.cts.SensorMagneticFieldTest#testFrequencyAccuracy;android.hardware.cts.SensorMagneticFieldTest#testOneClientSeveralThreads;android.hardware.cts.SensorMagneticFieldTest#testOneClientSeveralThreadsBatching;android.hardware.cts.SensorMagneticFieldTest#testStandardDeviationWhileStatic;android.hardware.cts.SensorMagneticFieldTest#testStoppingOtherClients;android.hardware.cts.SensorMagneticFieldTest#testStoppingOtherClientsBatching;android.hardware.cts.SensorAccelerometerTest#testBatchingStoppingOtherClients;android.hardware.cts.SensorAccelerometerTest#testBatchingStoppingOtherClientsBatching;android.hardware.cts.SensorAccelerometerTest#testFrequencyAccuracy;android.hardware.cts.SensorAccelerometerTest#testOneClientSeveralThreads;android.hardware.cts.SensorAccelerometerTest#testOneClientSeveralThreadsBatching;android.hardware.cts.SensorGyroscopeTest#testBatchingStoppingOtherClients;android.hardware.cts.SensorGyroscopeTest#testBatchingStoppingOtherClientsBatching;android.hardware.cts.SensorGyroscopeTest#testFrequencyAccuracy;android.hardware.cts.SensorGyroscopeTest#testOneClientSeveralThreads;android.hardware.cts.SensorGyroscopeTest#testOneClientSeveralThreadsBatching;android.hardware.cts.SensorGyroscopeTest#testStandardDeviationWhilStatic;android.hardware.cts.SensorGyroscopeTest#testStoppingOtherClients;android.hardware.cts.SensorGyroscopeTest#testStoppingOtherClientsBatching;android.hardware.cts.SensorAccelerometerTest#testStandardDeviationWhileStatic;android.hardware.cts.SensorAccelerometerTest#testStoppingOtherClients;android.hardware.cts.SensorAccelerometerTest#testStoppingOtherClientsBatching;android.hardware.camera2.cts.CameraDeviceTest#testCameraDeviceRepeatingRequest;android.hardware.camera2.cts.ImageReaderTest#testImageReaderFromCameraJpeg;android.hardware.cts.CameraGLTest#testCameraToSurfaceTextureMetadata;android.hardware.cts.CameraTest#testImmediateZoom;android.hardware.cts.CameraTest#testPreviewCallback;android.hardware.cts.CameraTest#testSmoothZoom;android.hardware.cts.CameraTest#testVideoSnapshot;android.hardware.cts.CameraGLTest#testSetPreviewTextureBothCallbacks;android.hardware.cts.CameraGLTest#testSetPreviewTexturePreviewCallback" />
<Entry uri="android.holo"/>
<Entry uri="android.jni"/>
<Entry uri="android.keystore"/>
<Entry uri="android.location"/>
- <Entry uri="android.media" exclude="android.media.cts.DecodeEditEncodeTest#testVideoEditQCIF"/>
- <Entry uri="android.mediastress"/>
+ <Entry uri="android.media" exclude="android.media.cts.StreamingMediaPlayerTest#testHLS" />
+ <Entry uri="android.mediastress" exclude="android.mediastress.cts.NativeMediaTest#test480pPlay" />
<Entry uri="android.nativemedia.sl"/>
<Entry uri="android.nativemedia.xa"/>
<Entry uri="android.nativeopengl"/>
<Entry uri="android.ndef"/>
- <Entry uri="android.net" exclude="android.net.cts.SSLCertificateSocketFactoryTest#testCreateSocket;android.net.cts.trafficStatsTest#testTrafficStatsForLocalhost;android.net.wifi.cts.ScanResultTest#testScanResultTimeStamp"/>
+ <Entry uri="android.net" exclude="android.net.wifi.cts.ScanResultTest#testScanResultTimeStamp;android.net.cts.DnsTest#testDnsWorks;android.net.cts.TrafficStatsTest#testTrafficStatsForLocalhost;android.net.cts.SSLCertificateSocketFactoryTest#testCreateSocket;android.net.cts.SSLCertificateSocketFactoryTest#test_createSocket_bind;android.net.cts.SSLCertificateSocketFactoryTest#test_createSocket_simple;android.net.cts.SSLCertificateSocketFactoryTest#test_createSocket_wrapping" />
<Entry uri="android.opengl"/>
<Entry uri="android.openglperf"/>
<Entry uri="android.os"/>
@@ -48,10 +50,12 @@
<Entry uri="android.permission2"/>
<Entry uri="android.preference"/>
<Entry uri="android.preference2"/>
- <Entry uri="android.provider" exclude="android.provider.cts.MediaStore_Images_MediaTest#testInsertImageWithBitmap;android.provider.cts.MediaStore_Images_MediaTes#testInsertImageWithImagePath;android.provider.cts.MediaStore_Images_ThumbnailsTest#testQueryExternalMiniThumbnails"/>
+ <Entry uri="android.provider" exclude="android.provider.cts.CalendarTest#testRemindersAlarm" />
<Entry uri="android.renderscript"/>
+ <Entry uri="android.rscpp"/>
+ <Entry uri="android.rsg"/>
<Entry uri="android.sax"/>
- <Entry uri="android.security"/>
+ <Entry uri="android.security" exclude="android.security.cts.BannedFilesTest#testNoSu;android.security.cts.BannedFilesTest#testNoSuInPath;android.security.cts.PackageSignatureTest#testPackageSignatures" />
<Entry uri="android.speech"/>
<Entry uri="android.telephony"/>
<Entry uri="android.tests.appsecurity"/>
@@ -60,9 +64,20 @@
<Entry uri="android.textureview"/>
<Entry uri="android.theme"/>
<Entry uri="android.uiautomator"/>
+ <Entry uri="android.usb"/>
<Entry uri="android.util"/>
<Entry uri="android.view"/>
- <Entry uri="android.webkit"/>
- <Entry uri="android.widget"/>
+ <Entry uri="android.webkit" exclude="android.webkit.cts.WebViewClientTest#testDoUpdateVisitedHistory;android.webkit.cts.WebViewClientTest#testLoadPage;android.webkit.cts.WebViewClientTest#testOnFormResubmission;android.webkit.cts.WebViewClientTest#testOnReceivedError;android.webkit.cts.WebViewClientTest#testOnReceivedHttpAuthRequest;android.webkit.cts.WebViewClientTest#testOnScaleChanged;android.webkit.cts.WebViewClientTest#testOnUnhandledKeyEvent;android.webkit.cts.WebViewTest#testSetInitialScale" />
+ <Entry uri="android.widget" exclude="android.widget.cts.GridViewTest#testSetNumColumns" />
+ <Entry uri="com.android.pts.bootup"/>
+ <Entry uri="com.android.pts.browserbench"/>
+ <Entry uri="com.android.pts.dram"/>
+ <Entry uri="com.android.pts.filesystemperf"/>
+ <Entry uri="com.android.pts.jank.opengl"/>
+ <Entry uri="com.android.pts.opengl"/>
+ <Entry uri="com.android.pts.simplecpu"/>
+ <Entry uri="com.android.pts.ui"/>
+ <Entry uri="com.android.pts.uihost"/>
+ <Entry uri="com.android.pts.videoperf"/>
<Entry uri="zzz.android.monkey"/>
</TestPlan>
diff --git a/tests/res/layout/windowstub_presentation.xml b/tests/res/layout/windowstub_presentation.xml
new file mode 100644
index 0000000..80490c4
--- /dev/null
+++ b/tests/res/layout/windowstub_presentation.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2013 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.
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+ <Button
+ android:id="@+id/presentation_button1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_weight="1"
+ android:text="@string/vertical_text_1" />
+ <Button
+ android:id="@+id/presentation_button2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_weight="1"
+ android:text="@string/vertical_text_2" />
+ <Button
+ android:id="@+id/presentation_button3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_weight="1"
+ android:text="@string/vertical_text_3" />
+</LinearLayout>
diff --git a/tests/src/android/webkit/cts/WebViewStartupStubActivity.java b/tests/src/android/webkit/cts/WebViewStartupStubActivity.java
index 6d56efd..f902a48 100644
--- a/tests/src/android/webkit/cts/WebViewStartupStubActivity.java
+++ b/tests/src/android/webkit/cts/WebViewStartupStubActivity.java
@@ -18,6 +18,7 @@
import android.app.Activity;
import android.os.Bundle;
+import android.view.ViewGroup;
import android.webkit.WebView;
public class WebViewStartupStubActivity extends Activity {
@@ -39,8 +40,9 @@
}
public void detachAndDestroyWebView() {
- setContentView(null);
if (mWebView != null) {
+ ViewGroup vg = (ViewGroup)mWebView.getParent();
+ vg.removeView(mWebView);
mWebView.destroy();
}
}
diff --git a/tests/tests/app/src/android/app/cts/SystemFeaturesTest.java b/tests/tests/app/src/android/app/cts/SystemFeaturesTest.java
index 0dfd504..012148d 100644
--- a/tests/tests/app/src/android/app/cts/SystemFeaturesTest.java
+++ b/tests/tests/app/src/android/app/cts/SystemFeaturesTest.java
@@ -229,6 +229,10 @@
Sensor.TYPE_LIGHT);
assertFeatureForSensor(featuresLeft, PackageManager.FEATURE_SENSOR_PROXIMITY,
Sensor.TYPE_PROXIMITY);
+ assertFeatureForSensor(featuresLeft, PackageManager.FEATURE_SENSOR_STEP_COUNTER,
+ Sensor.TYPE_STEP_COUNTER);
+ assertFeatureForSensor(featuresLeft, PackageManager.FEATURE_SENSOR_STEP_DETECTOR,
+ Sensor.TYPE_STEP_DETECTOR);
assertTrue("Assertions need to be added to this test for " + featuresLeft,
featuresLeft.isEmpty());
diff --git a/tests/tests/graphics/src/android/opengl/cts/OpenGlEsVersionTest.java b/tests/tests/graphics/src/android/opengl/cts/OpenGlEsVersionTest.java
index 30a1f67..85159a8 100644
--- a/tests/tests/graphics/src/android/opengl/cts/OpenGlEsVersionTest.java
+++ b/tests/tests/graphics/src/android/opengl/cts/OpenGlEsVersionTest.java
@@ -68,9 +68,12 @@
reportedVersion, getVersionFromPackageManager(mActivity));
assertGlVersionString(1);
- if (detectedVersion >= 2) {
+ if (detectedVersion == 2) {
restartActivityWithClientVersion(2);
assertGlVersionString(2);
+ } else if (detectedVersion == 3) {
+ restartActivityWithClientVersion(3);
+ assertGlVersionString(3);
}
}
@@ -190,9 +193,6 @@
String versionString = "" + majorVersion;
String message = "OpenGL version string '" + mActivity.getVersionString()
+ "' is not " + majorVersion + ".0+.";
- if (majorVersion == 2) {
- versionString = "(2|3)";
- }
assertTrue(message, Pattern.matches(".*OpenGL.*ES.*" + versionString + "\\.\\d.*",
mActivity.getVersionString()));
}
diff --git a/tests/tests/hardware/src/android/hardware/camera2/cts/CameraCaptureResultTest.java b/tests/tests/hardware/src/android/hardware/camera2/cts/CameraCaptureResultTest.java
new file mode 100644
index 0000000..6a708e3
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/camera2/cts/CameraCaptureResultTest.java
@@ -0,0 +1,336 @@
+/*
+ * Copyright 2013 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.
+ */
+
+package android.hardware.camera2.cts;
+
+import android.content.Context;
+import android.graphics.ImageFormat;
+import android.hardware.camera2.CameraCharacteristics;
+import android.hardware.camera2.CameraDevice;
+import android.hardware.camera2.CameraManager;
+import android.hardware.camera2.CameraMetadata;
+import android.hardware.camera2.CaptureFailure;
+import android.hardware.camera2.CaptureRequest;
+import android.hardware.camera2.CaptureResult;
+import android.hardware.camera2.Size;
+import static android.hardware.camera2.cts.CameraTestUtils.*;
+import android.media.ImageReader;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.test.AndroidTestCase;
+import android.util.Log;
+import android.view.Surface;
+
+import com.android.ex.camera2.blocking.BlockingStateListener;
+import static com.android.ex.camera2.blocking.BlockingStateListener.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+public class CameraCaptureResultTest extends AndroidTestCase {
+ private static final String TAG = "CameraCaptureResultTest";
+ private static final boolean VERBOSE = Log.isLoggable(TAG, Log.VERBOSE);
+
+ private CameraManager mCameraManager;
+ private HandlerThread mHandlerThread;
+ private Handler mHandler;
+ private ImageReader mImageReader;
+ private Surface mSurface;
+ private BlockingStateListener mCameraListener;
+
+ private static final int MAX_NUM_IMAGES = 5;
+ private static final int NUM_FRAMES_VERIFIED = 300;
+ private static final long WAIT_FOR_RESULT_TIMEOUT_MS = 3000;
+
+ // List that includes all public keys from CaptureResult
+ List<CameraMetadata.Key<?>> mAllKeys;
+
+ // List tracking the failed test keys.
+ List<CameraMetadata.Key<?>> mFailedKeys = new ArrayList<CameraMetadata.Key<?>>();
+
+ @Override
+ public void setContext(Context context) {
+ mAllKeys = getAllCaptureResultKeys();
+ super.setContext(context);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mCameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
+ assertNotNull("Can't connect to camera manager", mCameraManager);
+ mHandlerThread = new HandlerThread(TAG);
+ mHandlerThread.start();
+ mHandler = new Handler(mHandlerThread.getLooper());
+ mCameraListener = new BlockingStateListener();
+ mFailedKeys.clear();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ mHandlerThread.quitSafely();
+ super.tearDown();
+ }
+
+ public void testCameraCaptureResultAllKeys() throws Exception {
+ /**
+ * Hardcode a key waiver list for the keys we want to skip the sanity check.
+ * FIXME: We need get ride of this list, see bug 11116270.
+ */
+ List<CameraMetadata.Key<?>> waiverkeys = new ArrayList<CameraMetadata.Key<?>>();
+ waiverkeys.add(CaptureResult.EDGE_MODE);
+ waiverkeys.add(CaptureResult.JPEG_GPS_COORDINATES);
+ waiverkeys.add(CaptureResult.JPEG_GPS_PROCESSING_METHOD);
+ waiverkeys.add(CaptureResult.JPEG_GPS_TIMESTAMP);
+ waiverkeys.add(CaptureResult.JPEG_ORIENTATION);
+ waiverkeys.add(CaptureResult.JPEG_QUALITY);
+ waiverkeys.add(CaptureResult.JPEG_THUMBNAIL_QUALITY);
+ waiverkeys.add(CaptureResult.JPEG_THUMBNAIL_SIZE);
+ waiverkeys.add(CaptureResult.SENSOR_TEMPERATURE);
+ waiverkeys.add(CaptureResult.TONEMAP_CURVE_BLUE);
+ waiverkeys.add(CaptureResult.TONEMAP_CURVE_GREEN);
+ waiverkeys.add(CaptureResult.TONEMAP_CURVE_RED);
+ waiverkeys.add(CaptureResult.TONEMAP_MODE);
+ waiverkeys.add(CaptureResult.STATISTICS_PREDICTED_COLOR_GAINS);
+ waiverkeys.add(CaptureResult.STATISTICS_PREDICTED_COLOR_TRANSFORM);
+ waiverkeys.add(CaptureResult.STATISTICS_SCENE_FLICKER);
+
+ String[] ids = mCameraManager.getCameraIdList();
+ for (int i = 0; i < ids.length; i++) {
+ CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
+ assertNotNull("CameraCharacteristics shouldn't be null", props);
+ Integer hwLevel = props.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
+ if (hwLevel != CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL) {
+ continue;
+ }
+ // TODO: check for LIMITED keys
+
+ CameraDevice camera = null;
+ try {
+ Size[] sizes = CameraTestUtils.getSupportedSizeForFormat(
+ ImageFormat.YUV_420_888, ids[i], mCameraManager);
+ CameraTestUtils.assertArrayNotEmpty(sizes, "Available sizes shouldn't be empty");
+ createDefaultSurface(sizes[0]);
+
+ if (VERBOSE) {
+ Log.v(TAG, "Testing camera " + ids[i] + "for size " + sizes[0].toString());
+ }
+
+ camera = CameraTestUtils.openCamera(
+ mCameraManager, ids[i], mCameraListener, mHandler);
+ assertNotNull(
+ String.format("Failed to open camera device %s", ids[i]), camera);
+ mCameraListener.waitForState(STATE_UNCONFIGURED, CAMERA_OPEN_TIMEOUT_MS);
+
+ List<Surface> outputSurfaces = new ArrayList<Surface>(1);
+ outputSurfaces.add(mSurface);
+ camera.configureOutputs(outputSurfaces);
+ mCameraListener.waitForState(STATE_BUSY, CAMERA_BUSY_TIMEOUT_MS);
+ mCameraListener.waitForState(STATE_IDLE, CAMERA_IDLE_TIMEOUT_MS);
+
+ CaptureRequest.Builder requestBuilder =
+ camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
+ assertNotNull("Failed to create capture request", requestBuilder);
+ requestBuilder.addTarget(mSurface);
+
+ // Enable face detection if supported
+ byte[] faceModes = props.get(
+ CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES);
+ assertNotNull("Available face detection modes shouldn't be null", faceModes);
+ for (int m = 0; m < faceModes.length; m++) {
+ if (faceModes[m] == CameraMetadata.STATISTICS_FACE_DETECT_MODE_FULL) {
+ if (VERBOSE) {
+ Log.v(TAG, "testCameraCaptureResultAllKeys - " +
+ "setting facedetection mode to full");
+ }
+ requestBuilder.set(CaptureRequest.STATISTICS_FACE_DETECT_MODE,
+ (int)faceModes[m]);
+ }
+ }
+
+ // Enable lensShading mode, it should be supported by full mode device.
+ requestBuilder.set(CaptureRequest.STATISTICS_LENS_SHADING_MAP_MODE,
+ CameraMetadata.STATISTICS_LENS_SHADING_MAP_MODE_ON);
+
+ SimpleCaptureListener captureListener = new SimpleCaptureListener();
+ camera.setRepeatingRequest(requestBuilder.build(), captureListener, mHandler);
+
+ for (int m = 0; m < NUM_FRAMES_VERIFIED; m++) {
+ if(VERBOSE) {
+ Log.v(TAG, "Testing frame " + m);
+ }
+ validateCaptureResult(
+ captureListener.getCaptureResult(WAIT_FOR_RESULT_TIMEOUT_MS),
+ waiverkeys);
+ }
+
+ // Stop repeat, wait for captures to complete, and disconnect from surfaces
+ camera.configureOutputs(/*outputs*/ null);
+ mCameraListener.waitForState(STATE_BUSY, CAMERA_BUSY_TIMEOUT_MS);
+ mCameraListener.waitForState(STATE_UNCONFIGURED, CAMERA_IDLE_TIMEOUT_MS);
+ // Camera has disconnected, clear out the reader
+ mSurface.release();
+ mImageReader.close();
+ } finally {
+ if (camera != null) {
+ camera.close();
+ }
+ }
+
+ }
+ }
+
+ private void validateCaptureResult(CaptureResult result,
+ List<CameraMetadata.Key<?>> skippedKeys) throws Exception {
+ for (CameraMetadata.Key<?> key : mAllKeys) {
+ if (!skippedKeys.contains(key) && result.get(key) == null) {
+ mFailedKeys.add(key);
+ }
+ }
+
+ StringBuffer failedKeyNames = new StringBuffer("Below Keys have null values:\n");
+ for (CameraMetadata.Key<?> key : mFailedKeys) {
+ failedKeyNames.append(key.getName() + "\n");
+ }
+
+ assertTrue("Some keys have null values, " + failedKeyNames.toString(),
+ mFailedKeys.isEmpty());
+ }
+
+ private static class SimpleCaptureListener extends CameraDevice.CaptureListener {
+ LinkedBlockingQueue<CaptureResult> mQueue = new LinkedBlockingQueue<CaptureResult>();
+
+ @Override
+ public void onCaptureStarted(CameraDevice camera, CaptureRequest request, long timestamp)
+ {
+ }
+
+ @Override
+ public void onCaptureCompleted(CameraDevice camera, CaptureRequest request,
+ CaptureResult result) {
+ try {
+ mQueue.put(result);
+ } catch (InterruptedException e) {
+ throw new UnsupportedOperationException(
+ "Can't handle InterruptedException in onCaptureCompleted");
+ }
+ }
+
+ @Override
+ public void onCaptureFailed(CameraDevice camera, CaptureRequest request,
+ CaptureFailure failure) {
+ }
+
+ @Override
+ public void onCaptureSequenceCompleted(CameraDevice camera, int sequenceId,
+ int frameNumber) {
+ }
+
+ public CaptureResult getCaptureResult(long timeout) throws InterruptedException {
+ CaptureResult result = mQueue.poll(timeout, TimeUnit.MILLISECONDS);
+ assertNotNull("Wait for a capture result timed out in " + timeout + "ms", result);
+ return result;
+ }
+ }
+
+ private void createDefaultSurface(Size sz) {
+ mImageReader =
+ ImageReader.newInstance(sz.getWidth(),
+ sz.getHeight(),
+ ImageFormat.YUV_420_888,
+ MAX_NUM_IMAGES);
+ mImageReader.setOnImageAvailableListener(new ImageDropperListener(), mHandler);
+ mSurface = mImageReader.getSurface();
+ }
+
+ /**
+ * TODO: Use CameraCharacteristics.getAvailableCaptureResultKeys() once we can filter out
+ * @hide keys.
+ *
+ */
+
+ /*@O~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~
+ * The key entries below this point are generated from metadata
+ * definitions in /system/media/camera/docs. Do not modify by hand or
+ * modify the comment blocks at the start or end.
+ *~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~*/
+
+ private static List<CameraMetadata.Key<?>> getAllCaptureResultKeys() {
+ ArrayList<CameraMetadata.Key<?>> resultKeys = new ArrayList<CameraMetadata.Key<?>>();
+ resultKeys.add(CaptureResult.COLOR_CORRECTION_TRANSFORM);
+ resultKeys.add(CaptureResult.COLOR_CORRECTION_GAINS);
+ resultKeys.add(CaptureResult.CONTROL_AE_REGIONS);
+ resultKeys.add(CaptureResult.CONTROL_AF_MODE);
+ resultKeys.add(CaptureResult.CONTROL_AF_REGIONS);
+ resultKeys.add(CaptureResult.CONTROL_AWB_MODE);
+ resultKeys.add(CaptureResult.CONTROL_AWB_REGIONS);
+ resultKeys.add(CaptureResult.CONTROL_MODE);
+ resultKeys.add(CaptureResult.CONTROL_AE_STATE);
+ resultKeys.add(CaptureResult.CONTROL_AF_STATE);
+ resultKeys.add(CaptureResult.CONTROL_AWB_STATE);
+ resultKeys.add(CaptureResult.EDGE_MODE);
+ resultKeys.add(CaptureResult.FLASH_MODE);
+ resultKeys.add(CaptureResult.FLASH_STATE);
+ resultKeys.add(CaptureResult.JPEG_GPS_COORDINATES);
+ resultKeys.add(CaptureResult.JPEG_GPS_PROCESSING_METHOD);
+ resultKeys.add(CaptureResult.JPEG_GPS_TIMESTAMP);
+ resultKeys.add(CaptureResult.JPEG_ORIENTATION);
+ resultKeys.add(CaptureResult.JPEG_QUALITY);
+ resultKeys.add(CaptureResult.JPEG_THUMBNAIL_QUALITY);
+ resultKeys.add(CaptureResult.JPEG_THUMBNAIL_SIZE);
+ resultKeys.add(CaptureResult.LENS_APERTURE);
+ resultKeys.add(CaptureResult.LENS_FILTER_DENSITY);
+ resultKeys.add(CaptureResult.LENS_FOCAL_LENGTH);
+ resultKeys.add(CaptureResult.LENS_FOCUS_DISTANCE);
+ resultKeys.add(CaptureResult.LENS_OPTICAL_STABILIZATION_MODE);
+ resultKeys.add(CaptureResult.LENS_FOCUS_RANGE);
+ resultKeys.add(CaptureResult.LENS_STATE);
+ resultKeys.add(CaptureResult.NOISE_REDUCTION_MODE);
+ resultKeys.add(CaptureResult.REQUEST_FRAME_COUNT);
+ resultKeys.add(CaptureResult.SCALER_CROP_REGION);
+ resultKeys.add(CaptureResult.SENSOR_EXPOSURE_TIME);
+ resultKeys.add(CaptureResult.SENSOR_FRAME_DURATION);
+ resultKeys.add(CaptureResult.SENSOR_SENSITIVITY);
+ resultKeys.add(CaptureResult.SENSOR_TIMESTAMP);
+ resultKeys.add(CaptureResult.SENSOR_TEMPERATURE);
+ resultKeys.add(CaptureResult.STATISTICS_FACE_DETECT_MODE);
+ resultKeys.add(CaptureResult.STATISTICS_FACE_IDS);
+ resultKeys.add(CaptureResult.STATISTICS_FACE_LANDMARKS);
+ resultKeys.add(CaptureResult.STATISTICS_FACE_RECTANGLES);
+ resultKeys.add(CaptureResult.STATISTICS_FACE_SCORES);
+ resultKeys.add(CaptureResult.STATISTICS_LENS_SHADING_MAP);
+ resultKeys.add(CaptureResult.STATISTICS_PREDICTED_COLOR_GAINS);
+ resultKeys.add(CaptureResult.STATISTICS_PREDICTED_COLOR_TRANSFORM);
+ resultKeys.add(CaptureResult.STATISTICS_SCENE_FLICKER);
+ resultKeys.add(CaptureResult.TONEMAP_CURVE_BLUE);
+ resultKeys.add(CaptureResult.TONEMAP_CURVE_GREEN);
+ resultKeys.add(CaptureResult.TONEMAP_CURVE_RED);
+ resultKeys.add(CaptureResult.TONEMAP_MODE);
+ resultKeys.add(CaptureResult.BLACK_LEVEL_LOCK);
+
+ // Add STATISTICS_FACES key separately here because it is not
+ // defined in metadata xml file.
+ resultKeys.add(CaptureResult.STATISTICS_FACES);
+
+ return resultKeys;
+ }
+
+ /*~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~
+ * End generated code
+ *~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~O@*/
+}
diff --git a/tests/tests/hardware/src/android/hardware/camera2/cts/CameraCharacteristicsTest.java b/tests/tests/hardware/src/android/hardware/camera2/cts/CameraCharacteristicsTest.java
index 1a07a39..1b892ba 100644
--- a/tests/tests/hardware/src/android/hardware/camera2/cts/CameraCharacteristicsTest.java
+++ b/tests/tests/hardware/src/android/hardware/camera2/cts/CameraCharacteristicsTest.java
@@ -63,14 +63,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.control.aeAvailableAntibandingModes",
- props.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_ANTIBANDING_MODES));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.control.aeAvailableAntibandingModes",
- allKeys.contains(CameraCharacteristics.CONTROL_AE_AVAILABLE_ANTIBANDING_MODES));
+ {
+
+ assertNotNull("Invalid property: android.control.aeAvailableAntibandingModes",
+ props.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_ANTIBANDING_MODES));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.control.aeAvailableAntibandingModes", allKeys.contains(
+ CameraCharacteristics.CONTROL_AE_AVAILABLE_ANTIBANDING_MODES));
+
+ }
+
}
}
@@ -80,14 +86,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.control.aeAvailableTargetFpsRanges",
- props.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.control.aeAvailableTargetFpsRanges",
- allKeys.contains(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES));
+ {
+
+ assertNotNull("Invalid property: android.control.aeAvailableTargetFpsRanges",
+ props.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.control.aeAvailableTargetFpsRanges", allKeys.contains(
+ CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES));
+
+ }
+
}
}
@@ -97,14 +109,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.control.aeCompensationRange",
- props.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.control.aeCompensationRange",
- allKeys.contains(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE));
+ {
+
+ assertNotNull("Invalid property: android.control.aeCompensationRange",
+ props.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.control.aeCompensationRange", allKeys.contains(
+ CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE));
+
+ }
+
}
}
@@ -114,14 +132,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.control.aeCompensationStep",
- props.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.control.aeCompensationStep",
- allKeys.contains(CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP));
+ {
+
+ assertNotNull("Invalid property: android.control.aeCompensationStep",
+ props.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.control.aeCompensationStep", allKeys.contains(
+ CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP));
+
+ }
+
}
}
@@ -131,14 +155,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.control.afAvailableModes",
- props.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.control.afAvailableModes",
- allKeys.contains(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES));
+ {
+
+ assertNotNull("Invalid property: android.control.afAvailableModes",
+ props.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.control.afAvailableModes", allKeys.contains(
+ CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES));
+
+ }
+
}
}
@@ -148,14 +178,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.control.availableEffects",
- props.get(CameraCharacteristics.CONTROL_AVAILABLE_EFFECTS));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.control.availableEffects",
- allKeys.contains(CameraCharacteristics.CONTROL_AVAILABLE_EFFECTS));
+ {
+
+ assertNotNull("Invalid property: android.control.availableEffects",
+ props.get(CameraCharacteristics.CONTROL_AVAILABLE_EFFECTS));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.control.availableEffects", allKeys.contains(
+ CameraCharacteristics.CONTROL_AVAILABLE_EFFECTS));
+
+ }
+
}
}
@@ -165,14 +201,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.control.availableSceneModes",
- props.get(CameraCharacteristics.CONTROL_AVAILABLE_SCENE_MODES));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.control.availableSceneModes",
- allKeys.contains(CameraCharacteristics.CONTROL_AVAILABLE_SCENE_MODES));
+ {
+
+ assertNotNull("Invalid property: android.control.availableSceneModes",
+ props.get(CameraCharacteristics.CONTROL_AVAILABLE_SCENE_MODES));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.control.availableSceneModes", allKeys.contains(
+ CameraCharacteristics.CONTROL_AVAILABLE_SCENE_MODES));
+
+ }
+
}
}
@@ -182,14 +224,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.control.availableVideoStabilizationModes",
- props.get(CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.control.availableVideoStabilizationModes",
- allKeys.contains(CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES));
+ {
+
+ assertNotNull("Invalid property: android.control.availableVideoStabilizationModes",
+ props.get(CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.control.availableVideoStabilizationModes", allKeys.contains(
+ CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES));
+
+ }
+
}
}
@@ -199,14 +247,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.control.awbAvailableModes",
- props.get(CameraCharacteristics.CONTROL_AWB_AVAILABLE_MODES));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.control.awbAvailableModes",
- allKeys.contains(CameraCharacteristics.CONTROL_AWB_AVAILABLE_MODES));
+ {
+
+ assertNotNull("Invalid property: android.control.awbAvailableModes",
+ props.get(CameraCharacteristics.CONTROL_AWB_AVAILABLE_MODES));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.control.awbAvailableModes", allKeys.contains(
+ CameraCharacteristics.CONTROL_AWB_AVAILABLE_MODES));
+
+ }
+
}
}
@@ -216,14 +270,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.control.maxRegions",
- props.get(CameraCharacteristics.CONTROL_MAX_REGIONS));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.control.maxRegions",
- allKeys.contains(CameraCharacteristics.CONTROL_MAX_REGIONS));
+ {
+
+ assertNotNull("Invalid property: android.control.maxRegions",
+ props.get(CameraCharacteristics.CONTROL_MAX_REGIONS));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.control.maxRegions", allKeys.contains(
+ CameraCharacteristics.CONTROL_MAX_REGIONS));
+
+ }
+
}
}
@@ -233,14 +293,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.flash.info.available",
- props.get(CameraCharacteristics.FLASH_INFO_AVAILABLE));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.flash.info.available",
- allKeys.contains(CameraCharacteristics.FLASH_INFO_AVAILABLE));
+ {
+
+ assertNotNull("Invalid property: android.flash.info.available",
+ props.get(CameraCharacteristics.FLASH_INFO_AVAILABLE));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.flash.info.available", allKeys.contains(
+ CameraCharacteristics.FLASH_INFO_AVAILABLE));
+
+ }
+
}
}
@@ -250,14 +316,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.jpeg.availableThumbnailSizes",
- props.get(CameraCharacteristics.JPEG_AVAILABLE_THUMBNAIL_SIZES));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.jpeg.availableThumbnailSizes",
- allKeys.contains(CameraCharacteristics.JPEG_AVAILABLE_THUMBNAIL_SIZES));
+ {
+
+ assertNotNull("Invalid property: android.jpeg.availableThumbnailSizes",
+ props.get(CameraCharacteristics.JPEG_AVAILABLE_THUMBNAIL_SIZES));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.jpeg.availableThumbnailSizes", allKeys.contains(
+ CameraCharacteristics.JPEG_AVAILABLE_THUMBNAIL_SIZES));
+
+ }
+
}
}
@@ -267,14 +339,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.lens.facing",
- props.get(CameraCharacteristics.LENS_FACING));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.lens.facing",
- allKeys.contains(CameraCharacteristics.LENS_FACING));
+ {
+
+ assertNotNull("Invalid property: android.lens.facing",
+ props.get(CameraCharacteristics.LENS_FACING));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.lens.facing", allKeys.contains(
+ CameraCharacteristics.LENS_FACING));
+
+ }
+
}
}
@@ -284,14 +362,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.lens.info.availableApertures",
- props.get(CameraCharacteristics.LENS_INFO_AVAILABLE_APERTURES));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.lens.info.availableApertures",
- allKeys.contains(CameraCharacteristics.LENS_INFO_AVAILABLE_APERTURES));
+ {
+
+ assertNotNull("Invalid property: android.lens.info.availableApertures",
+ props.get(CameraCharacteristics.LENS_INFO_AVAILABLE_APERTURES));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.lens.info.availableApertures", allKeys.contains(
+ CameraCharacteristics.LENS_INFO_AVAILABLE_APERTURES));
+
+ }
+
}
}
@@ -301,14 +385,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.lens.info.availableFilterDensities",
- props.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FILTER_DENSITIES));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.lens.info.availableFilterDensities",
- allKeys.contains(CameraCharacteristics.LENS_INFO_AVAILABLE_FILTER_DENSITIES));
+ {
+
+ assertNotNull("Invalid property: android.lens.info.availableFilterDensities",
+ props.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FILTER_DENSITIES));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.lens.info.availableFilterDensities", allKeys.contains(
+ CameraCharacteristics.LENS_INFO_AVAILABLE_FILTER_DENSITIES));
+
+ }
+
}
}
@@ -318,14 +408,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.lens.info.availableFocalLengths",
- props.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.lens.info.availableFocalLengths",
- allKeys.contains(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS));
+ {
+
+ assertNotNull("Invalid property: android.lens.info.availableFocalLengths",
+ props.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.lens.info.availableFocalLengths", allKeys.contains(
+ CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS));
+
+ }
+
}
}
@@ -335,14 +431,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.lens.info.availableOpticalStabilization",
- props.get(CameraCharacteristics.LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.lens.info.availableOpticalStabilization",
- allKeys.contains(CameraCharacteristics.LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION));
+ {
+
+ assertNotNull("Invalid property: android.lens.info.availableOpticalStabilization",
+ props.get(CameraCharacteristics.LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.lens.info.availableOpticalStabilization", allKeys.contains(
+ CameraCharacteristics.LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION));
+
+ }
+
}
}
@@ -352,14 +454,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.lens.info.hyperfocalDistance",
- props.get(CameraCharacteristics.LENS_INFO_HYPERFOCAL_DISTANCE));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.lens.info.hyperfocalDistance",
- allKeys.contains(CameraCharacteristics.LENS_INFO_HYPERFOCAL_DISTANCE));
+ {
+
+ assertNotNull("Invalid property: android.lens.info.hyperfocalDistance",
+ props.get(CameraCharacteristics.LENS_INFO_HYPERFOCAL_DISTANCE));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.lens.info.hyperfocalDistance", allKeys.contains(
+ CameraCharacteristics.LENS_INFO_HYPERFOCAL_DISTANCE));
+
+ }
+
}
}
@@ -369,14 +477,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.lens.info.minimumFocusDistance",
- props.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.lens.info.minimumFocusDistance",
- allKeys.contains(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE));
+ {
+
+ assertNotNull("Invalid property: android.lens.info.minimumFocusDistance",
+ props.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.lens.info.minimumFocusDistance", allKeys.contains(
+ CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE));
+
+ }
+
}
}
@@ -386,14 +500,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.lens.info.shadingMapSize",
- props.get(CameraCharacteristics.LENS_INFO_SHADING_MAP_SIZE));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.lens.info.shadingMapSize",
- allKeys.contains(CameraCharacteristics.LENS_INFO_SHADING_MAP_SIZE));
+ {
+
+ assertNotNull("Invalid property: android.lens.info.shadingMapSize",
+ props.get(CameraCharacteristics.LENS_INFO_SHADING_MAP_SIZE));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.lens.info.shadingMapSize", allKeys.contains(
+ CameraCharacteristics.LENS_INFO_SHADING_MAP_SIZE));
+
+ }
+
}
}
@@ -403,14 +523,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.request.maxNumOutputStreams",
- props.get(CameraCharacteristics.REQUEST_MAX_NUM_OUTPUT_STREAMS));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.request.maxNumOutputStreams",
- allKeys.contains(CameraCharacteristics.REQUEST_MAX_NUM_OUTPUT_STREAMS));
+ {
+
+ assertNotNull("Invalid property: android.request.maxNumOutputStreams",
+ props.get(CameraCharacteristics.REQUEST_MAX_NUM_OUTPUT_STREAMS));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.request.maxNumOutputStreams", allKeys.contains(
+ CameraCharacteristics.REQUEST_MAX_NUM_OUTPUT_STREAMS));
+
+ }
+
}
}
@@ -420,14 +546,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.scaler.availableFormats",
- props.get(CameraCharacteristics.SCALER_AVAILABLE_FORMATS));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.scaler.availableFormats",
- allKeys.contains(CameraCharacteristics.SCALER_AVAILABLE_FORMATS));
+ {
+
+ assertNotNull("Invalid property: android.scaler.availableFormats",
+ props.get(CameraCharacteristics.SCALER_AVAILABLE_FORMATS));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.scaler.availableFormats", allKeys.contains(
+ CameraCharacteristics.SCALER_AVAILABLE_FORMATS));
+
+ }
+
}
}
@@ -437,14 +569,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.scaler.availableJpegMinDurations",
- props.get(CameraCharacteristics.SCALER_AVAILABLE_JPEG_MIN_DURATIONS));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.scaler.availableJpegMinDurations",
- allKeys.contains(CameraCharacteristics.SCALER_AVAILABLE_JPEG_MIN_DURATIONS));
+ {
+
+ assertNotNull("Invalid property: android.scaler.availableJpegMinDurations",
+ props.get(CameraCharacteristics.SCALER_AVAILABLE_JPEG_MIN_DURATIONS));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.scaler.availableJpegMinDurations", allKeys.contains(
+ CameraCharacteristics.SCALER_AVAILABLE_JPEG_MIN_DURATIONS));
+
+ }
+
}
}
@@ -454,14 +592,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.scaler.availableJpegSizes",
- props.get(CameraCharacteristics.SCALER_AVAILABLE_JPEG_SIZES));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.scaler.availableJpegSizes",
- allKeys.contains(CameraCharacteristics.SCALER_AVAILABLE_JPEG_SIZES));
+ {
+
+ assertNotNull("Invalid property: android.scaler.availableJpegSizes",
+ props.get(CameraCharacteristics.SCALER_AVAILABLE_JPEG_SIZES));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.scaler.availableJpegSizes", allKeys.contains(
+ CameraCharacteristics.SCALER_AVAILABLE_JPEG_SIZES));
+
+ }
+
}
}
@@ -471,14 +615,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.scaler.availableMaxDigitalZoom",
- props.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.scaler.availableMaxDigitalZoom",
- allKeys.contains(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM));
+ {
+
+ assertNotNull("Invalid property: android.scaler.availableMaxDigitalZoom",
+ props.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.scaler.availableMaxDigitalZoom", allKeys.contains(
+ CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM));
+
+ }
+
}
}
@@ -488,14 +638,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.scaler.availableProcessedMinDurations",
- props.get(CameraCharacteristics.SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.scaler.availableProcessedMinDurations",
- allKeys.contains(CameraCharacteristics.SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS));
+ {
+
+ assertNotNull("Invalid property: android.scaler.availableProcessedMinDurations",
+ props.get(CameraCharacteristics.SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.scaler.availableProcessedMinDurations", allKeys.contains(
+ CameraCharacteristics.SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS));
+
+ }
+
}
}
@@ -505,14 +661,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.scaler.availableProcessedSizes",
- props.get(CameraCharacteristics.SCALER_AVAILABLE_PROCESSED_SIZES));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.scaler.availableProcessedSizes",
- allKeys.contains(CameraCharacteristics.SCALER_AVAILABLE_PROCESSED_SIZES));
+ {
+
+ assertNotNull("Invalid property: android.scaler.availableProcessedSizes",
+ props.get(CameraCharacteristics.SCALER_AVAILABLE_PROCESSED_SIZES));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.scaler.availableProcessedSizes", allKeys.contains(
+ CameraCharacteristics.SCALER_AVAILABLE_PROCESSED_SIZES));
+
+ }
+
}
}
@@ -522,14 +684,24 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.sensor.baseGainFactor",
- props.get(CameraCharacteristics.SENSOR_BASE_GAIN_FACTOR));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.sensor.baseGainFactor",
- allKeys.contains(CameraCharacteristics.SENSOR_BASE_GAIN_FACTOR));
+ Integer hwLevel = props.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
+ assertNotNull("No hardware level reported! android.info.supportedHardwareLevel",
+ hwLevel);
+ if (hwLevel == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL)
+ {
+
+ assertNotNull("Invalid property: android.sensor.baseGainFactor",
+ props.get(CameraCharacteristics.SENSOR_BASE_GAIN_FACTOR));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.sensor.baseGainFactor", allKeys.contains(
+ CameraCharacteristics.SENSOR_BASE_GAIN_FACTOR));
+
+ }
+
}
}
@@ -539,14 +711,24 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.sensor.maxAnalogSensitivity",
- props.get(CameraCharacteristics.SENSOR_MAX_ANALOG_SENSITIVITY));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.sensor.maxAnalogSensitivity",
- allKeys.contains(CameraCharacteristics.SENSOR_MAX_ANALOG_SENSITIVITY));
+ Integer hwLevel = props.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
+ assertNotNull("No hardware level reported! android.info.supportedHardwareLevel",
+ hwLevel);
+ if (hwLevel == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL)
+ {
+
+ assertNotNull("Invalid property: android.sensor.maxAnalogSensitivity",
+ props.get(CameraCharacteristics.SENSOR_MAX_ANALOG_SENSITIVITY));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.sensor.maxAnalogSensitivity", allKeys.contains(
+ CameraCharacteristics.SENSOR_MAX_ANALOG_SENSITIVITY));
+
+ }
+
}
}
@@ -556,14 +738,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.sensor.orientation",
- props.get(CameraCharacteristics.SENSOR_ORIENTATION));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.sensor.orientation",
- allKeys.contains(CameraCharacteristics.SENSOR_ORIENTATION));
+ {
+
+ assertNotNull("Invalid property: android.sensor.orientation",
+ props.get(CameraCharacteristics.SENSOR_ORIENTATION));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.sensor.orientation", allKeys.contains(
+ CameraCharacteristics.SENSOR_ORIENTATION));
+
+ }
+
}
}
@@ -573,14 +761,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.sensor.info.activeArraySize",
- props.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.sensor.info.activeArraySize",
- allKeys.contains(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE));
+ {
+
+ assertNotNull("Invalid property: android.sensor.info.activeArraySize",
+ props.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.sensor.info.activeArraySize", allKeys.contains(
+ CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE));
+
+ }
+
}
}
@@ -590,14 +784,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.sensor.info.sensitivityRange",
- props.get(CameraCharacteristics.SENSOR_INFO_SENSITIVITY_RANGE));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.sensor.info.sensitivityRange",
- allKeys.contains(CameraCharacteristics.SENSOR_INFO_SENSITIVITY_RANGE));
+ {
+
+ assertNotNull("Invalid property: android.sensor.info.sensitivityRange",
+ props.get(CameraCharacteristics.SENSOR_INFO_SENSITIVITY_RANGE));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.sensor.info.sensitivityRange", allKeys.contains(
+ CameraCharacteristics.SENSOR_INFO_SENSITIVITY_RANGE));
+
+ }
+
}
}
@@ -607,14 +807,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.sensor.info.exposureTimeRange",
- props.get(CameraCharacteristics.SENSOR_INFO_EXPOSURE_TIME_RANGE));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.sensor.info.exposureTimeRange",
- allKeys.contains(CameraCharacteristics.SENSOR_INFO_EXPOSURE_TIME_RANGE));
+ {
+
+ assertNotNull("Invalid property: android.sensor.info.exposureTimeRange",
+ props.get(CameraCharacteristics.SENSOR_INFO_EXPOSURE_TIME_RANGE));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.sensor.info.exposureTimeRange", allKeys.contains(
+ CameraCharacteristics.SENSOR_INFO_EXPOSURE_TIME_RANGE));
+
+ }
+
}
}
@@ -624,14 +830,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.sensor.info.maxFrameDuration",
- props.get(CameraCharacteristics.SENSOR_INFO_MAX_FRAME_DURATION));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.sensor.info.maxFrameDuration",
- allKeys.contains(CameraCharacteristics.SENSOR_INFO_MAX_FRAME_DURATION));
+ {
+
+ assertNotNull("Invalid property: android.sensor.info.maxFrameDuration",
+ props.get(CameraCharacteristics.SENSOR_INFO_MAX_FRAME_DURATION));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.sensor.info.maxFrameDuration", allKeys.contains(
+ CameraCharacteristics.SENSOR_INFO_MAX_FRAME_DURATION));
+
+ }
+
}
}
@@ -641,14 +853,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.sensor.info.physicalSize",
- props.get(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.sensor.info.physicalSize",
- allKeys.contains(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE));
+ {
+
+ assertNotNull("Invalid property: android.sensor.info.physicalSize",
+ props.get(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.sensor.info.physicalSize", allKeys.contains(
+ CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE));
+
+ }
+
}
}
@@ -658,14 +876,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.statistics.info.availableFaceDetectModes",
- props.get(CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.statistics.info.availableFaceDetectModes",
- allKeys.contains(CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES));
+ {
+
+ assertNotNull("Invalid property: android.statistics.info.availableFaceDetectModes",
+ props.get(CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.statistics.info.availableFaceDetectModes", allKeys.contains(
+ CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES));
+
+ }
+
}
}
@@ -675,14 +899,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.statistics.info.maxFaceCount",
- props.get(CameraCharacteristics.STATISTICS_INFO_MAX_FACE_COUNT));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.statistics.info.maxFaceCount",
- allKeys.contains(CameraCharacteristics.STATISTICS_INFO_MAX_FACE_COUNT));
+ {
+
+ assertNotNull("Invalid property: android.statistics.info.maxFaceCount",
+ props.get(CameraCharacteristics.STATISTICS_INFO_MAX_FACE_COUNT));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.statistics.info.maxFaceCount", allKeys.contains(
+ CameraCharacteristics.STATISTICS_INFO_MAX_FACE_COUNT));
+
+ }
+
}
}
@@ -692,14 +922,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.tonemap.maxCurvePoints",
- props.get(CameraCharacteristics.TONEMAP_MAX_CURVE_POINTS));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.tonemap.maxCurvePoints",
- allKeys.contains(CameraCharacteristics.TONEMAP_MAX_CURVE_POINTS));
+ {
+
+ assertNotNull("Invalid property: android.tonemap.maxCurvePoints",
+ props.get(CameraCharacteristics.TONEMAP_MAX_CURVE_POINTS));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.tonemap.maxCurvePoints", allKeys.contains(
+ CameraCharacteristics.TONEMAP_MAX_CURVE_POINTS));
+
+ }
+
}
}
@@ -709,14 +945,20 @@
CameraCharacteristics props = mCameraManager.getCameraCharacteristics(ids[i]);
assertNotNull(String.format("Can't get camera characteristics from: ID %s", ids[i]),
props);
- assertNotNull("Invalid property: android.info.supportedHardwareLevel",
- props.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL));
- List<Key<?>> allKeys = props.getKeys();
- assertNotNull(String.format("Can't get camera characteristics keys from: ID %s", ids[i],
- props));
- assertTrue("Key not in keys list: android.info.supportedHardwareLevel",
- allKeys.contains(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL));
+ {
+
+ assertNotNull("Invalid property: android.info.supportedHardwareLevel",
+ props.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL));
+
+ List<Key<?>> allKeys = props.getKeys();
+ assertNotNull(String.format("Can't get camera characteristics keys from: ID %s",
+ ids[i], props));
+ assertTrue("Key not in keys list: android.info.supportedHardwareLevel", allKeys.contains(
+ CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL));
+
+ }
+
}
}
}
diff --git a/tests/tests/hardware/src/android/hardware/camera2/cts/CameraTestUtils.java b/tests/tests/hardware/src/android/hardware/camera2/cts/CameraTestUtils.java
index a2d965c..7f10cb8 100644
--- a/tests/tests/hardware/src/android/hardware/camera2/cts/CameraTestUtils.java
+++ b/tests/tests/hardware/src/android/hardware/camera2/cts/CameraTestUtils.java
@@ -24,6 +24,7 @@
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.Size;
import android.media.Image;
+import android.media.ImageReader;
import android.media.Image.Plane;
import android.os.Handler;
import android.util.Log;
@@ -52,6 +53,20 @@
public static final int CAMERA_ACTIVE_TIMEOUT_MS = 500;
public static final int CAMERA_BUSY_TIMEOUT_MS = 500;
+ public static class ImageDropperListener implements ImageReader.OnImageAvailableListener {
+ @Override
+ public void onImageAvailable(ImageReader reader) {
+ Image image = null;
+ try {
+ image = reader.acquireNextImage();
+ } finally {
+ if (image != null) {
+ image.close();
+ }
+ }
+ }
+ }
+
/**
* Block until the camera is opened.
*
@@ -214,21 +229,21 @@
int format = image.getFormat();
Plane[] planes = image.getPlanes();
switch (format) {
- case ImageFormat.YUV_420_888:
- case ImageFormat.NV21:
- case ImageFormat.YV12:
- assertEquals("YUV420 format Images should have 3 planes", 3, planes.length);
- break;
- case ImageFormat.Y8:
- case ImageFormat.Y16:
- assertEquals("Y8/Y16 Image should have 1 plane", 1, planes.length);
- break;
- case ImageFormat.JPEG:
- assertEquals("Jpeg Image should have one plane", 1, planes.length);
- break;
- default:
- fail("Unsupported Image Format: " + format);
- }
+ case ImageFormat.YUV_420_888:
+ case ImageFormat.NV21:
+ case ImageFormat.YV12:
+ assertEquals("YUV420 format Images should have 3 planes", 3, planes.length);
+ break;
+ case ImageFormat.Y8:
+ case ImageFormat.Y16:
+ assertEquals("Y8/Y16 Image should have 1 plane", 1, planes.length);
+ break;
+ case ImageFormat.JPEG:
+ assertEquals("Jpeg Image should have one plane", 1, planes.length);
+ break;
+ default:
+ fail("Unsupported Image Format: " + format);
+ }
}
public static void dumpFile(String fileName, byte[] data) {
diff --git a/tests/tests/hardware/src/android/hardware/consumerir/cts/ConsumerIrTest.java b/tests/tests/hardware/src/android/hardware/consumerir/cts/ConsumerIrTest.java
new file mode 100644
index 0000000..cff1fc6
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/consumerir/cts/ConsumerIrTest.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+package android.hardware.consumerir.cts;
+
+import android.content.Context;
+import android.hardware.ConsumerIrManager;
+import android.util.Log;
+import android.content.pm.PackageManager;
+import android.test.AndroidTestCase;
+import java.io.IOException;
+
+/**
+ * Very basic test, just of the static methods of {@link
+ * android.hardware.ConsumerIrManager}.
+ */
+public class ConsumerIrTest extends AndroidTestCase {
+ private boolean mHasConsumerIr;
+ private ConsumerIrManager mCIR;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+
+ mHasConsumerIr = getContext().getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_CONSUMER_IR);
+ if (mHasConsumerIr) {
+ mCIR = (ConsumerIrManager)getContext().getSystemService(
+ Context.CONSUMER_IR_SERVICE);
+ }
+ }
+
+ public void test_hasIrEmitter() {
+ if (!mHasConsumerIr) {
+ // Skip the test if consumer IR is not present.
+ return;
+ }
+ assertTrue(mCIR.hasIrEmitter());
+ }
+
+ public void test_getCarrierFrequencies() {
+ if (!mHasConsumerIr) {
+ // Skip the test if consumer IR is not present.
+ return;
+ }
+
+ ConsumerIrManager.CarrierFrequencyRange[] freqs = mCIR.getCarrierFrequencies();
+
+ assertTrue(freqs.length > 0);
+ for (ConsumerIrManager.CarrierFrequencyRange range : freqs) {
+ // Each range must be valid
+ assertTrue(range.getMinFrequency() > 0);
+ assertTrue(range.getMaxFrequency() > 0);
+ assertTrue(range.getMinFrequency() <= range.getMaxFrequency());
+ }
+ }
+
+
+ public void test_transmit() {
+ if (!mHasConsumerIr) {
+ // Skip the test if consumer IR is not present.
+ return;
+ }
+
+ ConsumerIrManager.CarrierFrequencyRange[] freqs = mCIR.getCarrierFrequencies();
+
+ int[] pattern = {1901, 4453, 625, 1614, 625, 1588, 625, 1614, 625, 442, 625, 442, 625,
+ 468, 625, 442, 625, 494, 572, 1614, 625, 1588, 625, 1614, 625, 494, 572, 442, 651,
+ 442, 625, 442, 625, 442, 625, 1614, 625, 1588, 651, 1588, 625, 442, 625, 494, 598,
+ 442, 625, 442, 625, 520, 572, 442, 625, 442, 625, 442, 651, 1588, 625, 1614, 625,
+ 1588, 625, 1614, 625, 1588, 625, 48958};
+
+ // just use the first frequency in the range
+ mCIR.transmit(freqs[0].getMinFrequency(), pattern);
+ }
+}
diff --git a/tests/tests/hardware/src/android/hardware/cts/CameraGLTest.java b/tests/tests/hardware/src/android/hardware/cts/CameraGLTest.java
index 9d7dacb..788cb60 100644
--- a/tests/tests/hardware/src/android/hardware/cts/CameraGLTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/CameraGLTest.java
@@ -70,8 +70,8 @@
private boolean mSurfaceTextureCallbackResult = false;
- private static final int WAIT_FOR_COMMAND_TO_COMPLETE = 1500; // Milliseconds.
- private static final int WAIT_FOR_FOCUS_TO_COMPLETE = 3000;
+ private static final int WAIT_FOR_COMMAND_TO_COMPLETE = 5000; // Milliseconds.
+ private static final int WAIT_FOR_FOCUS_TO_COMPLETE = 5000;
private static final int WAIT_FOR_SNAPSHOT_TO_COMPLETE = 5000;
private SurfaceTextureCallback mSurfaceTextureCallback = new SurfaceTextureCallback();
diff --git a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
index 979e27b..f877d8b 100644
--- a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
@@ -809,21 +809,6 @@
assertTrue(mJpegPictureCallbackResult);
exif = new ExifInterface(JPEG_PATH);
assertFalse(exif.hasThumbnail());
- // Primary image should still be valid for no thumbnail capture.
- BitmapFactory.decodeFile(JPEG_PATH, bmpOptions);
- if (!recording) {
- assertTrue("Jpeg primary image size should match requested size",
- bmpOptions.outWidth == pictureSize.width &&
- bmpOptions.outHeight == pictureSize.height);
- } else {
- assertTrue(bmpOptions.outWidth >= recordingWidth ||
- bmpOptions.outWidth == size.width);
- assertTrue(bmpOptions.outHeight >= recordingHeight ||
- bmpOptions.outHeight == size.height);
- }
-
- assertNotNull("Jpeg primary image data should be decodable",
- BitmapFactory.decodeFile(JPEG_PATH));
}
@UiThreadTest
diff --git a/tests/tests/hardware/src/android/hardware/cts/SensorAccelerometerTest.java b/tests/tests/hardware/src/android/hardware/cts/SensorAccelerometerTest.java
index 51fd5f6..2e33a5d 100644
--- a/tests/tests/hardware/src/android/hardware/cts/SensorAccelerometerTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/SensorAccelerometerTest.java
@@ -20,6 +20,8 @@
import android.hardware.SensorManager;
public class SensorAccelerometerTest extends SensorCommonTests {
+ private final int AXIS_COUNT = 3;
+
@Override
protected int getMaxFrequencySupportedInuS() {
return 10000; // 100Hz
@@ -37,21 +39,13 @@
*/
@Override
public void testEventValidity() {
- final float THRESHOLD = 0.25f; // m / s^2
- validateSensorEvent(
- 0 /*x-axis*/,
- 0 /*y-axis*/,
- SensorManager.STANDARD_GRAVITY /*z-axis*/,
- THRESHOLD);
+ final float THRESHOLD = 0.5f; // m / s^2
+ validateNormForSensorEvent(SensorManager.STANDARD_GRAVITY, THRESHOLD, AXIS_COUNT);
}
@Override
- public void testVarianceWhileStatic() {
- final float THRESHOLD = 0.25f; // m / s^2
- validateVarianceWhileStatic(
- 0 /*x-axis*/,
- 0 /*y-axis*/,
- SensorManager.STANDARD_GRAVITY /*z-axis*/,
- THRESHOLD);
+ public void testStandardDeviationWhileStatic() {
+ final float STANDARD_DEVIATION = 1f; // m / s^2
+ validateStandardDeviationWhileStatic(STANDARD_DEVIATION, AXIS_COUNT);
}
}
diff --git a/tests/tests/hardware/src/android/hardware/cts/SensorCommonTests.java b/tests/tests/hardware/src/android/hardware/cts/SensorCommonTests.java
index 5cc65bb..b535c71 100644
--- a/tests/tests/hardware/src/android/hardware/cts/SensorCommonTests.java
+++ b/tests/tests/hardware/src/android/hardware/cts/SensorCommonTests.java
@@ -18,45 +18,34 @@
import android.content.Context;
-import android.hardware.FlushCompleteListener;
import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.hardware.TriggerEvent;
import android.hardware.TriggerEventListener;
+import android.hardware.cts.helpers.SensorCtsHelper;
+import android.hardware.cts.helpers.TestSensorManager;
+
import android.os.PowerManager;
+import android.os.SystemClock;
import android.test.AndroidTestCase;
-import java.util.List;
import android.util.Log;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-import java.text.SimpleDateFormat;
-
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
+import java.util.List;
import java.util.Random;
-import java.util.concurrent.ConcurrentLinkedDeque;
-import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import junit.framework.Assert;
+
/**
* Class is not marked public to avoid TestRunner to pick the tests in it
*/
abstract class SensorCommonTests extends AndroidTestCase {
protected final String LOG_TAG = "TestRunner";
-
- protected SensorManager mSensorManager;
- protected Sensor mSensorUnderTest;
- protected TestSensorListener mEventListener;
-
- private FlushCompleteListener mFlushListener;
+ protected TestSensorManager mTestSensorManager;
private PowerManager.WakeLock mWakeLock;
protected SensorCommonTests() {}
@@ -71,15 +60,11 @@
* Abstract test methods that sensors need to verify
*/
public abstract void testEventValidity();
- public abstract void testVarianceWhileStatic();
+ public abstract void testStandardDeviationWhileStatic();
/**
* Methods to control the behavior of the tests by concrete sensor tests
*/
- protected int getWaitTimeoutInSeconds() {
- return 30;
- }
-
protected int getHighNumberOfIterationsToExecute() {
return 100;
}
@@ -101,31 +86,27 @@
Context.POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getLogTag());
mWakeLock.acquire();
-
- mEventListener = new TestSensorListener();
- mFlushListener = new TestFlushListener();
}
@Override
protected void tearDown() throws Exception {
- mSensorManager.unregisterListener(mEventListener, mSensorUnderTest);
-
- mFlushListener = null;
- mEventListener = null;
- mSensorUnderTest = null;
+ if(mTestSensorManager != null) {
+ mTestSensorManager.close();
+ mTestSensorManager = null;
+ }
releaseWakeLock();
}
@Override
public void runBare() throws Throwable {
- mSensorManager = (SensorManager) this.getContext().getSystemService(Context.SENSOR_SERVICE);
- assertNotNull("getSystemService#Sensor_Service", mSensorManager);
+ SensorManager sensorManager = (SensorManager) this.getContext().getSystemService(Context.SENSOR_SERVICE);
+ assertNotNull("getSystemService#Sensor_Service", sensorManager);
- List<Sensor> availableSensors = mSensorManager.getSensorList(this.getSensorType());
+ List<Sensor> availableSensors = sensorManager.getSensorList(this.getSensorType());
// it is OK if there are no sensors available
for(Sensor sensor : availableSensors) {
- mSensorUnderTest = sensor;
+ mTestSensorManager = new TestSensorManager(this, sensorManager, sensor);
super.runBare();
}
}
@@ -134,49 +115,34 @@
* Test cases continuous mode.
*/
public void testCanRegisterListener() {
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
- SensorManager.SENSOR_DELAY_NORMAL);
- assertTrue("registerListener", result);
+ mTestSensorManager.registerListener(SensorManager.SENSOR_DELAY_NORMAL);
}
public void testNotTriggerSensor() {
TestTriggerListener listener = new TestTriggerListener();
- assertFalse(
- "requestTriggerSensor",
- mSensorManager.requestTriggerSensor(listener, mSensorUnderTest));
+ boolean result = mTestSensorManager.getUnderlyingSensorManager().requestTriggerSensor(
+ listener,
+ mTestSensorManager.getSensorUnderTest());
+ assertFalse("requestTriggerSensor", result);
}
public void testCanReceiveEvents() {
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
- SensorManager.SENSOR_DELAY_NORMAL);
- assertTrue("registerListener", result);
- mEventListener.waitForEvents(5);
+ mTestSensorManager.collectEvents(SensorManager.SENSOR_DELAY_NORMAL, 5);
}
public void testMaxFrequency() {
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
- this.getMaxFrequencySupportedInuS());
- assertTrue("registerListener", result);
+ // TODO: verify that events do arrive at the proper rate
+ mTestSensorManager.registerListener(this.getMaxFrequencySupportedInuS());
}
public void testEventsArriveInOrder() {
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
- SensorManager.SENSOR_DELAY_FASTEST);
- assertTrue("registerListener", result);
- mEventListener.waitForEvents(100);
-
- SensorEventForTest[] events = mEventListener.getAllEvents();
+ // TODO: test for other sensor frequencies, rely on helper test classes for sensors
+ TestSensorManager.SensorEventForTest[] events = mTestSensorManager.collectEvents(
+ SensorManager.SENSOR_DELAY_FASTEST,
+ 100);
for(int i = 1; i < events.length; ++i) {
- long previousTimestamp = events[i-1].getTimestamp();
- long timestamp = events[i].getTimestamp();
+ long previousTimestamp = events[i-1].timestamp;
+ long timestamp = events[i].timestamp;
assertTrue(
String.format("[timestamp:%d] %d >= %d", i, previousTimestamp, timestamp),
previousTimestamp < timestamp);
@@ -184,17 +150,7 @@
}
public void testStartStopRepeatedly() {
- for(int i = 0; i < this.getLowNumberOfIterationsToExecute(); ++i) {
- String iterationInfo = String.format("registerListener:%d", i);
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
- SensorManager.SENSOR_DELAY_FASTEST);
- assertTrue(iterationInfo, result);
- mEventListener.waitForEvents(1, iterationInfo);
-
- mSensorManager.unregisterListener(mEventListener, mSensorUnderTest);
- }
+ validateRegisterUnregisterRepeteadly(mTestSensorManager);
}
public void testUpdateRate() {
@@ -221,33 +177,87 @@
rate = this.getMaxFrequencySupportedInuS() * generator.nextInt(10);
}
- String iterationInfo = String.format("registerListener:%d, rate:%d", i, rate);
- assertTrue(
- iterationInfo,
- mSensorManager.registerListener(mEventListener, mSensorUnderTest, rate));
-
- mEventListener.waitForEvents(generator.nextInt(5) + 1, iterationInfo);
- mEventListener.clearEvents();
-
- mSensorManager.unregisterListener(mEventListener, mSensorUnderTest);
+ // TODO: check that the rate has indeed changed
+ mTestSensorManager.collectEvents(
+ rate,
+ generator.nextInt(5) + 1,
+ String.format("iteration:%d, rate:%d", i, rate));
}
}
- public void testSeveralClients() throws InterruptedException {
- ArrayList<Thread> threads = new ArrayList<Thread>();
- for(int i = 0; i < this.getNumberOfThreadsToUse(); ++i) {
- threads.add(new Thread() {
- @Override
- public void run() {
- testStartStopRepeatedly();
- }
- });
- }
+ public void testOneClientSeveralThreads() throws InterruptedException {
+ Runnable operation = new Runnable() {
+ @Override
+ public void run() {
+ validateRegisterUnregisterRepeteadly(mTestSensorManager);
+ }
+ };
+ SensorCtsHelper.performOperationInThreads(this.getNumberOfThreadsToUse(), operation);
+ }
- while(!threads.isEmpty()) {
- Thread thread = threads.remove(0);
- thread.join();
- }
+ public void testSeveralClients() throws InterruptedException {
+ final Assert assertionObject = this;
+ Runnable operation = new Runnable() {
+ @Override
+ public void run() {
+ TestSensorManager testSensorManager = new TestSensorManager(
+ assertionObject,
+ mTestSensorManager.getUnderlyingSensorManager(),
+ mTestSensorManager.getSensorUnderTest());
+ validateRegisterUnregisterRepeteadly(testSensorManager);
+ }
+ };
+ SensorCtsHelper.performOperationInThreads(this.getNumberOfThreadsToUse(), operation);
+ }
+
+ public void testStoppingOtherClients() {
+ // TODO: use a higher test abstraction and move these to integration tests
+ final int EVENT_COUNT = 1;
+ final int SECOND_EVENT_COUNT = 5;
+ TestSensorManager sensorManager2 = new TestSensorManager(
+ this,
+ mTestSensorManager.getUnderlyingSensorManager(),
+ mTestSensorManager.getSensorUnderTest());
+
+ mTestSensorManager.registerListener(SensorManager.SENSOR_DELAY_NORMAL);
+
+ // is receiving events
+ mTestSensorManager.getEvents(EVENT_COUNT);
+
+ // operate in a different client
+ sensorManager2.collectEvents(SensorManager.SENSOR_DELAY_FASTEST, SECOND_EVENT_COUNT);
+
+ // verify first client is still operating
+ TestSensorManager.SensorEventForTest[] events = mTestSensorManager.getEvents(EVENT_COUNT);
+ assertTrue(
+ String.format("Events| expected:%d, actual:%d", EVENT_COUNT, events.length),
+ events.length >= EVENT_COUNT);
+ }
+
+ public void testStoppingOtherClientsBatching() {
+ final int EVENT_COUNT = 1;
+ final int SECOND_EVENT_COUNT = 5;
+ TestSensorManager sensorManager2 = new TestSensorManager(
+ this,
+ mTestSensorManager.getUnderlyingSensorManager(),
+ mTestSensorManager.getSensorUnderTest());
+
+ mTestSensorManager.registerListener(SensorManager.SENSOR_DELAY_NORMAL);
+
+ // is receiving events
+ mTestSensorManager.getEvents(EVENT_COUNT);
+
+ // operate in a different client
+ sensorManager2.collectBatchEvents(
+ SensorManager.SENSOR_DELAY_FASTEST,
+ SensorCtsHelper.getSecondsAsMicroSeconds(1),
+ SECOND_EVENT_COUNT);
+
+ // verify first client is still operating
+ TestSensorManager.SensorEventForTest[] events = mTestSensorManager.getEvents(EVENT_COUNT);
+ assertTrue(
+ String.format("Events| expected:%d, actual:%d", EVENT_COUNT, events.length),
+ events.length >= EVENT_COUNT);
}
/**
@@ -255,50 +265,52 @@
*/
public void testRegisterForBatchingZeroReport() {
releaseWakeLock();
-
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
- SensorManager.SENSOR_DELAY_NORMAL,
- 0 /*maxBatchReportLatencyUs*/,
- 0 /*reservedFlags*/,
- mFlushListener);
- assertTrue("registerListener", result);
- mEventListener.waitForEvents(10);
+ // TODO: use test wrappers to verify for reportLatency ==0 !=0
+ mTestSensorManager.collectBatchEvents(SensorManager.SENSOR_DELAY_NORMAL, 0, 10);
}
public void testCanReceiveBatchEvents() {
releaseWakeLock();
-
- // TODO: refactor out common code across tests that register for events and do post-process
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
+ mTestSensorManager.collectBatchEvents(
SensorManager.SENSOR_DELAY_NORMAL,
- 5 * 1000000 /*maxBatchReportLatencyUs*/,
- 0 /*reservedFlags*/,
- mFlushListener);
- assertTrue("registerListener", result);
- mEventListener.waitForEvents(10);
+ SensorCtsHelper.getSecondsAsMicroSeconds(5),
+ 10 /*eventCount*/);
+ }
+
+ /**
+ * Regress:
+ * -b/10790905
+ */
+ public void ignore_testBatchingReportLatency() {
+ long startTime = SystemClock.elapsedRealtimeNanos();
+ // TODO: define the sensor frequency per sensor
+ TestSensorManager.SensorEventForTest[] events = mTestSensorManager.collectBatchEvents(
+ SensorCtsHelper.getSecondsAsMicroSeconds(1),
+ SensorCtsHelper.getSecondsAsMicroSeconds(5),
+ 1 /*eventCount*/);
+ long elapsedTime = SystemClock.elapsedRealtimeNanos() - startTime;
+ long expectedTime =
+ TimeUnit.NANOSECONDS.convert(5, TimeUnit.SECONDS) +
+ TimeUnit.NANOSECONDS.convert(500, TimeUnit.MILLISECONDS);
+
+ // TODO: ensure the proper batching time considers the size of the FIFO (fifoMaxEventCount),
+ // and make sure that no other application is registered
+ assertTrue(
+ String.format("WaitTime| expected:%d, actual:%d", expectedTime, elapsedTime),
+ elapsedTime <= expectedTime);
}
public void testBatchEventsArriveInOrder() {
releaseWakeLock();
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
+ // TODO: identify if we can reuse code from the non-batching case, same for other batch tests
+ TestSensorManager.SensorEventForTest[] events = mTestSensorManager.collectBatchEvents(
SensorManager.SENSOR_DELAY_NORMAL,
- 5 * 1000000 /*maxBatchReportLatencyUs*/,
- 0 /*reservedFlags*/,
- mFlushListener);
- assertTrue("registerListener", result);
- mEventListener.waitForEvents(100);
-
- SensorEventForTest[] events = mEventListener.getAllEvents();
+ SensorCtsHelper.getSecondsAsMicroSeconds(5),
+ 100);
for(int i = 1; i < events.length; ++i) {
- long previousTimestamp = events[i-1].getTimestamp();
- long timestamp = events[i].getTimestamp();
+ long previousTimestamp = events[i-1].timestamp;
+ long timestamp = events[i].timestamp;
assertTrue(
String.format("[timestamp:%d] %d >= %d", i, previousTimestamp, timestamp),
previousTimestamp < timestamp);
@@ -307,22 +319,7 @@
public void testStartStopBatchingRepeatedly() {
releaseWakeLock();
-
- for(int i = 0; i < this.getLowNumberOfIterationsToExecute(); ++i) {
- String iterationInfo = String.format("registerListener:%d", i);
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
- SensorManager.SENSOR_DELAY_FASTEST,
- 5 * 1000000 /*maxBatchReportLatencyUs*/,
- 0 /*reservedFlags*/,
- mFlushListener);
-
- assertTrue(iterationInfo, result);
- mEventListener.waitForEvents(5, iterationInfo);
-
- mSensorManager.unregisterListener(mEventListener, mSensorUnderTest);
- }
+ validateRegisterUnregisterRepeteadlyBatching(mTestSensorManager);
}
public void testUpdateBatchRate() {
@@ -351,76 +348,114 @@
rate = this.getMaxFrequencySupportedInuS() * generator.nextInt(10);
}
- String iterationInfo = String.format("registerListener:%d, rate:%d", i, rate);
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
+ String iterationInfo = String.format("iteration:%d, rate:%d", i, rate);
+ mTestSensorManager.collectBatchEvents(
rate,
- generator.nextInt(5 * 1000000),
- 0 /*reservedFlags*/,
- mFlushListener);
- assertTrue(iterationInfo, result);
-
- mEventListener.waitForEvents(generator.nextInt(5) + 1, iterationInfo);
- mSensorManager.unregisterListener(mEventListener, mSensorUnderTest);
- mEventListener.clearEvents();
+ generator.nextInt(SensorCtsHelper.getSecondsAsMicroSeconds(5)),
+ generator.nextInt(5) + 1,
+ iterationInfo);
}
}
- public void testSeveralClientsBatching() {
- ArrayList<Thread> threads = new ArrayList<Thread>();
- for(int i = 0; i < this.getNumberOfThreadsToUse(); ++i) {
- threads.add(new Thread() {
- @Override
- public void run() {
- testStartStopBatchingRepeatedly();
- }
- });
- }
-
- while(!threads.isEmpty()) {
- Thread thread = threads.remove(0);
- try {
- thread.join();
- } catch(InterruptedException e) {
- // just continue
+ public void testOneClientSeveralThreadsBatching() throws InterruptedException {
+ Runnable operation = new Runnable() {
+ @Override
+ public void run() {
+ validateRegisterUnregisterRepeteadlyBatching(mTestSensorManager);
}
- }
+ };
+ SensorCtsHelper.performOperationInThreads(this.getNumberOfThreadsToUse(), operation);
+ }
+
+ public void testSeveralClientsBatching() throws InterruptedException {
+ final Assert assertionObject = this;
+ Runnable operation = new Runnable() {
+ @Override
+ public void run() {
+ TestSensorManager testSensorManager = new TestSensorManager(
+ assertionObject,
+ mTestSensorManager.getUnderlyingSensorManager(),
+ mTestSensorManager.getSensorUnderTest());
+ validateRegisterUnregisterRepeteadlyBatching(testSensorManager);
+ }
+ };
+ SensorCtsHelper.performOperationInThreads(this.getNumberOfThreadsToUse(), operation);
+ }
+
+ public void testBatchingStoppingOtherClients() {
+ final int EVENT_COUNT = 1;
+ final int SECOND_EVENT_COUNT = 5;
+ TestSensorManager sensorManager2 = new TestSensorManager(
+ this,
+ mTestSensorManager.getUnderlyingSensorManager(),
+ mTestSensorManager.getSensorUnderTest());
+
+ mTestSensorManager.registerBatchListener(
+ SensorManager.SENSOR_DELAY_NORMAL,
+ SensorCtsHelper.getSecondsAsMicroSeconds(5));
+
+ // is receiving events
+ mTestSensorManager.getEvents(EVENT_COUNT);
+
+ // operate in a different client
+ sensorManager2.collectEvents(SensorManager.SENSOR_DELAY_FASTEST, SECOND_EVENT_COUNT);
+
+ // verify first client is still operating
+ TestSensorManager.SensorEventForTest[] events = mTestSensorManager.getEvents(EVENT_COUNT);
+ assertTrue(
+ String.format("Events| expected:%d, actual:%d", EVENT_COUNT, events.length),
+ events.length >= EVENT_COUNT);
+ }
+
+ public void testBatchingStoppingOtherClientsBatching() {
+ final int EVENT_COUNT = 1;
+ final int SECOND_EVENT_COUNT = 5;
+ TestSensorManager sensorManager2 = new TestSensorManager(
+ this,
+ mTestSensorManager.getUnderlyingSensorManager(),
+ mTestSensorManager.getSensorUnderTest());
+
+ mTestSensorManager.registerBatchListener(
+ SensorManager.SENSOR_DELAY_NORMAL,
+ SensorCtsHelper.getSecondsAsMicroSeconds(5));
+
+ // is receiving events
+ mTestSensorManager.getEvents(EVENT_COUNT);
+
+ // operate in a different client
+ sensorManager2.collectBatchEvents(
+ SensorManager.SENSOR_DELAY_FASTEST,
+ SensorCtsHelper.getSecondsAsMicroSeconds(1),
+ SECOND_EVENT_COUNT);
+
+ // verify first client is still operating
+ TestSensorManager.SensorEventForTest[] events = mTestSensorManager.getEvents(EVENT_COUNT);
+ assertTrue(
+ String.format("Events| expected:%d, actual:%d", EVENT_COUNT, events.length),
+ events.length >= EVENT_COUNT);
}
/**
* Tests for sensor characteristics.
*/
- public void testEventJittering() {
+ public void ignore_testEventJittering() {
final long EXPECTED_TIMESTAMP_NS = this.getMaxFrequencySupportedInuS() * 1000;
final long THRESHOLD_IN_NS = EXPECTED_TIMESTAMP_NS / 10; // 10%
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
- this.getMaxFrequencySupportedInuS());
- assertTrue("registerListener", result);
- mEventListener.waitForEvents(100);
- SensorEventForTest[] events = mEventListener.getAllEvents();
- ArrayList<Long> timestampDeltas = new ArrayList<Long>();
- for(int i = 1; i < events.length; ++i) {
- long previousTimestamp = events[i-1].getTimestamp();
- long timestamp = events[i].getTimestamp();
- long delta = timestamp - previousTimestamp;
- long jitterValue = Math.abs(EXPECTED_TIMESTAMP_NS - delta);
- timestampDeltas.add(jitterValue);
- }
-
- Collections.sort(timestampDeltas);
- long percentile95InNs = timestampDeltas.get(95);
- long actualPercentValue = (percentile95InNs * 100) / EXPECTED_TIMESTAMP_NS;
+ TestSensorManager.SensorEventForTest[] events = mTestSensorManager.collectEvents(
+ this.getMaxFrequencySupportedInuS(),
+ 100);
+ ArrayList<Double> jitterValues = new ArrayList<Double>();
+ double jitterMean = SensorCtsHelper.getJitterMean(events, jitterValues);
+ double percentile95InNs = SensorCtsHelper.get95PercentileValue(jitterValues);
if(percentile95InNs > THRESHOLD_IN_NS) {
- for(long jitter : timestampDeltas) {
- Log.e(LOG_TAG, "Jittering delta: " + jitter);
+ for(double jitter : jitterValues) {
+ Log.e(LOG_TAG, "Jitter: " + jitter);
}
+ double actualPercentValue = (percentile95InNs * 100) / jitterMean;
String message = String.format(
- "95%%Jitter| 10%%:%dns, observed:%dns(%d%%)",
+ "95%% Jitter| 10%%:%dns, actual:%fns(%.2f%%)",
THRESHOLD_IN_NS,
percentile95InNs,
actualPercentValue);
@@ -428,6 +463,29 @@
}
}
+ public void ignore_testFrequencyAccuracy() {
+ final long EXPECTED_TIMESTAMP_NS = this.getMaxFrequencySupportedInuS() * 1000;
+ final long THRESHOLD_IN_NS = EXPECTED_TIMESTAMP_NS / 10; // 10%
+
+ TestSensorManager.SensorEventForTest[] events = mTestSensorManager.collectEvents(
+ this.getMaxFrequencySupportedInuS(),
+ 100);
+ ArrayList<Long> timestampDelayValues = new ArrayList<Long>();
+ Double frequencyMean = SensorCtsHelper.getAverageTimestampDelayWithValues(
+ events,
+ timestampDelayValues);
+ if(Math.abs(EXPECTED_TIMESTAMP_NS - frequencyMean) > THRESHOLD_IN_NS) {
+ for(long value : timestampDelayValues) {
+ Log.e(LOG_TAG, "TimestampDelay: " + value);
+ }
+ String message = String.format(
+ "Frequency| expected:%d, actual:%f",
+ EXPECTED_TIMESTAMP_NS,
+ frequencyMean);
+ fail(message);
+ }
+ }
+
/**
* Private helpers.
*/
@@ -444,252 +502,84 @@
}
}
- private void collectBugreport() {
- String commands[] = new String[] {
- "dumpstate",
- "dumpsys",
- "logcat -d -v threadtime",
- "exit"
- };
-
- SimpleDateFormat dateFormat = new SimpleDateFormat("M-d-y_H:m:s.S");
- String outputFile = String.format(
- "%s/%s_%s",
- this.getLogTag(),
- "/sdcard/Download",
- dateFormat.format(new Date()));
-
- DataOutputStream processOutput = null;
- try {
- Process process = Runtime.getRuntime().exec("/system/bin/sh -");
- processOutput = new DataOutputStream(process.getOutputStream());
-
- for(String command : commands) {
- processOutput.writeBytes(String.format("%s >> %s\n", command, outputFile));
- }
-
- processOutput.flush();
- process.waitFor();
-
- Log.d(this.getLogTag(), String.format("Bug-Report collected at: %s", outputFile));
- } catch (IOException e) {
- fail("Unable to collect Bug Report. " + e.toString());
- } catch (InterruptedException e) {
- fail("Unable to collect Bug Report. " + e.toString());
- } finally {
- if(processOutput != null) {
- try {
- processOutput.close();
- } catch(IOException e) {}
- }
- }
- }
-
/**
* Test method helper implementations
*/
- protected void validateSensorEvent(
- float expectedX,
- float expectedY,
- float expectedZ,
- float threshold) {
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
- SensorManager.SENSOR_DELAY_FASTEST);
+ protected void validateNormForSensorEvent(float reference, float threshold, int axisCount) {
+ TestSensorManager.SensorEventForTest[] events = mTestSensorManager.collectEvents(
+ SensorManager.SENSOR_DELAY_FASTEST,
+ 1);
+ TestSensorManager.SensorEventForTest event = events[0];
- assertTrue("registerListener", result);
- mEventListener.waitForEvents(1);
- SensorEventForTest event = mEventListener.getLastEvent();
+ StringBuilder valuesBuilder = new StringBuilder();
+ double norm = 0.0;
+ for(int i = 0; i < axisCount; ++i) {
+ float value = event.values[i];
+ norm += Math.pow(value, 2);
- float xValue = event.getX();
- assertTrue(
- String.format("x-axis| expected:%f, actual:%f, threshold:%f", expectedX, xValue, threshold),
- Math.abs(expectedX - xValue) <= threshold);
+ valuesBuilder.append(value);
+ valuesBuilder.append(", ");
+ }
+ norm = Math.sqrt(norm);
- float yValue = event.getY();
- assertTrue(
- String.format("y-axis| expected:%f, actual:%f, threshold:%f", expectedY, yValue, threshold),
- Math.abs(expectedY - yValue) <= threshold);
-
- float zValue = event.getZ();
- assertTrue(
- String.format("z-axis| expected:%f, actual:%f, threshold:%f", expectedZ, zValue, threshold),
- Math.abs(expectedZ - zValue) <= threshold);
+ String message = String.format(
+ "Norm| expected:%f, threshold:%f, actual:%f (%s)",
+ reference,
+ threshold,
+ norm,
+ valuesBuilder.toString());
+ assertTrue(message, Math.abs(reference - norm) <= threshold);
}
- protected void validateVarianceWhileStatic(
- float referenceX,
- float referenceY,
- float referenceZ,
- float threshold) {
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
- this.getMaxFrequencySupportedInuS());
- assertTrue("registerListener", result);
- mEventListener.waitForEvents(100);
-
- SensorEventForTest[] events = mEventListener.getAllEvents();
- ArrayList<Float> deltaValuesX = new ArrayList<Float>();
- ArrayList<Float> deltaValuesY = new ArrayList<Float>();
- ArrayList<Float> deltaValuesZ = new ArrayList<Float>();
- for(int i = 0; i < events.length; ++i) {
- SensorEventForTest event = events[i];
- deltaValuesX.add(Math.abs(event.getX() - referenceX));
- deltaValuesY.add(Math.abs(event.getY() - referenceY));
- deltaValuesZ.add(Math.abs(event.getZ() - referenceZ));
+ protected void validateRegisterUnregisterRepeteadly(TestSensorManager testSensorManager) {
+ for(int i = 0; i < this.getLowNumberOfIterationsToExecute(); ++i) {
+ String iterationInfo = String.format("iteration:%d", i);
+ testSensorManager.collectEvents(SensorManager.SENSOR_DELAY_FASTEST, 1, iterationInfo);
}
+ }
- Collections.sort(deltaValuesX);
- float percentile95X = deltaValuesX.get(95);
- if(percentile95X > threshold) {
- for(float valueX : deltaValuesX) {
- Log.e(LOG_TAG, "Variance|X delta: " + valueX);
- }
- String message = String.format(
- "95%%Variance|X expected:%f, observed:%f",
- threshold,
- percentile95X);
- fail(message);
+ protected void validateRegisterUnregisterRepeteadlyBatching(
+ TestSensorManager testSensorManager) {
+ // TODO: refactor if allowed with test wrapper abstractions
+ for(int i = 0; i < this.getLowNumberOfIterationsToExecute(); ++i) {
+ testSensorManager.collectBatchEvents(
+ SensorManager.SENSOR_DELAY_FASTEST,
+ SensorCtsHelper.getSecondsAsMicroSeconds(5),
+ 5 /*eventCont*/,
+ String.format("iteration:%d", i));
}
+ }
- Collections.sort(deltaValuesY);
- float percentile95Y = deltaValuesY.get(95);
- if(percentile95Y > threshold) {
- for(float valueY : deltaValuesY) {
- Log.e(LOG_TAG, "Variance|Y delta: " + valueY);
- }
- String message = String.format(
- "95%%Variance|Y expected:%f, observed:%f",
- threshold,
- percentile95Y);
- fail(message);
- }
+ protected void validateStandardDeviationWhileStatic(
+ float expectedStandardDeviation,
+ int axisCount) {
+ // TODO: refactor the report parameter with test wrappers if available
+ TestSensorManager.SensorEventForTest[] events = mTestSensorManager.collectEvents(
+ this.getMaxFrequencySupportedInuS(),
+ 100);
- Collections.sort(deltaValuesZ);
- float percentile95Z = deltaValuesZ.get(95);
- if(percentile95Z > threshold) {
- for(float valueZ : deltaValuesZ) {
- Log.e(LOG_TAG, "Variance|Z delta: " + valueZ);
+ for(int i = 0; i < axisCount; ++i) {
+ ArrayList<Float> values = new ArrayList<Float>();
+ for(TestSensorManager.SensorEventForTest event : events) {
+ values.add(event.values[i]);
}
+
+ double standardDeviation = SensorCtsHelper.getStandardDeviation(values);
String message = String.format(
- "95%%Variance|Z expected:%f, observed:%f",
- threshold,
- percentile95Z);
- fail(message);
+ "StandardDeviation| axis:%d, expected:%f, actual:%f",
+ i,
+ expectedStandardDeviation,
+ standardDeviation);
+ assertTrue(message, standardDeviation <= expectedStandardDeviation);
}
}
/**
* Private class definitions to support test of event handlers.
*/
- protected class SensorEventForTest {
- private Sensor mSensor;
- private long mTimestamp;
- private int mAccuracy;
-
- private float mValueX;
- private float mValueY;
- private float mValueZ;
-
- public SensorEventForTest(SensorEvent event) {
- mSensor = event.sensor;
- mTimestamp = event.timestamp;
- mAccuracy = event.accuracy;
- mValueX = event.values[0];
- mValueY = event.values[1];
- mValueZ = event.values[2];
- }
-
- public Sensor getSensor() {
- return mSensor;
- }
-
- public int getAccuracy() {
- return mAccuracy;
- }
-
- public float getX() {
- return mValueX;
- }
-
- public float getY() {
- return mValueY;
- }
-
- public float getZ() {
- return mValueZ;
- }
-
- public long getTimestamp() {
- return mTimestamp;
- }
- }
-
- protected class TestSensorListener implements SensorEventListener {
- private final ConcurrentLinkedDeque<SensorEventForTest> mSensorEventsList =
- new ConcurrentLinkedDeque<SensorEventForTest>();
- private volatile CountDownLatch mEventLatch;
-
- @Override
- public void onSensorChanged(SensorEvent event) {
- // copy the event because there is no better way to do this in the platform
- mSensorEventsList.addLast(new SensorEventForTest(event));
-
- CountDownLatch latch = mEventLatch;
- if(latch != null) {
- latch.countDown();
- }
- }
-
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
-
- public void waitForEvents(int eventCount) {
- waitForEvents(eventCount, null);
- }
-
- public void waitForEvents(int eventCount, String timeoutInfo) {
- mEventLatch = new CountDownLatch(eventCount);
- try {
- boolean awaitCompleted = mEventLatch.await(getWaitTimeoutInSeconds(), TimeUnit.SECONDS);
- if(!awaitCompleted) {
- collectBugreport();
- }
-
- String assertMessage = String.format(
- "WaitForEvents:%d, available:%d, %s",
- eventCount,
- mSensorEventsList.size(),
- timeoutInfo);
- assertTrue(assertMessage, awaitCompleted);
- } catch(InterruptedException e) { }
- }
-
- public SensorEventForTest getLastEvent() {
- return mSensorEventsList.getLast();
- }
-
- public SensorEventForTest[] getAllEvents() {
- return mSensorEventsList.toArray(new SensorEventForTest[0]);
- }
-
- public void clearEvents() {
- mSensorEventsList.clear();
- }
- }
-
private class TestTriggerListener extends TriggerEventListener {
@Override
public void onTrigger(TriggerEvent event) {
}
}
-
- private class TestFlushListener implements FlushCompleteListener {
- @Override
- public void onFlushCompleted(Sensor sensor) {
- }
- }
}
diff --git a/tests/tests/hardware/src/android/hardware/cts/SensorGyroscopeTest.java b/tests/tests/hardware/src/android/hardware/cts/SensorGyroscopeTest.java
index d3d72a3..b7c082e 100644
--- a/tests/tests/hardware/src/android/hardware/cts/SensorGyroscopeTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/SensorGyroscopeTest.java
@@ -19,6 +19,8 @@
import android.hardware.Sensor;
public class SensorGyroscopeTest extends SensorCommonTests {
+ private final int AXIS_COUNT = 3;
+
@Override
protected int getMaxFrequencySupportedInuS() {
return 10000; // 100Hz
@@ -32,20 +34,12 @@
@Override
public void testEventValidity() {
final float THRESHOLD = 0.1f; // dps
- validateSensorEvent(
- 0 /*x-axis*/,
- 0 /*y-axis*/,
- 0 /*z-axis*/,
- THRESHOLD);
+ validateNormForSensorEvent(0 /*reference*/, THRESHOLD, AXIS_COUNT);
}
@Override
- public void testVarianceWhileStatic() {
- final float THRESHOLD = 0.1f; // dps
- validateVarianceWhileStatic(
- 0 /*x-axis*/,
- 0 /*y-axis*/,
- 0 /*z-axis*/,
- THRESHOLD);
+ public void testStandardDeviationWhileStatic() {
+ final float STANDARD_DEVIATION = 0.5f; // dps
+ validateStandardDeviationWhileStatic(STANDARD_DEVIATION, AXIS_COUNT);
}
}
diff --git a/tests/tests/hardware/src/android/hardware/cts/SensorIntegrationTests.java b/tests/tests/hardware/src/android/hardware/cts/SensorIntegrationTests.java
new file mode 100644
index 0000000..7272d72
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/cts/SensorIntegrationTests.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2008 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.
+ */
+package android.hardware.cts;
+
+import android.content.Context;
+
+import android.hardware.Sensor;
+import android.hardware.SensorManager;
+
+import android.hardware.cts.helpers.SensorCtsHelper;
+import android.hardware.cts.helpers.TestSensorManager;
+
+import android.os.PowerManager;
+
+import android.test.AndroidTestCase;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+public class SensorIntegrationTests extends AndroidTestCase {
+ protected final String LOG_TAG = "SensorIntegrationTests";
+ private PowerManager.WakeLock mWakeLock;
+ private SensorManager mSensorManager;
+
+ /**
+ * Test execution methods
+ */
+ @Override
+ protected void setUp() throws Exception {
+ PowerManager powerManager = (PowerManager) this.getContext().getSystemService(
+ Context.POWER_SERVICE);
+ mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOG_TAG);
+ mWakeLock.acquire();
+
+ mSensorManager = (SensorManager) this.getContext().getSystemService(
+ Context.SENSOR_SERVICE);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ mSensorManager = null;
+
+ mWakeLock.release();
+ mWakeLock = null;
+ }
+
+ /**
+ * Test cases.
+ */
+
+ /**
+ * Regress:
+ * - b/10641388
+ */
+ public void testAccelerometerDoesNotStopGyroscope() {
+ validateSensorCanBeStoppedIndependently(Sensor.TYPE_ACCELEROMETER, Sensor.TYPE_GYROSCOPE);
+ }
+
+ public void testAccelerometerDoesNotStopMagnetometer() {
+ validateSensorCanBeStoppedIndependently(
+ Sensor.TYPE_ACCELEROMETER,
+ Sensor.TYPE_MAGNETIC_FIELD);
+ }
+
+ public void testGyroscopeDoesNotStopAccelerometer() {
+ validateSensorCanBeStoppedIndependently(Sensor.TYPE_GYROSCOPE, Sensor.TYPE_ACCELEROMETER);
+ }
+
+ public void testGyroscopeDoesNotStopMagnetometer() {
+ validateSensorCanBeStoppedIndependently(Sensor.TYPE_GYROSCOPE, Sensor.TYPE_MAGNETIC_FIELD);
+ }
+
+ public void testMagnetometerDoesNotStopAccelerometer() {
+ validateSensorCanBeStoppedIndependently(
+ Sensor.TYPE_MAGNETIC_FIELD,
+ Sensor.TYPE_ACCELEROMETER);
+ }
+
+ public void testMagnetometerDoesNotStopGyroscope() {
+ validateSensorCanBeStoppedIndependently(Sensor.TYPE_MAGNETIC_FIELD, Sensor.TYPE_GYROSCOPE);
+ }
+
+ /**
+ * Private methods for sensor validation.
+ */
+ public void validateSensorCanBeStoppedIndependently(int sensorTypeTester, int sensorTypeTestee) {
+ // if any of the required sensors is not supported, skip the test
+ Sensor sensorTester = mSensorManager.getDefaultSensor(sensorTypeTester);
+ if(sensorTester == null) {
+ return;
+ }
+ Sensor sensorTestee = mSensorManager.getDefaultSensor(sensorTypeTestee);
+ if(sensorTestee == null) {
+ return;
+ }
+
+ TestSensorManager tester = new TestSensorManager(this, mSensorManager, sensorTester);
+ tester.registerListener(SensorManager.SENSOR_DELAY_NORMAL);
+
+ TestSensorManager testee = new TestSensorManager(this, mSensorManager, sensorTestee);
+ testee.registerBatchListener(
+ (int) TimeUnit.MICROSECONDS.convert(200, TimeUnit.MILLISECONDS),
+ SensorCtsHelper.getSecondsAsMicroSeconds(10));
+
+ testee.getEvents(10);
+ tester.getEvents(5);
+
+ tester.unregisterListener();
+ testee.getEvents(5);
+
+ // clean up
+ tester.close();
+ testee.close();
+ }
+}
diff --git a/tests/tests/hardware/src/android/hardware/cts/SensorMagneticFieldTest.java b/tests/tests/hardware/src/android/hardware/cts/SensorMagneticFieldTest.java
index 10cabb8..e4041d6 100644
--- a/tests/tests/hardware/src/android/hardware/cts/SensorMagneticFieldTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/SensorMagneticFieldTest.java
@@ -19,12 +19,9 @@
import android.hardware.Sensor;
import android.hardware.SensorManager;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.Collections;
-
public class SensorMagneticFieldTest extends SensorCommonTests {
+ private final int AXIS_COUNT = 3;
+
@Override
protected int getMaxFrequencySupportedInuS() {
return 100000; // 10Hz
@@ -37,73 +34,15 @@
@Override
public void testEventValidity() {
- validateSensorEvent(
- 0 /*x-axis*/,
- 0 /*y-axis*/,
- 0 /*z-axis*/,
- SensorManager.MAGNETIC_FIELD_EARTH_MAX);
+ validateNormForSensorEvent(
+ SensorManager.MAGNETIC_FIELD_EARTH_MAX,
+ SensorManager.MAGNETIC_FIELD_EARTH_MIN,
+ AXIS_COUNT);
}
@Override
- public void testVarianceWhileStatic() {
- float THRESHOLD_IN_UT = SensorManager.MAGNETIC_FIELD_EARTH_MAX / 10;
- boolean result = mSensorManager.registerListener(
- mEventListener,
- mSensorUnderTest,
- this.getMaxFrequencySupportedInuS());
- assertTrue("registerListener", result);
- mEventListener.waitForEvents(100);
-
- SensorEventForTest[] events = mEventListener.getAllEvents();
- ArrayList<Float> deltaValuesX = new ArrayList<Float>();
- ArrayList<Float> deltaValuesY = new ArrayList<Float>();
- ArrayList<Float> deltaValuesZ = new ArrayList<Float>();
- for(int i = 1; i < events.length; ++i) {
- SensorEventForTest previousEvent = events[i-1];
- SensorEventForTest event = events[i];
-
- deltaValuesX.add(Math.abs(event.getX() - previousEvent.getX()));
- deltaValuesY.add(Math.abs(event.getY() - previousEvent.getY()));
- deltaValuesZ.add(Math.abs(event.getZ() - previousEvent.getZ()));
- }
-
- Collections.sort(deltaValuesX);
- float percentile95X = deltaValuesX.get(95);
- if(percentile95X > THRESHOLD_IN_UT) {
- for(float valueX : deltaValuesX) {
- Log.e(LOG_TAG, "Variance|X delta: " + valueX);
- }
- String message = String.format(
- "95%%Variance|X expected:%f, observed:%f",
- THRESHOLD_IN_UT,
- percentile95X);
- fail(message);
- }
-
- Collections.sort(deltaValuesY);
- float percentile95Y = deltaValuesY.get(95);
- if(percentile95Y > THRESHOLD_IN_UT) {
- for(float valueY : deltaValuesY) {
- Log.e(LOG_TAG, "Variance|Y delta: " + valueY);
- }
- String message = String.format(
- "95%%Variance|Y expected:%f, observed:%f",
- THRESHOLD_IN_UT,
- percentile95Y);
- fail(message);
- }
-
- Collections.sort(deltaValuesZ);
- float percentile95Z = deltaValuesZ.get(95);
- if(percentile95Z > THRESHOLD_IN_UT) {
- for(float valueZ : deltaValuesZ) {
- Log.e(LOG_TAG, "Variance|Z delta: " + valueZ);
- }
- String message = String.format(
- "95%%Variance|Z expected:%f, observed:%f",
- THRESHOLD_IN_UT,
- percentile95Z);
- fail(message);
- }
+ public void testStandardDeviationWhileStatic() {
+ final float STANDARD_DEVIATION = 2f; // uT
+ validateStandardDeviationWhileStatic(STANDARD_DEVIATION, AXIS_COUNT);
}
}
diff --git a/tests/tests/hardware/src/android/hardware/cts/SensorTest.java b/tests/tests/hardware/src/android/hardware/cts/SensorTest.java
index 4af2a45..cce7d0f 100644
--- a/tests/tests/hardware/src/android/hardware/cts/SensorTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/SensorTest.java
@@ -23,10 +23,10 @@
import android.content.Context;
import android.content.pm.PackageManager;
-import android.hardware.FlushCompleteListener;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
+import android.hardware.SensorEventListener2;
import android.hardware.SensorManager;
import android.hardware.TriggerEvent;
import android.hardware.TriggerEventListener;
@@ -61,6 +61,28 @@
assertNull(sensor);
}
+ sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
+ boolean hasStepCounter = getContext().getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_SENSOR_STEP_COUNTER);
+ // stepcounter sensor is optional
+ if (hasStepCounter) {
+ assertEquals(Sensor.TYPE_STEP_COUNTER, sensor.getType());
+ assertSensorValues(sensor);
+ } else {
+ assertNull(sensor);
+ }
+
+ sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
+ boolean hasStepDetector = getContext().getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_SENSOR_STEP_DETECTOR);
+ // stepdetector sensor is optional
+ if (hasStepDetector) {
+ assertEquals(Sensor.TYPE_STEP_DETECTOR, sensor.getType());
+ assertSensorValues(sensor);
+ } else {
+ assertNull(sensor);
+ }
+
sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
boolean hasCompass = getContext().getPackageManager().hasSystemFeature(
PackageManager.FEATURE_SENSOR_COMPASS);
@@ -149,7 +171,8 @@
}
final CountDownLatch eventReceived = new CountDownLatch(25);
- SensorEventListener listener = new SensorEventListener() {
+ final CountDownLatch flushReceived = new CountDownLatch(1);
+ SensorEventListener2 listener = new SensorEventListener2() {
@Override
public void onSensorChanged(SensorEvent event) {
eventReceived.countDown();
@@ -158,22 +181,18 @@
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
- };
- final CountDownLatch flushReceived = new CountDownLatch(1);
- FlushCompleteListener flushCompleteListener = new FlushCompleteListener() {
@Override
public void onFlushCompleted(Sensor sensor) {
flushReceived.countDown();
}
};
boolean result = mSensorManager.registerListener(listener, sensor,
- SensorManager.SENSOR_DELAY_NORMAL, 10000000, 0,
- flushCompleteListener);
+ SensorManager.SENSOR_DELAY_NORMAL, 10000000);
assertTrue(result);
// Wait for 25 events and call flush.
eventReceived.await();
- result = mSensorManager.flush(sensor);
+ result = mSensorManager.flush(listener);
assertTrue(result);
flushReceived.await();
mSensorManager.unregisterListener(listener);
diff --git a/tests/tests/hardware/src/android/hardware/cts/helpers/SensorCtsHelper.java b/tests/tests/hardware/src/android/hardware/cts/helpers/SensorCtsHelper.java
new file mode 100644
index 0000000..5abdd06
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/cts/helpers/SensorCtsHelper.java
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2008 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.
+ */
+package android.hardware.cts.helpers;
+
+import android.os.Environment;
+import android.util.Log;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import java.text.SimpleDateFormat;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Set of static helper methods for CTS tests.
+ */
+public class SensorCtsHelper {
+ /**
+ * This is an static class.
+ */
+ private SensorCtsHelper() {}
+
+ public static <TValue extends Comparable> TValue get95PercentileValue(
+ Collection<TValue> collection) {
+ validateCollection(collection);
+
+ ArrayList<TValue> arrayCopy = new ArrayList<TValue>(collection);
+ Collections.sort(arrayCopy);
+
+ // zero-based array index
+ int arrayIndex = (int)(arrayCopy.size() * 0.95) - 1;
+ if(arrayIndex < 0) {
+ arrayIndex = 0;
+ }
+
+ return arrayCopy.get(arrayIndex);
+ }
+
+ // TODO: are there any internal libraries for this?
+ public static <TValue extends Number> double getMean(Collection<TValue> collection) {
+ validateCollection(collection);
+
+ double sum = 0.0;
+ for(TValue value : collection) {
+ sum += value.doubleValue();
+ }
+ return sum / collection.size();
+ }
+
+ public static <TValue extends Number> double getVariance(Collection<TValue> collection) {
+ validateCollection(collection);
+
+ double mean = getMean(collection);
+ ArrayList<Double> squaredDifferences = new ArrayList<Double>();
+ for(TValue value : collection) {
+ double difference = mean - value.doubleValue();
+ squaredDifferences.add(Math.pow(difference, 2));
+ }
+
+ double variance = getMean(squaredDifferences);
+ return variance;
+ }
+
+ public static <TValue extends Number> double getStandardDeviation(Collection<TValue> collection) {
+ validateCollection(collection);
+
+ double variance = getVariance(collection);
+ return Math.sqrt(variance);
+ }
+
+ /**
+ * Gets the jitter values associated with a set of sensor events.
+ *
+ * @param events The events to use to obtain the jittering information.
+ * @param jitterValues The Collection that will contain the computed jitter values.
+ * @return The mean of the jitter Values.
+ */
+ public static double getJitterMean(
+ TestSensorManager.SensorEventForTest events[],
+ Collection<Double> jitterValues) {
+ ArrayList<Long> timestampDelayValues = new ArrayList<Long>();
+ double averageTimestampDelay = SensorCtsHelper.getAverageTimestampDelayWithValues(events,
+ timestampDelayValues);
+ for(long frequency : timestampDelayValues) {
+ jitterValues.add(Math.abs(averageTimestampDelay - frequency));
+ }
+
+ double jitterMean = SensorCtsHelper.getMean(timestampDelayValues);
+ return jitterMean;
+ }
+
+ /**
+ * Gets the frequency values associated with a set of sensor events.
+ *
+ * @param events The events to use to obtain the frequency information.
+ * @param timestampDelayValues The Collection that will contain the computed frequency values.
+ * @return The mean of the frequency values.
+ */
+ public static double getAverageTimestampDelayWithValues(
+ TestSensorManager.SensorEventForTest events[],
+ Collection<Long> timestampDelayValues) {
+ for(int i = 1; i < events.length; ++i) {
+ long previousTimestamp = events[i-1].timestamp;
+ long timestamp = events[i].timestamp;
+ timestampDelayValues.add(timestamp - previousTimestamp);
+ }
+
+ double timestampDelayMean = SensorCtsHelper.getMean(timestampDelayValues);
+ return timestampDelayMean;
+ }
+
+ public static int getSecondsAsMicroSeconds(int seconds) {
+ return (int) TimeUnit.MICROSECONDS.convert(seconds, TimeUnit.SECONDS);
+ }
+
+ /**
+ * NOTE: The bug report is usually written to /sdcard/Downloads
+ */
+ public static void collectBugreport(String collectorId)
+ throws IOException, InterruptedException {
+ String commands[] = new String[] {
+ "dumpstate",
+ "dumpsys",
+ "logcat -d -v threadtime",
+ "exit"
+ };
+
+ SimpleDateFormat dateFormat = new SimpleDateFormat("M-d-y_H:m:s.S");
+ String outputFile = String.format(
+ "%s/%s_%s",
+ collectorId,
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
+ dateFormat.format(new Date()));
+
+ DataOutputStream processOutput = null;
+ try {
+ Process process = Runtime.getRuntime().exec("/system/bin/sh -");
+ processOutput = new DataOutputStream(process.getOutputStream());
+
+ for(String command : commands) {
+ processOutput.writeBytes(String.format("%s >> %s\n", command, outputFile));
+ }
+
+ processOutput.flush();
+ process.waitFor();
+
+ Log.d(collectorId, String.format("Bug-Report collected at: %s", outputFile));
+ } finally {
+ if(processOutput != null) {
+ try {
+ processOutput.close();
+ } catch(IOException e) {}
+ }
+ }
+ }
+
+ public static void performOperationInThreads(int numberOfThreadsToUse, Runnable operation)
+ throws InterruptedException {
+ ArrayList<Thread> threads = new ArrayList<Thread>();
+ for(int i = 0; i < numberOfThreadsToUse; ++i) {
+ threads.add(new Thread(operation));
+ }
+
+ while(!threads.isEmpty()) {
+ Thread thread = threads.remove(0);
+ thread.join();
+ }
+ }
+
+ /**
+ * Private helpers
+ */
+ private static void validateCollection(Collection collection) {
+ if(collection == null || collection.size() == 0) {
+ throw new IllegalStateException("Collection cannot be null or empty");
+ }
+ }
+}
+
+
+
+
diff --git a/tests/tests/hardware/src/android/hardware/cts/helpers/TestSensorManager.java b/tests/tests/hardware/src/android/hardware/cts/helpers/TestSensorManager.java
new file mode 100644
index 0000000..98a0af0
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/cts/helpers/TestSensorManager.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2008 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.
+ */
+
+package android.hardware.cts.helpers;
+
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener2;
+import android.hardware.SensorManager;
+import android.hardware.TriggerEvent;
+import android.hardware.TriggerEventListener;
+
+import java.io.Closeable;
+
+import java.util.concurrent.ConcurrentLinkedDeque;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import junit.framework.Assert;
+
+/**
+ * Test class to wrap SensorManager with verifications and test checks.
+ * This class allows to perform operations in the Sensor Manager and performs all the expected test
+ * verification on behalf of th owner.
+ * An object can be used to quickly writing tests that focus on the scenario that needs to be verified,
+ * and not in the implicit verifications that need to take place at any step.
+ */
+public class TestSensorManager implements Closeable {
+ private final int WAIT_TIMEOUT_IN_SECONDS = 30;
+
+ private Assert mAssert;
+ private SensorManager mSensorManager;
+ private Sensor mSensorUnderTest;
+ private TestSensorListener mEventListener;
+
+ public TestSensorManager(Assert assertionObject, SensorManager sensorManager, Sensor sensor) {
+ mAssert = assertionObject;
+ mSensorManager = sensorManager;
+ mSensorUnderTest = sensor;
+
+ mEventListener = new TestSensorListener();
+ }
+
+ public void close() {
+ this.unregisterListener();
+ mEventListener = null;
+ mSensorUnderTest = null;
+ }
+
+ public SensorManager getUnderlyingSensorManager() {
+ return mSensorManager;
+ }
+
+ public Sensor getSensorUnderTest() {
+ return mSensorUnderTest;
+ }
+
+ public void registerListener(int delay, String debugInfo) {
+ mAssert.assertTrue(
+ "registerListener| " + debugInfo,
+ mSensorManager.registerListener(mEventListener, mSensorUnderTest, delay));
+ }
+
+ public void registerListener(int delay) {
+ registerListener(delay, "");
+ }
+
+ public void registerBatchListener(int delay, int reportLatency, String debugInfo) {
+ boolean result = mSensorManager.registerListener(
+ mEventListener,
+ mSensorUnderTest,
+ delay,
+ reportLatency);
+ mAssert.assertTrue("registerBatchListener| " + debugInfo, result);
+ }
+
+ public void registerBatchListener(int delay, int reportLatency) {
+ registerBatchListener(delay, reportLatency, "");
+ }
+
+ public void unregisterListener() {
+ mSensorManager.unregisterListener(mEventListener, mSensorUnderTest);
+ }
+
+ public SensorEventForTest[] getEvents(int count, String debugInfo) {
+ mEventListener.waitForEvents(count, debugInfo);
+ SensorEventForTest[] events = mEventListener.getAllEvents();
+ mEventListener.clearEvents();
+
+ return events;
+ }
+
+ public SensorEventForTest[] getEvents(int count) {
+ return this.getEvents(count, "");
+ }
+
+ public SensorEventForTest[] collectEvents(
+ int collectionDelay,
+ int eventCount,
+ String debugInfo) {
+ this.registerListener(collectionDelay, debugInfo);
+ SensorEventForTest[] events = this.getEvents(eventCount, debugInfo);
+ this.unregisterListener();
+
+ return events;
+ }
+
+ public SensorEventForTest[] collectEvents(int collectionDelay, int eventCount) {
+ return this.collectEvents(collectionDelay, eventCount, "");
+ }
+
+ public SensorEventForTest[] collectBatchEvents(
+ int collectionDelay,
+ int batchReportLatency,
+ int eventCount,
+ String debugInfo) {
+ this.registerBatchListener(collectionDelay, batchReportLatency, debugInfo);
+ SensorEventForTest[] events = this.getEvents(eventCount, debugInfo);
+ this.unregisterListener();
+
+ return events;
+ }
+
+ public SensorEventForTest[] collectBatchEvents(
+ int collectionDelay,
+ int batchReportLatency,
+ int eventCount) {
+ return this.collectBatchEvents(collectionDelay, batchReportLatency, eventCount, "");
+ }
+
+ public void waitForFlush() throws InterruptedException {
+ mAssert.assertTrue(
+ String.format("flush| sensorType:%d", mSensorUnderTest.getType()),
+ mSensorManager.flush(mEventListener));
+ mEventListener.waitForFlushComplete();
+ }
+
+ /**
+ * Definition of support test classes.
+ */
+ public class SensorEventForTest {
+ public final Sensor sensor;
+ public final long timestamp;
+ public final int accuracy;
+ public final float values[];
+
+ public SensorEventForTest(SensorEvent event) {
+ values = new float[event.values.length];
+ System.arraycopy(event.values, 0, values, 0, event.values.length);
+
+ sensor = event.sensor;
+ timestamp = event.timestamp;
+ accuracy = event.accuracy;
+ }
+ }
+
+ private class TestSensorListener implements SensorEventListener2 {
+ private final ConcurrentLinkedDeque<SensorEventForTest> mSensorEventsList =
+ new ConcurrentLinkedDeque<SensorEventForTest>();
+ private volatile CountDownLatch mEventLatch;
+ private volatile CountDownLatch mFlushLatch = new CountDownLatch(1);
+
+ @Override
+ public void onSensorChanged(SensorEvent event) {
+ CountDownLatch latch = mEventLatch;
+ if(latch != null) {
+ // copy the event because there is no better way to do this in the platform
+ mSensorEventsList.addLast(new SensorEventForTest(event));
+ latch.countDown();
+ }
+ }
+
+ @Override
+ public void onAccuracyChanged(Sensor sensor, int accuracy) {
+ }
+
+ @Override
+ public void onFlushCompleted(Sensor sensor) {
+ CountDownLatch latch = mFlushLatch;
+ mFlushLatch = new CountDownLatch(1);
+
+ if(latch != null) {
+ latch.countDown();
+ }
+ }
+
+ public void waitForFlushComplete() throws InterruptedException {
+ CountDownLatch latch = mFlushLatch;
+ if(latch != null) {
+ mAssert.assertTrue(
+ "WaitForFlush",
+ latch.await(WAIT_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS));
+ }
+ }
+
+ public void waitForEvents(int eventCount) {
+ waitForEvents(eventCount, "");
+ }
+
+ public void waitForEvents(int eventCount, String timeoutInfo) {
+ mEventLatch = new CountDownLatch(eventCount);
+ try {
+ boolean awaitCompleted = mEventLatch.await(WAIT_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
+ // TODO: can we collect bug reports on error based only if needed? env var?
+
+ String assertMessage = String.format(
+ "WaitForEvents| count:%d, available:%d, %s",
+ eventCount,
+ mSensorEventsList.size(),
+ timeoutInfo);
+ mAssert.assertTrue(assertMessage, awaitCompleted);
+ } catch(InterruptedException e) {
+ } finally {
+ mEventLatch = null;
+ }
+ }
+
+ public SensorEventForTest getLastEvent() {
+ return mSensorEventsList.getLast();
+ }
+
+ public SensorEventForTest[] getAllEvents() {
+ return mSensorEventsList.toArray(new SensorEventForTest[0]);
+ }
+
+ public void clearEvents() {
+ mSensorEventsList.clear();
+ }
+ }
+
+ public class TestTriggerListener extends TriggerEventListener {
+ @Override
+ public void onTrigger(TriggerEvent event) {
+ }
+ }
+}
diff --git a/tests/tests/media/src/android/media/cts/MediaCodecCapabilitiesTest.java b/tests/tests/media/src/android/media/cts/MediaCodecCapabilitiesTest.java
new file mode 100644
index 0000000..4f8fb62
--- /dev/null
+++ b/tests/tests/media/src/android/media/cts/MediaCodecCapabilitiesTest.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+package android.media.cts;
+
+import android.media.MediaCodecInfo;
+import android.media.MediaCodecInfo.CodecCapabilities;
+import android.media.MediaCodecInfo.CodecProfileLevel;
+import android.media.MediaCodecList;
+import android.media.MediaPlayer;
+
+import android.util.Log;
+
+/**
+ * Basic sanity test of data returned by MediaCodeCapabilities.
+ */
+public class MediaCodecCapabilitiesTest extends MediaPlayerTestBase {
+
+ private static final String TAG = "MediaCodecCapabilitiesTest";
+ private static final String AVC_MIME = "video/avc";
+ private static final int PLAY_TIME_MS = 30000;
+
+ public void testAvcBaseline1() throws Exception {
+ if (!supports(AVC_MIME, CodecProfileLevel.AVCProfileBaseline,
+ CodecProfileLevel.AVCLevel1)) {
+ throw new RuntimeException("AVCLevel1 support is required by CDD");
+ }
+ // We don't have a test stream, but at least we're testing
+ // that supports() returns true for something.
+ }
+
+ public void testAvcBaseline12() throws Exception {
+ if (!supports(AVC_MIME, CodecProfileLevel.AVCProfileBaseline,
+ CodecProfileLevel.AVCLevel12)) {
+ Log.i(TAG, "AvcBaseline12 not supported");
+ return; // TODO: Can we make this mandatory?
+ }
+ playVideoWithRetries("http://redirector.c.youtube.com/videoplayback?id=271de9756065677e"
+ + "&itag=160&source=youtube&user=android-device-test"
+ + "&sparams=ip,ipbits,expire,id,itag,source,user"
+ + "&ip=0.0.0.0&ipbits=0&expire=999999999999999999"
+ + "&signature=341692D20FACCAE25B90EA2C131EA6ADCD8E2384."
+ + "9EB08C174BE401AAD20FB85EE4DBA51A2882BB60"
+ + "&key=test_key1", 256, 144, PLAY_TIME_MS);
+ }
+
+ public void testAvcBaseline30() throws Exception {
+ if (!supports(AVC_MIME, CodecProfileLevel.AVCProfileBaseline,
+ CodecProfileLevel.AVCLevel3)) {
+ Log.i(TAG, "AvcBaseline30 not supported");
+ return;
+ }
+ playVideoWithRetries("http://redirector.c.youtube.com/videoplayback?id=271de9756065677e"
+ + "&itag=18&source=youtube&user=android-device-test"
+ + "&sparams=ip,ipbits,expire,id,itag,source,user"
+ + "&ip=0.0.0.0&ipbits=0&expire=999999999999999999"
+ + "&signature=8701A45F6422229D46ABB25A22E2C00C94024606."
+ + "08BCDF16C3F744C49D4C8A8AD1C38B3DC1810918"
+ + "&key=test_key1", 640, 360, PLAY_TIME_MS);
+ }
+
+ public void testAvcHigh31() throws Exception {
+ if (!supports(AVC_MIME, CodecProfileLevel.AVCProfileHigh,
+ CodecProfileLevel.AVCLevel31)) {
+ Log.i(TAG, "AvcHigh31 not supported");
+ return;
+ }
+ playVideoWithRetries("http://redirector.c.youtube.com/videoplayback?id=271de9756065677e"
+ + "&itag=22&source=youtube&user=android-device-test"
+ + "&sparams=ip,ipbits,expire,id,itag,source,user"
+ + "&ip=0.0.0.0&ipbits=0&expire=999999999999999999"
+ + "&signature=42969CA8F7FFAE432B7135BC811F96F7C4172C3F."
+ + "1A8A92EA714C1B7C98A05DDF2DE90854CDD7638B"
+ + "&key=test_key1", 1280, 720, PLAY_TIME_MS);
+
+ }
+
+ public void testAvcHigh40() throws Exception {
+ if (!supports(AVC_MIME, CodecProfileLevel.AVCProfileHigh,
+ CodecProfileLevel.AVCLevel4)) {
+ Log.i(TAG, "AvcHigh40 not supported");
+ return;
+ }
+ playVideoWithRetries("http://redirector.c.youtube.com/videoplayback?id=271de9756065677e"
+ + "&itag=37&source=youtube&user=android-device-test"
+ + "&sparams=ip,ipbits,expire,id,itag,source,user"
+ + "&ip=0.0.0.0&ipbits=0&expire=999999999999999999"
+ + "&signature=7C3BBFB2F493E1BC396B6D31DDAF2E1367624487."
+ + "64197F3BB46039669E912297DCD68D1FB2811D9F"
+ + "&key=test_key1", 1920, 1080, PLAY_TIME_MS);
+ }
+
+ private boolean supports(String mimeType, int profile, int level) {
+ int numCodecs = MediaCodecList.getCodecCount();
+ for (int i = 0; i < numCodecs; i++) {
+ MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
+ if (codecInfo.isEncoder()) {
+ continue;
+ }
+
+ CodecCapabilities capabilities = codecInfo.getCapabilitiesForType(mimeType);
+ for (CodecProfileLevel profileLevel : capabilities.profileLevels) {
+ if (profileLevel.profile == profile
+ && profileLevel.level >= level) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+}
diff --git a/tests/tests/net/src/android/net/wifi/cts/NsdManagerTest.java b/tests/tests/net/src/android/net/wifi/cts/NsdManagerTest.java
index 482a4e3..d1e4c44 100644
--- a/tests/tests/net/src/android/net/wifi/cts/NsdManagerTest.java
+++ b/tests/tests/net/src/android/net/wifi/cts/NsdManagerTest.java
@@ -43,6 +43,12 @@
NsdManager.ResolveListener mResolveListener;
public NsdManagerTest() {
+ initRegistrationListener();
+ initDiscoveryListener();
+ initResolveListener();
+ }
+
+ private void initRegistrationListener() {
mRegistrationListener = new NsdManager.RegistrationListener() {
@Override
public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
@@ -64,6 +70,9 @@
setEvent("onServiceUnregistered", serviceInfo);
}
};
+ }
+
+ private void initDiscoveryListener() {
mDiscoveryListener = new NsdManager.DiscoveryListener() {
@Override
public void onStartDiscoveryFailed(String serviceType, int errorCode) {
@@ -99,6 +108,9 @@
setEvent("onServiceLost", serviceInfo);
}
};
+ }
+
+ private void initResolveListener() {
mResolveListener = new NsdManager.ResolveListener() {
@Override
public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
@@ -112,6 +124,8 @@
};
}
+
+
private final class EventData {
EventData(String callbackName, NsdServiceInfo info) {
mCallbackName = callbackName;
@@ -198,6 +212,29 @@
}
}
+ private EventData waitForNewEvents() throws InterruptedException {
+ if (DBG) Log.d(TAG, "Waiting for a bit, id=" + String.valueOf(mWaitId));
+
+ long startTime = android.os.SystemClock.uptimeMillis();
+ long elapsedTime = 0;
+ synchronized (mEventCache) {
+ int index = mEventCache.size();
+ while (elapsedTime < TIMEOUT ) {
+ // first check if we've received that event
+ for (; index < mEventCache.size(); index++) {
+ EventData e = mEventCache.get(index);
+ return e;
+ }
+
+ // Not yet received, just wait
+ mEventCache.wait(TIMEOUT - elapsedTime);
+ elapsedTime = android.os.SystemClock.uptimeMillis() - startTime;
+ }
+ }
+
+ return null;
+ }
+
private String mServiceName;
@Override
@@ -266,7 +303,9 @@
assertTrue(lastEvent.mSucceeded);
// Remove this event, so accounting becomes easier later
- mEventCache.remove(lastEvent);
+ synchronized (mEventCache) {
+ mEventCache.remove(lastEvent);
+ }
// Expect a service record to be discovered (and filter the ones
// that are unrelated to this test)
@@ -292,7 +331,9 @@
// Remove this event from the event cache, so it won't be found by subsequent
// calls to waitForCallback
- mEventCache.remove(lastEvent);
+ synchronized (mEventCache) {
+ mEventCache.remove(lastEvent);
+ }
}
assertTrue(found);
@@ -315,6 +356,7 @@
assertTrue(lastEvent.mInfo.getPort() == localPort);
assertTrue(eventCacheSize() == 1);
+ assertTrue(checkForAdditionalEvents());
clearEventCache();
// Unregister the service
@@ -333,12 +375,17 @@
assertTrue(eventCacheSize() == 2);
// Register service again to see if we discover it
+ checkForAdditionalEvents();
clearEventCache();
si = new NsdServiceInfo();
si.setServiceType(SERVICE_TYPE);
si.setServiceName(mServiceName);
si.setPort(localPort);
+
+ // Create a new registration listener and register same service again
+ initRegistrationListener();
+
mNsdManager.registerService(si, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener);
lastEvent = waitForCallback("onServiceRegistered"); // id = 7
@@ -358,67 +405,55 @@
lastEvent.mInfo.getServiceName());
assertTrue(lastEvent.mInfo.getServiceName().equals(registeredName));
+ assertTrue(checkCacheSize(2));
- assertTrue(eventCacheSize() == 2);
+ checkForAdditionalEvents();
clearEventCache();
mNsdManager.stopServiceDiscovery(mDiscoveryListener);
lastEvent = waitForCallback("onDiscoveryStopped"); // id = 9
assertTrue(lastEvent != null);
assertTrue(lastEvent.mSucceeded);
- assertTrue(eventCacheSize() == 1);
+ assertTrue(checkCacheSize(1));
+ checkForAdditionalEvents();
clearEventCache();
+
mNsdManager.unregisterService(mRegistrationListener);
lastEvent = waitForCallback("onServiceUnregistered"); // id = 10
assertTrue(lastEvent != null);
assertTrue(lastEvent.mSucceeded);
- assertTrue(eventCacheSize() == 1);
+ assertTrue(checkCacheSize(1));
+ }
+
+ boolean checkCacheSize(int size) {
+ synchronized (mEventCache) {
+ int cacheSize = mEventCache.size();
+ if (cacheSize != size) {
+ Log.d(TAG, "id = " + mWaitId + ": event cache size = " + cacheSize);
+ for (int i = 0; i < cacheSize; i++) {
+ EventData e = mEventCache.get(i);
+ String sname = (e.mInfo != null) ? "(" + e.mInfo.getServiceName() + ")" : "";
+ Log.d(TAG, "eventName is " + e.mCallbackName + sname);
+ }
+ }
+ return (cacheSize == size);
+ }
+ }
+
+ boolean checkForAdditionalEvents() {
+ try {
+ EventData e = waitForNewEvents();
+ if (e != null) {
+ String sname = (e.mInfo != null) ? "(" + e.mInfo.getServiceName() + ")" : "";
+ Log.d(TAG, "ignoring unexpected event " + e.mCallbackName + sname);
+ }
+ return (e == null);
+ }
+ catch (InterruptedException ex) {
+ return false;
+ }
}
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/tests/telephony/src/android/telephony/cts/SmsUsageMonitorShortCodeTest.java b/tests/tests/telephony/src/android/telephony/cts/SmsUsageMonitorShortCodeTest.java
index de3755c..fbe65b1 100644
--- a/tests/tests/telephony/src/android/telephony/cts/SmsUsageMonitorShortCodeTest.java
+++ b/tests/tests/telephony/src/android/telephony/cts/SmsUsageMonitorShortCodeTest.java
@@ -16,6 +16,8 @@
package android.telephony.cts;
+import android.content.Context;
+import android.content.pm.PackageManager;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
@@ -26,6 +28,8 @@
*/
public class SmsUsageMonitorShortCodeTest extends AndroidTestCase {
+ private PackageManager mPackageManager;
+
/** Return value from {@link SmsUsageMonitor#checkDestination} for regular phone numbers. */
static final int CATEGORY_NOT_SHORT_CODE = 0;
@@ -475,8 +479,19 @@
new ShortCodeTest(null, "112", CATEGORY_NOT_SHORT_CODE),
};
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mPackageManager = getContext().getPackageManager();
+ }
+
@SmallTest
public void testSmsUsageMonitor() {
+ if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
+ // do not test if device does not support telephony (voice or sms)
+ return;
+ }
+
SmsUsageMonitor monitor = new SmsUsageMonitor(getContext());
for (ShortCodeTest test : sShortCodeTests) {
assertEquals("country: " + test.countryIso + " number: " + test.address,
diff --git a/tests/tests/view/src/android/view/cts/WindowTest.java b/tests/tests/view/src/android/view/cts/WindowTest.java
index 8f45f5c..7e147ab 100644
--- a/tests/tests/view/src/android/view/cts/WindowTest.java
+++ b/tests/tests/view/src/android/view/cts/WindowTest.java
@@ -18,37 +18,52 @@
import com.android.cts.stub.R;
-
import android.app.Instrumentation;
+import android.app.Presentation;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.TypedArray;
+import android.cts.util.PollingCheck;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
+import android.hardware.display.DisplayManager;
+import android.hardware.display.VirtualDisplay;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.SystemClock;
import android.test.ActivityInstrumentationTestCase2;
import android.util.DisplayMetrics;
+import android.util.Log;
import android.view.ActionMode;
+import android.view.Display;
import android.view.Gravity;
+import android.view.InputDevice;
import android.view.InputQueue;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
+import android.view.Surface;
import android.view.SurfaceHolder;
+import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
+import android.widget.Button;
import android.widget.TextView;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+
public class WindowTest extends ActivityInstrumentationTestCase2<WindowStubActivity> {
+ static final String TAG = "WindowTest";
private Window mWindow;
private Context mContext;
private Instrumentation mInstrumentation;
@@ -57,6 +72,10 @@
private static final int VIEWGROUP_LAYOUT_HEIGHT = 100;
private static final int VIEWGROUP_LAYOUT_WIDTH = 200;
+ // for testing setLocalFocus
+ private ProjectedPresentation mPresentation;
+ private VirtualDisplay mVirtualDisplay;
+
public WindowTest() {
super("com.android.cts.stub", WindowStubActivity.class);
}
@@ -629,6 +648,189 @@
// No way to test protected final method
}
+ /**
+ * Test setLocalFocus together with injectInputEvent.
+ */
+ public void testSetLocalFocus() throws Throwable {
+ final SurfaceView surfaceView = new SurfaceView(mContext);
+ final Semaphore waitingSemaphore = new Semaphore(0);
+ surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
+ @Override
+ public void surfaceCreated(SurfaceHolder holder) {
+ }
+
+ @Override
+ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
+ destroyPresentation();
+ createPresentation(holder.getSurface(), width, height);
+ waitingSemaphore.release();
+ }
+
+ @Override
+ public void surfaceDestroyed(SurfaceHolder holder) {
+ destroyPresentation();
+ }
+ });
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mWindow.setContentView(surfaceView);
+ }
+ });
+ assertTrue(waitingSemaphore.tryAcquire(5, TimeUnit.SECONDS));
+ assertNotNull(mVirtualDisplay);
+ assertNotNull(mPresentation);
+ new PollingCheck() {
+ @Override
+ protected boolean check() {
+ return (mPresentation.button1 != null) && (mPresentation.button2 != null) &&
+ (mPresentation.button3 != null) && mPresentation.ready;
+ }
+ }.run();
+ assertTrue(mPresentation.button1.isFocusable() && mPresentation.button2.isFocusable() &&
+ mPresentation.button3.isFocusable());
+ // currently it is only for debugging
+ View.OnFocusChangeListener listener = new View.OnFocusChangeListener() {
+ @Override
+ public void onFocusChange(View v, boolean hasFocus) {
+ Log.d(TAG, "view " + v + " focus " + hasFocus);
+ }
+ };
+
+ // check key event focus
+ mPresentation.button1.setOnFocusChangeListener(listener);
+ mPresentation.button2.setOnFocusChangeListener(listener);
+ mPresentation.button3.setOnFocusChangeListener(listener);
+ final Window presentationWindow = mPresentation.getWindow();
+ presentationWindow.setLocalFocus(true, false);
+ new PollingCheck() {
+ @Override
+ protected boolean check() {
+ return mPresentation.button1.hasWindowFocus();
+ }
+ }.run();
+ checkPresentationButtonFocus(true, false, false);
+ assertFalse(mPresentation.button1.isInTouchMode());
+ injectKeyEvent(presentationWindow, KeyEvent.KEYCODE_TAB);
+ checkPresentationButtonFocus(false, true, false);
+ injectKeyEvent(presentationWindow, KeyEvent.KEYCODE_TAB);
+ checkPresentationButtonFocus(false, false, true);
+
+ // check touch input injection
+ presentationWindow.setLocalFocus(true, true);
+ new PollingCheck() {
+ @Override
+ protected boolean check() {
+ return mPresentation.button1.isInTouchMode();
+ }
+ }.run();
+ View.OnClickListener clickListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Log.d(TAG, "onClick " + v);
+ if (v == mPresentation.button1) {
+ waitingSemaphore.release();
+ }
+ }
+ };
+ mPresentation.button1.setOnClickListener(clickListener);
+ mPresentation.button2.setOnClickListener(clickListener);
+ mPresentation.button3.setOnClickListener(clickListener);
+ injectTouchEvent(presentationWindow, mPresentation.button1.getX() +
+ mPresentation.button1.getWidth() / 2,
+ mPresentation.button1.getY() + mPresentation.button1.getHeight() / 2);
+ assertTrue(waitingSemaphore.tryAcquire(5, TimeUnit.SECONDS));
+
+ destroyPresentation();
+ }
+
+ private void checkPresentationButtonFocus(final boolean button1Focused,
+ final boolean button2Focused, final boolean button3Focused) {
+ new PollingCheck() {
+ @Override
+ protected boolean check() {
+ return (mPresentation.button1.isFocused() == button1Focused) &&
+ (mPresentation.button2.isFocused() == button2Focused) &&
+ (mPresentation.button3.isFocused() == button3Focused);
+ }
+ }.run();
+ }
+
+ private void injectKeyEvent(Window window, int keyCode) {
+ KeyEvent downEvent = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
+ window.injectInputEvent(downEvent);
+ KeyEvent upEvent = new KeyEvent(KeyEvent.ACTION_UP, keyCode);
+ window.injectInputEvent(upEvent);
+ }
+
+ private void injectTouchEvent(Window window, float x, float y) {
+ Log.d(TAG, "injectTouchEvent " + x + "," + y);
+ long downTime = SystemClock.uptimeMillis();
+ MotionEvent downEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN,
+ x, y, 0);
+ downEvent.setSource(InputDevice.SOURCE_TOUCHSCREEN);
+ window.injectInputEvent(downEvent);
+ long upTime = SystemClock.uptimeMillis();
+ MotionEvent upEvent = MotionEvent.obtain(downTime, upTime, MotionEvent.ACTION_UP,
+ x, y, 0);
+ upEvent.setSource(InputDevice.SOURCE_TOUCHSCREEN);
+ window.injectInputEvent(upEvent);
+ }
+
+ private void createPresentation(final Surface surface, final int width,
+ final int height) {
+ Context context = getInstrumentation().getTargetContext();
+ DisplayManager displayManager =
+ (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
+ mVirtualDisplay = displayManager.createVirtualDisplay("localFocusTest",
+ width, height, 300, surface, 0);
+ mPresentation = new ProjectedPresentation(
+ context, mVirtualDisplay.getDisplay());
+ mPresentation.show();
+ }
+
+ private void destroyPresentation() {
+ if (mPresentation != null) {
+ mPresentation.dismiss();
+ }
+ if (mVirtualDisplay != null) {
+ mVirtualDisplay.release();
+ }
+ }
+
+ private class ProjectedPresentation extends Presentation {
+ public Button button1 = null;
+ public Button button2 = null;
+ public Button button3 = null;
+ public volatile boolean ready = false;
+
+ public ProjectedPresentation(Context outerContext, Display display) {
+ super(outerContext, display);
+ getWindow().setType(WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.windowstub_presentation);
+ button1 = (Button) findViewById(R.id.presentation_button1);
+ button2 = (Button) findViewById(R.id.presentation_button2);
+ button3 = (Button) findViewById(R.id.presentation_button3);
+ }
+
+ @Override
+ public void show() {
+ super.show();
+ new Handler().post(new Runnable() {
+
+ @Override
+ public void run() {
+ ready = true;
+ }
+ });
+ }
+ }
+
public class MockWindow extends Window {
public boolean mIsOnConfigurationChangedCalled = false;
public boolean mIsOnActiveCalled = false;
diff --git a/tests/tests/webkit/src/android/webkit/cts/UrlInterceptRegistryTest.java b/tests/tests/webkit/src/android/webkit/cts/UrlInterceptRegistryTest.java
deleted file mode 100644
index 005ede3..0000000
--- a/tests/tests/webkit/src/android/webkit/cts/UrlInterceptRegistryTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-package android.webkit.cts;
-
-
-import android.test.AndroidTestCase;
-import android.webkit.PluginData;
-import android.webkit.UrlInterceptHandler;
-import android.webkit.UrlInterceptRegistry;
-import android.webkit.CacheManager.CacheResult;
-
-import java.util.Map;
-
-@SuppressWarnings("deprecation")
-public class UrlInterceptRegistryTest extends AndroidTestCase {
- private int mService;
-
- public void testRegisterHandler() {
- UrlInterceptHandler handler1 = new MockUrlInterceptHandler();
- UrlInterceptHandler handler2 = new MockUrlInterceptHandler();
-
- assertFalse(UrlInterceptRegistry.unregisterHandler(handler1));
-
- assertTrue(UrlInterceptRegistry.registerHandler(handler1));
- assertFalse(UrlInterceptRegistry.registerHandler(handler1));
- assertTrue(UrlInterceptRegistry.registerHandler(handler2));
-
- assertTrue(UrlInterceptRegistry.unregisterHandler(handler1));
- assertTrue(UrlInterceptRegistry.unregisterHandler(handler2));
- assertFalse(UrlInterceptRegistry.unregisterHandler(handler1));
- }
-
- public void testGetSurrogate() {
- mService = 0;
-
- UrlInterceptHandler handler1 = new UrlInterceptHandler() {
- public CacheResult service(String url, Map<String, String> headers) {
- mService = 1;
- return new CacheResult();
- }
-
- public PluginData getPluginData(String url,
- Map<String, String> headers) {
- return null;
- }
- };
- UrlInterceptHandler handler2 = new UrlInterceptHandler() {
- public CacheResult service(String url, Map<String, String> headers) {
- mService = 2;
- return new CacheResult();
- }
-
- public PluginData getPluginData(String url,
- Map<String, String> headers) {
- return null;
- }
- };
- UrlInterceptHandler handler3 = new UrlInterceptHandler() {
- public CacheResult service(String url, Map<String, String> headers) {
- mService = 3;
- return null;
- }
-
- public PluginData getPluginData(String url,
- Map<String, String> headers) {
- return null;
- }
- };
- UrlInterceptRegistry.registerHandler(handler1);
- UrlInterceptRegistry.registerHandler(handler2);
- UrlInterceptRegistry.registerHandler(handler3);
-
- UrlInterceptRegistry.setUrlInterceptDisabled(true);
- assertNull(UrlInterceptRegistry.getSurrogate(null, null));
- assertNull(UrlInterceptRegistry.getPluginData(null, null));
- // no handlers get called
- assertEquals(mService, 0);
-
- UrlInterceptRegistry.setUrlInterceptDisabled(false);
- assertNotNull(UrlInterceptRegistry.getSurrogate(null, null));
- // handler3 gets called first, but returns null, handler2 returns the surrogate
- assertEquals(mService, 2);
- }
-
- private class MockUrlInterceptHandler implements UrlInterceptHandler {
- public CacheResult service(String url, Map<String, String> headers) {
- return null;
- }
-
- public PluginData getPluginData(String url, Map<String, String> headers) {
- return null;
- }
- }
-}
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
index 0b8af7a..21fee65 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
@@ -1080,7 +1080,8 @@
new PollingCheck() {
@Override
protected boolean check() {
- return mOnUiThread.getScale() != 0 && mOnUiThread.getContentHeight() != 0;
+ return mOnUiThread.getScale() != 0 && mOnUiThread.getContentHeight() != 0
+ && mOnUiThread.getHeight() != 0;
}
}.run();
assertEquals(mOnUiThread.getHeight(),
diff --git a/tools/device-setup/TestDeviceSetup/Android.mk b/tools/device-setup/TestDeviceSetup/Android.mk
index 39f989e..ba1998c 100644
--- a/tools/device-setup/TestDeviceSetup/Android.mk
+++ b/tools/device-setup/TestDeviceSetup/Android.mk
@@ -27,7 +27,7 @@
LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_SDK_VERSION := 17
+LOCAL_SDK_VERSION := current
LOCAL_PACKAGE_NAME := TestDeviceSetup
diff --git a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoActivity.java b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoActivity.java
index 3614e22..e18e626 100644
--- a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoActivity.java
+++ b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoActivity.java
@@ -23,10 +23,10 @@
import android.content.res.Configuration;
import android.os.Bundle;
+import java.util.HashSet;
import java.util.Locale;
import java.util.concurrent.CountDownLatch;
-
/**
* Collect device information on target device.
*/
@@ -34,7 +34,7 @@
// work done should be reported in GLES..View
private CountDownLatch mDone = new CountDownLatch(1);
- private GLESSurfaceView mGLView;
+ private HashSet<String> mFormats = new HashSet<String>();
/**
* Other classes can call this function to wait for this activity
@@ -47,6 +47,37 @@
}
}
+ private void runIterations(int glVersion) {
+ for (int i = 1; i <= glVersion; i++) {
+ final CountDownLatch done = new CountDownLatch(1);
+ final int version = i;
+ DeviceInfoActivity.this.runOnUiThread(new Runnable() {
+ public void run() {
+ setContentView(new GLESSurfaceView(DeviceInfoActivity.this, version, done));
+ }
+ });
+ try {
+ done.await();
+ } catch (InterruptedException e) {
+ // just move on
+ }
+ }
+
+ StringBuilder builder = new StringBuilder();
+ for (String format: mFormats) {
+ builder.append(format);
+ builder.append(";");
+ }
+ DeviceInfoInstrument.addResult(
+ DeviceInfoConstants.OPEN_GL_COMPRESSED_TEXTURE_FORMATS,
+ builder.toString());
+ mDone.countDown();
+ }
+
+ public void addCompressedTextureFormat(String format) {
+ mFormats.add(format);
+ }
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -54,10 +85,12 @@
ActivityManager am =
(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ConfigurationInfo info = am.getDeviceConfigurationInfo();
- boolean useGL20 = (info.reqGlEsVersion >= 0x20000);
-
- mGLView = new GLESSurfaceView(this, useGL20, mDone);
- setContentView(mGLView);
+ final int glVersion = (info.reqGlEsVersion & 0xffff0000) >> 16;
+ new Thread() {
+ public void run() {
+ runIterations(glVersion);
+ }
+ }.start();
Configuration con = getResources().getConfiguration();
String touchScreen = null;
diff --git a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoConstants.java b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoConstants.java
index c06c21e..4a0ea66 100644
--- a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoConstants.java
+++ b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoConstants.java
@@ -60,4 +60,6 @@
public static final String BUILD_VERSION = "buildVersion";
public static final String BUILD_TAGS = "build_tags";
public static final String SERIAL_NUMBER = "deviceID";
+ public static final String STORAGE_DEVICES = "storage_devices";
+ public static final String MULTI_USER = "multi_user";
}
diff --git a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoInstrument.java b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoInstrument.java
index 49e96a0..29b29bf 100644
--- a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoInstrument.java
+++ b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoInstrument.java
@@ -25,6 +25,8 @@
import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
+import android.os.Environment;
+import android.os.UserManager;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -33,6 +35,8 @@
import java.io.IOException;
import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -135,6 +139,12 @@
String sysLibraries = getSystemLibraries();
addResult(SYS_LIBRARIES, sysLibraries);
+ // Storage devices
+ addResult(STORAGE_DEVICES, getStorageDevices());
+
+ // Multi-user support
+ addResult(MULTI_USER, getMultiUserInfo());
+
finish(Activity.RESULT_OK, mResults);
}
@@ -343,4 +353,42 @@
return builder.toString();
}
+
+ private String getStorageDevices() {
+ int count = 0;
+ count = Math.max(count, getContext().getExternalCacheDirs().length);
+ count = Math.max(count, getContext().getExternalFilesDirs(null).length);
+ count = Math.max(
+ count, getContext().getExternalFilesDirs(Environment.DIRECTORY_PICTURES).length);
+ count = Math.max(count, getContext().getObbDirs().length);
+
+ final String result;
+ if (Environment.isExternalStorageEmulated()) {
+ if (count == 1) {
+ return "1 emulated";
+ } else {
+ return "1 emulated, " + (count - 1) + " physical media";
+ }
+ } else {
+ return count + " physical media";
+ }
+ }
+
+ private String getMultiUserInfo() {
+ try {
+ final Method method = UserManager.class.getMethod("getMaxSupportedUsers");
+ final Integer maxUsers = (Integer) method.invoke(null);
+ if (maxUsers == 1) {
+ return "single user";
+ } else {
+ return maxUsers + " users supported";
+ }
+ } catch (ClassCastException e) {
+ } catch (NoSuchMethodException e) {
+ } catch (InvocationTargetException e) {
+ } catch (IllegalAccessException e) {
+ }
+
+ return "unknown";
+ }
}
diff --git a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/GLESSurfaceView.java b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/GLESSurfaceView.java
index 0ec11b7..b2f2211 100644
--- a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/GLESSurfaceView.java
+++ b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/GLESSurfaceView.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.opengl.GLES20;
+import android.opengl.GLES30;
import android.opengl.GLSurfaceView;
import android.util.Log;
@@ -30,22 +31,24 @@
class GLESSurfaceView extends GLSurfaceView {
private static final String TAG = "GLESSurfaceView";
- private boolean mUseGL20;
- CountDownLatch mDone;
-
+ private int mGLVersion;//1, 2, 3
+ private CountDownLatch mDone;
+ private DeviceInfoActivity mParent;
/**
*
- * @param context
+ * @param parent
* @param useGL20 whether to use GLES2.0 API or not inside the view
* @param done to notify the completion of the task
*/
- public GLESSurfaceView(Context context, boolean useGL20, CountDownLatch done){
- super(context);
+ public GLESSurfaceView(DeviceInfoActivity parent, int glVersion, CountDownLatch done){
+ super(parent);
- mUseGL20 = useGL20;
+ mParent = parent;
+ mGLVersion = glVersion;
mDone = done;
- if (mUseGL20) {
- setEGLContextClientVersion(2);
+ if (glVersion > 1) {
+ // Default is 1 so only set if bigger than 1
+ setEGLContextClientVersion(glVersion);
}
setRenderer(new OpenGLESRenderer());
}
@@ -55,30 +58,26 @@
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
String extensions;
- if (mUseGL20) {
+ if (mGLVersion == 2) {
extensions = GLES20.glGetString(GLES20.GL_EXTENSIONS);
+ } else if (mGLVersion == 3) {
+ extensions = GLES30.glGetString(GLES30.GL_EXTENSIONS);
} else {
extensions = gl.glGetString(GL10.GL_EXTENSIONS);
}
Log.i(TAG, "extensions : " + extensions);
Scanner scanner = new Scanner(extensions);
scanner.useDelimiter(" ");
- StringBuilder builder = new StringBuilder();
while (scanner.hasNext()) {
String ext = scanner.next();
if (ext.contains("texture")) {
if (ext.contains("compression") || ext.contains("compressed")) {
Log.i(TAG, "Compression supported: " + ext);
- builder.append(ext);
- builder.append(";");
+ mParent.addCompressedTextureFormat(ext);
}
}
}
- DeviceInfoInstrument.addResult(
- DeviceInfoConstants.OPEN_GL_COMPRESSED_TEXTURE_FORMATS,
- builder.toString());
-
mDone.countDown();
}
@@ -93,4 +92,4 @@
}
}
-}
\ No newline at end of file
+}
diff --git a/tools/tradefed-host/res/report/cts_result.xsd b/tools/tradefed-host/res/report/cts_result.xsd
index 3f7f384..ce606e9 100644
--- a/tools/tradefed-host/res/report/cts_result.xsd
+++ b/tools/tradefed-host/res/report/cts_result.xsd
@@ -78,6 +78,8 @@
<xs:attribute name="partitions" type="xs:string"/>
<xs:attribute name="build_abi" type="xs:string"/>
<xs:attribute name="build_abi2" type="xs:string"/>
+ <xs:attribute name="storage_devices" type="xs:string"/>
+ <xs:attribute name="multi_user" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="FeatureInfo" type="featureInfoType"/>
diff --git a/tools/tradefed-host/res/report/cts_result.xsl b/tools/tradefed-host/res/report/cts_result.xsl
index dfddc09..b6fb699 100644
--- a/tools/tradefed-host/res/report/cts_result.xsl
+++ b/tools/tradefed-host/res/report/cts_result.xsl
@@ -298,6 +298,18 @@
</pre>
</TD>
</TR>
+ <TR>
+ <TD class="rowtitle">Storage devices</TD>
+ <TD>
+ <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@storage_devices"/>
+ </TD>
+ </TR>
+ <TR>
+ <TD class="rowtitle">Multi-user support</TD>
+ <TD>
+ <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@multi_user"/>
+ </TD>
+ </TR>
</TABLE>
</TD>
</TR>
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java b/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java
index 6674bdf..59b9d3c 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java
@@ -31,7 +31,7 @@
@Option(name="cts-install-path", description="the path to the cts installation to use")
private String mCtsRootDirPath = System.getProperty("CTS_ROOT");
- public static final String CTS_BUILD_VERSION = "4.2_r1";
+ public static final String CTS_BUILD_VERSION = "4.4_r0";
/**
* {@inheritDoc}