diff --git a/apps/CtsVerifier/AndroidManifest.xml b/apps/CtsVerifier/AndroidManifest.xml
index 6373173..0898369 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="4.1_r1">
+      android:versionName="4.1_r2">
 
     <!-- Using 10 for more complete NFC support... -->
     <uses-sdk android:minSdkVersion="10"></uses-sdk>
@@ -183,7 +183,6 @@
                 android:configChanges="keyboardHidden|orientation">
             <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/bt_device_communication" />
             <meta-data android:name="test_parent" android:value="com.android.cts.verifier.bluetooth.BluetoothTestActivity" />
@@ -194,7 +193,6 @@
                 android:configChanges="keyboardHidden|orientation">
             <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/bt_device_communication" />
             <meta-data android:name="test_parent" android:value="com.android.cts.verifier.bluetooth.BluetoothTestActivity" />
@@ -308,7 +306,6 @@
                  android:screenOrientation="landscape">
             <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_camera" />
 
diff --git a/hostsidetests/appsecurity/src/com/android/cts/appsecurity/AppSecurityTests.java b/hostsidetests/appsecurity/src/com/android/cts/appsecurity/AppSecurityTests.java
index dc75e7d..23d353e 100644
--- a/hostsidetests/appsecurity/src/com/android/cts/appsecurity/AppSecurityTests.java
+++ b/hostsidetests/appsecurity/src/com/android/cts/appsecurity/AppSecurityTests.java
@@ -19,16 +19,20 @@
 import com.android.cts.tradefed.build.CtsBuildHelper;
 import com.android.ddmlib.Log;
 import com.android.ddmlib.testrunner.RemoteAndroidTestRunner;
+import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.device.ITestDevice;
 import com.android.tradefed.result.CollectingTestListener;
+import com.android.tradefed.result.TestResult;
 import com.android.tradefed.result.TestRunResult;
+import com.android.tradefed.result.TestResult.TestStatus;
 import com.android.tradefed.testtype.DeviceTestCase;
 import com.android.tradefed.testtype.IBuildReceiver;
 
 import java.io.File;
 import java.io.FileNotFoundException;
+import java.util.Map;
 
 /**
  * Set of tests that verify various security checks involving multiple apps are properly enforced.
@@ -233,46 +237,6 @@
     }
 
     /**
-     * Test behavior when
-     * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} is enforced.
-     */
-    public void testReadExternalStorageEnforced() throws Exception {
-        try {
-            getDevice().uninstallPackage(EXTERNAL_STORAGE_APP_PKG);
-            getDevice().uninstallPackage(WRITE_EXTERNAL_STORAGE_APP_PKG);
-
-            // stage test file on external storage
-            getDevice().pushString("CAEK", "/sdcard/meow");
-
-            // mark permission as enforced
-            setPermissionEnforced(getDevice(), READ_EXTERNAL_STORAGE, true);
-
-            // install apps and run test
-            assertNull(getDevice()
-                    .installPackage(getTestAppFile(EXTERNAL_STORAGE_APP_APK), false));
-            assertNull(getDevice()
-                    .installPackage(getTestAppFile(WRITE_EXTERNAL_STORAGE_APP_APK), false));
-
-            // normal app should not be able to read
-            assertTrue("Normal app able to read external storage", runDeviceTests(
-                    EXTERNAL_STORAGE_APP_PKG, EXTERNAL_STORAGE_APP_CLASS,
-                    "testFailReadExternalStorage"));
-
-            // WRITE_EXTERNAL app should be able to read and write
-            assertTrue("WRITE_EXTERNAL app unable to read external storage", runDeviceTests(
-                    WRITE_EXTERNAL_STORAGE_APP_PKG, WRITE_EXTERNAL_STORAGE_APP_CLASS,
-                    "testReadExternalStorage"));
-            assertTrue("WRITE_EXTERNAL app unable to write external storage", runDeviceTests(
-                    WRITE_EXTERNAL_STORAGE_APP_PKG, WRITE_EXTERNAL_STORAGE_APP_CLASS,
-                    "testWriteExternalStorage"));
-
-        } finally {
-            getDevice().uninstallPackage(EXTERNAL_STORAGE_APP_PKG);
-            getDevice().uninstallPackage(WRITE_EXTERNAL_STORAGE_APP_PKG);
-        }
-    }
-
-    /**
      * Test that uninstall of an app removes its private data.
      */
     public void testUninstallRemovesData() throws Exception {
@@ -360,8 +324,8 @@
             assertNull(String.format("failed to install permission app with diff cert. Reason: %s",
                     installResult), installResult);
             // run PERMISSION_DIFF_CERT_PKG tests which try to access the permission
-            assertTrue("unexpected result when running permission tests",
-                    runDeviceTests(PERMISSION_DIFF_CERT_PKG));
+            TestRunResult result = doRunTests(PERMISSION_DIFF_CERT_PKG, null, null);
+            assertDeviceTestsPass(result);
         }
         finally {
             getDevice().uninstallPackage(DECLARE_PERMISSION_PKG);
@@ -370,6 +334,32 @@
     }
 
     /**
+     * Helper method that checks that all tests in given result passed, and attempts to generate
+     * a meaningful error message if they failed.
+     *
+     * @param result
+     */
+    private void assertDeviceTestsPass(TestRunResult result) {
+        // TODO: consider rerunning if this occurred
+        assertFalse(String.format("Failed to successfully run device tests for %s. Reason: %s",
+                result.getName(), result.getRunFailureMessage()), result.isRunFailure());
+
+        if (result.hasFailedTests()) {
+            // build a meaningful error message
+            StringBuilder errorBuilder = new StringBuilder("on-device tests failed:\n");
+            for (Map.Entry<TestIdentifier, TestResult> resultEntry :
+                result.getTestResults().entrySet()) {
+                if (!resultEntry.getValue().getStatus().equals(TestStatus.PASSED)) {
+                    errorBuilder.append(resultEntry.getKey().toString());
+                    errorBuilder.append(":\n");
+                    errorBuilder.append(resultEntry.getValue().getStackTrace());
+                }
+            }
+            fail(errorBuilder.toString());
+        }
+    }
+
+    /**
      * Helper method that will the specified packages tests on device.
      *
      * @param pkgName Android application package for tests
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 0ddc4a5..851d8da 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
@@ -16,13 +16,15 @@
 
 package com.android.cts.usespermissiondiffcertapp;
 
+import static android.text.format.DateUtils.SECOND_IN_MILLIS;
+
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
-import android.os.SystemClock;
 import android.os.MessageQueue.IdleHandler;
+import android.os.SystemClock;
 import android.util.Log;
 
 public class ReceiveUriActivity extends Activity {
@@ -33,6 +35,8 @@
     private static boolean sDestroyed;
     private static ReceiveUriActivity sCurInstance;
 
+    private static final long TIMEOUT_MILLIS = 30 * SECOND_IN_MILLIS;
+
     Handler mHandler = new Handler();
 
     @Override
@@ -94,10 +98,10 @@
             final long startTime = SystemClock.uptimeMillis();
             while (!sDestroyed) {
                 try {
-                    sLock.wait(5000);
+                    sLock.wait(TIMEOUT_MILLIS);
                 } catch (InterruptedException e) {
                 }
-                if (SystemClock.uptimeMillis() >= (startTime+5000)) {
+                if (SystemClock.uptimeMillis() >= (startTime + TIMEOUT_MILLIS)) {
                     throw new RuntimeException("Timeout");
                 }
             }
@@ -121,10 +125,10 @@
             final long startTime = SystemClock.uptimeMillis();
             while (!sStarted) {
                 try {
-                    sLock.wait(5000);
+                    sLock.wait(TIMEOUT_MILLIS);
                 } catch (InterruptedException e) {
                 }
-                if (SystemClock.uptimeMillis() >= (startTime+5000)) {
+                if (SystemClock.uptimeMillis() >= (startTime + TIMEOUT_MILLIS)) {
                     throw new RuntimeException("Timeout");
                 }
             }
@@ -136,10 +140,10 @@
             final long startTime = SystemClock.uptimeMillis();
             while (!sNewIntent) {
                 try {
-                    sLock.wait(5000);
+                    sLock.wait(TIMEOUT_MILLIS);
                 } catch (InterruptedException e) {
                 }
-                if (SystemClock.uptimeMillis() >= (startTime+5000)) {
+                if (SystemClock.uptimeMillis() >= (startTime + TIMEOUT_MILLIS)) {
                     throw new RuntimeException("Timeout");
                 }
             }
diff --git a/hostsidetests/monkey/src/com/android/cts/monkey/AbstractMonkeyTest.java b/hostsidetests/monkey/src/com/android/cts/monkey/AbstractMonkeyTest.java
index 0bc2c10..36dae9d 100644
--- a/hostsidetests/monkey/src/com/android/cts/monkey/AbstractMonkeyTest.java
+++ b/hostsidetests/monkey/src/com/android/cts/monkey/AbstractMonkeyTest.java
@@ -31,6 +31,7 @@
             File app = mBuild.getTestApp(APKS[i]);
             mDevice.installPackage(app, false);
         }
+        clearLogCat();
     }
 
     @Override
@@ -41,7 +42,7 @@
         }
     }
 
-    void clearLogCat() throws DeviceNotAvailableException {
+    private void clearLogCat() throws DeviceNotAvailableException {
         mDevice.executeAdbCommand("logcat", "-c");
     }
 }
diff --git a/hostsidetests/monkey/src/com/android/cts/monkey/MonkeyTest.java b/hostsidetests/monkey/src/com/android/cts/monkey/MonkeyTest.java
index 17a5cf8..f38b332 100644
--- a/hostsidetests/monkey/src/com/android/cts/monkey/MonkeyTest.java
+++ b/hostsidetests/monkey/src/com/android/cts/monkey/MonkeyTest.java
@@ -19,8 +19,6 @@
 import com.android.tradefed.device.DeviceNotAvailableException;
 
 import java.util.Scanner;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 public class MonkeyTest extends AbstractMonkeyTest {
 
@@ -28,13 +26,11 @@
     private static final String HUMAN = "(^_^)";
 
     public void testIsMonkey() throws Exception {
-        clearLogCat();
         mDevice.executeShellCommand("monkey -p " + PKGS[0] + " 500");
         assertIsUserAMonkey(true);
     }
 
     public void testNotMonkey() throws Exception {
-        clearLogCat();
         mDevice.executeShellCommand("am start -W -a android.intent.action.MAIN "
                 + "-n com.android.cts.monkey/com.android.cts.monkey.MonkeyActivity");
         assertIsUserAMonkey(false);
diff --git a/hostsidetests/monkey/src/com/android/cts/monkey/PackageTest.java b/hostsidetests/monkey/src/com/android/cts/monkey/PackageTest.java
index aa6106b..3859f19 100644
--- a/hostsidetests/monkey/src/com/android/cts/monkey/PackageTest.java
+++ b/hostsidetests/monkey/src/com/android/cts/monkey/PackageTest.java
@@ -16,22 +16,32 @@
 
 package com.android.cts.monkey;
 
+import java.util.regex.Pattern;
+
 public class PackageTest extends AbstractMonkeyTest {
 
+    private static final Pattern ALLOW_MONKEY =
+            Pattern.compile("^.*Allowing.*cmp=com\\.android\\.cts\\.monkey/\\.MonkeyActivity.*$",
+                    Pattern.MULTILINE);
+
+    private static final Pattern ALLOW_CHIMP =
+            Pattern.compile("^.*Allowing.*cmp=com\\.android\\.cts\\.monkey2/\\.ChimpActivity.*$",
+                    Pattern.MULTILINE);
+
     public void testSinglePackage() throws Exception {
         String out = mDevice.executeShellCommand("monkey -v -p " + PKGS[0] + " 5000");
-        assertTrue(out.contains("cmp=com.android.cts.monkey/.MonkeyActivity"));
-        assertFalse(out.contains("cmp=com.android.cts.monkey2/.ChimpActivity"));
+        assertTrue(out, ALLOW_MONKEY.matcher(out).find());
+        assertFalse(out, ALLOW_CHIMP.matcher(out).find());
 
         out = mDevice.executeShellCommand("monkey -v -p " + PKGS[1] + " 5000");
-        assertFalse(out.contains("cmp=com.android.cts.monkey/.MonkeyActivity"));
-        assertTrue(out.contains("cmp=com.android.cts.monkey2/.ChimpActivity"));
+        assertFalse(out, ALLOW_MONKEY.matcher(out).find());
+        assertTrue(out, ALLOW_CHIMP.matcher(out).find());
     }
 
     public void testMultiplePackages() throws Exception {
         String out = mDevice.executeShellCommand("monkey -v -p " + PKGS[0]
                 + " -p " + PKGS[1] + " 5000");
-        assertTrue(out.contains("cmp=com.android.cts.monkey/.MonkeyActivity"));
-        assertTrue(out.contains("cmp=com.android.cts.monkey2/.ChimpActivity"));
+        assertTrue(out, ALLOW_MONKEY.matcher(out).find());
+        assertTrue(out, ALLOW_CHIMP.matcher(out).find());
     }
 }
diff --git a/suite/audio_quality/Android.mk b/suite/audio_quality/Android.mk
index c12e390..2078606 100644
--- a/suite/audio_quality/Android.mk
+++ b/suite/audio_quality/Android.mk
@@ -19,16 +19,26 @@
 
 CTS_AUDIO_TOP:= $(call my-dir)
 
-CTS_AUDIO_INSTALL_DIR := $(HOST_OUT)/cts_audio_quality
+CTS_AUDIO_INSTALL_DIR := $(HOST_OUT)/cts-audio-quality/android-cts-audio-quality
+CTS_AUDIO_QUALITY_ZIP := $(HOST_OUT)/cts-audio-quality/android-cts-audio-quality.zip
 
-cts_audio: cts_audio_quality_test cts_audio_quality CtsAudioClient $(CTS_AUDIO_TOP)/test_description
+$(CTS_AUDIO_QUALITY_ZIP): cts_audio_quality_test cts_audio_quality \
+  CtsAudioClient $(CTS_AUDIO_TOP)/test_description
 	$(hide) mkdir -p $(CTS_AUDIO_INSTALL_DIR)
 	$(hide) mkdir -p $(CTS_AUDIO_INSTALL_DIR)/client
-	$(hide) $(ACP) -fp $(ANDROID_PRODUCT_OUT)/data/app/CtsAudioClient.apk \
+	$(hide) $(ACP) -fp $(PRODUCT_OUT)/data/app/CtsAudioClient.apk \
         $(CTS_AUDIO_INSTALL_DIR)/client
 	$(hide) $(ACP) -fp $(HOST_OUT)/bin/cts_audio_quality_test $(CTS_AUDIO_INSTALL_DIR)
 	$(hide) $(ACP) -fp $(HOST_OUT)/bin/cts_audio_quality $(CTS_AUDIO_INSTALL_DIR)
 	$(hide) $(ACP) -fr $(CTS_AUDIO_TOP)/test_description $(CTS_AUDIO_INSTALL_DIR)
+	$(hide) echo "Package cts_audio: $@"
+	$(hide) cd $(HOST_OUT)/cts-audio-quality && \
+        zip -rq android-cts-audio-quality.zip android-cts-audio-quality -x android-cts-audio-quality/reports/\*
+
+cts: $(CTS_AUDIO_QUALITY_ZIP)
+ifneq ($(filter cts, $(MAKECMDGOALS)),)
+$(call dist-for-goals, cts, $(CTS_AUDIO_QUALITY_ZIP))
+endif # cts
 
 include $(call all-subdir-makefiles)
 
diff --git a/suite/audio_quality/client/src/com/android/cts/audiotest/AudioProtocol.java b/suite/audio_quality/client/src/com/android/cts/audiotest/AudioProtocol.java
index c5bc671..d3ace8b 100644
--- a/suite/audio_quality/client/src/com/android/cts/audiotest/AudioProtocol.java
+++ b/suite/audio_quality/client/src/com/android/cts/audiotest/AudioProtocol.java
@@ -22,6 +22,7 @@
 import android.media.AudioRecord;
 import android.media.MediaRecorder.AudioSource;
 import android.media.AudioTrack;
+import android.os.Build;
 import android.os.Looper;
 import android.util.Log;
 
@@ -52,10 +53,11 @@
     private static final int PROTOCOL_ERROR_GENERIC = 2;
 
     private static final int CMD_DOWNLOAD        = 0x12340001;
-    private static final int CMD_START_PLAYBACK      = 0x12340002;
-    private static final int CMD_STOP_PLAYBACK       = 0x12340003;
+    private static final int CMD_START_PLAYBACK  = 0x12340002;
+    private static final int CMD_STOP_PLAYBACK   = 0x12340003;
     private static final int CMD_START_RECORDING = 0x12340004;
     private static final int CMD_STOP_RECORDING  = 0x12340005;
+    private static final int CMD_GET_DEVICE_INFO = 0x12340006;
 
     private ByteBuffer mHeaderBuffer = ByteBuffer.allocate(PROTOCOL_HEADER_SIZE);
     private ByteBuffer mDataBuffer = ByteBuffer.allocate(MAX_NON_DATA_PAYLOAD_SIZE);
@@ -263,6 +265,9 @@
                     if (bufferSize < 256 * 1024) {
                         bufferSize = 256 * 1024;
                     }
+                    if (bufferSize > data.capacity()) {
+                        bufferSize = data.capacity();
+                    }
                     mPlayback = new AudioTrack(type, samplingRate,
                             stereo ? AudioFormat.CHANNEL_OUT_STEREO : AudioFormat.CHANNEL_OUT_MONO,
                             AudioFormat.ENCODING_PCM_16BIT, bufferSize,
@@ -288,6 +293,9 @@
                     while (dataWritten < data.capacity()) {
                         int dataLeft = data.capacity() - dataWritten;
                         dataToWrite = (bufferSize < dataLeft)? bufferSize : dataLeft;
+                        if (mPlayback == null) { // stopped
+                            return;
+                        }
                         mPlayback.write(data.array(), dataWritten, dataToWrite);
                         dataWritten += dataToWrite;
                     }
@@ -366,19 +374,11 @@
                             totalRead += lenRead;
                         }
                         Log.d(TAG, "reading recording completed");
-                        mClientLock.lock();
-
-                        mReplyBuffer.clear();
-                        mReplyBuffer.putInt((CMD_START_RECORDING & 0xffff) | 0x43210000);
-                        mReplyBuffer.putInt(recordingOk ? PROTOCOL_OK : PROTOCOL_ERROR_GENERIC);
-                        mReplyBuffer.putInt(recordingOk ? mRecordingLength : 0);
-
-                        if (mOutput != null) {
-                            mOutput.write(mReplyBuffer.array(), 0, PROTOCOL_SIMPLE_REPLY_SIZE);
-                            if (recordingOk) {
-                                mOutput.write(data, 0, mRecordingLength);
-                            }
-                        }
+                        sendReplyWithData(
+                                CMD_START_RECORDING,
+                                recordingOk ? PROTOCOL_OK : PROTOCOL_ERROR_GENERIC,
+                                recordingOk ? mRecordingLength : 0,
+                                recordingOk ? data : null);
                     } catch (IOException e) {
                         // maybe socket already closed. don't do anything
                         Log.e(TAG, "ignore exception", e);
@@ -386,7 +386,6 @@
                         mRecord.stop();
                         mRecord.release();
                         mRecord = null;
-                        mClientLock.unlock();
                     }
                 }
              });
@@ -412,6 +411,32 @@
         sendSimpleReplyHeader(CMD_STOP_RECORDING, PROTOCOL_OK);
     }
 
+    private static final String BUILD_INFO_TAG = "build-info";
+
+    private void appendAttrib(StringBuilder builder, String name, String value) {
+        builder.append(" " + name + "=\"" + value + "\"");
+    }
+
+    private void handleGetDeviceInfo(int len) throws ProtocolError, IOException{
+        Log.d(TAG, "getDeviceInfo");
+        assertProtocol(len == 0, "wrong payload len");
+        StringBuilder builder = new StringBuilder();
+        builder.append("<build-info");
+        appendAttrib(builder, "board", Build.BOARD);
+        appendAttrib(builder, "brand", Build.BRAND);
+        appendAttrib(builder, "device", Build.DEVICE);
+        appendAttrib(builder, "display", Build.DISPLAY);
+        appendAttrib(builder, "fingerprint", Build.FINGERPRINT);
+        appendAttrib(builder, "id", Build.ID);
+        appendAttrib(builder, "model", Build.MODEL);
+        appendAttrib(builder, "product", Build.PRODUCT);
+        appendAttrib(builder, "release", Build.VERSION.RELEASE);
+        appendAttrib(builder, "sdk", Integer.toString(Build.VERSION.SDK_INT));
+        builder.append(" />");
+        byte[] data = builder.toString().getBytes();
+
+        sendReplyWithData(CMD_GET_DEVICE_INFO, PROTOCOL_OK, data.length, data);
+    }
     /**
      * send reply without payload.
      * This function is thread-safe.
@@ -422,20 +447,29 @@
      */
     private void sendSimpleReplyHeader(int command, int errorCode) throws IOException {
         Log.d(TAG, "sending reply cmd " + command + " err " + errorCode);
+        sendReplyWithData(command, errorCode, 0, null);
+    }
+
+    private void sendReplyWithData(int cmd, int errorCode, int len, byte[] data) throws IOException {
         try {
             mClientLock.lock();
             mReplyBuffer.clear();
-            mReplyBuffer.putInt((command & 0xffff) | 0x43210000);
+            mReplyBuffer.putInt((cmd & 0xffff) | 0x43210000);
             mReplyBuffer.putInt(errorCode);
-            mReplyBuffer.putInt(0); // payload length
+            mReplyBuffer.putInt(len);
+
             if (mOutput != null) {
                 mOutput.write(mReplyBuffer.array(), 0, PROTOCOL_SIMPLE_REPLY_SIZE);
+                if (data != null) {
+                    mOutput.write(data, 0, len);
+                }
             }
+        } catch (IOException e) {
+            throw e;
         } finally {
             mClientLock.unlock();
         }
     }
