diff --git a/compat/NOTICES.md b/compat/NOTICES.md
deleted file mode 100644
index 8665d5d..0000000
--- a/compat/NOTICES.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Change Log
-
-## [23.0.1](https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v4/) (2015-09-24)
-
-**Breakage and deprecation notices:**
-
-- ExploreByTouchHelper
-  - Several public methods that are only meant to be called by app developers (and not internally by
-    the helper itself) became final. Any code that depends on overriding these methods should be
-    moved elsewhere.
-  - The concept of keyboard and accessibility focus have been clarified. As a result, the
-    getFocusedVirtualView() method has been deprecated and will be removed in a subsequent release.
diff --git a/compat/tests/AndroidManifest.xml b/compat/tests/AndroidManifest.xml
index eb7a57e..60d54cf 100644
--- a/compat/tests/AndroidManifest.xml
+++ b/compat/tests/AndroidManifest.xml
@@ -34,22 +34,11 @@
         <uses-library android:name="android.test.runner" />
         <activity android:name="android.support.v4.widget.TextViewTestActivity"/>
 
-        <activity android:name="android.support.v4.widget.SwipeRefreshLayoutActivity"/>
-
-        <activity android:name="android.support.v4.widget.ExploreByTouchHelperTestActivity"/>
-
-        <activity android:name="android.support.v4.view.ViewPagerWithTitleStripActivity"/>
-
-        <activity android:name="android.support.v4.view.ViewPagerWithTabStripActivity"/>
-
         <activity android:name="android.support.v4.view.VpaActivity"/>
 
         <activity
             android:name="android.support.v4.ThemedYellowActivity"
             android:theme="@style/YellowTheme" />
-        <activity android:name="android.support.v4.app.test.FragmentTestActivity"/>
-
-        <activity android:name="android.support.v4.app.test.EmptyFragmentTestActivity" />
     </application>
 
     <instrumentation android:name="android.test.InstrumentationTestRunner"
