diff --git a/apps/CtsVerifier/AndroidManifest.xml b/apps/CtsVerifier/AndroidManifest.xml
index 1c6048d..83e23b6 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_r7">
+      android:versionName="4.2_r4">
 
     <!-- Using 10 for more complete NFC support... -->
     <uses-sdk android:minSdkVersion="10"></uses-sdk>
diff --git a/tests/src/android/view/inputmethod/cts/InputMethodSettingsActivityStub.java b/tests/src/android/view/inputmethod/cts/InputMethodInfoStub.java
similarity index 84%
rename from tests/src/android/view/inputmethod/cts/InputMethodSettingsActivityStub.java
rename to tests/src/android/view/inputmethod/cts/InputMethodInfoStub.java
index 58aa364..0eeefbe 100644
--- a/tests/src/android/view/inputmethod/cts/InputMethodSettingsActivityStub.java
+++ b/tests/src/android/view/inputmethod/cts/InputMethodInfoStub.java
@@ -16,8 +16,8 @@
 
 package android.view.inputmethod.cts;
 
-import android.preference.PreferenceActivity;
+import android.inputmethodservice.InputMethodService;
 
-public class InputMethodSettingsActivityStub extends PreferenceActivity {
+public class InputMethodInfoStub extends InputMethodService {
 
 }
diff --git a/tests/tests/media/src/android/media/cts/RingtoneTest.java b/tests/tests/media/src/android/media/cts/RingtoneTest.java
index 024f44d..6e3a1e9 100644
--- a/tests/tests/media/src/android/media/cts/RingtoneTest.java
+++ b/tests/tests/media/src/android/media/cts/RingtoneTest.java
@@ -21,6 +21,7 @@
 import android.media.AudioManager;
 import android.media.Ringtone;
 import android.media.RingtoneManager;
+import android.net.Uri;
 import android.provider.Settings;
 import android.test.AndroidTestCase;
 
@@ -32,6 +33,7 @@
     private int mOriginalVolume;
     private int mOriginalRingerMode;
     private int mOriginalStreamType;
+    private Uri mDefaultRingUri;
 
     @Override
     protected void setUp() throws Exception {
@@ -49,6 +51,9 @@
                 AudioManager.FLAG_ALLOW_RINGER_MODES);
         // make sure that we are not in silent mode
         mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
+
+        mDefaultRingUri = RingtoneManager.getActualDefaultRingtoneUri(mContext,
+                RingtoneManager.TYPE_RINGTONE);
     }
 
     @Override
@@ -63,6 +68,8 @@
             mAudioManager.setStreamVolume(AudioManager.STREAM_RING, mOriginalVolume,
                     AudioManager.FLAG_ALLOW_RINGER_MODES);
         }
+        RingtoneManager.setActualDefaultRingtoneUri(mContext, RingtoneManager.TYPE_RINGTONE,
+                mDefaultRingUri);
         super.tearDown();
     }
 
@@ -79,8 +86,20 @@
         mRingtone.setStreamType(AudioManager.STREAM_RING);
         assertEquals(AudioManager.STREAM_RING, mRingtone.getStreamType());
 
+        // test both the "None" ringtone and an actual ringtone
+        RingtoneManager.setActualDefaultRingtoneUri(mContext, RingtoneManager.TYPE_RINGTONE, null);
+        mRingtone = RingtoneManager.getRingtone(mContext, Settings.System.DEFAULT_RINGTONE_URI);
+        assertTrue(mRingtone.getStreamType() == AudioManager.STREAM_RING);
         mRingtone.play();
-        assertTrue(mRingtone.isPlaying());
+        assertFalse(mRingtone.isPlaying());
+
+        Uri uri = RingtoneManager.getValidRingtoneUri(mContext);
+        assertNotNull("ringtone was unexpectedly null", uri);
+        RingtoneManager.setActualDefaultRingtoneUri(mContext, RingtoneManager.TYPE_RINGTONE, uri);
+        mRingtone = RingtoneManager.getRingtone(mContext, Settings.System.DEFAULT_RINGTONE_URI);
+        assertTrue(mRingtone.getStreamType() == AudioManager.STREAM_RING);
+        mRingtone.play();
+        assertTrue("couldn't play ringtone " + uri, mRingtone.isPlaying());
         mRingtone.stop();
         assertFalse(mRingtone.isPlaying());
     }