-
     private class LoopThread extends Thread {
         private Looper mLooper;
         LoopThread(Runnable runnable) {
@@ -513,6 +547,8 @@
                             case CMD_STOP_RECORDING:
                                 handleStopRecording(len);
                                 break;
+                            case CMD_GET_DEVICE_INFO:
+                                handleGetDeviceInfo(len);
                             }
                         }
                     } catch (IOException e) {
diff --git a/suite/audio_quality/executable/src/main.cpp b/suite/audio_quality/executable/src/main.cpp
index 3d72d0d..cf33a0f 100644
--- a/suite/audio_quality/executable/src/main.cpp
+++ b/suite/audio_quality/executable/src/main.cpp
@@ -13,15 +13,17 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-
+#include <getopt.h>
 #include <stdio.h>
 
 #include <utils/String8.h>
 
 #include <UniquePtr.h>
 
+#include "GenericFactory.h"
 #include "Log.h"
 #include "Report.h"
+#include "Settings.h"
 #include "task/TaskGeneric.h"
 #include "task/ModelBuilder.h"
 
@@ -29,30 +31,58 @@
 class CleanupStatics {
 public:
 
-    CleanupStatics() {};
+    CleanupStatics() {
+
+    }
     ~CleanupStatics() {
         Log::Finalize();
         Report::Finalize();
+        // create zip file after log and report files are closed.
+        android::String8 reportDirPath =
+                Settings::Instance()->getSetting(Settings::EREPORT_FILE).getPathDir();
+        android::String8 zipFilename = reportDirPath.getPathLeaf();
+        android::String8 command = android::String8::format("cd %s;zip -r ../%s.zip *",
+                reportDirPath.string(), zipFilename.string());
+        fprintf(stderr, "\n\nexecuting %s\n", command.string());
+        if (system(command.string()) == -1) {
+            fprintf(stderr, "cannot create zip file with command %s\n", command.string());
+        }
+        Settings::Finalize();
     }
 };
 
+void usage(char* bin)
+{
+    fprintf(stderr, "%s [-l log_level][-s serial] test_xml\n", bin);
+}
 int main(int argc, char *argv[])
 {
     if (argc < 2) {
-        fprintf(stderr, "%s [-llog_level] test_xml\n", argv[0]);
+        fprintf(stderr, "%s [-l log_level][-s serial] test_xml\n", argv[0]);
         return 1;
     }
-    int logLevel = 3;
-    int argCurrent = 1;
-    if (strncmp(argv[argCurrent], "-l", 2) == 0) {
-        logLevel = atoi(argv[argCurrent] + 2);
-        argCurrent++;
+    int logLevel = Log::ELogE;
+    char* serial = NULL;
+    int opt;
+    while ((opt = getopt(argc, argv, "l:s:")) != -1) {
+        switch (opt) {
+        case 'l':
+            logLevel = atoi(optarg);
+            break;
+        case 's':
+            serial = optarg;
+            break;
+        default:
+            usage(argv[0]);
+            return 1;
+        }
     }
-    if (argCurrent == argc) {
-        fprintf(stderr, "wrong arguments");
+    if (optind >= argc) {
+        usage(argv[0]);
         return 1;
     }
-    android::String8 xmlFile(argv[argCurrent]);
+
+    android::String8 xmlFile(argv[optind]);
 
     android::String8 dirName;
     if (!FileUtil::prepare(dirName)) {
@@ -61,6 +91,14 @@
     }
 
     UniquePtr<CleanupStatics> staticStuffs(new CleanupStatics());
+    if (Settings::Instance() == NULL) {
+        fprintf(stderr, "caanot create Settings");
+        return 1;
+    }
+    if (serial != NULL) {
+        android::String8 strSerial(serial);
+        Settings::Instance()->addSetting(Settings::EADB, strSerial);
+    }
     if (Log::Instance(dirName.string()) == NULL) {
         fprintf(stderr, "cannot create Log");
         return 1;
@@ -73,13 +111,33 @@
         return 1;
     }
 
+    GenericFactory factory;
+    ClientInterface* client = factory.createClientInterface();
+    if (client == NULL) {
+        fprintf(stderr, "cannot create ClientInterface");
+        return 1;
+    }
+    if (!client->init(Settings::Instance()->getSetting(Settings::EADB))) {
+        fprintf(stderr, "cannot init ClientInterface");
+        return 1;
+    }
+    android::String8 deviceInfo;
+    if (!client->getAudio()->getDeviceInfo(deviceInfo)) {
+        fprintf(stderr, "cannot get device info");
+        return 1;
+    }
+    delete client; // release so that it can be used in tests
+    Settings::Instance()->addSetting(Settings::EDEVICE_INFO, deviceInfo);
+
     ModelBuilder modelBuilder;
     UniquePtr<TaskGeneric> topTask(modelBuilder.parseTestDescriptionXml(xmlFile));
     if (topTask.get() == NULL) {
         LOGE("Parsing of %x failed", xmlFile.string());
         return 1;
     }
+    Settings::Instance()->addSetting(Settings::ETEST_XML, xmlFile);
     topTask->run();
+
     return 0;
 }
 
diff --git a/suite/audio_quality/lib/include/GenericFactory.h b/suite/audio_quality/lib/include/GenericFactory.h
index 243a744..9f74b7f 100644
--- a/suite/audio_quality/lib/include/GenericFactory.h
+++ b/suite/audio_quality/lib/include/GenericFactory.h
@@ -18,8 +18,8 @@
 #define CTSAUDIO_GENERIC_FACTORY_H
 
 #include "task/TaskGeneric.h"
+#include "ClientInterface.h"
 
-class ClientInterface;
 
 /**
  * Factory methods for all abstract classes
diff --git a/suite/audio_quality/lib/include/Log.h b/suite/audio_quality/lib/include/Log.h
index 2b75bc2..e3e803c 100644
--- a/suite/audio_quality/lib/include/Log.h
+++ b/suite/audio_quality/lib/include/Log.h
@@ -59,6 +59,8 @@
 #define LOGD(x...) do { Log::Instance()->printf(Log::ELogD, x); } while(0)
 #define LOGV(x...) do { Log::Instance()->printf(Log::ELogV, x); } while(0)
 
+#define MSG(x...) do { Log::Instance()->printf(Log::ELogW, x); } while(0)
+
 #define ASSERT(cond) if(!(cond)) {  Log::Instance()->printf(Log::ELogE, \
         "assertion failed %s %d", __FILE__, __LINE__); \
     Log::Finalize(); \
diff --git a/suite/audio_quality/lib/include/Report.h b/suite/audio_quality/lib/include/Report.h
index 67a0572..248f4b9 100644
--- a/suite/audio_quality/lib/include/Report.h
+++ b/suite/audio_quality/lib/include/Report.h
@@ -37,13 +37,14 @@
 
     void addCasePassed(const android::String8& name);
     void addCaseFailed(const android::String8& name);
-    void printf(const char* fmt, ...);
+
 
 private:
     Report();
     ~Report();
     bool init(const char* dirName);
-    void writeSummary();
+    void writeReport();
+    void printf(const char* fmt, ...);
 
 private:
     static Report* mInstance;
diff --git a/suite/audio_quality/lib/include/Settings.h b/suite/audio_quality/lib/include/Settings.h
index 5cdcd7a..a8cfea5 100644
--- a/suite/audio_quality/lib/include/Settings.h
+++ b/suite/audio_quality/lib/include/Settings.h
@@ -25,13 +25,18 @@
     static Settings* Instance();
     static void Finalize();
     enum SettingType {
-        EADB
+        EADB            = 0, // adb device serial number
+        EREPORT_TIME    = 1,
+        EREPORT_FILE    = 2,
+        EDEVICE_INFO    = 3,
+        ETEST_XML       = 4, // name of test description xml
+        EMAX_SETTINGS   = 4  // not real setting
     };
     void addSetting(SettingType type, const android::String8 setting);
     const android::String8& getSetting(SettingType type);
 private:
     static Settings* mInstance;
-    android::String8 mAdbSetting;
+    android::String8 mSettings[EMAX_SETTINGS + 1];
 };
 
 
diff --git a/suite/audio_quality/lib/include/audio/AudioProtocol.h b/suite/audio_quality/lib/include/audio/AudioProtocol.h
index 83ba922..01e8507 100644
--- a/suite/audio_quality/lib/include/audio/AudioProtocol.h
+++ b/suite/audio_quality/lib/include/audio/AudioProtocol.h
@@ -37,6 +37,7 @@
     uint32_t mVolume;
     uint32_t mId;
     android::sp<Buffer> mBuffer;
+    void* mExtra; // extra data for whatever purpose
 };
 
 class AudioProtocol {
@@ -48,7 +49,8 @@
         ECmdStopPlayback        = 0x12340003,
         ECmdStartRecording      = 0x12340004,
         ECmdStopRecording       = 0x12340005,
-        ECmdLast                = 0x12340006, // not actual command
+        ECmdGetDeviceInfo       = 0x12340006,
+        ECmdLast                = 0x12340007, // not actual command
     };
 
     static const uint32_t REPLY_HEADER_SIZE = 12;
@@ -140,7 +142,13 @@
     virtual ~CmdStopRecording() {};
 };
 
+class CmdGetDeviceInfo: public AudioProtocol {
+public:
+    CmdGetDeviceInfo(ClientSocket& socket)
+        : AudioProtocol(socket, ECmdGetDeviceInfo) {};
+    virtual ~CmdGetDeviceInfo() {};
 
-
+    virtual bool handleReply(const uint32_t* data, AudioParam* param);
+};
 
 #endif // CTSAUDIO_AUDIOPROTOCOL_H
diff --git a/suite/audio_quality/lib/include/audio/RemoteAudio.h b/suite/audio_quality/lib/include/audio/RemoteAudio.h
index 4c587e6..26647c4 100644
--- a/suite/audio_quality/lib/include/audio/RemoteAudio.h
+++ b/suite/audio_quality/lib/include/audio/RemoteAudio.h
@@ -21,6 +21,7 @@
 #include <map>
 
 #include <utils/Looper.h>
+#include <utils/String8.h>
 #include <utils/StrongPointer.h>
 #include <utils/threads.h>
 
@@ -56,6 +57,8 @@
             android::sp<Buffer>& buffer);
     bool waitForRecordingCompletion();
     void stopRecording();
+
+    bool getDeviceInfo(android::String8& data);
     /** should be called before RemoteAudio is destroyed */
     void release();
 
@@ -139,6 +142,7 @@
     android::sp<android::MessageHandler> mDownloadHandler;
     android::sp<android::MessageHandler> mPlaybackHandler;
     android::sp<android::MessageHandler> mRecordingHandler;
+    android::sp<android::MessageHandler> mDeviceInfoHandler;
 
     AudioProtocol* mCmds[AudioProtocol::ECmdLast - AudioProtocol::ECmdStart];
     int mDownloadId;
diff --git a/suite/audio_quality/lib/src/FileUtil.cpp b/suite/audio_quality/lib/src/FileUtil.cpp
index e40b7e3..8c8ea7e 100644
--- a/suite/audio_quality/lib/src/FileUtil.cpp
+++ b/suite/audio_quality/lib/src/FileUtil.cpp
@@ -19,6 +19,7 @@
 #include <errno.h>
 
 #include "Log.h"
+#include "Settings.h"
 #include "StringUtil.h"
 #include "FileUtil.h"
 
@@ -54,9 +55,14 @@
         _LOGD_("mkdir of topdir failed, error %d", errno);
         return false;
     }
+    android::String8 reportTime;
+    if (reportTime.appendFormat("%04d_%02d_%02d_%02d_%02d_%02d", tm->tm_year + 1900,
+                tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec) != 0) {
+            return false;
+    }
+    Settings::Instance()->addSetting(Settings::EREPORT_TIME, reportTime);
     android::String8 path;
-    if (path.appendFormat("%s/%04d_%02d_%02d_%02d_%02d_%02d", reportTopDir,tm->tm_year + 1900,
-            tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec) != 0) {
+    if (path.appendFormat("%s/%s", reportTopDir, reportTime.string()) != 0) {
         return false;
     }
     result = mkdir(path.string(), S_IRWXU);
diff --git a/suite/audio_quality/lib/src/Report.cpp b/suite/audio_quality/lib/src/Report.cpp
index b487836..e6a248c 100644
--- a/suite/audio_quality/lib/src/Report.cpp
+++ b/suite/audio_quality/lib/src/Report.cpp
@@ -15,6 +15,7 @@
  */
 
 #include "Log.h"
+#include "Settings.h"
 #include "StringUtil.h"
 #include "Report.h"
 
@@ -43,7 +44,7 @@
 
 Report::~Report()
 {
-    writeSummary();
+    writeReport();
 }
 
 bool Report::init(const char* dirName)
@@ -52,9 +53,10 @@
         return true;
     }
     android::String8 report;
-    if (report.appendFormat("%s/report.txt", dirName) != 0) {
+    if (report.appendFormat("%s/report.xml", dirName) != 0) {
         return false;
     }
+    Settings::Instance()->addSetting(Settings::EREPORT_FILE, report);
     return FileUtil::init(report.string());
 }
 
@@ -76,17 +78,24 @@
     mFailedCases.push_back(name);
 }
 
-void Report::writeSummary()
+void Report::writeReport()
 {
-    printf("= Test cases executed: %d, passed: %d, failed: %d =",
-            mPassedCases.size() + mFailedCases.size(), mPassedCases.size(), mFailedCases.size());
-    printf("= Failed cases =");
+    printf("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>");
+    printf("<audio-test-results-report report-version=\"1\" creation-time=\"%s\">",
+            Settings::Instance()->getSetting(Settings::EREPORT_TIME).string());
+    printf("  <verifier-info version-name=\"1\" version-code=\"1\" />");
+    printf("  <device-info>");
+    printf("    %s", Settings::Instance()->getSetting(Settings::EDEVICE_INFO).string());
+    printf("  </device-info>");
+    printf("  <audio-test-results xml=\"%s\">",
+            Settings::Instance()->getSetting(Settings::ETEST_XML).string());
     std::list<android::String8>::iterator it;
     for (it = mFailedCases.begin(); it != mFailedCases.end(); it++) {
-        printf("* %s", it->string());
+        printf("    <test title=\"%s\" result=\"fail\" />", it->string());
     }
-    printf("= Passed cases =");
     for (it = mPassedCases.begin(); it != mPassedCases.end(); it++) {
-        printf("* %s", it->string());
+        printf("    <test title=\"%s\" result=\"pass\" />", it->string());
     }
+    printf("  </audio-test-results>");
+    printf("</audio-test-results-report>");
 }
diff --git a/suite/audio_quality/lib/src/Settings.cpp b/suite/audio_quality/lib/src/Settings.cpp
index 4f78fe4..42dd30e 100644
--- a/suite/audio_quality/lib/src/Settings.cpp
+++ b/suite/audio_quality/lib/src/Settings.cpp
@@ -36,23 +36,11 @@
 
 void Settings::addSetting(SettingType type, const android::String8 setting)
 {
-    // TODO key, string can be better if there are large number of settings
-    switch(type) {
-    case EADB:
-        mAdbSetting = setting;
-    default:
-        ASSERT(false);
-    }
+    mSettings[type] = setting;
 }
 const android::String8& Settings::getSetting(SettingType type)
 {
-    switch(type) {
-    case EADB:
-        return mAdbSetting;
-    default:
-        ASSERT(false);
-    }
-    return mAdbSetting; // just for removing compiler warning, will not reach here
+    return mSettings[type];
 }
 
 
diff --git a/suite/audio_quality/lib/src/audio/AudioProtocol.cpp b/suite/audio_quality/lib/src/audio/AudioProtocol.cpp
index bf1ca22..c3457f5 100644
--- a/suite/audio_quality/lib/src/audio/AudioProtocol.cpp
+++ b/suite/audio_quality/lib/src/audio/AudioProtocol.cpp
@@ -19,6 +19,7 @@
 #include <sys/socket.h>
 
 #include <utils/StrongPointer.h>
+#include <utils/UniquePtr.h>
 
 #include "audio/Buffer.h"
 #include "Log.h"
@@ -171,6 +172,26 @@
     return true;
 }
 
+bool CmdGetDeviceInfo::handleReply(const uint32_t* data, AudioParam* param)
+{
+    if (!checkHeaderId(data, ECmdGetDeviceInfo)) {
+        return false;
+    }
+    if (data[1] != 0) { // no endian change for 0
+        LOGE("error in reply %d", ntohl(data[1]));
+        return false;
+    }
+    int len = ntohl(data[2]);
 
+    UniquePtr<char, DefaultDelete<char[]> > infoString(new char[len + 1]);
+    if (!readData(infoString.get(), len)) {
+        return false;
+    }
+    (infoString.get())[len] = 0;
+    LOGI("received data %s from device", infoString.get());
+    android::String8* string = reinterpret_cast<android::String8*>(param->mExtra);
+    string->setTo(infoString.get(), len);
+    return true;
+}
 
 
diff --git a/suite/audio_quality/lib/src/audio/RemoteAudio.cpp b/suite/audio_quality/lib/src/audio/RemoteAudio.cpp
index bb9474b..1156173 100644
--- a/suite/audio_quality/lib/src/audio/RemoteAudio.cpp
+++ b/suite/audio_quality/lib/src/audio/RemoteAudio.cpp
@@ -32,6 +32,7 @@
       mDownloadHandler(new CommandHandler(*this, (int)AudioProtocol::ECmdDownload)),
       mPlaybackHandler(new CommandHandler(*this, (int)AudioProtocol::ECmdStartPlayback)),
       mRecordingHandler(new CommandHandler(*this, (int)AudioProtocol::ECmdStartRecording)),
+      mDeviceInfoHandler(new CommandHandler(*this, (int)AudioProtocol::ECmdGetDeviceInfo)),
       mDownloadId(0)
 {
     mCmds[AudioProtocol::ECmdDownload - AudioProtocol::ECmdStart] = new CmdDownload(socket);
@@ -43,6 +44,8 @@
             new CmdStartRecording(socket);
     mCmds[AudioProtocol::ECmdStopRecording - AudioProtocol::ECmdStart] =
             new CmdStopRecording(socket);
+    mCmds[AudioProtocol::ECmdGetDeviceInfo - AudioProtocol::ECmdStart] =
+                new CmdGetDeviceInfo(socket);
 }
 
 RemoteAudio::~RemoteAudio()
@@ -104,7 +107,6 @@
     if (!AudioProtocol::handleReplyHeader(mSocket, data, id)) {
         return false;
     }
-    AudioParam* param = NULL;
     CommandHandler* handler = NULL;
     if (id == AudioProtocol::ECmdDownload) {
         handler = reinterpret_cast<CommandHandler*>(mDownloadHandler.get());
@@ -112,6 +114,11 @@
         handler = reinterpret_cast<CommandHandler*>(mPlaybackHandler.get());
     } else if (id == AudioProtocol::ECmdStartRecording) {
         handler = reinterpret_cast<CommandHandler*>(mRecordingHandler.get());
+    } else if (id == AudioProtocol::ECmdGetDeviceInfo) {
+        handler = reinterpret_cast<CommandHandler*>(mDeviceInfoHandler.get());
+    }
+    AudioParam* param = NULL;
+    if (handler != NULL) {
         param = &(handler->getParam());
     }
     bool result = mCmds[id - AudioProtocol::ECmdStart]->handleReply(data, param);
@@ -148,6 +155,7 @@
 
 bool RemoteAudio::waitForCompletion(android::sp<android::MessageHandler>& command, int timeInMSec)
 {
+    LOGV("waitForCompletion %d", timeInMSec);
     return toCommandHandler(command)->timedWait(timeInMSec);
 }
 
@@ -190,12 +198,13 @@
     CommandHandler* handler = reinterpret_cast<CommandHandler*>(mDownloadHandler.get());
     id = mDownloadId;
     mDownloadId++;
+    handler->mStateLock.lock();
     handler->getParam().mId = id;
     handler->getParam().mBuffer = buffer;
-    sendCommand(mDownloadHandler);
-    handler->mStateLock.lock();
     handler->mNotifyOnReply = true;
     handler->mStateLock.unlock();