diff --git a/compat/tests/java/android/support/v4/testutils/TestUtils.java b/compat/tests/java/android/support/v4/testutils/TestUtils.java
index 9b1acee..0bb8e1f 100644
--- a/compat/tests/java/android/support/v4/testutils/TestUtils.java
+++ b/compat/tests/java/android/support/v4/testutils/TestUtils.java
@@ -34,34 +34,6 @@
 
 public class TestUtils {
     /**
-     * Converts the specified value from dips to pixels for use as view size.
-     */
-    public static int convertSizeDipsToPixels(DisplayMetrics displayMetrics, int dipValue) {
-        // Round to the nearest int value. This follows the logic in
-        // TypedValue.complexToDimensionPixelSize
-        final int res = (int) (dipValue * displayMetrics.density + 0.5f);
-        if (res != 0) {
-            return res;
-        }
-        if (dipValue == 0) {
-            return 0;
-        }
-        if (dipValue > 0) {
-            return 1;
-        }
-        return -1;
-    }
-
-    /**
-     * Converts the specified value from dips to pixels for use as view offset.
-     */
-    public static int convertOffsetDipsToPixels(DisplayMetrics displayMetrics, int dipValue) {
-        // Round to the nearest int value.
-        return (int) (dipValue * displayMetrics.density);
-    }
-
-
-    /**
      * Checks whether all the pixels in the specified drawable are of the same specified color.
      * If the passed <code>Drawable</code> does not have positive intrinsic dimensions set, this
      * method will throw an <code>IllegalArgumentException</code>. If there is a color mismatch,
diff --git a/compat/tests/java/android/support/v4/testutils/TestUtilsAssertions.java b/compat/tests/java/android/support/v4/testutils/TestUtilsAssertions.java
deleted file mode 100644
index 161c0c7..0000000
--- a/compat/tests/java/android/support/v4/testutils/TestUtilsAssertions.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2015 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.support.v4.testutils;
-
-import android.view.View;
-import android.view.ViewGroup;
-
-import android.support.test.espresso.NoMatchingViewException;
-import android.support.test.espresso.ViewAssertion;
-
-import junit.framework.AssertionFailedError;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-
-public class TestUtilsAssertions {
-
-    /**
-     * Returns an assertion that asserts that there is specified number of fully displayed
-     * children.
-     */
-    public static ViewAssertion hasDisplayedChildren(final int expectedCount) {
-        return new ViewAssertion() {
-            @Override
-            public void check(final View foundView, NoMatchingViewException noViewException) {
-                if (noViewException != null) {
-                    throw noViewException;
-                } else {
-                    if (!(foundView instanceof ViewGroup)) {
-                        throw new AssertionFailedError("View " +
-                                foundView.getClass().getSimpleName() + " is not a ViewGroup");
-                    }
-                    final ViewGroup foundGroup = (ViewGroup) foundView;
-
-                    final int childrenCount = foundGroup.getChildCount();
-                    int childrenDisplayedCount = 0;
-                    for (int i = 0; i < childrenCount; i++) {
-                        if (isDisplayed().matches(foundGroup.getChildAt(i))) {
-                            childrenDisplayedCount++;
-                        }
-                    }
-
-                    if (childrenDisplayedCount != expectedCount) {
-                        throw new AssertionFailedError("Expected " + expectedCount +
-                                " displayed children, but found " + childrenDisplayedCount);
-                    }
-                }
-            }
-        };
-    }
-}
\ No newline at end of file
diff --git a/compat/tests/java/android/support/v4/testutils/TestUtilsMatchers.java b/compat/tests/java/android/support/v4/testutils/TestUtilsMatchers.java
deleted file mode 100644
index c6f07e5..0000000
--- a/compat/tests/java/android/support/v4/testutils/TestUtilsMatchers.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (C) 2015 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.support.v4.testutils;
-
-import java.lang.String;
-import java.util.List;
-
-import android.graphics.Color;
-import android.graphics.drawable.Drawable;
-import android.support.annotation.ColorInt;
-import android.support.test.espresso.matcher.BoundedMatcher;
-import android.support.v4.testutils.TestUtils;
-import android.support.v4.view.ViewCompat;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewParent;
-
-import junit.framework.Assert;
-
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
-
-public class TestUtilsMatchers {
-    /**
-     * Returns a matcher that matches views which have specific background color.
-     */
-    public static Matcher backgroundColor(@ColorInt final int backgroundColor) {
-        return new BoundedMatcher<View, View>(View.class) {
-            private String failedComparisonDescription;
-
-            @Override
-            public void describeTo(final Description description) {
-                description.appendText("with background color: ");
-
-                description.appendText(failedComparisonDescription);
-            }
-
-            @Override
-            public boolean matchesSafely(final View view) {
-                Drawable actualBackgroundDrawable = view.getBackground();
-                if (actualBackgroundDrawable == null) {
-                    return false;
-                }
-
-                // One option is to check if we have a ColorDrawable and then call getColor
-                // but that API is v11+. Instead, we call our helper method that checks whether
-                // all pixels in a Drawable are of the same specified color. Here we pass
-                // hard-coded dimensions of 40x40 since we can't rely on the intrinsic dimensions
-                // being set on our drawable.
-                try {
-                    TestUtils.assertAllPixelsOfColor("", actualBackgroundDrawable,
-                            40, 40, backgroundColor, true);
-                    // If we are here, the color comparison has passed.
-                    failedComparisonDescription = null;
-                    return true;
-                } catch (Throwable t) {
-                    // If we are here, the color comparison has failed.
-                    failedComparisonDescription = t.getMessage();
-                    return false;
-                }
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches Views which are an instance of the provided class.
-     */
-    public static Matcher<View> isOfClass(final Class<? extends View> clazz) {
-        if (clazz == null) {
-            Assert.fail("Passed null Class instance");
-        }
-        return new TypeSafeMatcher<View>() {
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("is identical to class: " + clazz);
-            }
-
-            @Override
-            public boolean matchesSafely(View view) {
-                return clazz.equals(view.getClass());
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches Views that are aligned to the left / start edge of
-     * their parent.
-     */
-    public static Matcher<View> startAlignedToParent() {
-        return new BoundedMatcher<View, View>(View.class) {
-            private String failedCheckDescription;
-
-            @Override
-            public void describeTo(final Description description) {
-                description.appendText(failedCheckDescription);
-            }
-
-            @Override
-            public boolean matchesSafely(final View view) {
-                final ViewParent parent = view.getParent();
-                if (!(parent instanceof ViewGroup)) {
-                    return false;
-                }
-                final ViewGroup parentGroup = (ViewGroup) parent;
-
-                final int parentLayoutDirection = ViewCompat.getLayoutDirection(parentGroup);
-                if (parentLayoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR) {
-                    if (view.getLeft() == 0) {
-                        return true;
-                    } else {
-                        failedCheckDescription =
-                                "not aligned to start (left) edge of parent : left=" +
-                                        view.getLeft();
-                        return false;
-                    }
-                } else {
-                    if (view.getRight() == parentGroup.getWidth()) {
-                        return true;
-                    } else {
-                        failedCheckDescription =
-                                "not aligned to start (right) edge of parent : right=" +
-                                        view.getRight() + ", parent width=" +
-                                        parentGroup.getWidth();
-                        return false;
-                    }
-                }
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches Views that are aligned to the right / end edge of
-     * their parent.
-     */
-    public static Matcher<View> endAlignedToParent() {
-        return new BoundedMatcher<View, View>(View.class) {
-            private String failedCheckDescription;
-
-            @Override
-            public void describeTo(final Description description) {
-                description.appendText(failedCheckDescription);
-            }
-
-            @Override
-            public boolean matchesSafely(final View view) {
-                final ViewParent parent = view.getParent();
-                if (!(parent instanceof ViewGroup)) {
-                    return false;
-                }
-                final ViewGroup parentGroup = (ViewGroup) parent;
-
-                final int parentLayoutDirection = ViewCompat.getLayoutDirection(parentGroup);
-                if (parentLayoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR) {
-                    if (view.getRight() == parentGroup.getWidth()) {
-                        return true;
-                    } else {
-                        failedCheckDescription =
-                                "not aligned to end (right) edge of parent : right=" +
-                                        view.getRight() + ", parent width=" +
-                                        parentGroup.getWidth();
-                        return false;
-                    }
-                } else {
-                    if (view.getLeft() == 0) {
-                        return true;
-                    } else {
-                        failedCheckDescription =
-                                "not aligned to end (left) edge of parent : left=" +
-                                        view.getLeft();
-                        return false;
-                    }
-                }
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches Views that are centered horizontally in their parent.
-     */
-    public static Matcher<View> centerAlignedInParent() {
-        return new BoundedMatcher<View, View>(View.class) {
-            private String failedCheckDescription;
-
-            @Override
-            public void describeTo(final Description description) {
-                description.appendText(failedCheckDescription);
-            }
-
-            @Override
-            public boolean matchesSafely(final View view) {
-                final ViewParent parent = view.getParent();
-                if (!(parent instanceof ViewGroup)) {
-                    return false;
-                }
-                final ViewGroup parentGroup = (ViewGroup) parent;
-
-                final int viewLeft = view.getLeft();
-                final int viewRight = view.getRight();
-                final int parentWidth = parentGroup.getWidth();
-
-                final int viewMiddle = (viewLeft + viewRight) / 2;
-                final int parentMiddle = parentWidth / 2;
-
-                // Check that the view is centered in its parent, accounting for off-by-one
-                // pixel difference in case one is even and the other is odd.
-                if (Math.abs(viewMiddle - parentMiddle) > 1) {
-                    failedCheckDescription =
-                            "not aligned to center of parent : own span=[" +
-                                    viewLeft + "-" + viewRight + "], parent width=" + parentWidth;
-                    return false;
-                }
-
-                return true;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches lists of integer values that match the specified sequence
-     * of values.
-     */
-    public static Matcher<List<Integer>> matches(final int ... expectedValues) {
-        return new TypeSafeMatcher<List<Integer>>() {
-            private String mFailedDescription;
-
-            @Override
-            public void describeTo(Description description) {
-                description.appendText(mFailedDescription);
-            }
-
-            @Override
-            protected boolean matchesSafely(List<Integer> item) {
-                int actualCount = item.size();
-                int expectedCount = expectedValues.length;
-
-                if (actualCount != expectedCount) {
-                    mFailedDescription = "Expected " + expectedCount + " values, but got " +
-                            actualCount;
-                    return false;
-                }
-
-                for (int i = 0; i < expectedCount; i++) {
-                    int curr = item.get(i);
-
-                    if (curr != expectedValues[i]) {
-                        mFailedDescription = "At #" + i + " got " + curr + " but should be " +
-                                expectedValues[i];
-                        return false;
-                    }
-                }
-
-                return true;
-            }
-        };
-    }
-
-}
diff --git a/compat/tests/res/anim/fade_in.xml b/compat/tests/res/anim/fade_in.xml
deleted file mode 100644
index 92d5bbe..0000000
--- a/compat/tests/res/anim/fade_in.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2016, 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.
-*/
--->
-
-<alpha xmlns:android="http://schemas.android.com/apk/res/android"
-       android:duration="300"
-       android:fromAlpha="0.0"
-       android:toAlpha="1.0"/>
diff --git a/compat/tests/res/anim/fade_out.xml b/compat/tests/res/anim/fade_out.xml
deleted file mode 100644
index bc5a2ab..0000000
--- a/compat/tests/res/anim/fade_out.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2016, 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.
-*/
--->
-
-<alpha xmlns:android="http://schemas.android.com/apk/res/android"
-       android:duration="300"
-       android:fromAlpha="1.0"
-       android:toAlpha="0.0"/>
diff --git a/compat/tests/res/anim/long_fade_in.xml b/compat/tests/res/anim/long_fade_in.xml
deleted file mode 100644
index 5d6f496..0000000
--- a/compat/tests/res/anim/long_fade_in.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<alpha xmlns:android="http://schemas.android.com/apk/res/android"
-       android:interpolator="@android:interpolator/decelerate_quad"
-       android:fromAlpha="0.0" android:toAlpha="1.0"
-       android:duration="5000" />
diff --git a/compat/tests/res/anim/long_fade_out.xml b/compat/tests/res/anim/long_fade_out.xml
deleted file mode 100644
index fe9fc6a..0000000
--- a/compat/tests/res/anim/long_fade_out.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<alpha xmlns:android="http://schemas.android.com/apk/res/android"
-       android:interpolator="@android:interpolator/decelerate_quad"
-       android:fromAlpha="1.0" android:toAlpha="0.0"
-       android:duration="5000" />
diff --git a/compat/tests/res/layout/activity_content.xml b/compat/tests/res/layout/activity_content.xml
deleted file mode 100644
index 8870e60..0000000
--- a/compat/tests/res/layout/activity_content.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             android:id="@+id/content"
-             android:layout_width="match_parent"
-             android:layout_height="match_parent"/>
diff --git a/compat/tests/res/layout/explore_by_touch_helper_activity.xml b/compat/tests/res/layout/explore_by_touch_helper_activity.xml
deleted file mode 100644
index 22c95b4..0000000
--- a/compat/tests/res/layout/explore_by_touch_helper_activity.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/content"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-    <View
-        android:id="@+id/host_view"
-        android:layout_width="200dp"
-        android:layout_height="200dp"
-        android:background="#f00" />
-</FrameLayout>
diff --git a/compat/tests/res/layout/fragment_a.xml b/compat/tests/res/layout/fragment_a.xml
deleted file mode 100644
index 38e0423..0000000
--- a/compat/tests/res/layout/fragment_a.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:orientation="vertical">
-    <TextView android:layout_width="wrap_content"
-              android:layout_height="wrap_content"
-              android:id="@+id/textA"
-              android:text="@string/hello"/>
-</LinearLayout>
diff --git a/compat/tests/res/layout/fragment_b.xml b/compat/tests/res/layout/fragment_b.xml
deleted file mode 100644
index d8ed961..0000000
--- a/compat/tests/res/layout/fragment_b.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:orientation="vertical">
-    <TextView android:layout_width="wrap_content"
-              android:layout_height="wrap_content"
-              android:id="@+id/textB"
-              android:text="@string/hello"/>
-</LinearLayout>
diff --git a/compat/tests/res/layout/fragment_c.xml b/compat/tests/res/layout/fragment_c.xml
deleted file mode 100644
index ed3c753..0000000
--- a/compat/tests/res/layout/fragment_c.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:orientation="vertical">
-    <TextView android:layout_width="wrap_content"
-              android:layout_height="wrap_content"
-              android:id="@+id/textC"
-              android:text="@string/hello"/>
-</LinearLayout>
diff --git a/compat/tests/res/layout/fragment_end.xml b/compat/tests/res/layout/fragment_end.xml
deleted file mode 100644
index aa3d9e8..0000000
--- a/compat/tests/res/layout/fragment_end.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:orientation="vertical">
-    <TextView android:layout_width="wrap_content"
-              android:layout_height="wrap_content"
-              android:transitionName="destination"
-              android:id="@+id/hello"
-              android:text="@string/hello"/>
-    <View android:layout_width="10dp"
-          android:layout_height="10dp"
-          android:background="#0F0"
-          android:id="@+id/greenSquare"/>
-    <View android:layout_width="10dp"
-          android:layout_height="10dp"
-          android:background="#F00"
-          android:id="@+id/redSquare"/>
-</LinearLayout>
diff --git a/compat/tests/res/layout/fragment_middle.xml b/compat/tests/res/layout/fragment_middle.xml
deleted file mode 100644
index 7d1409b..0000000
--- a/compat/tests/res/layout/fragment_middle.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:orientation="vertical">
-    <View android:layout_width="10dp"
-          android:layout_height="10dp"
-          android:background="#00F"
-          android:id="@+id/blueSquare"/>
-    <View android:layout_width="10dp"
-          android:layout_height="10dp"
-          android:background="#FF0"
-          android:id="@+id/yellowSquare"/>
-</LinearLayout>
diff --git a/compat/tests/res/layout/fragment_start.xml b/compat/tests/res/layout/fragment_start.xml
deleted file mode 100644
index 793e9b5..0000000
--- a/compat/tests/res/layout/fragment_start.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:orientation="vertical">
-    <View android:layout_width="10dp"
-          android:layout_height="10dp"
-          android:background="#0F0"
-          android:id="@+id/greenSquare"/>
-    <View android:layout_width="10dp"
-          android:layout_height="10dp"
-          android:background="#F00"
-          android:id="@+id/redSquare"/>
-    <TextView android:layout_width="wrap_content"
-              android:layout_height="wrap_content"
-              android:transitionName="source"
-              android:id="@+id/hello"
-              android:text="@string/hello"/>
-</LinearLayout>
diff --git a/compat/tests/res/layout/strict_view_fragment.xml b/compat/tests/res/layout/strict_view_fragment.xml
deleted file mode 100644
index 324f8d0..0000000
--- a/compat/tests/res/layout/strict_view_fragment.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-* Copyright 2016, 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.
-*/
--->
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:id="@+id/text1" />
diff --git a/compat/tests/res/layout/swipe_refresh_layout_activity.xml b/compat/tests/res/layout/swipe_refresh_layout_activity.xml
deleted file mode 100644
index d925ecf..0000000
--- a/compat/tests/res/layout/swipe_refresh_layout_activity.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<android.support.v4.widget.SwipeRefreshLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/swipe_refresh"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-<!-- some full screen pullable view that will be the offsetable content -->
-    <ListView
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:id="@+id/content"/>
-</android.support.v4.widget.SwipeRefreshLayout>
\ No newline at end of file
diff --git a/compat/tests/res/layout/view_pager_with_tab_strip.xml b/compat/tests/res/layout/view_pager_with_tab_strip.xml
deleted file mode 100644
index 115b672..0000000
--- a/compat/tests/res/layout/view_pager_with_tab_strip.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<android.support.v4.view.ViewPager
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/pager"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <android.support.v4.view.PagerTabStrip
-        android:id="@+id/titles"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="top" />
-
-</android.support.v4.view.ViewPager>
-
diff --git a/compat/tests/res/layout/view_pager_with_title_strip.xml b/compat/tests/res/layout/view_pager_with_title_strip.xml
deleted file mode 100644
index de248df..0000000
--- a/compat/tests/res/layout/view_pager_with_title_strip.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<android.support.v4.view.ViewPager
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/pager"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <android.support.v4.view.PagerTitleStrip
-        android:id="@+id/titles"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="top" />
-
-</android.support.v4.view.ViewPager>
-
diff --git a/compat/tests/res/transition/change_bounds.xml b/compat/tests/res/transition/change_bounds.xml
deleted file mode 100644
index 766bcea3..0000000
--- a/compat/tests/res/transition/change_bounds.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-<changeBounds/>
diff --git a/compat/tests/res/transition/fade.xml b/compat/tests/res/transition/fade.xml
deleted file mode 100644
index 617f70e..0000000
--- a/compat/tests/res/transition/fade.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-<fade xmlns:android="http://schemas.android.com/apk/res/android"/>
diff --git a/compat/tests/res/values/ids.xml b/compat/tests/res/values/ids.xml
deleted file mode 100644
index e5fcf63..0000000
--- a/compat/tests/res/values/ids.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources>
-    <item name="page_0" type="id"/>
-    <item name="page_1" type="id"/>
-    <item name="page_2" type="id"/>
-    <item name="page_3" type="id"/>
-    <item name="page_4" type="id"/>
-    <item name="page_5" type="id"/>
-    <item name="page_6" type="id"/>
-    <item name="page_7" type="id"/>
-    <item name="page_8" type="id"/>
-    <item name="page_9" type="id"/>
-</resources>
\ No newline at end of file
diff --git a/compat/tests/res/values/strings.xml b/compat/tests/res/values/strings.xml
index b804faf..4aebfae 100644
--- a/compat/tests/res/values/strings.xml
+++ b/compat/tests/res/values/strings.xml
@@ -20,5 +20,4 @@
     <string name="test_text_medium">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam dui neque, suscipit quis rhoncus vitae, rhoncus hendrerit neque.</string>
     <!-- Long text for testing. -->
     <string name="test_text_long">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam dui neque, suscipit quis rhoncus vitae, rhoncus hendrerit neque. Proin ac mauris cursus nulla aliquam viverra. Vivamus pharetra luctus magna, lacinia imperdiet leo mollis eget. Fusce a diam ipsum. Etiam sit amet nisl et velit aliquam dignissim eget nec nisi. Duis bibendum euismod tortor non pulvinar. Nunc quis neque ultricies nulla luctus aliquet. Sed consectetur, orci ac vehicula consectetur, metus sem pellentesque turpis, sed venenatis nisi lorem vitae ante.</string>
-    <string name="hello">Hello World</string>
 </resources>
\ No newline at end of file
diff --git a/v4/tests/AndroidManifest.xml b/v4/tests/AndroidManifest.xml
index 3dfc091..aabcf07 100644
--- a/v4/tests/AndroidManifest.xml
+++ b/v4/tests/AndroidManifest.xml
@@ -32,8 +32,6 @@
             android:supportsRtl="true"
             android:theme="@style/TestActivityTheme">
         <uses-library android:name="android.test.runner" />
-        <activity android:name="android.support.v4.widget.TextViewTestActivity"/>
-
         <activity android:name="android.support.v4.widget.SwipeRefreshLayoutActivity"/>
 
         <activity android:name="android.support.v4.widget.ExploreByTouchHelperTestActivity"/>
@@ -42,11 +40,6 @@
 
         <activity android:name="android.support.v4.view.ViewPagerWithTabStripActivity"/>
 
-        <activity android:name="android.support.v4.view.VpaActivity"/>
-
-        <activity
-            android:name="android.support.v4.ThemedYellowActivity"
-            android:theme="@style/YellowTheme" />
         <activity android:name="android.support.v4.app.test.FragmentTestActivity"/>
 
         <activity android:name="android.support.v4.app.test.EmptyFragmentTestActivity" />
diff --git a/v4/tests/java/android/support/v4/ThemedYellowActivity.java b/v4/tests/java/android/support/v4/ThemedYellowActivity.java
deleted file mode 100644
index e256251..0000000
--- a/v4/tests/java/android/support/v4/ThemedYellowActivity.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2015 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.support.v4;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.WindowManager;
-import android.widget.FrameLayout;
-
-public class ThemedYellowActivity extends Activity {
-    FrameLayout mContainer;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mContainer = new FrameLayout(this);
-
-        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
-        setContentView(mContainer);
-    }
-}
diff --git a/v4/tests/java/android/support/v4/graphics/ColorUtilsTest.java b/v4/tests/java/android/support/v4/graphics/ColorUtilsTest.java
index 998980b..985f874 100644
--- a/v4/tests/java/android/support/v4/graphics/ColorUtilsTest.java
+++ b/v4/tests/java/android/support/v4/graphics/ColorUtilsTest.java
@@ -82,6 +82,7 @@
                 .setWhiteMinAlpha30(0.39f).setWhiteMinAlpha45(0.54f));
     }
 
+    @Test
     public void testColorToHSL() {
         for (TestEntry entry : sEntryList) {
             verifyColorToHSL(entry.rgb, entry.hsl);
diff --git a/v4/tests/java/android/support/v4/testutils/LayoutDirectionActions.java b/v4/tests/java/android/support/v4/testutils/LayoutDirectionActions.java
deleted file mode 100755
index 25ae971..0000000
--- a/v4/tests/java/android/support/v4/testutils/LayoutDirectionActions.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2016 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.support.v4.testutils;
-
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.support.v4.view.ViewCompat;
-import android.view.View;
-import org.hamcrest.Matcher;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-
-public class LayoutDirectionActions {
-    /**
-     * Sets layout direction on the view.
-     */
-    public static ViewAction setLayoutDirection(final int layoutDirection) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "set layout direction";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                ViewCompat.setLayoutDirection(view, layoutDirection);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-}
diff --git a/v4/tests/java/android/support/v4/testutils/TestUtils.java b/v4/tests/java/android/support/v4/testutils/TestUtils.java
index 9b1acee..25f910e 100644
--- a/v4/tests/java/android/support/v4/testutils/TestUtils.java
+++ b/v4/tests/java/android/support/v4/testutils/TestUtils.java
@@ -17,9 +17,6 @@
 
 package android.support.v4.testutils;
 
-import java.lang.IllegalArgumentException;
-import java.lang.RuntimeException;
-
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
@@ -27,41 +24,10 @@
 import android.graphics.drawable.Drawable;
 import android.support.annotation.ColorInt;
 import android.support.annotation.NonNull;
-import android.util.DisplayMetrics;
-import android.util.TypedValue;
-
 import junit.framework.Assert;
 
 public class TestUtils {
     /**
-     * Converts the specified value from dips to pixels for use as view size.
-     */
-    public static int convertSizeDipsToPixels(DisplayMetrics displayMetrics, int dipValue) {
-        // Round to the nearest int value. This follows the logic in
-        // TypedValue.complexToDimensionPixelSize
-        final int res = (int) (dipValue * displayMetrics.density + 0.5f);
-        if (res != 0) {
-            return res;
-        }
-        if (dipValue == 0) {
-            return 0;
-        }
-        if (dipValue > 0) {
-            return 1;
-        }
-        return -1;
-    }
-
-    /**
-     * Converts the specified value from dips to pixels for use as view offset.
-     */
-    public static int convertOffsetDipsToPixels(DisplayMetrics displayMetrics, int dipValue) {
-        // Round to the nearest int value.
-        return (int) (dipValue * displayMetrics.density);
-    }
-
-
-    /**
      * Checks whether all the pixels in the specified drawable are of the same specified color.
      * If the passed <code>Drawable</code> does not have positive intrinsic dimensions set, this
      * method will throw an <code>IllegalArgumentException</code>. If there is a color mismatch,
diff --git a/v4/tests/java/android/support/v4/testutils/TextViewActions.java b/v4/tests/java/android/support/v4/testutils/TextViewActions.java
deleted file mode 100644
index f67e8c0..0000000
--- a/v4/tests/java/android/support/v4/testutils/TextViewActions.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (C) 2016 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.support.v4.testutils;
-
-import android.graphics.drawable.Drawable;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.Nullable;
-import android.support.annotation.StringRes;
-import android.support.annotation.StyleRes;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.support.v4.widget.TextViewCompat;
-import android.view.View;
-import android.widget.TextView;
-import org.hamcrest.Matcher;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-
-public class TextViewActions {
-    /**
-     * Sets max lines count on <code>TextView</code>.
-     */
-    public static ViewAction setMaxLines(final int maxLines) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextView.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "TextView set max lines";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextView textView = (TextView) view;
-                textView.setMaxLines(maxLines);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets min lines count on <code>TextView</code>.
-     */
-    public static ViewAction setMinLines(final int minLines) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextView.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "TextView set min lines";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextView textView = (TextView) view;
-                textView.setMinLines(minLines);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets text content on <code>TextView</code>.
-     */
-    public static ViewAction setText(final @StringRes int stringResId) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextView.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "TextView set text";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextView textView = (TextView) view;
-                textView.setText(stringResId);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets text appearance on <code>TextView</code>.
-     */
-    public static ViewAction setTextAppearance(final @StyleRes int styleResId) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextView.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "TextView set text appearance";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextView textView = (TextView) view;
-                TextViewCompat.setTextAppearance(textView, styleResId);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets compound drawables on <code>TextView</code>.
-     */
-    public static ViewAction setCompoundDrawablesRelative(final @Nullable Drawable start,
-            final @Nullable Drawable top, final @Nullable Drawable end,
-            final @Nullable Drawable bottom) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextView.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "TextView set compound drawables";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextView textView = (TextView) view;
-                TextViewCompat.setCompoundDrawablesRelative(textView, start, top, end, bottom);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets compound drawables on <code>TextView</code>.
-     */
-    public static ViewAction setCompoundDrawablesRelativeWithIntrinsicBounds(
-            final @Nullable Drawable start, final @Nullable Drawable top,
-            final @Nullable Drawable end, final @Nullable Drawable bottom) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextView.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "TextView set compound drawables";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextView textView = (TextView) view;
-                TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(
-                        textView, start, top, end, bottom);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets compound drawables on <code>TextView</code>.
-     */
-    public static ViewAction setCompoundDrawablesRelativeWithIntrinsicBounds(
-            final @DrawableRes int start, final @DrawableRes int top, final @DrawableRes int end,
-            final @DrawableRes int bottom) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextView.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "TextView set compound drawables";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextView textView = (TextView) view;
-                TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(
-                        textView, start, top, end, bottom);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-}
diff --git a/v4/tests/res/color/complex_themed_selector.xml b/v4/tests/res/color/complex_themed_selector.xml
deleted file mode 100644
index 8ef5060..0000000
--- a/v4/tests/res/color/complex_themed_selector.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true" android:color="?attr/theme_color_focused" />
-    <item android:state_pressed="true" android:color="?attr/theme_color_pressed" />
-    <item android:color="?attr/theme_color_default"/>
-</selector>
-
diff --git a/v4/tests/res/color/complex_unthemed_selector.xml b/v4/tests/res/color/complex_unthemed_selector.xml
deleted file mode 100644
index bdb93c9..0000000
--- a/v4/tests/res/color/complex_unthemed_selector.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true" android:color="@color/selector_color_focused" />
-    <item android:state_pressed="true" android:color="@color/selector_color_pressed" />
-    <item android:color="@color/selector_color_default"/>
-</selector>
-
diff --git a/v4/tests/res/color/simple_themed_selector.xml b/v4/tests/res/color/simple_themed_selector.xml
deleted file mode 100644
index e225add..0000000
--- a/v4/tests/res/color/simple_themed_selector.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:color="?attr/theme_color_default"/> <!-- not selected -->
-</selector>
-
diff --git a/v4/tests/res/drawable-hdpi/density_aware_drawable.png b/v4/tests/res/drawable-hdpi/density_aware_drawable.png
deleted file mode 100644
index dd8a7fe..0000000
--- a/v4/tests/res/drawable-hdpi/density_aware_drawable.png
+++ /dev/null
Binary files differ
diff --git a/v4/tests/res/drawable-ldpi/aliased_drawable_alternate.png b/v4/tests/res/drawable-ldpi/aliased_drawable_alternate.png
deleted file mode 100644
index 909b23a..0000000
--- a/v4/tests/res/drawable-ldpi/aliased_drawable_alternate.png
+++ /dev/null
Binary files differ
diff --git a/v4/tests/res/drawable-mdpi/density_aware_drawable.png b/v4/tests/res/drawable-mdpi/density_aware_drawable.png
deleted file mode 100644
index 5c0ff0e..0000000
--- a/v4/tests/res/drawable-mdpi/density_aware_drawable.png
+++ /dev/null
Binary files differ
diff --git a/v4/tests/res/drawable-mdpi/test_drawable.png b/v4/tests/res/drawable-mdpi/test_drawable.png
deleted file mode 100644
index 1ce5321e..0000000
--- a/v4/tests/res/drawable-mdpi/test_drawable.png
+++ /dev/null
Binary files differ
diff --git a/v4/tests/res/drawable-xhdpi/density_aware_drawable.png b/v4/tests/res/drawable-xhdpi/density_aware_drawable.png
deleted file mode 100644
index ce7e2c6..0000000
--- a/v4/tests/res/drawable-xhdpi/density_aware_drawable.png
+++ /dev/null
Binary files differ
diff --git a/v4/tests/res/drawable-xxhdpi/density_aware_drawable.png b/v4/tests/res/drawable-xxhdpi/density_aware_drawable.png
deleted file mode 100644
index c2ebfcb..0000000
--- a/v4/tests/res/drawable-xxhdpi/density_aware_drawable.png
+++ /dev/null
Binary files differ
diff --git a/v4/tests/res/drawable/test_drawable_blue.xml b/v4/tests/res/drawable/test_drawable_blue.xml
deleted file mode 100644
index 5d05ef2..0000000
--- a/v4/tests/res/drawable/test_drawable_blue.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <size
-        android:width="@dimen/drawable_large_size"
-        android:height="@dimen/drawable_small_size" />
-    <solid
-        android:color="@color/test_blue" />
-</shape>
\ No newline at end of file
diff --git a/v4/tests/res/drawable/test_drawable_green.xml b/v4/tests/res/drawable/test_drawable_green.xml
deleted file mode 100644
index 9f33104..0000000
--- a/v4/tests/res/drawable/test_drawable_green.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <size
-        android:width="@dimen/drawable_medium_size"
-        android:height="@dimen/drawable_large_size" />
-    <solid
-        android:color="@color/test_green" />
-</shape>
\ No newline at end of file
diff --git a/v4/tests/res/drawable/test_drawable_red.xml b/v4/tests/res/drawable/test_drawable_red.xml
deleted file mode 100644
index cd1af56..0000000
--- a/v4/tests/res/drawable/test_drawable_red.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <size
-        android:width="@dimen/drawable_small_size"
-        android:height="@dimen/drawable_medium_size" />
-    <solid
-        android:color="@color/test_red" />
-</shape>
\ No newline at end of file
diff --git a/v4/tests/res/drawable/themed_bitmap.xml b/v4/tests/res/drawable/themed_bitmap.xml
deleted file mode 100644
index 111d14e..0000000
--- a/v4/tests/res/drawable/themed_bitmap.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-    android:src="@drawable/test_drawable"
-    android:tint="?attr/theme_color_default" />
diff --git a/v4/tests/res/drawable/themed_drawable.xml b/v4/tests/res/drawable/themed_drawable.xml
deleted file mode 100644
index 08d89c7..0000000
--- a/v4/tests/res/drawable/themed_drawable.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <size
-        android:width="@dimen/drawable_large_size"
-        android:height="@dimen/drawable_small_size" />
-    <solid
-        android:color="?attr/theme_color_default" />
-</shape>
\ No newline at end of file
diff --git a/v4/tests/res/layout/text_view_activity.xml b/v4/tests/res/layout/text_view_activity.xml
deleted file mode 100644
index ba5d688..0000000
--- a/v4/tests/res/layout/text_view_activity.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/content"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-    <TextView
-        android:id="@+id/text_view"
-        android:layout_width="200dip"
-        android:layout_height="60dip" />
-</FrameLayout>
diff --git a/v4/tests/res/values-hdpi/dimens.xml b/v4/tests/res/values-hdpi/dimens.xml
deleted file mode 100755
index eb1ff54..0000000
--- a/v4/tests/res/values-hdpi/dimens.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <dimen name="density_aware_size">14dip</dimen>
-</resources>
\ No newline at end of file
diff --git a/v4/tests/res/values-mdpi/dimens.xml b/v4/tests/res/values-mdpi/dimens.xml
deleted file mode 100755
index 5766379..0000000
--- a/v4/tests/res/values-mdpi/dimens.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <dimen name="density_aware_size">12dip</dimen>
-</resources>
\ No newline at end of file
diff --git a/v4/tests/res/values-xhdpi/dimens.xml b/v4/tests/res/values-xhdpi/dimens.xml
deleted file mode 100755
index a25d23d..0000000
--- a/v4/tests/res/values-xhdpi/dimens.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <dimen name="density_aware_size">16dip</dimen>
-</resources>
\ No newline at end of file
diff --git a/v4/tests/res/values-xxhdpi/dimens.xml b/v4/tests/res/values-xxhdpi/dimens.xml
deleted file mode 100755
index 399cde1..0000000
--- a/v4/tests/res/values-xxhdpi/dimens.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <dimen name="density_aware_size">18dip</dimen>
-</resources>
\ No newline at end of file
diff --git a/v4/tests/res/values/attrs.xml b/v4/tests/res/values/attrs.xml
deleted file mode 100644
index 36d1e9e..0000000
--- a/v4/tests/res/values/attrs.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <attr name="theme_color_default" format="reference" />
-    <attr name="theme_color_focused" format="reference" />
-    <attr name="theme_color_pressed" format="reference" />
-    <attr name="theme_color_selected" format="reference" />
-</resources>
\ No newline at end of file
diff --git a/v4/tests/res/values/colors.xml b/v4/tests/res/values/colors.xml
index 15158cf..d0d5309 100644
--- a/v4/tests/res/values/colors.xml
+++ b/v4/tests/res/values/colors.xml
@@ -16,20 +16,6 @@
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <color name="text_color">#FF8090</color>
 
-    <color name="selector_color_default">#70A0C0</color>
-    <color name="selector_color_focused">#70B0F0</color>
-    <color name="selector_color_pressed">#6080B0</color>
-
-    <color name="theme_color_yellow_default">#F0B000</color>
-    <color name="theme_color_yellow_focused">#F0A020</color>
-    <color name="theme_color_yellow_pressed">#E0A040</color>
-    <color name="theme_color_yellow_selected">#E8A848</color>
-
-    <color name="theme_color_lilac_default">#F080F0</color>
-    <color name="theme_color_lilac_focused">#F070D0</color>
-    <color name="theme_color_lilac_pressed">#E070A0</color>
-    <color name="theme_color_lilac_selected">#E878A8</color>
-
     <color name="test_red">#FF6030</color>
     <color name="test_green">#50E080</color>
     <color name="test_blue">#3050CF</color>
diff --git a/v4/tests/res/values/dimens.xml b/v4/tests/res/values/dimens.xml
index 5c82462..c3617a9 100644
--- a/v4/tests/res/values/dimens.xml
+++ b/v4/tests/res/values/dimens.xml
@@ -15,8 +15,4 @@
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <dimen name="text_medium_size">20sp</dimen>
-
-    <dimen name="drawable_small_size">12dip</dimen>
-    <dimen name="drawable_medium_size">16dip</dimen>
-    <dimen name="drawable_large_size">20dip</dimen>
 </resources>
\ No newline at end of file
diff --git a/v4/tests/res/values/drawables.xml b/v4/tests/res/values/drawables.xml
deleted file mode 100644
index b2955a5..0000000
--- a/v4/tests/res/values/drawables.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources>
-    <item type="drawable" name="aliased_drawable">@drawable/aliased_drawable_alternate</item>
-</resources>
diff --git a/v4/tests/res/values/strings.xml b/v4/tests/res/values/strings.xml
index b804faf..2fa1430 100644
--- a/v4/tests/res/values/strings.xml
+++ b/v4/tests/res/values/strings.xml
@@ -14,11 +14,5 @@
      limitations under the License.
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Short text for testing. -->
-    <string name="test_text_short">Lorem ipsum</string>
-    <!-- Medium text for testing. -->
-    <string name="test_text_medium">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam dui neque, suscipit quis rhoncus vitae, rhoncus hendrerit neque.</string>
-    <!-- Long text for testing. -->
-    <string name="test_text_long">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam dui neque, suscipit quis rhoncus vitae, rhoncus hendrerit neque. Proin ac mauris cursus nulla aliquam viverra. Vivamus pharetra luctus magna, lacinia imperdiet leo mollis eget. Fusce a diam ipsum. Etiam sit amet nisl et velit aliquam dignissim eget nec nisi. Duis bibendum euismod tortor non pulvinar. Nunc quis neque ultricies nulla luctus aliquet. Sed consectetur, orci ac vehicula consectetur, metus sem pellentesque turpis, sed venenatis nisi lorem vitae ante.</string>
     <string name="hello">Hello World</string>
 </resources>
\ No newline at end of file
diff --git a/v4/tests/res/values/styles.xml b/v4/tests/res/values/styles.xml
index 447d5ec..ae6325b 100644
--- a/v4/tests/res/values/styles.xml
+++ b/v4/tests/res/values/styles.xml
@@ -22,16 +22,4 @@
         <item name="android:textColor">@color/text_color</item>
         <item name="android:textStyle">italic</item>
     </style>
-
-    <style name="YellowTheme" parent="@android:style/Theme.Light">
-        <item name="theme_color_default">@color/theme_color_yellow_default</item>
-        <item name="theme_color_focused">@color/theme_color_yellow_focused</item>
-        <item name="theme_color_pressed">@color/theme_color_yellow_pressed</item>
-    </style>
-
-    <style name="LilacTheme" parent="@android:style/Theme.Light">
-        <item name="theme_color_default">@color/theme_color_lilac_default</item>
-        <item name="theme_color_focused">@color/theme_color_lilac_focused</item>
-        <item name="theme_color_pressed">@color/theme_color_lilac_pressed</item>
-    </style>
 </resources>
\ No newline at end of file