diff --git a/tests/tests/mediastress/src/android/mediastress/cts/CodecTest.java b/tests/tests/mediastress/src/android/mediastress/cts/CodecTest.java
index c349ac0..1b4ed62 100644
--- a/tests/tests/mediastress/src/android/mediastress/cts/CodecTest.java
+++ b/tests/tests/mediastress/src/android/mediastress/cts/CodecTest.java
@@ -808,6 +808,9 @@
                     return false;
                 }
             }
+            if (!mOnCompleteSuccess && !mPlaybackError) {
+                Log.e(TAG, "wait timed-out without onCompletion notification");
+            }
             terminateMessageLooper();
         } catch (Exception e) {
             Log.v(TAG, "playMediaSample Exception:" + e.getMessage());
diff --git a/tests/tests/os/src/android/os/cts/BuildVersionTest.java b/tests/tests/os/src/android/os/cts/BuildVersionTest.java
index 0167364..dfa8301 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.2", "4.2.1"));
+            new HashSet<String>(Arrays.asList("4.2", "4.2.1", "4.2.2"));
     private static final int EXPECTED_SDK = 17;
 
     @SuppressWarnings("deprecation")
diff --git a/tests/tests/view/src/android/view/cts/ViewGroupTest.java b/tests/tests/view/src/android/view/cts/ViewGroupTest.java
index 1fc9a88..b46c031 100644
--- a/tests/tests/view/src/android/view/cts/ViewGroupTest.java
+++ b/tests/tests/view/src/android/view/cts/ViewGroupTest.java
@@ -1661,6 +1661,63 @@
         assertFalse(vg.isGetChildStaticTransformationCalled);
     }
 