+    sendCommand(mDownloadHandler);
+
     // assume 1Mbps ==> 1000 bits per msec ==> 125 bytes per msec
     int maxWaitTime = CLIENT_WAIT_TIMEOUT_MSEC + buffer->getSize() / 125;
     // client blocked until reply comes from DUT
@@ -299,6 +308,23 @@
     doStop(mRecordingHandler, AudioProtocol::ECmdStopRecording);
 }
 
+bool RemoteAudio::getDeviceInfo(android::String8& data)
+{
+    CommandHandler* handler = reinterpret_cast<CommandHandler*>(mDeviceInfoHandler.get());
+    handler->mStateLock.lock();
+    handler->mNotifyOnReply = true;
+    handler->getParam().mExtra = &data;
+    handler->mStateLock.unlock();
+    sendCommand(mDeviceInfoHandler);
+
+    // client blocked until reply comes from DUT
+    if (!waitForCompletion(mDeviceInfoHandler, CLIENT_WAIT_TIMEOUT_MSEC)) {
+        LOGE("timeout");
+        return false;
+    }
+    return handler->mResult;
+}
+
 /** should be called before RemoteAudio is destroyed */
 void RemoteAudio::release()
 {
@@ -322,11 +348,13 @@
     case AudioProtocol::ECmdStopPlayback:
     case AudioProtocol::ECmdStartRecording:
     case AudioProtocol::ECmdStopRecording:
+    case AudioProtocol::ECmdGetDeviceInfo:
     {
         mResult = (mThread.mCmds[message.what - AudioProtocol::ECmdStart]) \
                 ->sendCommand(mParam);
-        // no post for download. Client blocked until reply comes with time-out
-        if (message.what != AudioProtocol::ECmdDownload) {
+        // no post for download and getdeviceinfo. Client blocked until reply comes with time-out
+        if ((message.what != AudioProtocol::ECmdDownload) &&
+            (message.what != AudioProtocol::ECmdGetDeviceInfo)    ) {
             mClientWait.post();
         }
 
diff --git a/suite/audio_quality/lib/src/task/TaskBatch.cpp b/suite/audio_quality/lib/src/task/TaskBatch.cpp
index f8c77fe..70499fc 100644
--- a/suite/audio_quality/lib/src/task/TaskBatch.cpp
+++ b/suite/audio_quality/lib/src/task/TaskBatch.cpp
@@ -58,10 +58,10 @@
     if (!findStringAttribute(STR_NAME, name) || !findStringAttribute(STR_VERSION, version)) {
         LOGW("TaskBatch::run no name or version information");
     }
-    Report::Instance()->printf("= Test batch %s version %s started. =", name.string(),
+    MSG("= Test batch %s version %s started. =", name.string(),
             version.string());
     bool result = TaskGeneric::forEachChild(runAlways, NULL);
-    Report::Instance()->printf("= Finished Test batch =");
+    MSG("= Finished Test batch =");
     return TaskGeneric::EResultOK;
 }
 
diff --git a/suite/audio_quality/lib/src/task/TaskCase.cpp b/suite/audio_quality/lib/src/task/TaskCase.cpp
index 9cbc6c8..c92e71b 100644
--- a/suite/audio_quality/lib/src/task/TaskCase.cpp
+++ b/suite/audio_quality/lib/src/task/TaskCase.cpp
@@ -300,8 +300,7 @@
     if (!findStringAttribute(STR_NAME, name) || !findStringAttribute(STR_VERSION, version)) {
         LOGW("TaskCase::run no name or version information");
     }
-    Report::Instance()->printf("== Test case %s version %s started ==", name.string(),
-            version.string());
+    MSG("== Test case %s version %s started ==", name.string(), version.string());
     std::list<TaskGeneric*>::iterator i = getChildren().begin();
     std::list<TaskGeneric*>::iterator end = getChildren().end();
     TaskGeneric* setup = *i;
@@ -316,12 +315,12 @@
     TaskGeneric::ExecutionResult result = setup->run();
     TaskGeneric::ExecutionResult resultAction(TaskGeneric::EResultOK);
     if (result != TaskGeneric::EResultOK) {
-        Report::Instance()->printf("== setup stage failed %d ==", result);
+        MSG("== setup stage failed %d ==", result);
         testPassed = false;
     } else {
         resultAction = action->run();
         if (resultAction != TaskGeneric::EResultPass) {
-            Report::Instance()->printf("== action stage failed %d ==", resultAction);
+            MSG("== action stage failed %d ==", resultAction);
             testPassed = false;
         }
         // save done even for failure if possible
@@ -329,19 +328,19 @@
             result = save->run();
         }
         if (result != TaskGeneric::EResultOK) {
-            Report::Instance()->printf("== save stage failed %d ==", result);
+            MSG("== save stage failed %d ==", result);
             testPassed = false;
         }
     }
     if (testPassed) {
         result = TaskGeneric::EResultPass;
-        Report::Instance()->printf("== Case %s Passed ==", name.string());
+        MSG("== Case %s Passed ==", name.string());
         Report::Instance()->addCasePassed(name);
     } else {
         if (resultAction != TaskGeneric::EResultOK) {
             result = resultAction;
         }
-        Report::Instance()->printf("== Case %s Failed ==", name.string());
+        MSG("== Case %s Failed ==", name.string());
         Report::Instance()->addCaseFailed(name);
     }
     // release remote audio for other cases to use
diff --git a/suite/audio_quality/lib/src/task/TaskSave.cpp b/suite/audio_quality/lib/src/task/TaskSave.cpp
index d62b846..8938c1e 100644
--- a/suite/audio_quality/lib/src/task/TaskSave.cpp
+++ b/suite/audio_quality/lib/src/task/TaskSave.cpp
@@ -110,7 +110,7 @@
         LOGE("alloc failed");
         return false;
     }
-    Report::Instance()->printf("=== Values stored ===");
+    MSG("=== Values stored ===");
     for (size_t i = 0; i < listp->size(); i++) {
         UniquePtr<std::list<TaskCase::ValuePair> > values(
                 getTestCase()->findAllValues((*listp)[i]));
@@ -123,11 +123,9 @@
         std::list<TaskCase::ValuePair>::iterator end = values->end();
         for (; it != end; it++) {
             if (it->second.getType() == TaskCase::Value::ETypeDouble) {
-                Report::Instance()->printf("   %s: %f", it->first.string(),
-                        it->second.getDouble());
+                MSG("   %s: %f", it->first.string(), it->second.getDouble());
             } else { //64bit int
-                Report::Instance()->printf("   %s: %lld", it->first.string(),
-                        it->second.getInt64());
+                MSG("   %s: %lld", it->first.string(), it->second.getInt64());
             }
         }
     }
diff --git a/suite/audio_quality/test/ClientInterfaceTest.cpp b/suite/audio_quality/test/ClientInterfaceTest.cpp
index b72be9b..88e502b 100644
--- a/suite/audio_quality/test/ClientInterfaceTest.cpp
+++ b/suite/audio_quality/test/ClientInterfaceTest.cpp
@@ -49,6 +49,15 @@
     // all done in SetUp
 }
 
+TEST_F(ClientInterfaceTest, getDeviceInfoTest) {
+    ClientImpl* client = reinterpret_cast<ClientImpl*>(mClient);
+    android::sp<RemoteAudio>& audio(client->getAudio());
+    android::String8 info;
+
+    ASSERT_TRUE(audio->getDeviceInfo(info));
+    LOGD("device info %s", info.string());
+}
+
 TEST_F(ClientInterfaceTest, PlayTest) {
     ClientImpl* client = reinterpret_cast<ClientImpl*>(mClient);
     android::sp<RemoteAudio>& audio(client->getAudio());
diff --git a/suite/audio_quality/test/ModelBuilderTest.cpp b/suite/audio_quality/test/ModelBuilderTest.cpp
index 49a0c57..c9ba154 100644
--- a/suite/audio_quality/test/ModelBuilderTest.cpp
+++ b/suite/audio_quality/test/ModelBuilderTest.cpp
@@ -41,7 +41,7 @@
 }
 
 TEST_F(ModelBuilderTest, ParsingBatchTest) {
-    android::String8 xmlFile("test_description/all.xml");
+    android::String8 xmlFile("test_description/all_playback.xml");
     TaskGeneric* testBatch = mModelBuilder.parseTestDescriptionXml(xmlFile);
     ASSERT_TRUE(testBatch != NULL);
     //TODO verify TestCase
@@ -49,7 +49,7 @@
 }
 
 TEST_F(ModelBuilderTest, CaseOnlyTest) {
-    android::String8 xmlFile("test_description/all.xml");
+    android::String8 xmlFile("test_description/all_playback.xml");
     TaskGeneric* task = mModelBuilder.parseTestDescriptionXml(xmlFile, true);
     ASSERT_TRUE(task == NULL);
 
diff --git a/suite/audio_quality/test/RemoteAudioFakeTcpTest.cpp b/suite/audio_quality/test/RemoteAudioFakeTcpTest.cpp
index 7d77a9b..d428c17 100644
--- a/suite/audio_quality/test/RemoteAudioFakeTcpTest.cpp
+++ b/suite/audio_quality/test/RemoteAudioFakeTcpTest.cpp
@@ -307,3 +307,24 @@
     mTestSocket.setReadExpectation((char*)stopReply, sizeof(stopReply));
     mRemoteAudio->stopRecording();
 }
+
+TEST_F(RemoteAudioFakeTcpTest, getDeviceInfoTest) {
+    uint32_t prepareSend[] = {
+            U32_ENDIAN_SWAP(AudioProtocol::ECmdGetDeviceInfo),
+            U32_ENDIAN_SWAP(0)
+    };
+    uint32_t prepareReply[] = {
+            U32_ENDIAN_SWAP((AudioProtocol::ECmdGetDeviceInfo & 0xffff) | 0x43210000),
+            0,
+            U32_ENDIAN_SWAP(4),
+            U32_ENDIAN_SWAP(0x30313233)
+    };
+
+    mTestSocket.setSendExpectation((char*)prepareSend, sizeof(prepareSend));
+    // this is reply, but set expectation for reply first as it is sent after send
+    mTestSocket.setReadExpectation((char*)prepareReply, sizeof(prepareReply));
+
+    android::String8 info;
+    ASSERT_TRUE(mRemoteAudio->getDeviceInfo(info));
+    ASSERT_TRUE(info == "0123");
+}
diff --git a/suite/audio_quality/test_description/dut_speaker_calibration.xml b/suite/audio_quality/test_description/dut_speaker_calibration.xml
index f0ddf17..e0a613d 100644
--- a/suite/audio_quality/test_description/dut_speaker_calibration.xml
+++ b/suite/audio_quality/test_description/dut_speaker_calibration.xml
@@ -31,7 +31,7 @@
 			<sequential repeat="8" index="j">
 				<input device="host" id="host_in" gain="100" time="500" sync="complete" />
 				<!-- ------------moving average RMS        min for pass, max for pass                result calculated -->
-				<process method="builtin:rms_mva" input="id:host_in,consti:3000,consti:8000" output="val:rms_$i_$j" />
+				<process method="builtin:rms_mva" input="id:host_in,consti:1000,consti:8000" output="val:rms_$i_$j" />
 				<!-- <message input="val:passfail" output_low="Volume Low" output_ok="Volume OK" output_high="Volume High" /> -->
 			</sequential>
 		</sequential>
diff --git a/tests/core/runner/src/android/test/InstrumentationCtsTestRunner.java b/tests/core/runner/src/android/test/InstrumentationCtsTestRunner.java
index cc7d7b0..6dce943 100644
--- a/tests/core/runner/src/android/test/InstrumentationCtsTestRunner.java
+++ b/tests/core/runner/src/android/test/InstrumentationCtsTestRunner.java
@@ -85,7 +85,6 @@
         System.setProperty("java.io.tmpdir", cacheDir.getAbsolutePath());
         System.setProperty("user.dir", cacheDir.getAbsolutePath());
 
-        TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
 
         mEnvironment = new TestEnvironment();
 
diff --git a/tests/expectations/knownfailures.txt b/tests/expectations/knownfailures.txt
index d742509..9228564 100644
--- a/tests/expectations/knownfailures.txt
+++ b/tests/expectations/knownfailures.txt
@@ -67,6 +67,11 @@
       "org.apache.harmony.luni.tests.java.net.URLConnectionTest",
       "org.apache.harmony.xnet.provider.jsse.NativeCryptoTest#test_SSL_do_handshake_server_timeout"
     ]
+  },
+  {
+    description: "MediaPlayerFlakyNetworkTest tests",
+    name: "android.media.cts.MediaPlayerFlakyNetworkTest",
+    bug: 6782035
   }
 ]
 
diff --git a/tests/src/android/app/cts/ClearTop.java b/tests/src/android/app/cts/ClearTop.java
index fe0b44b..5f608702 100644
--- a/tests/src/android/app/cts/ClearTop.java
+++ b/tests/src/android/app/cts/ClearTop.java
@@ -19,10 +19,11 @@
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
+import android.util.Log;
 
 public class ClearTop extends Activity {
     public static final String WAIT_CLEAR_TASK = "waitClearTask";
-
+    private static final String TAG = "ClearTop";
     public ClearTop() {
     }
 
@@ -36,6 +37,7 @@
 
     @Override
     public void onNewIntent(Intent intent) {
+        Log.i(TAG, "onNewIntent");
         if (LocalScreen.CLEAR_TASK.equals(intent.getAction())) {
             setResult(RESULT_OK);
         } else {
diff --git a/tests/src/android/app/cts/LaunchpadActivity.java b/tests/src/android/app/cts/LaunchpadActivity.java
index 7191e03..2a90055 100644
--- a/tests/src/android/app/cts/LaunchpadActivity.java
+++ b/tests/src/android/app/cts/LaunchpadActivity.java
@@ -272,7 +272,7 @@
         if (!mStarted) {
             mStarted = true;
 
-            mHandler.postDelayed(mTimeout, 5 * 1000);
+            mHandler.postDelayed(mTimeout, 10 * 1000);
 
             final String action = getIntent().getAction();
 
@@ -630,6 +630,7 @@
 
     private final Runnable mTimeout = new Runnable() {
         public void run() {
+            Log.i(TAG, "timeout");
             String msg = "Timeout";
             if (mExpectedReceivers != null && mNextReceiver < mExpectedReceivers.length) {
                 msg = msg + " waiting for " + mExpectedReceivers[mNextReceiver];
diff --git a/tests/src/android/app/cts/TestedActivity.java b/tests/src/android/app/cts/TestedActivity.java
index 39d8f88..b6565bf 100644
--- a/tests/src/android/app/cts/TestedActivity.java
+++ b/tests/src/android/app/cts/TestedActivity.java
@@ -20,8 +20,10 @@
 import android.os.Bundle;
 import android.os.Looper;
 import android.os.MessageQueue;
+import android.util.Log;
 
 public class TestedActivity extends Activity {
+    private static final String TAG = "TestedActivity" ;
     public TestedActivity() {
     }
 
@@ -49,6 +51,7 @@
 
     private class Idler implements MessageQueue.IdleHandler {
         public final boolean queueIdle() {
+            Log.i(TAG, "idle");
             setResult(RESULT_OK);
             finish();
             return false;
diff --git a/tests/src/android/app/cts/TestedScreen.java b/tests/src/android/app/cts/TestedScreen.java
index a96df2c..052fb34 100644
--- a/tests/src/android/app/cts/TestedScreen.java
+++ b/tests/src/android/app/cts/TestedScreen.java
@@ -24,12 +24,13 @@
 import android.os.Message;
 import android.os.MessageQueue;
 import android.os.SystemClock;
+import android.util.Log;
 
 public class TestedScreen extends Activity {
     public static final String WAIT_BEFORE_FINISH = "TestedScreen.WAIT_BEFORE_FINISH";
     public static final String DELIVER_RESULT = "TestedScreen.DELIVER_RESULT";
     public static final String CLEAR_TASK = "TestedScreen.CLEAR_TASK";
-
+    private static final String TAG = "TestedScreen" ;
     public TestedScreen() {
     }
 
@@ -101,6 +102,7 @@
 
     private class Idler implements MessageQueue.IdleHandler {
         public final boolean queueIdle() {
+            Log.i(TAG, "idle");
             if (WAIT_BEFORE_FINISH.equals(getIntent().getAction())) {
                 final Message m = Message.obtain();
                 mHandler.sendMessageAtTime(m, SystemClock.uptimeMillis() + 1000);
diff --git a/tests/src/android/webkit/cts/WebViewOnUiThread.java b/tests/src/android/webkit/cts/WebViewOnUiThread.java
index 0a1547e..bb07d08 100644
--- a/tests/src/android/webkit/cts/WebViewOnUiThread.java
+++ b/tests/src/android/webkit/cts/WebViewOnUiThread.java
@@ -661,12 +661,11 @@
      * @param call The call to make on the UI thread prior to waiting.
      */
     private void callAndWait(Runnable call) {
-        synchronized (this) {
-            Assert.assertTrue("WebViewOnUiThread.load*AndWaitForCompletion calls "
-                    + "may not be mixed with load* calls directly on WebView "
-                    + "without calling waitForLoadCompletion after the load",
-                    !mLoaded);
-        }
+        Assert.assertTrue("WebViewOnUiThread.load*AndWaitForCompletion calls "
+                + "may not be mixed with load* calls directly on WebView "
+                + "without calling waitForLoadCompletion after the load",
+                !isLoaded());
+        clearLoad(); // clear any extraneous signals from a previous load.
         runOnUiThread(call);
         waitForLoadCompletion();
     }
diff --git a/tests/tests/acceleration/Android.mk b/tests/tests/acceleration/Android.mk
index 93c4d51..30a1f51 100644
--- a/tests/tests/acceleration/Android.mk
+++ b/tests/tests/acceleration/Android.mk
@@ -22,6 +22,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsAccelerationTestCases
diff --git a/tests/tests/acceleration/AndroidManifest.xml b/tests/tests/acceleration/AndroidManifest.xml
index 8a2f955..d08827e 100644
--- a/tests/tests/acceleration/AndroidManifest.xml
+++ b/tests/tests/acceleration/AndroidManifest.xml
@@ -19,11 +19,12 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.android.cts.acceleration">
 
+  <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
   <application>
       <uses-library android:name="android.test.runner" />
   </application>
 
-  <instrumentation android:name="android.test.InstrumentationTestRunner"
+  <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                    android:targetPackage="com.android.cts.acceleration.stub"
                    android:label="Tests for the Hardware Acceleration APIs." />
 
diff --git a/tests/tests/accessibility/Android.mk b/tests/tests/accessibility/Android.mk
index ad8f719..ee50eef 100644
--- a/tests/tests/accessibility/Android.mk
+++ b/tests/tests/accessibility/Android.mk
@@ -26,7 +26,7 @@
 
 LOCAL_PACKAGE_NAME := CtsAccessibilityTestCases
 
-LOCAL_STATIC_JAVA_LIBRARIES := ctsutil
+LOCAL_STATIC_JAVA_LIBRARIES := ctsutil ctstestrunner
 
 # This test runner sets up/cleans up the device before/after running the tests.
 LOCAL_CTS_TEST_RUNNER := com.android.cts.tradefed.testtype.AccessibilityTestRunner
diff --git a/tests/tests/accessibility/AndroidManifest.xml b/tests/tests/accessibility/AndroidManifest.xml
index affe0c2..53b9cc3 100644
--- a/tests/tests/accessibility/AndroidManifest.xml
+++ b/tests/tests/accessibility/AndroidManifest.xml
@@ -19,11 +19,12 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="android.view.cts.accessibility">
 
+  <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
   <application android:theme="@android:style/Theme.Holo.NoActionBar" >
       <uses-library android:name="android.test.runner"/>
   </application>
 
-  <instrumentation android:name="android.test.InstrumentationTestRunner"
+  <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                    android:targetPackage="android.view.cts.accessibility"
                    android:label="Tests for the accessibility APIs."/>
 
diff --git a/tests/tests/accessibilityservice/Android.mk b/tests/tests/accessibilityservice/Android.mk
index ce92944..029602a 100644
--- a/tests/tests/accessibilityservice/Android.mk
+++ b/tests/tests/accessibilityservice/Android.mk
@@ -20,6 +20,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src) \
   src/android/accessibilityservice/IAccessibilityServiceDelegate.aidl \
   src/android/accessibilityservice/IAccessibilityServiceDelegateConnection.aidl
diff --git a/tests/tests/accessibilityservice/AndroidManifest.xml b/tests/tests/accessibilityservice/AndroidManifest.xml
index 3f5de30..c000460 100644
--- a/tests/tests/accessibilityservice/AndroidManifest.xml
+++ b/tests/tests/accessibilityservice/AndroidManifest.xml
@@ -42,7 +42,7 @@
 
   </application>
 
-  <instrumentation android:name="android.test.InstrumentationTestRunner"
+  <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                    android:targetPackage="com.android.cts.accessibilityservice"
                    android:label="Tests for the accessibility APIs."/>
 
diff --git a/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityActivityTestCase.java b/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityActivityTestCase.java
index 97f4359..a5d92ee 100644
--- a/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityActivityTestCase.java
+++ b/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityActivityTestCase.java
@@ -33,6 +33,7 @@
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.test.ActivityInstrumentationTestCase2;
+import android.util.Log;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -52,12 +53,27 @@
         public boolean accept(AccessibilityEvent event);
     }
 
+    private static final boolean DEBUG = false;
+
+    private static final String LOG_TAG = AccessibilityActivityTestCase.class.getSimpleName();
+
     /**
      * Timeout required for pending Binder calls or event processing to
      * complete.
      */
     public static final long TIMEOUT_ASYNC_PROCESSING = 5000;
 
+    /**
+     * The timeout after the last accessibility event to consider the device idle.
+     */
+    public static final long TIMEOUT_ACCESSIBILITY_STATE_IDLE = 100;
+
+    /**
+     * Instance for detecting the next accessibility event.
+     */
+    private static final NextAccessibilityEventWatcher sNextEventWatcher =
+            new NextAccessibilityEventWatcher();
+
     private static AccessibilityInteractionBridge sInteractionBridge;
 
     /**
@@ -70,6 +86,7 @@
     @Override
     public void setUp() throws Exception {
         super.setUp();
+        waitForAccessibilityStateIdle();
         startActivityAndWaitForFirstEvent();
     }
 
@@ -123,6 +140,39 @@
     }
 
     /**
+     * Waits for idle accessibility state.
+     */
+    private void waitForAccessibilityStateIdle() throws Exception {
+        AccessibilityEvent awaitedEvent = null;
+        try {
+            do {
+                awaitedEvent = getInteractionBridge().executeCommandAndWaitForAccessibilityEvent(
+                        sNextEventWatcher, sNextEventWatcher, TIMEOUT_ACCESSIBILITY_STATE_IDLE);
+            } while (awaitedEvent != null);
+        } catch (TimeoutException te) {
+            /* success - no event within the timeout - do nothing */
+        }
+    }
+
+    /**
+     * Dummy implementation that matches every event and does nothing.
+     */
+    private static class NextAccessibilityEventWatcher implements Runnable,
+            AccessibilityEventFilter {
+        @Override
+        public boolean accept(AccessibilityEvent event) {
+            if (DEBUG) {
+                Log.i(LOG_TAG, "Watcher event: " + event);
+            }
+            return true;
+        }
+        @Override
+        public void run() {
+            /* do nothing */
+        }
+    }
+
+    /**
      * This class serves as a bridge for querying the screen content.
      * The bride is connected of a delegating accessibility service.
      */
@@ -165,7 +215,7 @@
         /**
          * Flag whether we are waiting for a specific event.
          */
-        private volatile boolean mWaitingForEventDelivery;
+        private boolean mWaitingForEventDelivery;
 
         /**
          * Queue with received events.
@@ -178,9 +228,6 @@
         }
 
         public void onAccessibilityEvent(AccessibilityEvent event) {
-            if (!mWaitingForEventDelivery) {
-                return;
-            }
             synchronized (mLock) {
                 mLock.notifyAll();
                 if (mWaitingForEventDelivery) {
@@ -232,8 +279,7 @@
                             " not installed.");
                 }
 
-                throw new IllegalStateException("Delegating Accessibility Service not running."
-                         + "(Settings -> Accessibility -> Delegating Accessibility Service)");
+                throw new IllegalStateException("Delegating Accessibility Service not running.");
             }
 
             Intent intent = new Intent().setClassName(DELEGATING_SERVICE_PACKAGE,
@@ -281,8 +327,8 @@
                         /* do nothing */
                     }
                 });
-                mInitialized = true;
                 synchronized (mLock) {
+                    mInitialized = true;
                     mLock.notifyAll();
                 }
             } catch (RemoteException re) {
@@ -294,8 +340,9 @@
          * {@inheritDoc ServiceConnection#onServiceDisconnected(ComponentName)}
          */
         public void onServiceDisconnected(ComponentName name) {
-            mInitialized = false;
-            /* do nothing */
+            synchronized (mLock) {
+                mInitialized = false;
+            }
         }
 
         /**
@@ -463,22 +510,22 @@
          * to a given timeout.
          *
          * @param command The command to execute before starting to wait for the event.
-         * @param filter Filter that recognizes the epected event.
+         * @param filter Filter that recognizes the expected event.
          * @param timeoutMillis The max wait time in milliseconds.
          */
         public AccessibilityEvent executeCommandAndWaitForAccessibilityEvent(Runnable command,
                 AccessibilityEventFilter filter, long timeoutMillis)
                 throws TimeoutException, Exception {
-            // Prepare to wait for an event.
-            mWaitingForEventDelivery = true;
-            // Execute the command.
-            command.run();
             synchronized (mLock) {
+                mEventQueue.clear();
+                // Prepare to wait for an event.
+                mWaitingForEventDelivery = true;
+                // Execute the command.
+                command.run();
                 try {
                     // Wait for the event.
                     final long startTimeMillis = SystemClock.uptimeMillis();
                     while (true) {
-                        mLock.notifyAll();
                         // Drain the event queue
                         while (!mEventQueue.isEmpty()) {
                             AccessibilityEvent event = mEventQueue.remove(0);
@@ -495,6 +542,7 @@
                             throw new TimeoutException("Expected event not received within: "
                                     + timeoutMillis + " ms.");
                         }
+                        mLock.notifyAll();
                         try {
                             mLock.wait(remainingTimeMillis);
                         } catch (InterruptedException ie) {
diff --git a/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityWindowQueryTest.java b/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityWindowQueryTest.java
index e0ec789..f65627c 100644
--- a/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityWindowQueryTest.java
+++ b/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityWindowQueryTest.java
@@ -321,80 +321,54 @@
 
     @MediumTest
     public void testPerformGlobalActionBack() throws Exception {
-        // Get the root node info.
-        final AccessibilityNodeInfo root = getInteractionBridge().getRootInActiveWindow();
+        assertTrue(getInteractionBridge().performGlobalAction(
+                AccessibilityService.GLOBAL_ACTION_BACK));
 
-        AccessibilityEvent expected = getInteractionBridge()
-                .executeCommandAndWaitForAccessibilityEvent(new Runnable() {
-            @Override
-            public void run() {
-                getInteractionBridge().performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
-            }
-        }, new AccessibilityEventFilter() {
-            @Override
-            public boolean accept(AccessibilityEvent event) {
-                return (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED)
-                        && "com.android.launcher".equals(event.getPackageName());
-            }
-        },
-        TIMEOUT_ASYNC_PROCESSING);
-
-        // Check if the expected event was received.
-        assertNotNull(expected);
+        // Sleep a bit so the UI is settles.
+        SystemClock.sleep(3000);
     }
 
     @MediumTest
     public void testPerformGlobalActionHome() throws Exception {
-        // Get the root node info.
-        final AccessibilityNodeInfo root = getInteractionBridge().getRootInActiveWindow();
+        assertTrue(getInteractionBridge().performGlobalAction(
+                AccessibilityService.GLOBAL_ACTION_HOME));
 
-        AccessibilityEvent expected = getInteractionBridge()
-                .executeCommandAndWaitForAccessibilityEvent(new Runnable() {
-            @Override
-            public void run() {
-                getInteractionBridge().performGlobalAction(AccessibilityService.GLOBAL_ACTION_HOME);
-            }
-        }, new AccessibilityEventFilter() {
-            @Override
-            public boolean accept(AccessibilityEvent event) {
-                return (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED)
-                    && "com.android.launcher".equals(event.getPackageName());
-            }
-        },
-        TIMEOUT_ASYNC_PROCESSING);
-
-        // Check if the expected event was received.
-        assertNotNull(expected);
+        // Sleep a bit so the UI is settles.
+        SystemClock.sleep(3000);
     }
 
     @MediumTest
     public void testPerformGlobalActionRecents() throws Exception {
-        // Get the root node info.
-        final AccessibilityNodeInfo root = getInteractionBridge().getRootInActiveWindow();
-
         // Check whether the action succeeded.
         assertTrue(getInteractionBridge().performGlobalAction(
                 AccessibilityService.GLOBAL_ACTION_RECENTS));
 
-        // Sleep a bit so the recents UI is shown.
+        // Sleep a bit so the UI is settles.
         SystemClock.sleep(3000);
 
         // Clean up.
-        getInteractionBridge().performGlobalAction(AccessibilityService.GLOBAL_ACTION_HOME);
+        getInteractionBridge().performGlobalAction(
+                AccessibilityService.GLOBAL_ACTION_BACK);
+
+        // Sleep a bit so the UI is settles.
+        SystemClock.sleep(3000);
     }
 
     @MediumTest
     public void testPerformGlobalActionNotifications() throws Exception {
-        // Get the root node info.
-        final AccessibilityNodeInfo root = getInteractionBridge().getRootInActiveWindow();
-
         // Perform the action under test
-        final boolean handled = getInteractionBridge().performGlobalAction(
-                AccessibilityService.GLOBAL_ACTION_NOTIFICATIONS);
-        assertTrue(handled);
+        assertTrue(getInteractionBridge().performGlobalAction(
+                AccessibilityService.GLOBAL_ACTION_NOTIFICATIONS));
+
+        // Sleep a bit so the UI is settles.
+        SystemClock.sleep(3000);
 
         // Clean up.
-        getInteractionBridge().performGlobalAction(AccessibilityService.GLOBAL_ACTION_HOME);
+        assertTrue(getInteractionBridge().performGlobalAction(
+                AccessibilityService.GLOBAL_ACTION_BACK));
+
+        // Sleep a bit so the UI is settles.
+        SystemClock.sleep(3000);
     }
 
     @MediumTest
diff --git a/tests/tests/accounts/Android.mk b/tests/tests/accounts/Android.mk
index 2806bbe..e4536d4 100644
--- a/tests/tests/accounts/Android.mk
+++ b/tests/tests/accounts/Android.mk
@@ -23,7 +23,7 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
-LOCAL_STATIC_JAVA_LIBRARIES += android-common
+LOCAL_STATIC_JAVA_LIBRARIES += android-common ctstestrunner
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
diff --git a/tests/tests/accounts/AndroidManifest.xml b/tests/tests/accounts/AndroidManifest.xml
index a54d423..6020636 100644
--- a/tests/tests/accounts/AndroidManifest.xml
+++ b/tests/tests/accounts/AndroidManifest.xml
@@ -23,6 +23,7 @@
     <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
     <uses-permission android:name="android.permission.USE_CREDENTIALS" />
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
 
     <application>
         <uses-library android:name="android.test.runner" />
@@ -38,7 +39,7 @@
         </service>
     </application>
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="android.accounts.cts"
                      android:label="CTS tests for android.accounts"/>
 
diff --git a/tests/tests/admin/Android.mk b/tests/tests/admin/Android.mk
index 8c71e0c..1affed6 100644
--- a/tests/tests/admin/Android.mk
+++ b/tests/tests/admin/Android.mk
@@ -22,6 +22,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsAdminTestCases
diff --git a/tests/tests/admin/AndroidManifest.xml b/tests/tests/admin/AndroidManifest.xml
index 102c7ec..7ce29aa 100644
--- a/tests/tests/admin/AndroidManifest.xml
+++ b/tests/tests/admin/AndroidManifest.xml
@@ -19,13 +19,14 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.android.cts.admin">
 
+  <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
   <application>
 
       <uses-library android:name="android.test.runner"/>
 
   </application>
 
-  <instrumentation android:name="android.test.InstrumentationTestRunner"
+  <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                    android:targetPackage="android.deviceadmin.cts"
                    android:label="Tests for the admin APIs."/>
 
diff --git a/tests/tests/animation/Android.mk b/tests/tests/animation/Android.mk
index 95cc614..a83bb65 100644
--- a/tests/tests/animation/Android.mk
+++ b/tests/tests/animation/Android.mk
@@ -27,6 +27,8 @@
 # All tests should include android.test.runner.
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_SDK_VERSION := current
diff --git a/tests/tests/animation/AndroidManifest.xml b/tests/tests/animation/AndroidManifest.xml
index f18d416..2212643 100644
--- a/tests/tests/animation/AndroidManifest.xml
+++ b/tests/tests/animation/AndroidManifest.xml
@@ -17,7 +17,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.animation">
     <uses-sdk android:minSdkVersion="11" />
-    <uses-permission android:name="android.permission.INJECT_EVENTS"></uses-permission>
+    <uses-permission android:name="android.permission.INJECT_EVENTS" />
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <activity android:name="android.animation.cts.AnimationActivity"
             android:label="AnimationActivity"/>
@@ -26,7 +27,7 @@
         <uses-library android:name="android.test.runner" />
     </application>
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.animation"
                      android:label="CTS tests for android.animation package"/>
 </manifest>
diff --git a/tests/tests/animation/src/android/animation/cts/AnimatorTest.java b/tests/tests/animation/src/android/animation/cts/AnimatorTest.java
index f460c14..5f07afb 100644
--- a/tests/tests/animation/src/android/animation/cts/AnimatorTest.java
+++ b/tests/tests/animation/src/android/animation/cts/AnimatorTest.java
@@ -94,7 +94,11 @@
     public void testCancel() throws Throwable {
         startAnimation(mAnimator);
         Thread.sleep(100);
-        mAnimator.cancel();
+        runTestOnUiThread(new Runnable() {
+            public void run() {
+                mAnimator.cancel();
+            }
+        });
         assertFalse(mAnimator.isRunning());
     }
 
diff --git a/tests/tests/app/Android.mk b/tests/tests/app/Android.mk
index 58d0dcd..8d5877d 100644
--- a/tests/tests/app/Android.mk
+++ b/tests/tests/app/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsAppTestCases
diff --git a/tests/tests/app/AndroidManifest.xml b/tests/tests/app/AndroidManifest.xml
index 54fcf12..af7d997 100644
--- a/tests/tests/app/AndroidManifest.xml
+++ b/tests/tests/app/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.app">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/app/src/android/app/cts/AlarmManagerTest.java b/tests/tests/app/src/android/app/cts/AlarmManagerTest.java
index e448a9d..0780101 100644
--- a/tests/tests/app/src/android/app/cts/AlarmManagerTest.java
+++ b/tests/tests/app/src/android/app/cts/AlarmManagerTest.java
@@ -22,6 +22,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.cts.util.PollingCheck;
 import android.os.SystemClock;
 import android.test.AndroidTestCase;
 
@@ -38,8 +39,8 @@
     private long mWakeupTime;
     private MockAlarmReceiver mMockAlarmReceiver;
 
-    private final int TIME_DELTA = 200;
-    private final int TIME_DELAY = 2000;
+    private final int TIME_DELTA = 1000;
+    private final int TIME_DELAY = 5000;
 
     class Sync {
         public boolean mIsConnected;
@@ -73,32 +74,48 @@
         mMockAlarmReceiver.setAlarmedFalse();
         mWakeupTime = System.currentTimeMillis() + SNOOZE_DELAY;
         mAlarmManager.set(AlarmManager.RTC_WAKEUP, mWakeupTime, mSender);
-        Thread.sleep(SNOOZE_DELAY + TIME_DELAY);
-        assertTrue(mMockAlarmReceiver.alarmed);
+        new PollingCheck(SNOOZE_DELAY + TIME_DELAY) {
+            @Override
+            protected boolean check() {
+                return mMockAlarmReceiver.alarmed;
+            }
+        }.run();
         assertEquals(mMockAlarmReceiver.rtcTime, mWakeupTime, TIME_DELTA);
 
         // test parameter type is RTC
         mMockAlarmReceiver.setAlarmedFalse();
         mWakeupTime = System.currentTimeMillis() + SNOOZE_DELAY;
         mAlarmManager.set(AlarmManager.RTC, mWakeupTime, mSender);
-        Thread.sleep(SNOOZE_DELAY + TIME_DELAY);
-        assertTrue(mMockAlarmReceiver.alarmed);
+        new PollingCheck(SNOOZE_DELAY + TIME_DELAY) {
+            @Override
+            protected boolean check() {
+                return mMockAlarmReceiver.alarmed;
+            }
+        }.run();
         assertEquals(mMockAlarmReceiver.rtcTime, mWakeupTime, TIME_DELTA);
 
         // test parameter type is ELAPSED_REALTIME
         mMockAlarmReceiver.setAlarmedFalse();
         mWakeupTime = SystemClock.elapsedRealtime() + SNOOZE_DELAY;
         mAlarmManager.set(AlarmManager.ELAPSED_REALTIME, mWakeupTime, mSender);
-        Thread.sleep(SNOOZE_DELAY + TIME_DELAY);
-        assertTrue(mMockAlarmReceiver.alarmed);
+        new PollingCheck(SNOOZE_DELAY + TIME_DELAY) {
+            @Override
+            protected boolean check() {
+                return mMockAlarmReceiver.alarmed;
+            }
+        }.run();
         assertEquals(mMockAlarmReceiver.elapsedTime, mWakeupTime, TIME_DELTA);
 
         // test parameter type is ELAPSED_REALTIME_WAKEUP
         mMockAlarmReceiver.setAlarmedFalse();
         mWakeupTime = SystemClock.elapsedRealtime() + SNOOZE_DELAY;
         mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, mWakeupTime, mSender);
-        Thread.sleep(SNOOZE_DELAY + TIME_DELAY);
-        assertTrue(mMockAlarmReceiver.alarmed);
+        new PollingCheck(SNOOZE_DELAY + TIME_DELAY) {
+            @Override
+            protected boolean check() {
+                return mMockAlarmReceiver.alarmed;
+            }
+        }.run();
         assertEquals(mMockAlarmReceiver.elapsedTime, mWakeupTime, TIME_DELTA);
     }
 
@@ -109,19 +126,31 @@
         mMockAlarmReceiver.setAlarmedFalse();
         mWakeupTime = -1000;
         mAlarmManager.set(AlarmManager.RTC, mWakeupTime, mSender);
-        Thread.sleep(TIME_DELAY);
-        assertTrue(mMockAlarmReceiver.alarmed);
+        new PollingCheck(TIME_DELAY) {
+            @Override
+            protected boolean check() {
+                return mMockAlarmReceiver.alarmed;
+            }
+        }.run();
     }
 
     public void testSetRepeating() throws Exception {
         mMockAlarmReceiver.setAlarmedFalse();
         mWakeupTime = System.currentTimeMillis() + SNOOZE_DELAY;
         mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, mWakeupTime, TIME_DELAY / 2, mSender);
-        Thread.sleep(SNOOZE_DELAY + TIME_DELAY);
-        assertTrue(mMockAlarmReceiver.alarmed);
+        new PollingCheck(SNOOZE_DELAY + TIME_DELAY) {
+            @Override
+            protected boolean check() {
+                return mMockAlarmReceiver.alarmed;
+            }
+        }.run();
         mMockAlarmReceiver.setAlarmedFalse();
-        Thread.sleep(TIME_DELAY);
-        assertTrue(mMockAlarmReceiver.alarmed);
+        new PollingCheck(TIME_DELAY) {
+            @Override
+            protected boolean check() {
+                return mMockAlarmReceiver.alarmed;
+            }
+        }.run();
         mAlarmManager.cancel(mSender);
     }
 
@@ -129,11 +158,19 @@
         mMockAlarmReceiver.setAlarmedFalse();
         mWakeupTime = System.currentTimeMillis() + SNOOZE_DELAY;
         mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, mWakeupTime, 1000, mSender);
-        Thread.sleep(SNOOZE_DELAY + TIME_DELAY);
-        assertTrue(mMockAlarmReceiver.alarmed);
+        new PollingCheck(SNOOZE_DELAY + TIME_DELAY) {
+            @Override
+            protected boolean check() {
+                return mMockAlarmReceiver.alarmed;
+            }
+        }.run();
         mMockAlarmReceiver.setAlarmedFalse();
-        Thread.sleep(TIME_DELAY);
-        assertTrue(mMockAlarmReceiver.alarmed);
+        new PollingCheck(TIME_DELAY) {
+            @Override
+            protected boolean check() {
+                return mMockAlarmReceiver.alarmed;
+            }
+        }.run();
         mAlarmManager.cancel(mSender);
         Thread.sleep(TIME_DELAY);
         mMockAlarmReceiver.setAlarmedFalse();
diff --git a/tests/tests/app/src/android/app/cts/DownloadManagerTest.java b/tests/tests/app/src/android/app/cts/DownloadManagerTest.java
index 1da6af9..d3029ea 100644
--- a/tests/tests/app/src/android/app/cts/DownloadManagerTest.java
+++ b/tests/tests/app/src/android/app/cts/DownloadManagerTest.java
@@ -27,10 +27,16 @@
 import android.net.Uri;
 import android.os.Environment;
 import android.os.ParcelFileDescriptor;
+import android.os.SystemClock;
 import android.test.AndroidTestCase;
+import android.text.format.DateUtils;
 import android.webkit.cts.CtsTestServer;
 
+import com.google.android.collect.Sets;
+
 import java.io.File;
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -42,6 +48,9 @@
      */
     private static final int MINIMUM_DOWNLOAD_BYTES = 55 * 1024 * 1024;
 
+    private static final long SHORT_TIMEOUT = 5 * DateUtils.SECOND_IN_MILLIS;
+    private static final long LONG_TIMEOUT = 2 * DateUtils.MINUTE_IN_MILLIS;
+
     private DownloadManager mDownloadManager;
 
     private CtsTestServer mWebServer;
@@ -61,8 +70,7 @@
     }
 
     public void testDownloadManager() throws Exception {
-        DownloadCompleteReceiver receiver =
-                new DownloadCompleteReceiver(2, TimeUnit.SECONDS.toMillis(3));
+        final DownloadCompleteReceiver receiver = new DownloadCompleteReceiver();
         try {
             IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
             mContext.registerReceiver(receiver, intentFilter);
@@ -76,7 +84,7 @@
             assertDownloadQueryableById(goodId);
             assertDownloadQueryableById(badId);
 
-            receiver.waitForDownloadComplete();
+            receiver.waitForDownloadComplete(SHORT_TIMEOUT, goodId, badId);
 
             assertDownloadQueryableByStatus(DownloadManager.STATUS_SUCCESSFUL);
             assertDownloadQueryableByStatus(DownloadManager.STATUS_FAILED);
@@ -89,14 +97,13 @@
     }
 
     public void testMinimumDownload() throws Exception {
-        DownloadCompleteReceiver receiver =
-                new DownloadCompleteReceiver(1, TimeUnit.MINUTES.toMillis(2));
+        final DownloadCompleteReceiver receiver = new DownloadCompleteReceiver();
         try {
             IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
             mContext.registerReceiver(receiver, intentFilter);
 
             long id = mDownloadManager.enqueue(new Request(getMinimumDownloadUrl()));
-            receiver.waitForDownloadComplete();
+            receiver.waitForDownloadComplete(LONG_TIMEOUT, id);
 
             ParcelFileDescriptor fileDescriptor = mDownloadManager.openDownloadedFile(id);
             assertEquals(MINIMUM_DOWNLOAD_BYTES, fileDescriptor.getStatSize());
@@ -146,8 +153,7 @@
             assertTrue(publicLocation.delete());
         }
 
-        DownloadCompleteReceiver receiver =
-            new DownloadCompleteReceiver(3, TimeUnit.SECONDS.toMillis(5));
+        final DownloadCompleteReceiver receiver = new DownloadCompleteReceiver();
         try {
             IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
             mContext.registerReceiver(receiver, intentFilter);
@@ -168,7 +174,7 @@
             int allDownloads = getTotalNumberDownloads();
             assertEquals(3, allDownloads);
 
-            receiver.waitForDownloadComplete();
+            receiver.waitForDownloadComplete(SHORT_TIMEOUT, uriId, extFileId, publicId);
 
             assertSuccessfulDownload(uriId, uriLocation);
             assertSuccessfulDownload(extFileId, extFileLocation);
@@ -198,8 +204,7 @@
             assertTrue(wrongExtLocation.delete());
         }
 
-        DownloadCompleteReceiver receiver =
-            new DownloadCompleteReceiver(2, TimeUnit.SECONDS.toMillis(5));
+        final DownloadCompleteReceiver receiver = new DownloadCompleteReceiver();
         try {
             IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
             mContext.registerReceiver(receiver, intentFilter);
@@ -215,7 +220,7 @@
             int allDownloads = getTotalNumberDownloads();
             assertEquals(2, allDownloads);
 
-            receiver.waitForDownloadComplete();
+            receiver.waitForDownloadComplete(SHORT_TIMEOUT, noExtId, wrongExtId);
 
             assertSuccessfulDownload(noExtId, noExtLocation);
             assertSuccessfulDownload(wrongExtId, wrongExtLocation);
@@ -228,24 +233,45 @@
     }
 
     private class DownloadCompleteReceiver extends BroadcastReceiver {
+        private HashSet<Long> mCompleteIds = Sets.newHashSet();
 
-        private final CountDownLatch mReceiveLatch;
-
-        private final long waitTimeMs;
-
-        public DownloadCompleteReceiver(int numDownload, long waitTimeMs) {
-            this.mReceiveLatch = new CountDownLatch(numDownload);
-            this.waitTimeMs = waitTimeMs;
+        public DownloadCompleteReceiver() {
         }
 
         @Override
         public void onReceive(Context context, Intent intent) {
-            mReceiveLatch.countDown();
+            synchronized (mCompleteIds) {
+                mCompleteIds.add(intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1));
+                mCompleteIds.notifyAll();
+            }
         }
 
-        public void waitForDownloadComplete() throws InterruptedException {
-            assertTrue("Make sure you have WiFi or some other connectivity for this test.",
-                    mReceiveLatch.await(waitTimeMs, TimeUnit.MILLISECONDS));
+        private boolean isCompleteLocked(long... ids) {
+            for (long id : ids) {
+                if (!mCompleteIds.contains(id)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        public void waitForDownloadComplete(long timeoutMillis, long... waitForIds)
+                throws InterruptedException {
+            if (waitForIds.length == 0) {
+                throw new IllegalArgumentException("Missing IDs to wait for");
+            }
+
+            final long startTime = SystemClock.elapsedRealtime();
+            do {
+                synchronized (mCompleteIds) {
+                    mCompleteIds.wait(timeoutMillis);
+                    if (isCompleteLocked(waitForIds)) return;
+                }
+            } while ((SystemClock.elapsedRealtime() - startTime) < timeoutMillis);
+
+            throw new InterruptedException("Timeout waiting for IDs " + Arrays.toString(waitForIds)
+                    + "; received " + mCompleteIds.toString()
+                    + ".  Make sure you have WiFi or some other connectivity for this test.");
         }
     }
 
diff --git a/tests/tests/bluetooth/Android.mk b/tests/tests/bluetooth/Android.mk
index 94c6c19..701730d 100644
--- a/tests/tests/bluetooth/Android.mk
+++ b/tests/tests/bluetooth/Android.mk
@@ -28,6 +28,8 @@
 # All tests should include android.test.runner.
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_SDK_VERSION := current
diff --git a/tests/tests/bluetooth/AndroidManifest.xml b/tests/tests/bluetooth/AndroidManifest.xml
index 486460d..9caa267 100644
--- a/tests/tests/bluetooth/AndroidManifest.xml
+++ b/tests/tests/bluetooth/AndroidManifest.xml
@@ -19,13 +19,14 @@
 
     <uses-permission android:name="android.permission.BLUETOOTH" />
     <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
 
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
 
     <!-- This is a self-instrumenting test package. -->
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.bluetooth"
                      android:label="CTS tests of bluetooth component"/>
 
diff --git a/tests/tests/content/Android.mk b/tests/tests/content/Android.mk
index ae2aee8..6f883b6 100644
--- a/tests/tests/content/Android.mk
+++ b/tests/tests/content/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsContentTestCases
diff --git a/tests/tests/content/AndroidManifest.xml b/tests/tests/content/AndroidManifest.xml
index 8f1d2b7..0d702f4 100644
--- a/tests/tests/content/AndroidManifest.xml
+++ b/tests/tests/content/AndroidManifest.xml
@@ -17,12 +17,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.content">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
 
     </application>
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.stub"
                      android:label="CTS tests of android.content"/>
 </manifest>
diff --git a/tests/tests/database/Android.mk b/tests/tests/database/Android.mk
index 6ad21b3..8557c60 100644
--- a/tests/tests/database/Android.mk
+++ b/tests/tests/database/Android.mk
@@ -21,7 +21,7 @@
 # and when built explicitly put it in the data partition
 LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
 
-LOCAL_STATIC_JAVA_LIBRARIES += android-common ctstestrunner
+LOCAL_STATIC_JAVA_LIBRARIES += android-common ctstestrunner ctstestrunner
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
diff --git a/tests/tests/database/AndroidManifest.xml b/tests/tests/database/AndroidManifest.xml
index dd3855c..602f783 100644
--- a/tests/tests/database/AndroidManifest.xml
+++ b/tests/tests/database/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.database">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/dpi/Android.mk b/tests/tests/dpi/Android.mk
index 2f256c4..a9dbcc3 100644
--- a/tests/tests/dpi/Android.mk
+++ b/tests/tests/dpi/Android.mk
@@ -19,6 +19,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsDpiTestCases
diff --git a/tests/tests/dpi/AndroidManifest.xml b/tests/tests/dpi/AndroidManifest.xml
index 6e141ac..bacfe4a 100644
--- a/tests/tests/dpi/AndroidManifest.xml
+++ b/tests/tests/dpi/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.dpi">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
 
@@ -25,7 +26,7 @@
                 android:configChanges="orientation" />
     </application>
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.dpi"
                      android:label="CTS tests for DPI"/>
 </manifest>
diff --git a/tests/tests/dpi2/Android.mk b/tests/tests/dpi2/Android.mk
index cc11256..92ba992 100644
--- a/tests/tests/dpi2/Android.mk
+++ b/tests/tests/dpi2/Android.mk
@@ -19,7 +19,7 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 # We use the DefaultManifestAttributesTest from the android.cts.dpi package.
-LOCAL_STATIC_JAVA_LIBRARIES := android.cts.dpi
+LOCAL_STATIC_JAVA_LIBRARIES := android.cts.dpi ctstestrunner
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
diff --git a/tests/tests/dpi2/AndroidManifest.xml b/tests/tests/dpi2/AndroidManifest.xml
index f63ff73..0364b10 100644
--- a/tests/tests/dpi2/AndroidManifest.xml
+++ b/tests/tests/dpi2/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.dpi2">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
@@ -26,7 +27,7 @@
          properly for the screen size attributes. -->
     <uses-sdk android:targetSdkVersion="3" />
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.dpi2"
                      android:label="CTS tests for DPI"/>
 </manifest>
diff --git a/tests/tests/drm/Android.mk b/tests/tests/drm/Android.mk
index 6e6ba56..3264c32 100644
--- a/tests/tests/drm/Android.mk
+++ b/tests/tests/drm/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsDrmTestCases
diff --git a/tests/tests/drm/AndroidManifest.xml b/tests/tests/drm/AndroidManifest.xml
index fe515f3..1fc8968 100644
--- a/tests/tests/drm/AndroidManifest.xml
+++ b/tests/tests/drm/AndroidManifest.xml
@@ -17,6 +17,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.drm">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/effect/Android.mk b/tests/tests/effect/Android.mk
index 075dc82..9e27769 100644
--- a/tests/tests/effect/Android.mk
+++ b/tests/tests/effect/Android.mk
@@ -27,6 +27,8 @@
 # All tests should include android.test.runner.
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_SDK_VERSION := current
diff --git a/tests/tests/effect/AndroidManifest.xml b/tests/tests/effect/AndroidManifest.xml
index e410800..1a346ae 100644
--- a/tests/tests/effect/AndroidManifest.xml
+++ b/tests/tests/effect/AndroidManifest.xml
@@ -17,12 +17,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.effect">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
 
     <!-- This is a self-instrumenting test package. -->
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.effect"
                      android:label="CTS tests of android.media.effect component"/>
 
diff --git a/tests/tests/example/Android.mk b/tests/tests/example/Android.mk
index 7e2d8416..c6ef67b 100644
--- a/tests/tests/example/Android.mk
+++ b/tests/tests/example/Android.mk
@@ -28,6 +28,8 @@
 # All tests should include android.test.runner.
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_SDK_VERSION := current
diff --git a/tests/tests/example/AndroidManifest.xml b/tests/tests/example/AndroidManifest.xml
index 37c07b3..ba41cce 100644
--- a/tests/tests/example/AndroidManifest.xml
+++ b/tests/tests/example/AndroidManifest.xml
@@ -21,12 +21,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.example">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
 
     <!-- This is a self-instrumenting test package. -->
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.example"
                      android:label="CTS tests of example component"/>
 
diff --git a/tests/tests/gesture/Android.mk b/tests/tests/gesture/Android.mk
index f4fa8b3..5d44cfc 100755
--- a/tests/tests/gesture/Android.mk
+++ b/tests/tests/gesture/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsGestureTestCases
diff --git a/tests/tests/gesture/AndroidManifest.xml b/tests/tests/gesture/AndroidManifest.xml
index 4690d4d..39e2b90 100755
--- a/tests/tests/gesture/AndroidManifest.xml
+++ b/tests/tests/gesture/AndroidManifest.xml
@@ -18,12 +18,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.gesture">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
 
     <!--  self-instrumenting test package. -->
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.gesture"
                      android:label="CTS tests of android.gesture"/>
 
diff --git a/tests/tests/graphics/Android.mk b/tests/tests/graphics/Android.mk
index 9575dd3..811267a 100644
--- a/tests/tests/graphics/Android.mk
+++ b/tests/tests/graphics/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsGraphicsTestCases
diff --git a/tests/tests/graphics/AndroidManifest.xml b/tests/tests/graphics/AndroidManifest.xml
index 2c5bf23..c052a15 100644
--- a/tests/tests/graphics/AndroidManifest.xml
+++ b/tests/tests/graphics/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.graphics">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/graphics2/Android.mk b/tests/tests/graphics2/Android.mk
index 9c6d46d8..b3e7340 100644
--- a/tests/tests/graphics2/Android.mk
+++ b/tests/tests/graphics2/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsGraphics2TestCases
diff --git a/tests/tests/graphics2/AndroidManifest.xml b/tests/tests/graphics2/AndroidManifest.xml
index e26b962..2392100 100644
--- a/tests/tests/graphics2/AndroidManifest.xml
+++ b/tests/tests/graphics2/AndroidManifest.xml
@@ -19,11 +19,12 @@
     android:versionName="1.0" >
 
     <uses-permission android:name="android.permission.CAMERA" />
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <uses-feature android:name="android.hardware.camera" />
 
     <instrumentation
         android:targetPackage="com.android.cts.graphics2"
-        android:name="android.test.InstrumentationTestRunner" />
+        android:name="android.test.InstrumentationCtsTestRunner" />
 
     <application>
         <uses-library android:name="android.test.runner" />
diff --git a/tests/tests/hardware/Android.mk b/tests/tests/hardware/Android.mk
index dd769fa..76088a0 100644
--- a/tests/tests/hardware/Android.mk
+++ b/tests/tests/hardware/Android.mk
@@ -20,6 +20,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsHardwareTestCases
diff --git a/tests/tests/hardware/AndroidManifest.xml b/tests/tests/hardware/AndroidManifest.xml
index 2293f8f..971d6c7 100644
--- a/tests/tests/hardware/AndroidManifest.xml
+++ b/tests/tests/hardware/AndroidManifest.xml
@@ -18,11 +18,12 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.hardware">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.stub"
                      android:label="CTS tests of android.hardware"/>
 
diff --git a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
index 939a6c2..d0a2bf0 100755
--- a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
@@ -78,8 +78,8 @@
     private int mCameraErrorCode = NO_ERROR;
     private boolean mAutoFocusSucceeded = 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 static final int FOCUS_AREA = 0;
diff --git a/tests/tests/holo/Android.mk b/tests/tests/holo/Android.mk
index 25e10d2..d844116 100644
--- a/tests/tests/holo/Android.mk
+++ b/tests/tests/holo/Android.mk
@@ -22,6 +22,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_AAPT_FLAGS = -c land -c xx_YY -c cs -c 320dpi -c 240dpi -c 213dpi -c 160dpi -c 120dpi
diff --git a/tests/tests/holo/AndroidManifest.xml b/tests/tests/holo/AndroidManifest.xml
index df05cbb..ea53a73 100644
--- a/tests/tests/holo/AndroidManifest.xml
+++ b/tests/tests/holo/AndroidManifest.xml
@@ -18,6 +18,7 @@
         package="com.android.cts.holo">
 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
 
     <application android:hardwareAccelerated="false">
         <uses-library android:name="android.test.runner" />
@@ -53,7 +54,7 @@
 
     </application>
     
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
             android:targetPackage="com.android.cts.holo"
             android:label="CTS tests for the Holo theme" />
 
diff --git a/tests/tests/jni/Android.mk b/tests/tests/jni/Android.mk
index c8c92fd..4f44e15 100644
--- a/tests/tests/jni/Android.mk
+++ b/tests/tests/jni/Android.mk
@@ -28,6 +28,8 @@
 # All tests should include android.test.runner.
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_JNI_SHARED_LIBRARIES := libjnitest
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
diff --git a/tests/tests/jni/AndroidManifest.xml b/tests/tests/jni/AndroidManifest.xml
index 82abd42..c3407d1 100644
--- a/tests/tests/jni/AndroidManifest.xml
+++ b/tests/tests/jni/AndroidManifest.xml
@@ -17,12 +17,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.jni">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
 
     <!-- This is a self-instrumenting test package. -->
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.jni"
                      android:label="CTS tests of calling native code via JNI"/>
 
diff --git a/tests/tests/location/Android.mk b/tests/tests/location/Android.mk
index b53aaa0..b76672c 100644
--- a/tests/tests/location/Android.mk
+++ b/tests/tests/location/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsLocationTestCases
diff --git a/tests/tests/location/AndroidManifest.xml b/tests/tests/location/AndroidManifest.xml
index c402be2..147f0ba 100644
--- a/tests/tests/location/AndroidManifest.xml
+++ b/tests/tests/location/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.location">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
@@ -26,7 +27,7 @@
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
     <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.location"
                      android:label="CTS tests of android.location"/>
 </manifest>
diff --git a/tests/tests/location/src/android/location/cts/LocationManagerTest.java b/tests/tests/location/src/android/location/cts/LocationManagerTest.java
index b316e55..46e777f 100755
--- a/tests/tests/location/src/android/location/cts/LocationManagerTest.java
+++ b/tests/tests/location/src/android/location/cts/LocationManagerTest.java
@@ -36,6 +36,7 @@
 import android.provider.Settings;
 import android.test.InstrumentationTestCase;
 
+import java.lang.Thread;
 import java.util.List;
 import java.lang.Thread;
 
diff --git a/tests/tests/media/Android.mk b/tests/tests/media/Android.mk
index 1e6098f..f7639a4 100644
--- a/tests/tests/media/Android.mk
+++ b/tests/tests/media/Android.mk
@@ -22,7 +22,7 @@
 LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := ctsutil ctstestserver
+LOCAL_STATIC_JAVA_LIBRARIES := ctsutil ctstestserver ctstestrunner
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
diff --git a/tests/tests/media/AndroidManifest.xml b/tests/tests/media/AndroidManifest.xml
index a336e73..2eeef08 100644
--- a/tests/tests/media/AndroidManifest.xml
+++ b/tests/tests/media/AndroidManifest.xml
@@ -18,6 +18,7 @@
     package="com.android.cts.media">
 
     <uses-permission android:name="android.permission.CAMERA" />
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
@@ -59,7 +60,7 @@
         </activity>
     </application>
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.media"
                      android:label="CTS tests of android.media"/>
 
diff --git a/tests/tests/media/src/android/media/cts/MediaCodecListTest.java b/tests/tests/media/src/android/media/cts/MediaCodecListTest.java
new file mode 100644
index 0000000..d89d992
--- /dev/null
+++ b/tests/tests/media/src/android/media/cts/MediaCodecListTest.java
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2012 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.MediaCodecList;
+import android.media.MediaCodecInfo;
+import android.media.MediaCodecInfo.CodecProfileLevel;
+import android.media.MediaCodecInfo.CodecCapabilities;
+import android.test.AndroidTestCase;
+import android.util.Log;
+
+import java.io.File;
+import java.util.List;
+import java.util.ArrayList;
+
+public class MediaCodecListTest extends AndroidTestCase {
+
+    private static final String TAG = "MediaCodecListTest";
+    private static final String MEDIA_CODEC_XML_FILE = "/etc/media_codecs.xml";
+
+    class CodecType {
+        CodecType(String type, boolean isEncoder) {
+            mMimeTypeName = type;
+            mIsEncoder = isEncoder;
+        }
+
+        boolean equals(CodecType codecType) {
+            return (mMimeTypeName.compareTo(codecType.mMimeTypeName) == 0) &&
+                    mIsEncoder == codecType.mIsEncoder;
+        }
+
+        String mMimeTypeName;
+        boolean mIsEncoder;
+    };
+
+    public static void testMediaCodecXmlFileExist() {
+        File file = new File(MEDIA_CODEC_XML_FILE);
+        assertTrue("/etc/media_codecs.xml does not exist", file.exists());
+    }
+
+    public void testRequiredMediaCodecList() {
+        List<CodecType> requiredList = getRequiredCodecTypes();
+        List<CodecType> supportedList = getSupportedCodecTypes();
+        assertTrue(areRequiredCodecTypesSupported(requiredList, supportedList));
+    }
+
+    // H263 baseline profile must be supported
+    public void testIsH263BaselineProfileSupported() {
+        int profile = CodecProfileLevel.H263ProfileBaseline;
+        assertTrue(checkProfileSupported("video/3gpp", false, profile));
+        assertTrue(checkProfileSupported("video/3gpp", true, profile));
+    }
+
+    // AVC baseline profile must be supported
+    public void testIsAVCBaselineProfileSupported() {
+        int profile = CodecProfileLevel.AVCProfileBaseline;
+        assertTrue(checkProfileSupported("video/avc", false, profile));
+        assertTrue(checkProfileSupported("video/avc", true, profile));
+    }
+
+    // MPEG4 simple profile must be supported
+    public void testIsM4VSimpleProfileSupported() {
+        int profile = CodecProfileLevel.MPEG4ProfileSimple;
+        assertTrue(checkProfileSupported("video/mp4v-es", false, profile));
+
+        // FIXME: no support for M4v simple profile video encoder
+        // assertTrue(checkProfileSupported("video/mp4v-es", true, profile));
+    }
+
+    /*
+     * Find whether the given codec is supported
+     */
+    private boolean checkProfileSupported(
+        String codecName, boolean isEncoder, int profile) {
+
+        boolean isSupported = false;
+
+        int codecCount = MediaCodecList.getCodecCount();
+        for (int i = 0; i < codecCount; ++i) {
+            MediaCodecInfo info = MediaCodecList.getCodecInfoAt(i);
+            String[] types = info.getSupportedTypes();
+
+            if (isEncoder != info.isEncoder()) {
+                continue;
+            }
+
+            for (int j = 0; j < types.length; ++j) {
+                if (types[j].compareTo(codecName) == 0) {
+                    CodecCapabilities cap = info.getCapabilitiesForType(types[j]);
+                    CodecProfileLevel[] profileLevels = cap.profileLevels;
+                    for (int k = 0; k < profileLevels.length; ++k) {
+                        if (profileLevels[k].profile == profile) {
+                            return true;
+                        }
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    /*
+     * Find whether all required media codec types are supported
+     */
+    private boolean areRequiredCodecTypesSupported(
+        List<CodecType> requiredList, List<CodecType> supportedList) {
+        for (CodecType requiredCodec: requiredList) {
+            boolean isSupported = false;
+            for (CodecType supportedCodec: supportedList) {
+                if (requiredCodec.equals(supportedCodec)) {
+                    isSupported = true;
+                }
+            }
+            if (!isSupported) {
+                String codec = requiredCodec.mMimeTypeName
+                                + ", " + (requiredCodec.mIsEncoder? "encoder": "decoder");
+                Log.e(TAG, "Media codec (" + codec + ") is not supported");
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /*
+     * Find all the media codec types are supported.
+     */
+    private List<CodecType> getSupportedCodecTypes() {
+        int codecCount = MediaCodecList.getCodecCount();
+        assertTrue("Unexpected media codec count", codecCount > 0);
+        List<CodecType> supportedList = new ArrayList<CodecType>(codecCount);
+        for (int i = 0; i < codecCount; ++i) {
+            MediaCodecInfo info = MediaCodecList.getCodecInfoAt(i);
+            String[] types = info.getSupportedTypes();
+            assertTrue("Unexpected number of supported types", types.length > 0);
+            boolean isEncoder = info.isEncoder();
+            for (int j = 0; j < types.length; ++j) {
+                supportedList.add(new CodecType(types[j], isEncoder));
+            }
+        }
+        return supportedList;
+    }
+
+    /*
+     * This list should be kept in sync with the CCD document
+     * See http://developer.android.com/guide/appendix/media-formats.html
+     */
+    private List<CodecType> getRequiredCodecTypes() {
+        List<CodecType> list = new ArrayList<CodecType>(16);
+
+        // Mandatory audio codecs
+        list.add(new CodecType("audio/amr-wb", false));         // amrwb decoder
+        list.add(new CodecType("audio/amr-wb", true));          // amrwb encoder
+
+        // flac decoder is not omx-based yet
+        // list.add(new CodecType("audio/flac", false));        // flac decoder
+        list.add(new CodecType("audio/flac", true));            // flac encoder
+        list.add(new CodecType("audio/mpeg", false));           // mp3 decoder
+        list.add(new CodecType("audio/mp4a-latm", false));      // aac decoder
+        list.add(new CodecType("audio/mp4a-latm", true));       // aac encoder
+        list.add(new CodecType("audio/vorbis", false));         // vorbis decoder
+        list.add(new CodecType("audio/3gpp", false));           // amrnb decoder
+        list.add(new CodecType("audio/3gpp", true));            // amrnb encoder
+
+        // Mandatory video codecs
+        list.add(new CodecType("video/avc", false));            // avc decoder
+        list.add(new CodecType("video/avc", true));             // avc encoder
+        list.add(new CodecType("video/3gpp", false));           // h263 decoder
+        list.add(new CodecType("video/3gpp", true));            // h263 encoder
+        list.add(new CodecType("video/mp4v-es", false));        // m4v decoder
+        list.add(new CodecType("video/mp4v-es", true));         // m4v encoder
+        list.add(new CodecType("video/x-vnd.on2.vp8", false));  // vp8 decoder
+
+        return list;
+    }
+}
diff --git a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
index 90ed4fc..0c39531 100644
--- a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
@@ -43,14 +43,29 @@
  */
 public class MediaPlayerTest extends MediaPlayerTestBase {
 
-    private static final String RECORDED_FILE =
-                new File(Environment.getExternalStorageDirectory(),
-                "record.out").getAbsolutePath();
+    private String RECORDED_FILE;
 
     private static final int  RECORDED_VIDEO_WIDTH  = 176;
     private static final int  RECORDED_VIDEO_HEIGHT = 144;
     private static final long RECORDED_DURATION_MS  = 3000;
 
+    private File mOutFile;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        RECORDED_FILE = new File(Environment.getExternalStorageDirectory(),
+                "mediaplayer_record.out").getAbsolutePath();
+        mOutFile = new File(RECORDED_FILE);
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        if (mOutFile != null && mOutFile.exists()) {
+            mOutFile.delete();
+        }
+    }
     public void testPlayNullSource() throws Exception {
         try {
             mMediaPlayer.setDataSource((String) null);
diff --git a/tests/tests/media/src/android/media/cts/MediaPlayerTestBase.java b/tests/tests/media/src/android/media/cts/MediaPlayerTestBase.java
index 42aaef1..8b9da47 100644
--- a/tests/tests/media/src/android/media/cts/MediaPlayerTestBase.java
+++ b/tests/tests/media/src/android/media/cts/MediaPlayerTestBase.java
@@ -84,15 +84,10 @@
     protected Context mContext;
     protected Resources mResources;
 
-    /*
-     * InstrumentationTestRunner.onStart() calls Looper.prepare(), which creates a looper
-     * for the current thread. However, since we don't actually call loop() in the test,
-     * any messages queued with that looper will never be consumed. We instantiate the player
-     * in the constructor, before setUp(), so that its constructor does not see the
-     * nonfunctional Looper.
-     */
-    protected MediaPlayer mMediaPlayer = new MediaPlayer();
-    protected MediaPlayer mMediaPlayer2 = new MediaPlayer();
+
+    protected MediaPlayer mMediaPlayer = null;
+    protected MediaPlayer mMediaPlayer2 = null;
+    protected MediaStubActivity mActivity;
 
     public MediaPlayerTestBase() {
         super(MediaStubActivity.class);
@@ -101,6 +96,19 @@
     @Override
     protected void setUp() throws Exception {
         super.setUp();
+        mActivity = getActivity();
+        getInstrumentation().waitForIdleSync();
+        try {
+            runTestOnUiThread(new Runnable() {
+                public void run() {
+                    mMediaPlayer = new MediaPlayer();
+                    mMediaPlayer2 = new MediaPlayer();
+                }
+            });
+        } catch (Throwable e) {
+            e.printStackTrace();
+            fail();
+        }
         mContext = getInstrumentation().getTargetContext();
         mResources = mContext.getResources();
     }
@@ -109,10 +117,13 @@
     protected void tearDown() throws Exception {
         if (mMediaPlayer != null) {
             mMediaPlayer.release();
+            mMediaPlayer = null;
         }
         if (mMediaPlayer2 != null) {
             mMediaPlayer2.release();
+            mMediaPlayer2 = null;
         }
+        mActivity = null;
         super.tearDown();
     }
 
@@ -172,7 +183,7 @@
         final float leftVolume = 0.5f;
         final float rightVolume = 0.5f;
 
-        mMediaPlayer.setDisplay(getActivity().getSurfaceHolder());
+        mMediaPlayer.setDisplay(mActivity.getSurfaceHolder());
         mMediaPlayer.setScreenOnWhilePlaying(true);
         mMediaPlayer.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
             @Override
diff --git a/tests/tests/media/src/android/media/cts/MediaRecorderTest.java b/tests/tests/media/src/android/media/cts/MediaRecorderTest.java
index abbdc31..55be9ac 100644
--- a/tests/tests/media/src/android/media/cts/MediaRecorderTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaRecorderTest.java
@@ -32,6 +32,10 @@
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileOutputStream;
+import java.lang.InterruptedException;
+import java.lang.Runnable;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
 public class MediaRecorderTest extends ActivityInstrumentationTestCase2<MediaStubActivity> {
     private final String TAG = "MediaRecorderTest";
@@ -57,14 +61,7 @@
     private Camera mCamera;
     private MediaStubActivity mActivity = null;
 
-    /*
-     * InstrumentationTestRunner.onStart() calls Looper.prepare(), which creates a looper
-     * for the current thread. However, since we don't actually call loop() in the test,
-     * any messages queued with that looper will never be consumed. We instantiate the recorder
-     * in the constructor, before setUp(), so that its constructor does not see the
-     * nonfunctional Looper.
-     */
-    private MediaRecorder mMediaRecorder = new MediaRecorder();
+    private MediaRecorder mMediaRecorder;
 
     public MediaRecorderTest() {
         super("com.android.cts.media", MediaStubActivity.class);
@@ -74,21 +71,43 @@
                 "record2.out").getAbsolutePath();
     }
 
+    private void completeOnUiThread(final Runnable runnable) {
+        final CountDownLatch latch = new CountDownLatch(1);
+        getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                runnable.run();
+                latch.countDown();
+            }
+        });
+        try {
+            // if UI thread does not run, things will fail anyway
+            assertTrue(latch.await(10, TimeUnit.SECONDS));
+        } catch (java.lang.InterruptedException e) {
+            fail("should not be interrupted");
+        }
+    }
+
     @Override
     protected void setUp() throws Exception {
         mActivity = getActivity();
-        mOutFile = new File(OUTPUT_PATH);
-        mOutFile2 = new File(OUTPUT_PATH2);
-        mMediaRecorder.reset();
-        mMediaRecorder.setOutputFile(OUTPUT_PATH);
-        mMediaRecorder.setOnInfoListener(new OnInfoListener() {
-            public void onInfo(MediaRecorder mr, int what, int extra) {
-                mOnInfoCalled = true;
-            }
-        });
-        mMediaRecorder.setOnErrorListener(new OnErrorListener() {
-            public void onError(MediaRecorder mr, int what, int extra) {
-                mOnErrorCalled = true;
+        completeOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                mMediaRecorder = new MediaRecorder();
+                mOutFile = new File(OUTPUT_PATH);
+                mOutFile2 = new File(OUTPUT_PATH2);
+                mMediaRecorder.setOutputFile(OUTPUT_PATH);
+                mMediaRecorder.setOnInfoListener(new OnInfoListener() {
+                    public void onInfo(MediaRecorder mr, int what, int extra) {
+                        mOnInfoCalled = true;
+                    }
+                });
+                mMediaRecorder.setOnErrorListener(new OnErrorListener() {
+                    public void onError(MediaRecorder mr, int what, int extra) {
+                        mOnErrorCalled = true;
+                    }
+                });
             }
         });
         super.setUp();
@@ -138,7 +157,7 @@
         recordVideoUsingCamera(true);
     }
 
-    public void recordVideoUsingCamera(boolean timelapse) throws Exception {
+    private void recordVideoUsingCamera(boolean timelapse) throws Exception {
         int nCamera = Camera.getNumberOfCameras();
         int durMs = timelapse? 4000: 1000;
         for (int cameraId = 0; cameraId < nCamera; cameraId++) {
@@ -210,6 +229,7 @@
         retriever.setDataSource(fileName);
         String location = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_LOCATION);
         if (location == null) {
+            retriever.release();
             Log.v(TAG, "No location information found in file " + fileName);
             return false;
         }
@@ -230,6 +250,7 @@
         float longitude = Float.parseFloat(location.substring(index));
         assertTrue("Incorrect latitude: " + latitude, Math.abs(latitude - LATITUDE) <= TOLERANCE);
         assertTrue("Incorrect longitude: " + longitude, Math.abs(longitude - LONGITUDE) <= TOLERANCE);
+        retriever.release();
         return true;
     }
 
@@ -256,6 +277,7 @@
         long maxFileSize = MAX_FILE_SIZE * 10;
         recordMedia(maxFileSize, mOutFile2);
         assertFalse(checkLocationInFile(OUTPUT_PATH2));
+        fos.close();
     }
 
     public void testRecordingAudioInRawFormats() throws Exception {
diff --git a/tests/tests/mediastress/Android.mk b/tests/tests/mediastress/Android.mk
index 505d123..f497295 100644
--- a/tests/tests/mediastress/Android.mk
+++ b/tests/tests/mediastress/Android.mk
@@ -22,6 +22,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_JNI_SHARED_LIBRARIES := libctsmediastress_jni
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
diff --git a/tests/tests/mediastress/AndroidManifest.xml b/tests/tests/mediastress/AndroidManifest.xml
index 7388fe3..931a774 100644
--- a/tests/tests/mediastress/AndroidManifest.xml
+++ b/tests/tests/mediastress/AndroidManifest.xml
@@ -18,6 +18,7 @@
         package="com.android.cts.mediastress">
 
     <uses-permission android:name="android.permission.CAMERA" />
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
@@ -38,7 +39,7 @@
         <activity android:name="android.mediastress.cts.NativeMediaActivity"
                   android:label="NativeMedia" />
     </application>
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
             android:targetPackage="com.android.cts.mediastress"
             android:label="Media stress tests InstrumentationRunner" />
 
diff --git a/tests/tests/ndef/Android.mk b/tests/tests/ndef/Android.mk
index 13e5624..70853d9 100644
--- a/tests/tests/ndef/Android.mk
+++ b/tests/tests/ndef/Android.mk
@@ -27,6 +27,8 @@
 # All tests should include android.test.runner.
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_SDK_VERSION := current
diff --git a/tests/tests/ndef/AndroidManifest.xml b/tests/tests/ndef/AndroidManifest.xml
index 4a65818..a7ebb6e 100644
--- a/tests/tests/ndef/AndroidManifest.xml
+++ b/tests/tests/ndef/AndroidManifest.xml
@@ -17,12 +17,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.ndef">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
 
     <!-- This is a self-instrumenting test package. -->
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.ndef"
                      android:label="CTS tests of NDEF data classes"/>
 
diff --git a/tests/tests/net/Android.mk b/tests/tests/net/Android.mk
index 5c70ad4..b327392 100644
--- a/tests/tests/net/Android.mk
+++ b/tests/tests/net/Android.mk
@@ -28,7 +28,7 @@
 
 LOCAL_PACKAGE_NAME := CtsNetTestCases
 
-LOCAL_STATIC_JAVA_LIBRARIES := ctstestserver ctsutil
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestserver ctsutil ctstestrunner
 
 # uncomment when dalvik.annotation.Test* are removed or part of SDK
 #LOCAL_SDK_VERSION := current
diff --git a/tests/tests/net/AndroidManifest.xml b/tests/tests/net/AndroidManifest.xml
index b3556f5..ade6728 100644
--- a/tests/tests/net/AndroidManifest.xml
+++ b/tests/tests/net/AndroidManifest.xml
@@ -22,6 +22,7 @@
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
     <uses-permission android:name="android.permission.WAKE_LOCK" />
@@ -31,7 +32,7 @@
         <uses-library android:name="android.test.runner" />
     </application>
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.net"
                      android:label="CTS tests of android.net"/>
 
diff --git a/tests/tests/net/src/android/net/cts/NetworkInfoTest.java b/tests/tests/net/src/android/net/cts/NetworkInfoTest.java
index e53614b..4a7b4e7 100644
--- a/tests/tests/net/src/android/net/cts/NetworkInfoTest.java
+++ b/tests/tests/net/src/android/net/cts/NetworkInfoTest.java
@@ -53,7 +53,7 @@
     }
 
     private void assertNetworkInfo(NetworkInfo netInfo, String expectedTypeName) {
-        assertEquals(expectedTypeName, netInfo.getTypeName());
+        assertEquals(expectedTypeName.compareToIgnoreCase(netInfo.getTypeName()), 0);
         if(netInfo.isConnectedOrConnecting()) {
             assertTrue(netInfo.isAvailable());
             if (State.CONNECTED == netInfo.getState()) {
diff --git a/tests/tests/net/src/android/net/wifi/cts/WifiConfigurationTest.java b/tests/tests/net/src/android/net/wifi/cts/WifiConfigurationTest.java
index 92a55b2..4480a24 100644
--- a/tests/tests/net/src/android/net/wifi/cts/WifiConfigurationTest.java
+++ b/tests/tests/net/src/android/net/wifi/cts/WifiConfigurationTest.java
@@ -38,10 +38,12 @@
             return;
         }
         List<WifiConfiguration> wifiConfigurations = mWifiManager.getConfiguredNetworks();
-        for (int i = 0; i < wifiConfigurations.size(); i++) {
-            WifiConfiguration wifiConfiguration = wifiConfigurations.get(i);
-            assertNotNull(wifiConfiguration);
-            assertNotNull(wifiConfiguration.toString());
+        if (wifiConfigurations != null) {
+            for (int i = 0; i < wifiConfigurations.size(); i++) {
+                WifiConfiguration wifiConfiguration = wifiConfigurations.get(i);
+                assertNotNull(wifiConfiguration);
+                assertNotNull(wifiConfiguration.toString());
+            }
         }
     }
 }
diff --git a/tests/tests/opengl/Android.mk b/tests/tests/opengl/Android.mk
index 6c533a0..0610c5f 100644
--- a/tests/tests/opengl/Android.mk
+++ b/tests/tests/opengl/Android.mk
@@ -26,7 +26,11 @@
 
 # All tests should include android.test.runner.
 LOCAL_JAVA_LIBRARIES := android.test.runner
+
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_JNI_SHARED_LIBRARIES := libopengltest
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_SDK_VERSION := current
diff --git a/tests/tests/opengl/AndroidManifest.xml b/tests/tests/opengl/AndroidManifest.xml
index ef1af51..4619512 100644
--- a/tests/tests/opengl/AndroidManifest.xml
+++ b/tests/tests/opengl/AndroidManifest.xml
@@ -18,10 +18,11 @@
     android:versionCode="1"
     android:versionName="1.0" >
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <uses-sdk android:minSdkVersion="14" />
     <uses-feature android:glEsVersion="0x00020000"/>
     <instrumentation
-        android:name="android.test.InstrumentationTestRunner"
+        android:name="android.test.InstrumentationCtsTestRunner"
         android:targetPackage="com.android.cts.opengl" />
     <application
         android:icon="@drawable/ic_launcher"
diff --git a/tests/tests/openglperf/Android.mk b/tests/tests/openglperf/Android.mk
index c07969e..2d1767e 100644
--- a/tests/tests/openglperf/Android.mk
+++ b/tests/tests/openglperf/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsOpenGlPerfTestCases
diff --git a/tests/tests/openglperf/AndroidManifest.xml b/tests/tests/openglperf/AndroidManifest.xml
index e47c0bc..540f190 100644
--- a/tests/tests/openglperf/AndroidManifest.xml
+++ b/tests/tests/openglperf/AndroidManifest.xml
@@ -19,6 +19,7 @@
     android:versionName="1.0" >
 
     <uses-feature android:glEsVersion="0x00020000" android:required="true" />
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <uses-permission android:name="android.permission.GET_TASKS" />
     <uses-permission android:name="android.permission.REORDER_TASKS" />
     <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
@@ -26,10 +27,10 @@
     <!-- Two activities are used -->
     <instrumentation
         android:targetPackage="com.replica.replicaisland"
-        android:name="android.test.InstrumentationTestRunner" />
+        android:name="android.test.InstrumentationCtsTestRunner" />
     <instrumentation
         android:targetPackage="com.android.cts.openglperf"
-        android:name="android.test.InstrumentationTestRunner" />
+        android:name="android.test.InstrumentationCtsTestRunner" />
 
     <application
         android:label="@string/app_name" >
diff --git a/tests/tests/os/Android.mk b/tests/tests/os/Android.mk
index 54ebc4a..be0ab83 100644
--- a/tests/tests/os/Android.mk
+++ b/tests/tests/os/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsOsTestCases
diff --git a/tests/tests/os/AndroidManifest.xml b/tests/tests/os/AndroidManifest.xml
index 1ae59a9..64b45be 100644
--- a/tests/tests/os/AndroidManifest.xml
+++ b/tests/tests/os/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.os">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/os/src/android/os/cts/BuildVersionTest.java b/tests/tests/os/src/android/os/cts/BuildVersionTest.java
index f001168..8b33359 100644
--- a/tests/tests/os/src/android/os/cts/BuildVersionTest.java
+++ b/tests/tests/os/src/android/os/cts/BuildVersionTest.java
@@ -29,7 +29,7 @@
 
     private static final String LOG_TAG = "BuildVersionTest";
     private static final Set<String> EXPECTED_RELEASES =
-            new HashSet<String>(Arrays.asList("4.1"));
+	    new HashSet<String>(Arrays.asList("4.1.1", "4.1.2"));
     private static final int EXPECTED_SDK = 16;
 
     @SuppressWarnings("deprecation")
diff --git a/tests/tests/permission/Android.mk b/tests/tests/permission/Android.mk
index 3e81c17..07f20d8 100644
--- a/tests/tests/permission/Android.mk
+++ b/tests/tests/permission/Android.mk
@@ -21,6 +21,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_JNI_SHARED_LIBRARIES := libctspermission_jni
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
diff --git a/tests/tests/permission/AndroidManifest.xml b/tests/tests/permission/AndroidManifest.xml
index f824c7d..1e1465d 100644
--- a/tests/tests/permission/AndroidManifest.xml
+++ b/tests/tests/permission/AndroidManifest.xml
@@ -39,7 +39,7 @@
         package. That runner cannot be added to this package either, since it
         relies on hidden APIs.
     -->
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.permission"
                      android:label="CTS tests of com.android.cts.permission"/>
 
diff --git a/tests/tests/permission2/Android.mk b/tests/tests/permission2/Android.mk
index d461be4..86a8bc7 100755
--- a/tests/tests/permission2/Android.mk
+++ b/tests/tests/permission2/Android.mk
@@ -21,6 +21,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common mms-common
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsPermission2TestCases
diff --git a/tests/tests/permission2/AndroidManifest.xml b/tests/tests/permission2/AndroidManifest.xml
index 8f77fad..8cc7737 100755
--- a/tests/tests/permission2/AndroidManifest.xml
+++ b/tests/tests/permission2/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.permission2">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
@@ -41,7 +42,7 @@
 
     <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.permission2"
                      android:label="More CTS tests for permissions"/>
 
diff --git a/tests/tests/preference/Android.mk b/tests/tests/preference/Android.mk
index 7816c3b..cc2b210 100644
--- a/tests/tests/preference/Android.mk
+++ b/tests/tests/preference/Android.mk
@@ -22,6 +22,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsPreferenceTestCases
diff --git a/tests/tests/preference/AndroidManifest.xml b/tests/tests/preference/AndroidManifest.xml
index af57c86..3477192 100644
--- a/tests/tests/preference/AndroidManifest.xml
+++ b/tests/tests/preference/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.preference">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/preference2/Android.mk b/tests/tests/preference2/Android.mk
index 8fda601..47b081d 100644
--- a/tests/tests/preference2/Android.mk
+++ b/tests/tests/preference2/Android.mk
@@ -24,6 +24,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_SDK_VERSION := current
diff --git a/tests/tests/preference2/AndroidManifest.xml b/tests/tests/preference2/AndroidManifest.xml
index 964a698..23b085d 100644
--- a/tests/tests/preference2/AndroidManifest.xml
+++ b/tests/tests/preference2/AndroidManifest.xml
@@ -17,6 +17,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.preference2">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
         <activity
@@ -34,7 +35,7 @@
     </application>
 
     <!-- This is a self-instrumenting test package. -->
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.preference2"
                      android:label="CTS Test Cases for android.preference"/>
 
diff --git a/tests/tests/provider/Android.mk b/tests/tests/provider/Android.mk
index fba7cda..edc078d 100644
--- a/tests/tests/provider/Android.mk
+++ b/tests/tests/provider/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsProviderTestCases
diff --git a/tests/tests/provider/AndroidManifest.xml b/tests/tests/provider/AndroidManifest.xml
index 6811ed2..75a6392 100644
--- a/tests/tests/provider/AndroidManifest.xml
+++ b/tests/tests/provider/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.provider">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/provider/src/android/provider/cts/MediaStore_Video_MediaTest.java b/tests/tests/provider/src/android/provider/cts/MediaStore_Video_MediaTest.java
index 36612cf..f4d01e3 100644
--- a/tests/tests/provider/src/android/provider/cts/MediaStore_Video_MediaTest.java
+++ b/tests/tests/provider/src/android/provider/cts/MediaStore_Video_MediaTest.java
@@ -62,7 +62,8 @@
                 "/video/testvideo1.3gp";
 
         int numBytes = 1337;
-        FileUtils.createFile(new File(externalVideoPath), numBytes);
+        File videoFile = new File(externalVideoPath);
+        FileUtils.createFile(videoFile, numBytes);
 
         ContentValues values = new ContentValues();
         values.put(Media.ALBUM, "cts");
@@ -86,7 +87,7 @@
         values.put(Media.TITLE, "testvideo");
         long dateAdded = System.currentTimeMillis() / 1000;
         values.put(Media.DATE_ADDED, dateAdded);
-        long dateModified = System.currentTimeMillis() / 1000;
+        long dateModified = videoFile.lastModified() / 1000;
         values.put(Media.DATE_MODIFIED, dateModified);
 
         // insert
diff --git a/tests/tests/renderscript/Android.mk b/tests/tests/renderscript/Android.mk
index d2137e2..77bef50 100644
--- a/tests/tests/renderscript/Android.mk
+++ b/tests/tests/renderscript/Android.mk
@@ -28,6 +28,8 @@
 # All tests should include android.test.runner.
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
diff --git a/tests/tests/renderscript/AndroidManifest.xml b/tests/tests/renderscript/AndroidManifest.xml
index 7205b3c..49fca1e 100644
--- a/tests/tests/renderscript/AndroidManifest.xml
+++ b/tests/tests/renderscript/AndroidManifest.xml
@@ -21,12 +21,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.renderscript">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
 
     <!-- This is a self-instrumenting test package. -->
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.stub"
                      android:label="CTS tests of Renderscript component"/>
 
diff --git a/tests/tests/sax/Android.mk b/tests/tests/sax/Android.mk
index 9dc1847..5270ae5 100644
--- a/tests/tests/sax/Android.mk
+++ b/tests/tests/sax/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsSaxTestCases
diff --git a/tests/tests/sax/AndroidManifest.xml b/tests/tests/sax/AndroidManifest.xml
index e90f04d..4fbf840 100644
--- a/tests/tests/sax/AndroidManifest.xml
+++ b/tests/tests/sax/AndroidManifest.xml
@@ -17,7 +17,7 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.sax">
-
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/security/Android.mk b/tests/tests/security/Android.mk
index ef13886..40f844c 100644
--- a/tests/tests/security/Android.mk
+++ b/tests/tests/security/Android.mk
@@ -20,6 +20,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsSecurityTestCases
diff --git a/tests/tests/security/AndroidManifest.xml b/tests/tests/security/AndroidManifest.xml
index 7dcd7a8..6c2c87a 100644
--- a/tests/tests/security/AndroidManifest.xml
+++ b/tests/tests/security/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.security">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/security/src/android/security/cts/PackageSignatureTest.java b/tests/tests/security/src/android/security/cts/PackageSignatureTest.java
index f278b0f..a21589a 100644
--- a/tests/tests/security/src/android/security/cts/PackageSignatureTest.java
+++ b/tests/tests/security/src/android/security/cts/PackageSignatureTest.java
@@ -89,7 +89,16 @@
             "com.android.tradefed.utils.wifi",
 
             // Game used for CTS testing...
-            "com.replica.replicaisland"
+            "com.replica.replicaisland",
+
+            // CTS test
+            "android.core.tests.libcore.package.com",
+            "android.core.tests.libcore.package.dalvik",
+            "android.core.tests.libcore.package.libcore",
+            "android.core.tests.libcore.package.org",
+            "android.core.tests.libcore.package.sun",
+            "android.core.tests.libcore.package.tests"
+
             ));
 
     private boolean isWhitelistedPackage(String packageName) {
diff --git a/tests/tests/speech/Android.mk b/tests/tests/speech/Android.mk
index 225acf3..60acf90 100755
--- a/tests/tests/speech/Android.mk
+++ b/tests/tests/speech/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsSpeechTestCases
diff --git a/tests/tests/speech/AndroidManifest.xml b/tests/tests/speech/AndroidManifest.xml
index 778f763..93576b1 100755
--- a/tests/tests/speech/AndroidManifest.xml
+++ b/tests/tests/speech/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.speech">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/telephony/Android.mk b/tests/tests/telephony/Android.mk
index f219f90..e7a3336 100644
--- a/tests/tests/telephony/Android.mk
+++ b/tests/tests/telephony/Android.mk
@@ -24,6 +24,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common mms-common
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsTelephonyTestCases
diff --git a/tests/tests/telephony/AndroidManifest.xml b/tests/tests/telephony/AndroidManifest.xml
index a565fad..1dfd68d 100644
--- a/tests/tests/telephony/AndroidManifest.xml
+++ b/tests/tests/telephony/AndroidManifest.xml
@@ -17,6 +17,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.telephony">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/telephony/src/android/telephony/cts/SmsManagerTest.java b/tests/tests/telephony/src/android/telephony/cts/SmsManagerTest.java
index 7d2f2b4..3055e44 100755
--- a/tests/tests/telephony/src/android/telephony/cts/SmsManagerTest.java
+++ b/tests/tests/telephony/src/android/telephony/cts/SmsManagerTest.java
@@ -29,6 +29,7 @@
 import android.telephony.SmsMessage;
 import android.telephony.TelephonyManager;
 import android.test.AndroidTestCase;
+import android.util.Log;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -41,6 +42,7 @@
  */
 public class SmsManagerTest extends AndroidTestCase {
 
+    private static final String TAG = "SmsManagerTest";
     private static final String LONG_TEXT =
         "This is a very long text. This text should be broken into three " +
         "separate messages.This is a very long text. This text should be broken into " +
@@ -372,12 +374,11 @@
                 mReceivedDataSms = true;
                 mReceivedText=sb.toString();
             }
+            Log.i(TAG, "onReceive " + intent.getAction());
             if (intent.getAction().equals(mAction)) {
                 synchronized (mLock) {
                     mCalls += 1;
-                    if (mCalls >= mExpectedCalls) {
-                        mLock.notify();
-                    }
+                    mLock.notify();
                 }
             }
         }
diff --git a/tests/tests/text/Android.mk b/tests/tests/text/Android.mk
index 1ffeee9..ae14124 100644
--- a/tests/tests/text/Android.mk
+++ b/tests/tests/text/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsTextTestCases
diff --git a/tests/tests/text/AndroidManifest.xml b/tests/tests/text/AndroidManifest.xml
index ee8e3b0..16ba2d9 100644
--- a/tests/tests/text/AndroidManifest.xml
+++ b/tests/tests/text/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.text">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/text/src/android/text/format/cts/DateUtilsTest.java b/tests/tests/text/src/android/text/format/cts/DateUtilsTest.java
index 9515281..1907ac7 100644
--- a/tests/tests/text/src/android/text/format/cts/DateUtilsTest.java
+++ b/tests/tests/text/src/android/text/format/cts/DateUtilsTest.java
@@ -24,6 +24,7 @@
 import java.util.Date;
 import java.util.Formatter;
 import java.util.Locale;
+import java.util.TimeZone;
 
 public class DateUtilsTest extends AndroidTestCase {
 
@@ -38,6 +39,7 @@
     protected void setUp() throws Exception {
         super.setUp();
         mContext = getContext();
+        TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
         mBaseTime = System.currentTimeMillis();
     }
 
diff --git a/tests/tests/text/src/android/text/format/cts/TimeTest.java b/tests/tests/text/src/android/text/format/cts/TimeTest.java
index fdefcf8..c1587ae 100644
--- a/tests/tests/text/src/android/text/format/cts/TimeTest.java
+++ b/tests/tests/text/src/android/text/format/cts/TimeTest.java
@@ -26,7 +26,7 @@
 import android.util.TimeFormatException;
 
 public class TimeTest extends AndroidTestCase {
-
+    private static final String TAG = "TimeTest";
     public void testConstructor() {
         Time time = new Time();
         new Time(Time.getCurrentTimezone());
@@ -483,10 +483,14 @@
 
     public void testSetToNow0() throws Exception {
         Time t = new Time(Time.TIMEZONE_UTC);
-        long currentTime = System.currentTimeMillis();
+        // Time has resolution of 1 second. So round-off to second and compare
+        long currentTime = System.currentTimeMillis() / 1000;
         t.setToNow();
-        long time = t.toMillis(false);
-        assertTrue(Math.abs(currentTime - time) < 999);
+        long time = t.toMillis(false) / 1000;
+        // 1 sec of delta can happen
+        if (Math.abs(currentTime - time) > 1) {
+            fail("currentTime " + currentTime + " time " + time);
+        }
     }
 
     public void testMillis0() throws Exception {
@@ -626,7 +630,7 @@
                 time.timezone = mTimeZones[zoneIndex];
                 long millis = time.normalize(true);
                 if (zoneIndex == 0) {
-                    Log.i("TimeTest", time.format("%B %d, %Y"));
+                    Log.i(TAG, time.format("%B %d, %Y"));
                 }
 
                 // This is the Julian day for 12am for this day of the year
@@ -665,7 +669,7 @@
                 time.timezone = mTimeZones[zoneIndex];
                 long millis = time.normalize(true);
                 if (zoneIndex == 0) {
-                    Log.i("TimeTest", time.format("%B %d, %Y"));
+                    Log.i(TAG, time.format("%B %d, %Y"));
                 }
                 int julianDay = Time.getJulianDay(millis, time.gmtoff);
 
@@ -684,7 +688,7 @@
                 millis = time.toMillis(false);
                 int day = Time.getJulianDay(millis, time.gmtoff);
                 if (day != julianDay) {
-                    Log.i("TimeTest", "Error: gmtoff " + (time.gmtoff / 3600.0) + " day "
+                    Log.i(TAG, "Error: gmtoff " + (time.gmtoff / 3600.0) + " day "
                             + julianDay + " millis " + millis + " " + time.format("%B %d, %Y")
                             + " " + time.timezone);
                 }
diff --git a/tests/tests/textureview/Android.mk b/tests/tests/textureview/Android.mk
index 0dd610b..30cc4ff 100644
--- a/tests/tests/textureview/Android.mk
+++ b/tests/tests/textureview/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsTextureViewTestCases
diff --git a/tests/tests/textureview/AndroidManifest.xml b/tests/tests/textureview/AndroidManifest.xml
index 05e0ba6..63cd233 100644
--- a/tests/tests/textureview/AndroidManifest.xml
+++ b/tests/tests/textureview/AndroidManifest.xml
@@ -18,13 +18,14 @@
     >
 
     <uses-feature android:glEsVersion="0x00020000" android:required="true" />
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <uses-permission android:name="android.permission.GET_TASKS" />
     <uses-permission android:name="android.permission.REORDER_TASKS" />
     <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
 
     <instrumentation
         android:targetPackage="com.android.cts.textureview"
-        android:name="android.test.InstrumentationTestRunner" />
+        android:name="android.test.InstrumentationCtsTestRunner" />
 
     <application
         android:label="@string/app_name"
diff --git a/tests/tests/theme/Android.mk b/tests/tests/theme/Android.mk
index 95f55fb..5846426 100644
--- a/tests/tests/theme/Android.mk
+++ b/tests/tests/theme/Android.mk
@@ -27,6 +27,8 @@
 # All tests should include android.test.runner.
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_SDK_VERSION := current
diff --git a/tests/tests/theme/AndroidManifest.xml b/tests/tests/theme/AndroidManifest.xml
index f41183a..0edc836 100644
--- a/tests/tests/theme/AndroidManifest.xml
+++ b/tests/tests/theme/AndroidManifest.xml
@@ -17,12 +17,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.theme">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />        
         <activity android:name="android.theme.cts.DeviceDefaultActivity" />        
     </application>
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
             android:targetPackage="com.android.cts.theme"
             android:label="CTS tests for themes"/>
 </manifest>
diff --git a/tests/tests/util/Android.mk b/tests/tests/util/Android.mk
index b1bb103..f1c75dc 100644
--- a/tests/tests/util/Android.mk
+++ b/tests/tests/util/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsUtilTestCases
diff --git a/tests/tests/util/AndroidManifest.xml b/tests/tests/util/AndroidManifest.xml
index ee467c7..3969ac8 100644
--- a/tests/tests/util/AndroidManifest.xml
+++ b/tests/tests/util/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.util">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/view/Android.mk b/tests/tests/view/Android.mk
index 4d82d91..2c07cc3 100644
--- a/tests/tests/view/Android.mk
+++ b/tests/tests/view/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsViewTestCases
diff --git a/tests/tests/view/AndroidManifest.xml b/tests/tests/view/AndroidManifest.xml
index ca82d07..233dc44 100644
--- a/tests/tests/view/AndroidManifest.xml
+++ b/tests/tests/view/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.view">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/view/src/android/view/cts/DisplayRefreshRateTest.java b/tests/tests/view/src/android/view/cts/DisplayRefreshRateTest.java
index a4c9318..cc2517d 100644
--- a/tests/tests/view/src/android/view/cts/DisplayRefreshRateTest.java
+++ b/tests/tests/view/src/android/view/cts/DisplayRefreshRateTest.java
@@ -25,6 +25,8 @@
 import android.view.WindowManager;
 import android.util.Log;
 
+import java.lang.InterruptedException;
+import java.lang.Thread;
 import java.util.ArrayList;
 import javax.microedition.khronos.egl.EGLConfig;
 import javax.microedition.khronos.opengles.GL10;
@@ -50,6 +52,7 @@
     private class FpsResult {
         private float mFps;
         private boolean mValid = false;
+        private boolean mRestartRequested = false;
 
         public final synchronized void notifyResult(float fps) {
             if (!mValid) {
@@ -67,6 +70,17 @@
             }
             return mFps;
         }
+
+        public synchronized void restart() {
+            mRestartRequested = true;
+            mValid = false;
+        }
+        public synchronized boolean restartNecessary() {
+            return mRestartRequested;
+        }
+        public synchronized void ackRestart() {
+            mRestartRequested = false;
+        }
     }
 
     private class Renderer implements GLSurfaceView.Renderer {
@@ -117,6 +131,11 @@
                     break;
 
                 case STATE_DONE:
+                    if (mResult.restartNecessary()) {
+                        mResult.ackRestart();
+                        mState = STATE_START;
+                        Log.d(TAG, "restarting");
+                    }
                     break;
             }
 
@@ -150,10 +169,9 @@
                 GLSurfaceView.RENDERMODE_CONTINUOUSLY);
     }
 
-    public void testRefreshRate() {
+    public void testRefreshRate() throws java.lang.InterruptedException {
+        boolean fpsOk = false;
         GLSurfaceViewStubActivity activity = getActivity();
-        float achievedFps = mResult.waitResult();
-        activity.finish();
 
         WindowManager wm = (WindowManager)activity
                 .getView()
@@ -162,10 +180,22 @@
         Display dpy = wm.getDefaultDisplay();
         float claimedFps = dpy.getRefreshRate();
 
-        Log.d(TAG, "claimed " + claimedFps + " fps, " +
-                   "achieved " + achievedFps + " fps");
-
-        assertTrue(Math.abs(claimedFps - achievedFps) <= FPS_TOLERANCE);
+        for (int i = 0; i < 3; i++) {
+            float achievedFps = mResult.waitResult();
+            Log.d(TAG, "claimed " + claimedFps + " fps, " +
+                       "achieved " + achievedFps + " fps");
+            fpsOk = Math.abs(claimedFps - achievedFps) <= FPS_TOLERANCE;
+            if (fpsOk) {
+                break;
+            } else {
+                // it could be other sctivity like bug report capturing for other failures
+                // sleep for a while and re-try
+                Thread.sleep(10000);
+                mResult.restart();
+            }
+        }
+        activity.finish();
+        assertTrue(fpsOk);
     }
 
 }
diff --git a/tests/tests/view/src/android/view/cts/SurfaceViewTest.java b/tests/tests/view/src/android/view/cts/SurfaceViewTest.java
index 4c0fafe..2d61559 100644
--- a/tests/tests/view/src/android/view/cts/SurfaceViewTest.java
+++ b/tests/tests/view/src/android/view/cts/SurfaceViewTest.java
@@ -18,6 +18,7 @@
 
 import android.app.Instrumentation;
 import android.content.Context;
+import android.cts.util.PollingCheck;
 import android.graphics.Canvas;
 import android.graphics.PixelFormat;
 import android.graphics.Region;
@@ -30,7 +31,6 @@
 import android.view.cts.SurfaceViewStubActivity.MockSurfaceView;
 
 public class SurfaceViewTest extends ActivityInstrumentationTestCase2<SurfaceViewStubActivity> {
-    private static final long WAIT_TIME = 1000;
 
     private Context mContext;
     private Instrumentation mInstrumentation;
@@ -136,13 +136,17 @@
     }
 
     public void testOnDetachedFromWindow() {
-        MockSurfaceView mockSurfaceView = getActivity().getSurfaceView();
+        final MockSurfaceView mockSurfaceView = getActivity().getSurfaceView();
         assertFalse(mockSurfaceView.isDetachedFromWindow());
         assertTrue(mockSurfaceView.isShown());
         sendKeys(KeyEvent.KEYCODE_BACK);
-        sleep(WAIT_TIME);
-        assertTrue(mockSurfaceView.isDetachedFromWindow());
-        assertFalse(mockSurfaceView.isShown());
+        new PollingCheck() {
+            @Override
+            protected boolean check() {
+                return mockSurfaceView.isDetachedFromWindow() &&
+                       !mockSurfaceView.isShown();
+            }
+        }.run();
     }
 
     private void sleep(long time) {
diff --git a/tests/tests/view/src/android/view/cts/View_UsingViewsTest.java b/tests/tests/view/src/android/view/cts/View_UsingViewsTest.java
index adfec69..74f3c13 100644
--- a/tests/tests/view/src/android/view/cts/View_UsingViewsTest.java
+++ b/tests/tests/view/src/android/view/cts/View_UsingViewsTest.java
@@ -21,6 +21,7 @@
 
 import android.app.Activity;
 import android.app.Instrumentation;
+import android.cts.util.PollingCheck;
 import android.graphics.Bitmap;
 import android.graphics.Color;
 import android.test.ActivityInstrumentationTestCase2;
@@ -35,6 +36,7 @@
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+
 public class View_UsingViewsTest extends ActivityInstrumentationTestCase2<UsingViewsStubActivity> {
     /**
      * country of Argentina
@@ -347,15 +349,21 @@
         mEditText.setLongClickable(true);
         assertTrue(mEditText.isLongClickable());
 
-        MockOnLongClickListener onLongClickListener = new MockOnLongClickListener();
+        final MockOnLongClickListener onLongClickListener = new MockOnLongClickListener();
         mEditText.setOnLongClickListener(onLongClickListener);
 
         // long click the edit text
         assertFalse(onLongClickListener.isOnLongClickCalled());
         assertNull(onLongClickListener.getView());
 
+        mInstrumentation.waitForIdleSync();
         TouchUtils.longClickView(this, mEditText);
-        assertTrue(onLongClickListener.isOnLongClickCalled());
+        new PollingCheck() {
+            @Override
+            protected boolean check() {
+                return onLongClickListener.isOnLongClickCalled();
+            }
+        }.run();
         assertSame(mEditText, onLongClickListener.getView());
 
         // click the Cancel button
diff --git a/tests/tests/webkit/Android.mk b/tests/tests/webkit/Android.mk
index 1426dbb..a307f99 100644
--- a/tests/tests/webkit/Android.mk
+++ b/tests/tests/webkit/Android.mk
@@ -23,6 +23,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := CtsWebkitTestCases
diff --git a/tests/tests/webkit/AndroidManifest.xml b/tests/tests/webkit/AndroidManifest.xml
index d23a976..9475451 100644
--- a/tests/tests/webkit/AndroidManifest.xml
+++ b/tests/tests/webkit/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.webkit">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewClientTest.java b/tests/tests/webkit/src/android/webkit/cts/WebViewClientTest.java
index 277f104..e02998e 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebViewClientTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewClientTest.java
@@ -164,6 +164,7 @@
     }
 
     public void testOnUnhandledKeyEvent() throws Throwable {
+        requireLoadedPage();
         final MockWebViewClient webViewClient = new MockWebViewClient();
         mOnUiThread.setWebViewClient(webViewClient);
 
@@ -191,6 +192,10 @@
         assertTrue(webViewClient.hasOnScaleChangedCalled());
     }
 
+    private void requireLoadedPage() throws Throwable {
+        mOnUiThread.loadUrlAndWaitForCompletion("about:blank");
+    }
+
     private class MockWebViewClient extends WaitForLoadedClient {
         private boolean mOnPageStartedCalled;
         private boolean mOnPageFinishedCalled;
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
index 0dd3934..3f7ea78 100755
--- a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
@@ -48,6 +48,7 @@
 import android.webkit.SslErrorHandler;
 import android.webkit.WebBackForwardList;
 import android.webkit.WebChromeClient;
+import android.webkit.WebIconDatabase;
 import android.webkit.WebSettings;
 import android.webkit.WebView;
 import android.webkit.WebView.HitTestResult;
@@ -86,6 +87,7 @@
     private WebView mWebView;
     private CtsTestServer mWebServer;
     private WebViewOnUiThread mOnUiThread;
+    private WebIconDatabase mIconDb;
 
     public WebViewTest() {
         super("com.android.cts.stub", WebViewStubActivity.class);
@@ -108,6 +110,11 @@
         if (mWebServer != null) {
             mWebServer.shutdown();
         }
+        if (mIconDb != null) {
+            mIconDb.removeAllIcons();
+            mIconDb.close();
+            mIconDb = null;
+        }
         super.tearDown();
     }
 
@@ -773,7 +780,7 @@
     }
 
     @UiThreadTest
-    public void testLoadDataWithBaseUrl() throws Exception {
+    public void testLoadDataWithBaseUrl() throws Throwable {
         assertNull(mWebView.getTitle());
         assertNull(mWebView.getUrl());
         String imgUrl = TestHtmlConstants.SMALL_IMG_URL; // relative
@@ -782,6 +789,9 @@
         startWebServer(false);
         String baseUrl = mWebServer.getAssetUrl("foo.html");
         String historyUrl = "random";
+        String dbPath = getActivity().getFilesDir().toString() + "/icons";
+        mIconDb = WebIconDatabase.getInstance();
+        mIconDb.open(dbPath);
         mWebServer.resetRequestState();
         // force the favicon to be loaded first
         mOnUiThread.loadDataWithBaseURLAndWaitForCompletion(baseUrl,
@@ -790,7 +800,9 @@
         new PollingCheck() {
             @Override
             protected boolean check() {
-                return mWebServer.getLastRequestUrl().endsWith("favicon.ico");
+                String lastRequestedUrl = mWebServer.getLastRequestUrl();
+                return lastRequestedUrl != null
+                        && lastRequestedUrl.endsWith("favicon.ico");
             }
         }.run();
         mOnUiThread.loadDataWithBaseURLAndWaitForCompletion(baseUrl,
@@ -1155,6 +1167,20 @@
     }
 
     public void testRequestImageRef() throws Exception, Throwable {
+        final class ImageLoaded {
+            public boolean mImageLoaded;
+
+            public void loaded() {
+                mImageLoaded = true;
+            }
+        }
+        final ImageLoaded imageLoaded = new ImageLoaded();
+        runTestOnUiThread(new Runnable() {
+            public void run() {
+                mOnUiThread.getSettings().setJavaScriptEnabled(true);
+            }
+        });
+        mOnUiThread.addJavascriptInterface(imageLoaded, "imageLoaded");
         AssetManager assets = getActivity().getAssets();
         Bitmap bitmap = BitmapFactory.decodeStream(assets.open(TestHtmlConstants.LARGE_IMG_URL));
         int imgWidth = bitmap.getWidth();
@@ -1163,8 +1189,24 @@
         startWebServer(false);
         final String imgUrl = mWebServer.getAssetUrl(TestHtmlConstants.LARGE_IMG_URL);
         mOnUiThread.loadDataAndWaitForCompletion(
-                "<html><title>Title</title><body><img src=\"" + imgUrl
-                + "\"/></body></html>", "text/html", null);
+                "<html><head><title>Title</title><style type=\"text/css\">"
+                + "#imgElement { -webkit-transform: translate3d(0,0,1); }"
+                + "#imgElement.finish { -webkit-transform: translate3d(0,0,0);"
+                + " -webkit-transition-duration: 1ms; }</style>"
+                + "<script type=\"text/javascript\">function imgLoad() {"
+                + "imgElement = document.getElementById('imgElement');"
+                + "imgElement.addEventListener('webkitTransitionEnd',"
+                + "function(e) { imageLoaded.loaded(); });"
+                + "imgElement.className = 'finish';}</script>"
+                + "</head><body><img id=\"imgElement\" src=\"" + imgUrl
+                + "\" width=\"" + imgWidth + "\" height=\"" + imgHeight
+                + "\" onLoad=\"imgLoad()\"/></body></html>", "text/html", null);
+        new PollingCheck() {
+            @Override
+            protected boolean check() {
+                return imageLoaded.mImageLoaded;
+            }
+        }.run();
         getInstrumentation().waitForIdleSync();
 
         final HrefCheckHandler handler = new HrefCheckHandler(mWebView.getHandler().getLooper());
diff --git a/tests/tests/webkitsecurity/Android.mk b/tests/tests/webkitsecurity/Android.mk
index 7223766..424cbf36 100644
--- a/tests/tests/webkitsecurity/Android.mk
+++ b/tests/tests/webkitsecurity/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_PACKAGE_NAME := CtsWebkitSecurityTestCases
 
-LOCAL_STATIC_JAVA_LIBRARIES := ctsutil ctstestserver
+LOCAL_STATIC_JAVA_LIBRARIES := ctsutil ctstestserver ctstestrunner
 
 LOCAL_SDK_VERSION := current
 
diff --git a/tests/tests/webkitsecurity/AndroidManifest.xml b/tests/tests/webkitsecurity/AndroidManifest.xml
index 468a704..706c51c 100644
--- a/tests/tests/webkitsecurity/AndroidManifest.xml
+++ b/tests/tests/webkitsecurity/AndroidManifest.xml
@@ -18,12 +18,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.webkitsecurity">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
         <activity android:name="android.webkitsecurity.cts.WebViewStubActivity" />
     </application>
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
                      android:targetPackage="com.android.cts.webkitsecurity"
                      android:label="CTS tests of android.webkitsecurity"/>
 
diff --git a/tests/tests/widget/Android.mk b/tests/tests/widget/Android.mk
index 628935c..f6be07d 100644
--- a/tests/tests/widget/Android.mk
+++ b/tests/tests/widget/Android.mk
@@ -21,7 +21,7 @@
 # and when built explicitly put it in the data partition
 LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
 
-LOCAL_STATIC_JAVA_LIBRARIES += android-common
+LOCAL_STATIC_JAVA_LIBRARIES += android-common ctstestrunner
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
diff --git a/tests/tests/widget/AndroidManifest.xml b/tests/tests/widget/AndroidManifest.xml
index e510fcb..e69a7d5 100644
--- a/tests/tests/widget/AndroidManifest.xml
+++ b/tests/tests/widget/AndroidManifest.xml
@@ -18,6 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.cts.widget">
 
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <application>
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/tests/tests/widget/src/android/widget/cts/AbsListViewTest.java b/tests/tests/widget/src/android/widget/cts/AbsListViewTest.java
index 25d13f1..7fa2d2f 100644
--- a/tests/tests/widget/src/android/widget/cts/AbsListViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/AbsListViewTest.java
@@ -536,6 +536,7 @@
         assertEquals(0, listener.getPosition());
         assertEquals(0, listener.getID());
 
+        mInstrumentation.waitForIdleSync();
         TouchUtils.longClickView(this, v);
 
         new PollingCheck() {
diff --git a/tests/tests/widget/src/android/widget/cts/AutoCompleteTextViewTest.java b/tests/tests/widget/src/android/widget/cts/AutoCompleteTextViewTest.java
index 7e46b82..760a160 100755
--- a/tests/tests/widget/src/android/widget/cts/AutoCompleteTextViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/AutoCompleteTextViewTest.java
@@ -25,6 +25,7 @@
 import android.app.Activity;
 import android.app.Instrumentation;
 import android.content.Context;
+import android.cts.util.PollingCheck;
 import android.graphics.Rect;
 import android.test.ActivityInstrumentationTestCase2;
 import android.test.UiThreadTest;
@@ -373,7 +374,12 @@
         mInstrumentation.sendStringSync(testString);
 
         // onFilterComplete will close the popup.
-        assertFalse(mAutoCompleteTextView.isPopupShowing());
+        new PollingCheck() {
+            @Override
+            protected boolean check() {
+                return !mAutoCompleteTextView.isPopupShowing();
+            }
+        }.run();
 
         if (mNumeric) {
             // "that" in case of 12-key(NUMERIC) keyboard
@@ -382,7 +388,12 @@
             testString = "that";
         }
         mInstrumentation.sendStringSync(testString);
-        assertFalse(mAutoCompleteTextView.isPopupShowing());
+        new PollingCheck() {
+            @Override
+            protected boolean check() {
+                return !mAutoCompleteTextView.isPopupShowing();
+            }
+        }.run();
 
         // Test the expected filter matching scene
         runTestOnUiThread(new Runnable() {
@@ -400,9 +411,12 @@
         }
         assertTrue(mAutoCompleteTextView.hasFocus());
         assertTrue(mAutoCompleteTextView.hasWindowFocus());
-        // give some time for UI to settle
-        Thread.sleep(200);
-        assertTrue(mAutoCompleteTextView.isPopupShowing());
+        new PollingCheck() {
+            @Override
+            protected boolean check() {
+                return mAutoCompleteTextView.isPopupShowing();
+            }
+        }.run();
     }
 
     public void testPerformFiltering() throws Throwable {
@@ -450,7 +464,7 @@
         });
         mInstrumentation.waitForIdleSync();
         // Create and get the filter.
-        MockFilter filter = (MockFilter) adapter.getFilter();
+        final MockFilter filter = (MockFilter) adapter.getFilter();
 
         // performFiltering will be indirectly invoked by onKeyDown
         assertNull(filter.getResult());
@@ -458,13 +472,20 @@
         if (mNumeric) {
             // "numeric" in case of 12-key(NUMERIC) keyboard
             mInstrumentation.sendStringSync("6688633777444222");
-            Thread.sleep(100);
-            assertEquals("numeric", filter.getResult());
+            new PollingCheck() {
+                @Override
+                protected boolean check() {
+                    return "numeric".equals(filter.getResult());
+                }
+            }.run();
         } else {
             mInstrumentation.sendStringSync(STRING_TEST);
-            // give some time for UI to settle
-            Thread.sleep(100);
-            assertEquals(STRING_TEST, filter.getResult());
+            new PollingCheck() {
+                @Override
+                protected boolean check() {
+                    return STRING_TEST.equals(filter.getResult());
+                }
+            }.run();
         }
     }
 
diff --git a/tests/tests/widget/src/android/widget/cts/FilterTest.java b/tests/tests/widget/src/android/widget/cts/FilterTest.java
index d7d165e..394f861 100644
--- a/tests/tests/widget/src/android/widget/cts/FilterTest.java
+++ b/tests/tests/widget/src/android/widget/cts/FilterTest.java
@@ -118,41 +118,57 @@
         }
 
         public boolean hadPublishedResults() {
-            return mHadPublishedResults;
+            synchronized (this) {
+                return mHadPublishedResults;
+            }
         }
 
         public boolean hadPerformedFiltering() {
-            return mHadPerformedFiltering;
+            synchronized (this) {
+                return mHadPerformedFiltering;
+            }
         }
 
         public CharSequence getPerformFilteringConstraint() {
-            return mPerformFilteringConstraint;
+            synchronized (this) {
+                return mPerformFilteringConstraint;
+            }
         }
 
         public CharSequence getPublishResultsConstraint() {
-            return mPublishResultsConstraint;
+            synchronized (this) {
+                return mPublishResultsConstraint;
+            }
         }
 
         public FilterResults getResults() {
-            return mResults;
+            synchronized (this) {
+                return mResults;
+            }
         }
 
         public FilterResults getExpectResults() {
-            return mExpectResults;
+            synchronized (this) {
+                return mExpectResults;
+            }
         }
 
         @Override
         protected FilterResults performFiltering(CharSequence constraint) {
-            mHadPerformedFiltering = true;
-            mPerformFilteringConstraint = constraint;
-            return mExpectResults;
+            synchronized (this) {
+                mHadPerformedFiltering = true;
+                mPerformFilteringConstraint = constraint;
+                return mExpectResults;
+            }
         }
 
         @Override
         protected void publishResults(CharSequence constraint, FilterResults results) {
-            mPublishResultsConstraint = constraint;
-            mResults = results;
-            mHadPublishedResults = true;
+            synchronized (this) {
+                mPublishResultsConstraint = constraint;
+                mResults = results;
+                mHadPublishedResults = true;
+            }
         }
     }
 
diff --git a/tools/tradefed-host/res/config/cts.xml b/tools/tradefed-host/res/config/cts.xml
index 0c7fe58..158f49d 100644
--- a/tools/tradefed-host/res/config/cts.xml
+++ b/tools/tradefed-host/res/config/cts.xml
@@ -17,7 +17,6 @@
     description="Runs a CTS plan from a pre-existing CTS installation">
 
     <option name="enable-root" value="false" />
-    <option name="disable-keyguard" value="false" />
     <build_provider class="com.android.cts.tradefed.build.CtsBuildProvider" />
     <device_recovery class="com.android.tradefed.device.WaitDeviceRecovery" />
     <test class="com.android.cts.tradefed.testtype.CtsTest" />
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/command/CtsConsole.java b/tools/tradefed-host/src/com/android/cts/tradefed/command/CtsConsole.java
index 2f0e872..a815a48 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/command/CtsConsole.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/command/CtsConsole.java
@@ -173,6 +173,8 @@
         helpBuilder.append("session\n");
         helpBuilder.append("Dump:\n");
         helpBuilder.append("  d/dump l/logs: dump the tradefed logs for all running invocations\n");
+        helpBuilder.append("Options:\n");
+        helpBuilder.append("  --reboot-per-package : reboot device after running each package.\n");
         return helpBuilder.toString();
     }
 
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/CtsTest.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/CtsTest.java
index 8142036..78f7412 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/CtsTest.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/CtsTest.java
@@ -29,6 +29,7 @@
 import com.android.tradefed.config.Option.Importance;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.device.TestDeviceOptions;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.result.ITestInvocationListener;
 import com.android.tradefed.result.InputStreamSource;
@@ -46,6 +47,9 @@
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.InputStream;
+import java.lang.InterruptedException;
+import java.lang.System;
+import java.lang.Thread;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -132,6 +136,18 @@
         "run tests including known failures")
     private boolean mIncludeKnownFailures;
 
+    @Option(name = "reboot-per-package", description =
+            "Reboot after each package run")
+    private boolean mRebootPerPackage = false;
+
+    @Option(name = "reboot-wait-time", description =
+            "Additional wait time in ms after boot complete. Meaningful only with reboot-per-package option")
+    private int mRebootWaitTimeMSec = 2 * 60 * 1000;
+
+    @Option(name = "reboot-interval", description =
+            "Interval between each reboot in min. Meaningful only with reboot-per-package option")
+    private int mRebootIntervalMin = 30;
+
     /** data structure for a {@link IRemoteTest} and its known tests */
     class TestPackage {
         private final IRemoteTest mTestForPackage;
@@ -330,7 +346,12 @@
             // always collect the device info, even for resumed runs, since test will likely be
             // running on a different device
             collectDeviceInfo(getDevice(), mCtsBuild, listener);
-
+            if (mRemainingTestPkgs.size() > 1) {
+                Log.i(LOG_TAG, "Initial reboot for multiple packages");
+                rebootDevice();
+            }
+            long prevTime = System.currentTimeMillis();
+            long intervalInMSec = mRebootIntervalMin * 60 * 1000;
             while (!mRemainingTestPkgs.isEmpty()) {
                 TestPackage knownTests = mRemainingTestPkgs.get(0);
 
@@ -345,6 +366,20 @@
                 forwardPackageDetails(knownTests.getPackageDef(), listener);
                 test.run(filter);
                 mRemainingTestPkgs.remove(0);
+                if (mRemainingTestPkgs.size() > 0) {
+                    if (mRebootPerPackage) {
+                        long currentTime = System.currentTimeMillis();
+                        if ((currentTime - prevTime) > intervalInMSec) {
+                            Log.i(LOG_TAG, String.format("Rebooting after running package %s",
+                                    knownTests.getPackageDef().getName()));
+                            rebootDevice();
+                            prevTime = System.currentTimeMillis();
+                        }
+                    }
+                    // remove artifacts like status bar from the previous test.
+                    // But this cannot dismiss dialog popped-up.
+                    changeToHomeScreen();
+                }
             }
 
             if (mScreenshot) {
@@ -363,6 +398,40 @@
         }
     }
 
+    private void rebootDevice() throws DeviceNotAvailableException {
+        final int TIMEOUT_MS = 4 * 60 * 1000;
+        TestDeviceOptions options = mDevice.getOptions();
+        // store default value and increase time-out for reboot
+        int rebootTimeout = options.getRebootTimeout();
+        long onlineTimeout = options.getOnlineTimeout();
+        options.setRebootTimeout(TIMEOUT_MS);
+        options.setOnlineTimeout(TIMEOUT_MS);
+        mDevice.setOptions(options);
+
+        mDevice.reboot();
+
+        // restore default values
+        options.setRebootTimeout(rebootTimeout);
+        options.setOnlineTimeout(onlineTimeout);
+        mDevice.setOptions(options);
+        Log.i(LOG_TAG, "Rebooting done");
+        try {
+            Thread.sleep(mRebootWaitTimeMSec);
+        } catch (InterruptedException e) {
+            Log.i(LOG_TAG, "Boot wait interrupted");
+        }
+    }
+
+    private void changeToHomeScreen() throws DeviceNotAvailableException {
+        final String homeCmd = "input keyevent 3";
+
+        mDevice.executeShellCommand(homeCmd);
+        try {
+            Thread.sleep(1000);
+        } catch (InterruptedException e) {
+            //ignore
+        }
+    }
     /**
      * Build the list of test packages to run
      */