+    static public int resetRtlPropertiesCount;
+    static public int resetResolvedLayoutDirectionCount;
+    static public int resetResolvedTextDirectionCount;
+    static public int resetResolvedTextAlignmentCount;
+    static public int resetResolvedPaddingCount;
+    static public int resetResolvedDrawablesCount;
+
+
+    private static void clearRtlCounters() {
+        resetRtlPropertiesCount = 0;
+        resetResolvedLayoutDirectionCount = 0;
+        resetResolvedTextDirectionCount = 0;
+        resetResolvedTextAlignmentCount = 0;
+        resetResolvedPaddingCount = 0;
+        resetResolvedDrawablesCount = 0;
+    }
+
+    public void testResetRtlProperties() {
+        clearRtlCounters();
+
+        MockViewGroup vg = new MockViewGroup(mContext);
+        MockView2 v1 = new MockView2(mContext);
+        MockView2 v2 = new MockView2(mContext);
+
+        MockViewGroup v3 = new MockViewGroup(mContext);
+        MockView2 v4 = new MockView2(mContext);
+
+        v3.addView(v4);
+        assertEquals(1, resetRtlPropertiesCount);
+        assertEquals(1, resetResolvedLayoutDirectionCount);
+        assertEquals(1, resetResolvedTextDirectionCount);
+        assertEquals(1, resetResolvedTextAlignmentCount);
+        assertEquals(1, resetResolvedPaddingCount);
+        assertEquals(1, resetResolvedDrawablesCount);
+
+        clearRtlCounters();
+        vg.addView(v1);
+        vg.addView(v2);
+        vg.addView(v3);
+
+        assertEquals(3, resetRtlPropertiesCount); // for v1 / v2 / v3 only
+        assertEquals(4, resetResolvedLayoutDirectionCount); // for v1 / v2 / v3 / v4
+        assertEquals(4, resetResolvedTextDirectionCount);
+        assertEquals(3, resetResolvedTextAlignmentCount); // for v1 / v2 / v3 only
+        assertEquals(4, resetResolvedPaddingCount);
+        assertEquals(4, resetResolvedDrawablesCount);
+
+        clearRtlCounters();
+        vg.resetRtlProperties();
+        assertEquals(1, resetRtlPropertiesCount); // for vg only
+        assertEquals(5, resetResolvedLayoutDirectionCount); // for all
+        assertEquals(5, resetResolvedTextDirectionCount);
+        assertEquals(1, resetResolvedTextAlignmentCount); // for vg only as TextAlignment is not inherited (default is Gravity)
+        assertEquals(5, resetResolvedPaddingCount);
+        assertEquals(5, resetResolvedDrawablesCount);
+    }
+
     static class MockTextView extends TextView {
 
         public boolean isClearFocusCalled;
@@ -2071,6 +2128,93 @@
         public void setStaticTransformationsEnabled(boolean enabled) {
             super.setStaticTransformationsEnabled(enabled);
         }
+
+        @Override
+        public void resetRtlProperties() {
+            super.resetRtlProperties();
+            resetRtlPropertiesCount++;
+        }
+
+        @Override
+        public void resetResolvedLayoutDirection() {
+            super.resetResolvedLayoutDirection();
+            resetResolvedLayoutDirectionCount++;
+        }
+
+        @Override
+        public void resetResolvedTextDirection() {
+            super.resetResolvedTextDirection();
+            resetResolvedTextDirectionCount++;
+        }
+
+        @Override
+        public void resetResolvedTextAlignment() {
+            super.resetResolvedTextAlignment();
+            resetResolvedTextAlignmentCount++;
+        }
+
+        @Override
+        public void resetResolvedPadding() {
+            super.resetResolvedPadding();
+            resetResolvedPaddingCount++;
+        }
+
+        @Override
+        protected void resetResolvedDrawables() {
+            super.resetResolvedDrawables();
+            resetResolvedDrawablesCount++;
+        }
+    }
+
+    static class MockView2 extends View {
+
+        public MockView2(Context context) {
+            super(context);
+        }
+
+        public MockView2(Context context, AttributeSet attrs) {
+            super(context, attrs);
+        }
+
+        public MockView2(Context context, AttributeSet attrs, int defStyle) {
+            super(context, attrs, defStyle);
+        }
+
+        @Override
+        public void resetRtlProperties() {
+            super.resetRtlProperties();
+            resetRtlPropertiesCount++;
+        }
+
+        @Override
+        public void resetResolvedLayoutDirection() {
+            super.resetResolvedLayoutDirection();
+            resetResolvedLayoutDirectionCount++;
+        }
+
+        @Override
+        public void resetResolvedTextDirection() {
+            super.resetResolvedTextDirection();
+            resetResolvedTextDirectionCount++;
+        }
+
+        @Override
+        public void resetResolvedTextAlignment() {
+            super.resetResolvedTextAlignment();
+            resetResolvedTextAlignmentCount++;
+        }
+
+        @Override
+        public void resetResolvedPadding() {
+            super.resetResolvedPadding();
+            resetResolvedPaddingCount++;
+        }
+
+        @Override
+        protected void resetResolvedDrawables() {
+            super.resetResolvedDrawables();
+            resetResolvedDrawablesCount++;
+        }
     }
 
     public void setResult(int resultCode) {
diff --git a/tests/tests/view/src/android/view/inputmethod/cts/InputMethodInfoTest.java b/tests/tests/view/src/android/view/inputmethod/cts/InputMethodInfoTest.java
index 722c1b3..00a8dea 100644
--- a/tests/tests/view/src/android/view/inputmethod/cts/InputMethodInfoTest.java
+++ b/tests/tests/view/src/android/view/inputmethod/cts/InputMethodInfoTest.java
@@ -16,6 +16,7 @@
 
 package android.view.inputmethod.cts;
 
+
 import android.content.ComponentName;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -26,7 +27,6 @@
 import android.util.Printer;
 import android.view.inputmethod.InputMethod;
 import android.view.inputmethod.InputMethodInfo;
-import android.view.inputmethod.InputMethodSubtype;
 
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -40,40 +40,14 @@
     private CharSequence mLabel;
     private String mSettingsActivity;
 
-    private int mSubtypeNameResId;
-    private int mSubtypeIconResId;
-    private String mSubtypeLocale;
-    private String mSubtypeMode;
-    private String mSubtypeExtraValue_key;
-    private String mSubtypeExtraValue_value;
-    private String mSubtypeExtraValue;
-    private boolean mSubtypeIsAuxiliary;
-    private boolean mSubtypeOverridesImplicitlyEnabledSubtype;
-    private int mSubtypeId;
-    private InputMethodSubtype mInputMethodSubtype;
-
     @Override
     protected void setUp() throws Exception {
         super.setUp();
         mPackageName = mContext.getPackageName();
-        mClassName = InputMethodSettingsActivityStub.class.getName();
+        mClassName = InputMethodInfoStub.class.getName();
         mLabel = "test";
-        mSettingsActivity = "android.view.inputmethod.cts.InputMethodSettingsActivityStub";
+        mSettingsActivity = "android.view.inputmethod.cts.InputMethodInfoStub";
         mInputMethodInfo = new InputMethodInfo(mPackageName, mClassName, mLabel, mSettingsActivity);
-
-        mSubtypeNameResId = 0;
-        mSubtypeIconResId = 0;
-        mSubtypeLocale = "en_US";
-        mSubtypeMode = "keyboard";
-        mSubtypeExtraValue_key = "key1";
-        mSubtypeExtraValue_value = "value1";
-        mSubtypeExtraValue = "tag," + mSubtypeExtraValue_key + "=" + mSubtypeExtraValue_value;
-        mSubtypeIsAuxiliary = false;
-        mSubtypeOverridesImplicitlyEnabledSubtype = false;
-        mSubtypeId = 99;
-        mInputMethodSubtype = new InputMethodSubtype(mSubtypeNameResId, mSubtypeIconResId,
-                mSubtypeLocale, mSubtypeMode, mSubtypeExtraValue, mSubtypeIsAuxiliary,
-                mSubtypeOverridesImplicitlyEnabledSubtype, mSubtypeId);
     }
 
     public void testInputMethodInfoProperties() throws XmlPullParserException, IOException {
@@ -84,7 +58,7 @@
         assertEquals(0, mInputMethodInfo.getIsDefaultResourceId());
 
         Intent intent = new Intent(InputMethod.SERVICE_INTERFACE);
-        intent.setClass(mContext, InputMethodSettingsActivityStub.class);
+        intent.setClass(mContext, InputMethodInfoStub.class);
         PackageManager pm = mContext.getPackageManager();
         List<ResolveInfo> ris = pm.queryIntentServices(intent, PackageManager.GET_META_DATA);
         for (int i = 0; i < ris.size(); i++) {
@@ -95,22 +69,6 @@
         }
     }
 
-    public void testInputMethodSubtypeProperties() {
-        // TODO: Test InputMethodSubtype.getDisplayName()
-        assertEquals(mSubtypeNameResId, mInputMethodSubtype.getNameResId());
-        assertEquals(mSubtypeIconResId, mInputMethodSubtype.getIconResId());
-        assertEquals(mSubtypeLocale, mInputMethodSubtype.getLocale());
-        assertEquals(mSubtypeMode, mInputMethodSubtype.getMode());
-        assertEquals(mSubtypeExtraValue, mInputMethodSubtype.getExtraValue());
-        assertTrue(mInputMethodSubtype.containsExtraValueKey(mSubtypeExtraValue_key));
-        assertEquals(mSubtypeExtraValue_value,
-                mInputMethodSubtype.getExtraValueOf(mSubtypeExtraValue_key));
-        assertEquals(mSubtypeIsAuxiliary, mInputMethodSubtype.isAuxiliary());
-        assertEquals(mSubtypeOverridesImplicitlyEnabledSubtype,
-                mInputMethodSubtype.overridesImplicitlyEnabledSubtype());
-        assertEquals(mSubtypeId, mInputMethodSubtype.hashCode());
-    }
-
     private void assertService(ServiceInfo expected, ServiceInfo actual) {
         assertEquals(expected.getIconResource(), actual.getIconResource());
         assertEquals(expected.labelRes, actual.labelRes);
@@ -152,39 +110,19 @@
         assertEquals(expected.toString(), mInputMethodInfo.loadLabel(pm).toString());
     }
 
-    public void testInputMethodInfoWriteToParcel() {
-        final Parcel p = Parcel.obtain();
+    public void testWriteToParcel() {
+        Parcel p = Parcel.obtain();
         mInputMethodInfo.writeToParcel(p, 0);
         p.setDataPosition(0);
-        final InputMethodInfo imi = InputMethodInfo.CREATOR.createFromParcel(p);
+        InputMethodInfo inputMethodInfo = InputMethodInfo.CREATOR.createFromParcel(p);
 
-        assertEquals(mInputMethodInfo.getPackageName(), imi.getPackageName());
-        assertEquals(mInputMethodInfo.getServiceName(), imi.getServiceName());
-        assertEquals(mInputMethodInfo.getSettingsActivity(), imi.getSettingsActivity());
-        assertEquals(mInputMethodInfo.getId(), imi.getId());
-        assertEquals(mInputMethodInfo.getIsDefaultResourceId(), imi.getIsDefaultResourceId());
-        assertService(mInputMethodInfo.getServiceInfo(), imi.getServiceInfo());
-    }
-
-    public void testInputMethodSubtypeWriteToParcel() {
-        final Parcel p = Parcel.obtain();
-        mInputMethodSubtype.writeToParcel(p, 0);
-        p.setDataPosition(0);
-        final InputMethodSubtype subtype = InputMethodSubtype.CREATOR.createFromParcel(p);
-
-        assertEquals(mInputMethodSubtype.containsExtraValueKey(mSubtypeExtraValue_key),
-                subtype.containsExtraValueKey(mSubtypeExtraValue_key));
-        assertEquals(mInputMethodSubtype.getExtraValue(), subtype.getExtraValue());
-        assertEquals(mInputMethodSubtype.getExtraValueOf(mSubtypeExtraValue_key),
-                subtype.getExtraValueOf(mSubtypeExtraValue_key));
-        assertEquals(mInputMethodSubtype.getIconResId(), subtype.getIconResId());
-        assertEquals(mInputMethodSubtype.getLocale(), subtype.getLocale());
-        assertEquals(mInputMethodSubtype.getMode(), subtype.getMode());
-        assertEquals(mInputMethodSubtype.getNameResId(), subtype.getNameResId());
-        assertEquals(mInputMethodSubtype.hashCode(), subtype.hashCode());
-        assertEquals(mInputMethodSubtype.isAuxiliary(), subtype.isAuxiliary());
-        assertEquals(mInputMethodSubtype.overridesImplicitlyEnabledSubtype(),
-                subtype.overridesImplicitlyEnabledSubtype());
+        assertEquals(mInputMethodInfo.getPackageName(), inputMethodInfo.getPackageName());
+        assertEquals(mInputMethodInfo.getServiceName(), inputMethodInfo.getServiceName());
+        assertEquals(mInputMethodInfo.getSettingsActivity(), inputMethodInfo.getSettingsActivity());
+        assertEquals(mInputMethodInfo.getId(), inputMethodInfo.getId());
+        assertEquals(mInputMethodInfo.getIsDefaultResourceId(), inputMethodInfo
+                .getIsDefaultResourceId());
+        assertService(mInputMethodInfo.getServiceInfo(), inputMethodInfo.getServiceInfo());
     }
 
     class MockPrinter implements Printer {
diff --git a/tests/tests/widget/src/android/widget/cts/TextViewTest.java b/tests/tests/widget/src/android/widget/cts/TextViewTest.java
index 886a289..1b51e14 100755
--- a/tests/tests/widget/src/android/widget/cts/TextViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/TextViewTest.java
@@ -3162,7 +3162,12 @@
         tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
         assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection());
 
+        // No reset when we remove the view
         ll.removeView(tv);
+        assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection());
+
+        // Reset is done when we add the view
+        ll.addView(tv);
         assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection());
     }
 
@@ -3285,8 +3290,13 @@
         tv.setTextAlignment(View.TEXT_ALIGNMENT_INHERIT);
         assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment());
 
+        // No reset when we remove the view
         ll.removeView(tv);
-        // default text alignment is GRAVITY
+        assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment());
+
+        // Reset is done when we add the view
+        // Default text alignment is GRAVITY
+        ll.addView(tv);
         assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment());
     }
 
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java b/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java
index 428b134..6674bdf 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java
@@ -31,7 +31,7 @@
     @Option(name="cts-install-path", description="the path to the cts installation to use")
     private String mCtsRootDirPath = System.getProperty("CTS_ROOT");
 
-    public static final String CTS_BUILD_VERSION = "4.1_r4";
+    public static final String CTS_BUILD_VERSION = "4.2_r1";
 
     /**
      * {@inheritDoc}
