Support module refactoring

* Splitting support-v4 into two modules, support-compat and support-core
* Adding a new library module named support-v4 that combines the two
together for backward compatibility support of existing projects
* support-compat has all Compat classes, their few direct dependencies
and all data structures in the .util package

Change-Id: Icd1b0ab3a5b61a8a2bf85bc274098f0a828963e0
diff --git a/compat/Android.mk b/compat/Android.mk
new file mode 100644
index 0000000..2da515c
--- /dev/null
+++ b/compat/Android.mk
@@ -0,0 +1,287 @@
+# Copyright (C) 2011 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.
+
+LOCAL_PATH := $(call my-dir)
+
+# A helper sub-library that makes direct use of Donut APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-donut
+LOCAL_SDK_VERSION := 4
+LOCAL_SRC_FILES := $(call all-java-files-under, donut)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-annotations
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files := $(LOCAL_SRC_FILES)
+support_module_java_libraries := android-support-annotations
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of Eclair APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-eclair
+LOCAL_SDK_VERSION := 5
+LOCAL_SRC_FILES := $(call all-java-files-under, eclair)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-donut
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of Eclair MR1 APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-eclair-mr1
+LOCAL_SDK_VERSION := 7
+LOCAL_SRC_FILES := $(call all-java-files-under, eclair-mr1)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-eclair
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of Froyo APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-froyo
+LOCAL_SDK_VERSION := 8
+LOCAL_SRC_FILES := $(call all-java-files-under, froyo)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-eclair-mr1
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of Gingerbread APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-gingerbread
+LOCAL_SDK_VERSION := 9
+LOCAL_SRC_FILES := $(call all-java-files-under, gingerbread)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-froyo
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of Honeycomb APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-honeycomb
+LOCAL_SDK_VERSION := 11
+LOCAL_SRC_FILES := $(call all-java-files-under, honeycomb)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-gingerbread
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of Honeycomb MR1 APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-honeycomb-mr1
+LOCAL_SDK_VERSION := 12
+LOCAL_SRC_FILES := $(call all-java-files-under, honeycomb_mr1)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-honeycomb
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of Honeycomb MR2 APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-honeycomb-mr2
+LOCAL_SDK_VERSION := 13
+LOCAL_SRC_FILES := $(call all-java-files-under, honeycomb_mr2)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-honeycomb-mr1
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of Ice Cream Sandwich APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-ics
+LOCAL_SDK_VERSION := 14
+LOCAL_SRC_FILES := $(call all-java-files-under, ics)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-honeycomb-mr2
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of Ice Cream Sandwich MR1 APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-ics-mr1
+LOCAL_SDK_VERSION := 15
+LOCAL_SRC_FILES := $(call all-java-files-under, ics-mr1)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-ics
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of JellyBean APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-jellybean
+LOCAL_SDK_VERSION := 16
+LOCAL_SRC_FILES := $(call all-java-files-under, jellybean)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-ics-mr1
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of JellyBean MR1 APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-jellybean-mr1
+LOCAL_SDK_VERSION := 17
+LOCAL_SRC_FILES := $(call all-java-files-under, jellybean-mr1)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-jellybean
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of JellyBean MR2 APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-jellybean-mr2
+LOCAL_SDK_VERSION := 18
+LOCAL_SRC_FILES := $(call all-java-files-under, jellybean-mr2)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-jellybean-mr1
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of KitKat APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-kitkat
+LOCAL_SDK_VERSION := 19
+LOCAL_SRC_FILES := $(call all-java-files-under, kitkat)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-jellybean-mr2
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of V20 APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-api20
+LOCAL_SDK_VERSION := 20
+LOCAL_SRC_FILES := $(call all-java-files-under, api20)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-kitkat
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of Lollipop APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-api21
+LOCAL_SDK_VERSION := 21
+LOCAL_SRC_FILES := $(call all-java-files-under, api21)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-api20
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of V22 APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-api22
+LOCAL_SDK_VERSION := 22
+LOCAL_SRC_FILES := $(call all-java-files-under, api22)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-api21
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of V23 APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-api23
+LOCAL_SDK_VERSION := 23
+LOCAL_SRC_FILES := $(call all-java-files-under, api23)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-api22
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# A helper sub-library that makes direct use of V24 APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-compat-api24
+LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
+LOCAL_SRC_FILES := $(call all-java-files-under, api24)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-compat-api23
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+
+# -----------------------------------------------------------------------
+
+# Here is the final static library that apps can link against.
+include $(CLEAR_VARS)
+LOCAL_USE_AAPT2 := true
+LOCAL_MODULE := android-support-compat
+LOCAL_SDK_VERSION := 4
+LOCAL_AIDL_INCLUDES := frameworks/support/v4/java
+LOCAL_SRC_FILES := $(call all-java-files-under, java) \
+    $(call all-Iaidl-files-under, java)
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-compat-api24
+LOCAL_JAR_EXCLUDE_FILES := none
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+support_module_src_files += $(LOCAL_SRC_FILES)
+support_module_aidl_includes := $(LOCAL_AIDL_INCLUDES)
+
+# API Check
+# ---------------------------------------------
+support_module := $(LOCAL_MODULE)
+support_module_api_dir := $(LOCAL_PATH)/api
+support_module_java_packages := android.support.v4.*
+include $(SUPPORT_API_CHECK)
diff --git a/compat/AndroidManifest.xml b/compat/AndroidManifest.xml
new file mode 100644
index 0000000..c6cdf4c
--- /dev/null
+++ b/compat/AndroidManifest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          xmlns:tools="http://schemas.android.com/tools"
+          package="android.support.compat">
+    <uses-sdk android:minSdkVersion="4" tools:overrideLibrary="android.support.compat"/>
+    <application />
+</manifest>
diff --git a/compat/NOTICES.md b/compat/NOTICES.md
new file mode 100644
index 0000000..8665d5d
--- /dev/null
+++ b/compat/NOTICES.md
@@ -0,0 +1,12 @@
+# 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/api/current.txt b/compat/api/current.txt
new file mode 100644
index 0000000..c8f21fa
--- /dev/null
+++ b/compat/api/current.txt
@@ -0,0 +1,1604 @@
+package android.support.v4.accessibilityservice {
+
+  public final class AccessibilityServiceInfoCompat {
+    method public static java.lang.String capabilityToString(int);
+    method public static java.lang.String feedbackTypeToString(int);
+    method public static java.lang.String flagToString(int);
+    method public static boolean getCanRetrieveWindowContent(android.accessibilityservice.AccessibilityServiceInfo);
+    method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+    method public static java.lang.String getDescription(android.accessibilityservice.AccessibilityServiceInfo);
+    method public static java.lang.String getId(android.accessibilityservice.AccessibilityServiceInfo);
+    method public static android.content.pm.ResolveInfo getResolveInfo(android.accessibilityservice.AccessibilityServiceInfo);
+    method public static java.lang.String getSettingsActivityName(android.accessibilityservice.AccessibilityServiceInfo);
+    field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
+    field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+    field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
+    field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
+    field public static final int DEFAULT = 1; // 0x1
+    field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
+    field public static final int FEEDBACK_BRAILLE = 32; // 0x20
+    field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+    field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+    field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+    field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
+    field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+  }
+
+}
+
+package android.support.v4.app {
+
+  public class ActivityCompat extends android.support.v4.content.ContextCompat {
+    ctor public ActivityCompat();
+    method public static void finishAffinity(android.app.Activity);
+    method public static void finishAfterTransition(android.app.Activity);
+    method public android.net.Uri getReferrer(android.app.Activity);
+    method public static boolean invalidateOptionsMenu(android.app.Activity);
+    method public static void postponeEnterTransition(android.app.Activity);
+    method public static void requestPermissions(android.app.Activity, java.lang.String[], int);
+    method public static void setEnterSharedElementCallback(android.app.Activity, android.support.v4.app.SharedElementCallback);
+    method public static void setExitSharedElementCallback(android.app.Activity, android.support.v4.app.SharedElementCallback);
+    method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, java.lang.String);
+    method public static void startActivity(android.app.Activity, android.content.Intent, android.os.Bundle);
+    method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle);
+    method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method public static void startPostponedEnterTransition(android.app.Activity);
+  }
+
+  public static abstract interface ActivityCompat.OnRequestPermissionsResultCallback {
+    method public abstract void onRequestPermissionsResult(int, java.lang.String[], int[]);
+  }
+
+  public final class ActivityManagerCompat {
+    method public static boolean isLowRamDevice(android.app.ActivityManager);
+  }
+
+  public class ActivityOptionsCompat {
+    ctor protected ActivityOptionsCompat();
+    method public static android.support.v4.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
+    method public static android.support.v4.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
+    method public static android.support.v4.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, java.lang.String);
+    method public static android.support.v4.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.support.v4.util.Pair<android.view.View, java.lang.String>...);
+    method public static android.support.v4.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+    method public android.os.Bundle toBundle();
+    method public void update(android.support.v4.app.ActivityOptionsCompat);
+  }
+
+  public final class AppOpsManagerCompat {
+    method public static int noteOp(android.content.Context, java.lang.String, int, java.lang.String);
+    method public static int noteProxyOp(android.content.Context, java.lang.String, java.lang.String);
+    method public static java.lang.String permissionToOp(java.lang.String);
+    field public static final int MODE_ALLOWED = 0; // 0x0
+    field public static final int MODE_DEFAULT = 3; // 0x3
+    field public static final int MODE_IGNORED = 1; // 0x1
+  }
+
+  public final class BundleCompat {
+    method public static android.os.IBinder getBinder(android.os.Bundle, java.lang.String);
+    method public static void putBinder(android.os.Bundle, java.lang.String, android.os.IBinder);
+  }
+
+  public final class ServiceCompat {
+    field public static final int START_STICKY = 1; // 0x1
+  }
+
+  public final class ShareCompat {
+    method public static void configureMenuItem(android.view.MenuItem, android.support.v4.app.ShareCompat.IntentBuilder);
+    method public static void configureMenuItem(android.view.Menu, int, android.support.v4.app.ShareCompat.IntentBuilder);
+    method public static android.content.ComponentName getCallingActivity(android.app.Activity);
+    method public static java.lang.String getCallingPackage(android.app.Activity);
+    field public static final java.lang.String EXTRA_CALLING_ACTIVITY = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
+    field public static final java.lang.String EXTRA_CALLING_PACKAGE = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
+  }
+
+  public static class ShareCompat.IntentBuilder {
+    method public android.support.v4.app.ShareCompat.IntentBuilder addEmailBcc(java.lang.String);
+    method public android.support.v4.app.ShareCompat.IntentBuilder addEmailBcc(java.lang.String[]);
+    method public android.support.v4.app.ShareCompat.IntentBuilder addEmailCc(java.lang.String);
+    method public android.support.v4.app.ShareCompat.IntentBuilder addEmailCc(java.lang.String[]);
+    method public android.support.v4.app.ShareCompat.IntentBuilder addEmailTo(java.lang.String);
+    method public android.support.v4.app.ShareCompat.IntentBuilder addEmailTo(java.lang.String[]);
+    method public android.support.v4.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
+    method public android.content.Intent createChooserIntent();
+    method public static android.support.v4.app.ShareCompat.IntentBuilder from(android.app.Activity);
+    method public android.content.Intent getIntent();
+    method public android.support.v4.app.ShareCompat.IntentBuilder setChooserTitle(java.lang.CharSequence);
+    method public android.support.v4.app.ShareCompat.IntentBuilder setChooserTitle(int);
+    method public android.support.v4.app.ShareCompat.IntentBuilder setEmailBcc(java.lang.String[]);
+    method public android.support.v4.app.ShareCompat.IntentBuilder setEmailCc(java.lang.String[]);
+    method public android.support.v4.app.ShareCompat.IntentBuilder setEmailTo(java.lang.String[]);
+    method public android.support.v4.app.ShareCompat.IntentBuilder setHtmlText(java.lang.String);
+    method public android.support.v4.app.ShareCompat.IntentBuilder setStream(android.net.Uri);
+    method public android.support.v4.app.ShareCompat.IntentBuilder setSubject(java.lang.String);
+    method public android.support.v4.app.ShareCompat.IntentBuilder setText(java.lang.CharSequence);
+    method public android.support.v4.app.ShareCompat.IntentBuilder setType(java.lang.String);
+    method public void startChooser();
+  }
+
+  public static class ShareCompat.IntentReader {
+    method public static android.support.v4.app.ShareCompat.IntentReader from(android.app.Activity);
+    method public android.content.ComponentName getCallingActivity();
+    method public android.graphics.drawable.Drawable getCallingActivityIcon();
+    method public android.graphics.drawable.Drawable getCallingApplicationIcon();
+    method public java.lang.CharSequence getCallingApplicationLabel();
+    method public java.lang.String getCallingPackage();
+    method public java.lang.String[] getEmailBcc();
+    method public java.lang.String[] getEmailCc();
+    method public java.lang.String[] getEmailTo();
+    method public java.lang.String getHtmlText();
+    method public android.net.Uri getStream();
+    method public android.net.Uri getStream(int);
+    method public int getStreamCount();
+    method public java.lang.String getSubject();
+    method public java.lang.CharSequence getText();
+    method public java.lang.String getType();
+    method public boolean isMultipleShare();
+    method public boolean isShareIntent();
+    method public boolean isSingleShare();
+  }
+
+  public abstract class SharedElementCallback {
+    ctor public SharedElementCallback();
+    method public android.os.Parcelable onCaptureSharedElementSnapshot(android.view.View, android.graphics.Matrix, android.graphics.RectF);
+    method public android.view.View onCreateSnapshotView(android.content.Context, android.os.Parcelable);
+    method public void onMapSharedElements(java.util.List<java.lang.String>, java.util.Map<java.lang.String, android.view.View>);
+    method public void onRejectSharedElements(java.util.List<android.view.View>);
+    method public void onSharedElementEnd(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+    method public void onSharedElementStart(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+  }
+
+}
+
+package android.support.v4.content {
+
+  public final class ContentResolverCompat {
+    method public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.support.v4.os.CancellationSignal);
+  }
+
+  public class ContextCompat {
+    ctor public ContextCompat();
+    method public static int checkSelfPermission(android.content.Context, java.lang.String);
+    method public static android.content.Context createDeviceProtectedStorageContext(android.content.Context);
+    method public static java.io.File getCodeCacheDir(android.content.Context);
+    method public static final int getColor(android.content.Context, int);
+    method public static final android.content.res.ColorStateList getColorStateList(android.content.Context, int);
+    method public static java.io.File getDataDir(android.content.Context);
+    method public static final android.graphics.drawable.Drawable getDrawable(android.content.Context, int);
+    method public static java.io.File[] getExternalCacheDirs(android.content.Context);
+    method public static java.io.File[] getExternalFilesDirs(android.content.Context, java.lang.String);
+    method public final java.io.File getNoBackupFilesDir(android.content.Context);
+    method public static java.io.File[] getObbDirs(android.content.Context);
+    method public static boolean isDeviceProtectedStorage(android.content.Context);
+    method public static boolean startActivities(android.content.Context, android.content.Intent[]);
+    method public static boolean startActivities(android.content.Context, android.content.Intent[], android.os.Bundle);
+  }
+
+  public final class IntentCompat {
+    method public static android.content.Intent makeMainActivity(android.content.ComponentName);
+    method public static android.content.Intent makeMainSelectorActivity(java.lang.String, java.lang.String);
+    method public static android.content.Intent makeRestartActivityTask(android.content.ComponentName);
+    field public static final java.lang.String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE";
+    field public static final java.lang.String ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE";
+    field public static final java.lang.String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+    field public static final java.lang.String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list";
+    field public static final java.lang.String EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list";
+    field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+    field public static final int FLAG_ACTIVITY_CLEAR_TASK = 32768; // 0x8000
+    field public static final int FLAG_ACTIVITY_TASK_ON_HOME = 16384; // 0x4000
+  }
+
+  public final class ParallelExecutorCompat {
+    method public static java.util.concurrent.Executor getParallelExecutor();
+  }
+
+  public final class SharedPreferencesCompat {
+  }
+
+  public static final class SharedPreferencesCompat.EditorCompat {
+    method public void apply(android.content.SharedPreferences.Editor);
+    method public static android.support.v4.content.SharedPreferencesCompat.EditorCompat getInstance();
+  }
+
+}
+
+package android.support.v4.content.pm {
+
+  public final class ActivityInfoCompat {
+    field public static final int CONFIG_UI_MODE = 512; // 0x200
+  }
+
+}
+
+package android.support.v4.content.res {
+
+  public final class ConfigurationHelper {
+    method public static int getDensityDpi(android.content.res.Resources);
+    method public static int getScreenHeightDp(android.content.res.Resources);
+    method public static int getScreenWidthDp(android.content.res.Resources);
+    method public static int getSmallestScreenWidthDp(android.content.res.Resources);
+  }
+
+  public final class ResourcesCompat {
+    method public static int getColor(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+    method public static android.content.res.ColorStateList getColorStateList(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+    method public static android.graphics.drawable.Drawable getDrawable(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+    method public static android.graphics.drawable.Drawable getDrawableForDensity(android.content.res.Resources, int, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+  }
+
+}
+
+package android.support.v4.database {
+
+  public final class DatabaseUtilsCompat {
+    method public static java.lang.String[] appendSelectionArgs(java.lang.String[], java.lang.String[]);
+    method public static java.lang.String concatenateWhere(java.lang.String, java.lang.String);
+  }
+
+}
+
+package android.support.v4.graphics {
+
+  public final class BitmapCompat {
+    method public static int getAllocationByteCount(android.graphics.Bitmap);
+    method public static boolean hasMipMap(android.graphics.Bitmap);
+    method public static void setHasMipMap(android.graphics.Bitmap, boolean);
+  }
+
+}
+
+package android.support.v4.graphics.drawable {
+
+  public final class DrawableCompat {
+    method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
+    method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
+    method public static int getAlpha(android.graphics.drawable.Drawable);
+    method public static android.graphics.ColorFilter getColorFilter(android.graphics.drawable.Drawable);
+    method public static int getLayoutDirection(android.graphics.drawable.Drawable);
+    method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
+    method public static void jumpToCurrentState(android.graphics.drawable.Drawable);
+    method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
+    method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
+    method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
+    method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
+    method public static void setTint(android.graphics.drawable.Drawable, int);
+    method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList);
+    method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode);
+    method public static T unwrap(android.graphics.drawable.Drawable);
+    method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
+  }
+
+}
+
+package android.support.v4.hardware.display {
+
+  public abstract class DisplayManagerCompat {
+    method public abstract android.view.Display getDisplay(int);
+    method public abstract android.view.Display[] getDisplays();
+    method public abstract android.view.Display[] getDisplays(java.lang.String);
+    method public static android.support.v4.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
+    field public static final java.lang.String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+  }
+
+}
+
+package android.support.v4.hardware.fingerprint {
+
+  public final class FingerprintManagerCompat {
+    method public void authenticate(android.support.v4.hardware.fingerprint.FingerprintManagerCompat.CryptoObject, int, android.support.v4.os.CancellationSignal, android.support.v4.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler);
+    method public static android.support.v4.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
+    method public boolean hasEnrolledFingerprints();
+    method public boolean isHardwareDetected();
+  }
+
+  public static abstract class FingerprintManagerCompat.AuthenticationCallback {
+    ctor public FingerprintManagerCompat.AuthenticationCallback();
+    method public void onAuthenticationError(int, java.lang.CharSequence);
+    method public void onAuthenticationFailed();
+    method public void onAuthenticationHelp(int, java.lang.CharSequence);
+    method public void onAuthenticationSucceeded(android.support.v4.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult);
+  }
+
+  public static final class FingerprintManagerCompat.AuthenticationResult {
+    ctor public FingerprintManagerCompat.AuthenticationResult(android.support.v4.hardware.fingerprint.FingerprintManagerCompat.CryptoObject);
+    method public android.support.v4.hardware.fingerprint.FingerprintManagerCompat.CryptoObject getCryptoObject();
+  }
+
+  public static class FingerprintManagerCompat.CryptoObject {
+    ctor public FingerprintManagerCompat.CryptoObject(java.security.Signature);
+    ctor public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
+    ctor public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
+    method public javax.crypto.Cipher getCipher();
+    method public javax.crypto.Mac getMac();
+    method public java.security.Signature getSignature();
+  }
+
+}
+
+package android.support.v4.net {
+
+  public final class ConnectivityManagerCompat {
+    method public static android.net.NetworkInfo getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+    method public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+  }
+
+  public final class TrafficStatsCompat {
+    method public static void clearThreadStatsTag();
+    method public static int getThreadStatsTag();
+    method public static void incrementOperationCount(int);
+    method public static void incrementOperationCount(int, int);
+    method public static void setThreadStatsTag(int);
+    method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+    method public static void tagSocket(java.net.Socket) throws java.net.SocketException;
+    method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+    method public static void untagSocket(java.net.Socket) throws java.net.SocketException;
+  }
+
+}
+
+package android.support.v4.os {
+
+  public final class AsyncTaskCompat {
+    method public static android.os.AsyncTask<Params, Progress, Result> executeParallel(android.os.AsyncTask<Params, Progress, Result>, Params...);
+  }
+
+  public class BuildCompat {
+    method public static boolean isAtLeastN();
+  }
+
+  public final class CancellationSignal {
+    ctor public CancellationSignal();
+    method public void cancel();
+    method public java.lang.Object getCancellationSignalObject();
+    method public boolean isCanceled();
+    method public void setOnCancelListener(android.support.v4.os.CancellationSignal.OnCancelListener);
+    method public void throwIfCanceled();
+  }
+
+  public static abstract interface CancellationSignal.OnCancelListener {
+    method public abstract void onCancel();
+  }
+
+  public final class EnvironmentCompat {
+    method public static java.lang.String getStorageState(java.io.File);
+    field public static final java.lang.String MEDIA_UNKNOWN = "unknown";
+  }
+
+  public class OperationCanceledException extends java.lang.RuntimeException {
+    ctor public OperationCanceledException();
+    ctor public OperationCanceledException(java.lang.String);
+  }
+
+  public final class ParcelableCompat {
+    method public static android.os.Parcelable.Creator<T> newCreator(android.support.v4.os.ParcelableCompatCreatorCallbacks<T>);
+  }
+
+  public abstract interface ParcelableCompatCreatorCallbacks {
+    method public abstract T createFromParcel(android.os.Parcel, java.lang.ClassLoader);
+    method public abstract T[] newArray(int);
+  }
+
+  public final class TraceCompat {
+    method public static void beginSection(java.lang.String);
+    method public static void endSection();
+  }
+
+  public class UserManagerCompat {
+    method public static boolean isUserUnlocked(android.content.Context);
+  }
+
+}
+
+package android.support.v4.text {
+
+  public final class ICUCompat {
+    method public static java.lang.String maximizeAndGetScript(java.util.Locale);
+  }
+
+  public abstract interface TextDirectionHeuristicCompat {
+    method public abstract boolean isRtl(char[], int, int);
+    method public abstract boolean isRtl(java.lang.CharSequence, int, int);
+  }
+
+  public final class TextDirectionHeuristicsCompat {
+    field public static final android.support.v4.text.TextDirectionHeuristicCompat ANYRTL_LTR;
+    field public static final android.support.v4.text.TextDirectionHeuristicCompat FIRSTSTRONG_LTR;
+    field public static final android.support.v4.text.TextDirectionHeuristicCompat FIRSTSTRONG_RTL;
+    field public static final android.support.v4.text.TextDirectionHeuristicCompat LOCALE;
+    field public static final android.support.v4.text.TextDirectionHeuristicCompat LTR;
+    field public static final android.support.v4.text.TextDirectionHeuristicCompat RTL;
+  }
+
+  public final class TextUtilsCompat {
+    method public static int getLayoutDirectionFromLocale(java.util.Locale);
+    method public static java.lang.String htmlEncode(java.lang.String);
+    field public static final java.util.Locale ROOT;
+  }
+
+}
+
+package android.support.v4.util {
+
+  public class ArrayMap extends android.support.v4.util.SimpleArrayMap implements java.util.Map {
+    ctor public ArrayMap();
+    ctor public ArrayMap(int);
+    ctor public ArrayMap(android.support.v4.util.SimpleArrayMap);
+    method public boolean containsAll(java.util.Collection<?>);
+    method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
+    method public java.util.Set<K> keySet();
+    method public void putAll(java.util.Map<? extends K, ? extends V>);
+    method public boolean removeAll(java.util.Collection<?>);
+    method public boolean retainAll(java.util.Collection<?>);
+    method public java.util.Collection<V> values();
+  }
+
+  public class AtomicFile {
+    ctor public AtomicFile(java.io.File);
+    method public void delete();
+    method public void failWrite(java.io.FileOutputStream);
+    method public void finishWrite(java.io.FileOutputStream);
+    method public java.io.File getBaseFile();
+    method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
+    method public byte[] readFully() throws java.io.IOException;
+    method public java.io.FileOutputStream startWrite() throws java.io.IOException;
+  }
+
+  public final class CircularArray {
+    ctor public CircularArray();
+    ctor public CircularArray(int);
+    method public void addFirst(E);
+    method public void addLast(E);
+    method public void clear();
+    method public E get(int);
+    method public E getFirst();
+    method public E getLast();
+    method public boolean isEmpty();
+    method public E popFirst();
+    method public E popLast();
+    method public void removeFromEnd(int);
+    method public void removeFromStart(int);
+    method public int size();
+  }
+
+  public final class CircularIntArray {
+    ctor public CircularIntArray();
+    ctor public CircularIntArray(int);
+    method public void addFirst(int);
+    method public void addLast(int);
+    method public void clear();
+    method public int get(int);
+    method public int getFirst();
+    method public int getLast();
+    method public boolean isEmpty();
+    method public int popFirst();
+    method public int popLast();
+    method public void removeFromEnd(int);
+    method public void removeFromStart(int);
+    method public int size();
+  }
+
+  public class LongSparseArray {
+    ctor public LongSparseArray();
+    ctor public LongSparseArray(int);
+    method public void append(long, E);
+    method public void clear();
+    method public android.support.v4.util.LongSparseArray<E> clone();
+    method public void delete(long);
+    method public E get(long);
+    method public E get(long, E);
+    method public int indexOfKey(long);
+    method public int indexOfValue(E);
+    method public long keyAt(int);
+    method public void put(long, E);
+    method public void remove(long);
+    method public void removeAt(int);
+    method public void setValueAt(int, E);
+    method public int size();
+    method public E valueAt(int);
+  }
+
+  public class LruCache {
+    ctor public LruCache(int);
+    method protected V create(K);
+    method public final synchronized int createCount();
+    method protected void entryRemoved(boolean, K, V, V);
+    method public final void evictAll();
+    method public final synchronized int evictionCount();
+    method public final V get(K);
+    method public final synchronized int hitCount();
+    method public final synchronized int maxSize();
+    method public final synchronized int missCount();
+    method public final V put(K, V);
+    method public final synchronized int putCount();
+    method public final V remove(K);
+    method public void resize(int);
+    method public final synchronized int size();
+    method protected int sizeOf(K, V);
+    method public final synchronized java.util.Map<K, V> snapshot();
+    method public final synchronized java.lang.String toString();
+    method public void trimToSize(int);
+  }
+
+  public class Pair {
+    ctor public Pair(F, S);
+    method public static android.support.v4.util.Pair<A, B> create(A, B);
+    field public final F first;
+    field public final S second;
+  }
+
+  public final class Pools {
+  }
+
+  public static abstract interface Pools.Pool {
+    method public abstract T acquire();
+    method public abstract boolean release(T);
+  }
+
+  public static class Pools.SimplePool implements android.support.v4.util.Pools.Pool {
+    ctor public Pools.SimplePool(int);
+    method public T acquire();
+    method public boolean release(T);
+  }
+
+  public static class Pools.SynchronizedPool extends android.support.v4.util.Pools.SimplePool {
+    ctor public Pools.SynchronizedPool(int);
+  }
+
+  public class SimpleArrayMap {
+    ctor public SimpleArrayMap();
+    ctor public SimpleArrayMap(int);
+    ctor public SimpleArrayMap(android.support.v4.util.SimpleArrayMap);
+    method public void clear();
+    method public boolean containsKey(java.lang.Object);
+    method public boolean containsValue(java.lang.Object);
+    method public void ensureCapacity(int);
+    method public V get(java.lang.Object);
+    method public int indexOfKey(java.lang.Object);
+    method public boolean isEmpty();
+    method public K keyAt(int);
+    method public V put(K, V);
+    method public void putAll(android.support.v4.util.SimpleArrayMap<? extends K, ? extends V>);
+    method public V remove(java.lang.Object);
+    method public V removeAt(int);
+    method public V setValueAt(int, V);
+    method public int size();
+    method public V valueAt(int);
+  }
+
+  public class SparseArrayCompat {
+    ctor public SparseArrayCompat();
+    ctor public SparseArrayCompat(int);
+    method public void append(int, E);
+    method public void clear();
+    method public android.support.v4.util.SparseArrayCompat<E> clone();
+    method public void delete(int);
+    method public E get(int);
+    method public E get(int, E);
+    method public int indexOfKey(int);
+    method public int indexOfValue(E);
+    method public int keyAt(int);
+    method public void put(int, E);
+    method public void remove(int);
+    method public void removeAt(int);
+    method public void removeAtRange(int, int);
+    method public void setValueAt(int, E);
+    method public int size();
+    method public E valueAt(int);
+  }
+
+}
+
+package android.support.v4.view {
+
+  public class AccessibilityDelegateCompat {
+    ctor public AccessibilityDelegateCompat();
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public android.support.v4.view.accessibility.AccessibilityNodeProviderCompat getAccessibilityNodeProvider(android.view.View);
+    method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public void onInitializeAccessibilityNodeInfo(android.view.View, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+    method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle);
+    method public void sendAccessibilityEvent(android.view.View, int);
+    method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
+  }
+
+  public abstract class ActionProvider {
+    ctor public ActionProvider(android.content.Context);
+    method public android.content.Context getContext();
+    method public boolean hasSubMenu();
+    method public boolean isVisible();
+    method public abstract android.view.View onCreateActionView();
+    method public android.view.View onCreateActionView(android.view.MenuItem);
+    method public boolean onPerformDefaultAction();
+    method public void onPrepareSubMenu(android.view.SubMenu);
+    method public boolean overridesItemVisibility();
+    method public void refreshVisibility();
+    method public void setVisibilityListener(android.support.v4.view.ActionProvider.VisibilityListener);
+  }
+
+  public static abstract interface ActionProvider.VisibilityListener {
+    method public abstract void onActionProviderVisibilityChanged(boolean);
+  }
+
+  public final class GestureDetectorCompat {
+    ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener);
+    ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler);
+    method public boolean isLongpressEnabled();
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public void setIsLongpressEnabled(boolean);
+    method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener);
+  }
+
+  public final class GravityCompat {
+    method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
+    method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
+    method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
+    method public static int getAbsoluteGravity(int, int);
+    field public static final int END = 8388613; // 0x800005
+    field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+    field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
+    field public static final int START = 8388611; // 0x800003
+  }
+
+  public final class InputDeviceCompat {
+    field public static final int SOURCE_ANY = -256; // 0xffffff00
+    field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
+    field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
+    field public static final int SOURCE_CLASS_MASK = 255; // 0xff
+    field public static final int SOURCE_CLASS_NONE = 0; // 0x0
+    field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
+    field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
+    field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
+    field public static final int SOURCE_DPAD = 513; // 0x201
+    field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+    field public static final int SOURCE_HDMI = 33554433; // 0x2000001
+    field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
+    field public static final int SOURCE_KEYBOARD = 257; // 0x101
+    field public static final int SOURCE_MOUSE = 8194; // 0x2002
+    field public static final int SOURCE_STYLUS = 16386; // 0x4002
+    field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
+    field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
+    field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
+    field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
+    field public static final int SOURCE_UNKNOWN = 0; // 0x0
+  }
+
+  public final class KeyEventCompat {
+    method public static boolean dispatch(android.view.KeyEvent, android.view.KeyEvent.Callback, java.lang.Object, java.lang.Object);
+    method public static java.lang.Object getKeyDispatcherState(android.view.View);
+    method public static boolean hasModifiers(android.view.KeyEvent, int);
+    method public static boolean hasNoModifiers(android.view.KeyEvent);
+    method public static boolean isCtrlPressed(android.view.KeyEvent);
+    method public static boolean isTracking(android.view.KeyEvent);
+    method public static boolean metaStateHasModifiers(int, int);
+    method public static boolean metaStateHasNoModifiers(int);
+    method public static int normalizeMetaState(int);
+    method public static void startTracking(android.view.KeyEvent);
+  }
+
+  public final class LayoutInflaterCompat {
+    method public static android.support.v4.view.LayoutInflaterFactory getFactory(android.view.LayoutInflater);
+    method public static void setFactory(android.view.LayoutInflater, android.support.v4.view.LayoutInflaterFactory);
+  }
+
+  public abstract interface LayoutInflaterFactory {
+    method public abstract android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+  }
+
+  public final class MarginLayoutParamsCompat {
+    method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams);
+    method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams);
+    method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams);
+    method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams);
+    method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+    method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+    method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams, int);
+    method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams, int);
+  }
+
+  public final class MenuCompat {
+    method public static deprecated void setShowAsAction(android.view.MenuItem, int);
+  }
+
+  public final class MenuItemCompat {
+    method public static boolean collapseActionView(android.view.MenuItem);
+    method public static boolean expandActionView(android.view.MenuItem);
+    method public static android.support.v4.view.ActionProvider getActionProvider(android.view.MenuItem);
+    method public static android.view.View getActionView(android.view.MenuItem);
+    method public static boolean isActionViewExpanded(android.view.MenuItem);
+    method public static android.view.MenuItem setActionProvider(android.view.MenuItem, android.support.v4.view.ActionProvider);
+    method public static android.view.MenuItem setActionView(android.view.MenuItem, android.view.View);
+    method public static android.view.MenuItem setActionView(android.view.MenuItem, int);
+    method public static android.view.MenuItem setOnActionExpandListener(android.view.MenuItem, android.support.v4.view.MenuItemCompat.OnActionExpandListener);
+    method public static void setShowAsAction(android.view.MenuItem, int);
+    field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+    field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+    field public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+    field public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+    field public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+  }
+
+  public static abstract interface MenuItemCompat.OnActionExpandListener {
+    method public abstract boolean onMenuItemActionCollapse(android.view.MenuItem);
+    method public abstract boolean onMenuItemActionExpand(android.view.MenuItem);
+  }
+
+  public final class MotionEventCompat {
+    method public static int findPointerIndex(android.view.MotionEvent, int);
+    method public static int getActionIndex(android.view.MotionEvent);
+    method public static int getActionMasked(android.view.MotionEvent);
+    method public static float getAxisValue(android.view.MotionEvent, int);
+    method public static float getAxisValue(android.view.MotionEvent, int, int);
+    method public static int getButtonState(android.view.MotionEvent);
+    method public static int getPointerCount(android.view.MotionEvent);
+    method public static int getPointerId(android.view.MotionEvent, int);
+    method public static int getSource(android.view.MotionEvent);
+    method public static float getX(android.view.MotionEvent, int);
+    method public static float getY(android.view.MotionEvent, int);
+    method public static boolean isFromSource(android.view.MotionEvent, int);
+    field public static final int ACTION_HOVER_ENTER = 9; // 0x9
+    field public static final int ACTION_HOVER_EXIT = 10; // 0xa
+    field public static final int ACTION_HOVER_MOVE = 7; // 0x7
+    field public static final int ACTION_MASK = 255; // 0xff
+    field public static final int ACTION_POINTER_DOWN = 5; // 0x5
+    field public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+    field public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+    field public static final int ACTION_POINTER_UP = 6; // 0x6
+    field public static final int ACTION_SCROLL = 8; // 0x8
+    field public static final int AXIS_BRAKE = 23; // 0x17
+    field public static final int AXIS_DISTANCE = 24; // 0x18
+    field public static final int AXIS_GAS = 22; // 0x16
+    field public static final int AXIS_GENERIC_1 = 32; // 0x20
+    field public static final int AXIS_GENERIC_10 = 41; // 0x29
+    field public static final int AXIS_GENERIC_11 = 42; // 0x2a
+    field public static final int AXIS_GENERIC_12 = 43; // 0x2b
+    field public static final int AXIS_GENERIC_13 = 44; // 0x2c
+    field public static final int AXIS_GENERIC_14 = 45; // 0x2d
+    field public static final int AXIS_GENERIC_15 = 46; // 0x2e
+    field public static final int AXIS_GENERIC_16 = 47; // 0x2f
+    field public static final int AXIS_GENERIC_2 = 33; // 0x21
+    field public static final int AXIS_GENERIC_3 = 34; // 0x22
+    field public static final int AXIS_GENERIC_4 = 35; // 0x23
+    field public static final int AXIS_GENERIC_5 = 36; // 0x24
+    field public static final int AXIS_GENERIC_6 = 37; // 0x25
+    field public static final int AXIS_GENERIC_7 = 38; // 0x26
+    field public static final int AXIS_GENERIC_8 = 39; // 0x27
+    field public static final int AXIS_GENERIC_9 = 40; // 0x28
+    field public static final int AXIS_HAT_X = 15; // 0xf
+    field public static final int AXIS_HAT_Y = 16; // 0x10
+    field public static final int AXIS_HSCROLL = 10; // 0xa
+    field public static final int AXIS_LTRIGGER = 17; // 0x11
+    field public static final int AXIS_ORIENTATION = 8; // 0x8
+    field public static final int AXIS_PRESSURE = 2; // 0x2
+    field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+    field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+    field public static final int AXIS_RTRIGGER = 18; // 0x12
+    field public static final int AXIS_RUDDER = 20; // 0x14
+    field public static final int AXIS_RX = 12; // 0xc
+    field public static final int AXIS_RY = 13; // 0xd
+    field public static final int AXIS_RZ = 14; // 0xe
+    field public static final int AXIS_SIZE = 3; // 0x3
+    field public static final int AXIS_THROTTLE = 19; // 0x13
+    field public static final int AXIS_TILT = 25; // 0x19
+    field public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+    field public static final int AXIS_TOOL_MINOR = 7; // 0x7
+    field public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+    field public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+    field public static final int AXIS_VSCROLL = 9; // 0x9
+    field public static final int AXIS_WHEEL = 21; // 0x15
+    field public static final int AXIS_X = 0; // 0x0
+    field public static final int AXIS_Y = 1; // 0x1
+    field public static final int AXIS_Z = 11; // 0xb
+    field public static final int BUTTON_PRIMARY = 1; // 0x1
+  }
+
+  public abstract interface NestedScrollingChild {
+    method public abstract boolean dispatchNestedFling(float, float, boolean);
+    method public abstract boolean dispatchNestedPreFling(float, float);
+    method public abstract boolean dispatchNestedPreScroll(int, int, int[], int[]);
+    method public abstract boolean dispatchNestedScroll(int, int, int, int, int[]);
+    method public abstract boolean hasNestedScrollingParent();
+    method public abstract boolean isNestedScrollingEnabled();
+    method public abstract void setNestedScrollingEnabled(boolean);
+    method public abstract boolean startNestedScroll(int);
+    method public abstract void stopNestedScroll();
+  }
+
+  public abstract interface NestedScrollingParent {
+    method public abstract int getNestedScrollAxes();
+    method public abstract boolean onNestedFling(android.view.View, float, float, boolean);
+    method public abstract boolean onNestedPreFling(android.view.View, float, float);
+    method public abstract void onNestedPreScroll(android.view.View, int, int, int[]);
+    method public abstract void onNestedScroll(android.view.View, int, int, int, int);
+    method public abstract void onNestedScrollAccepted(android.view.View, android.view.View, int);
+    method public abstract boolean onStartNestedScroll(android.view.View, android.view.View, int);
+    method public abstract void onStopNestedScroll(android.view.View);
+  }
+
+  public abstract interface OnApplyWindowInsetsListener {
+    method public abstract android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+  }
+
+  public final class PointerIconCompat {
+    method public static android.support.v4.view.PointerIconCompat createCustomIcon(android.graphics.Bitmap, float, float);
+    method public static android.support.v4.view.PointerIconCompat getSystemIcon(android.content.Context, int);
+    method public static android.support.v4.view.PointerIconCompat loadCustomIcon(android.content.res.Resources, int);
+    field public static final int STYLE_ALIAS = 1010; // 0x3f2
+    field public static final int STYLE_ALL_SCROLL = 1013; // 0x3f5
+    field public static final int STYLE_ARROW = 1000; // 0x3e8
+    field public static final int STYLE_CELL = 1006; // 0x3ee
+    field public static final int STYLE_CONTEXT_MENU = 1001; // 0x3e9
+    field public static final int STYLE_COPY = 1011; // 0x3f3
+    field public static final int STYLE_CROSSHAIR = 1007; // 0x3ef
+    field public static final int STYLE_DEFAULT = 1000; // 0x3e8
+    field public static final int STYLE_GRAB = 1020; // 0x3fc
+    field public static final int STYLE_GRABBING = 1021; // 0x3fd
+    field public static final int STYLE_HAND = 1002; // 0x3ea
+    field public static final int STYLE_HELP = 1003; // 0x3eb
+    field public static final int STYLE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+    field public static final int STYLE_NO_DROP = 1012; // 0x3f4
+    field public static final int STYLE_NULL = 0; // 0x0
+    field public static final int STYLE_TEXT = 1008; // 0x3f0
+    field public static final int STYLE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+    field public static final int STYLE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+    field public static final int STYLE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+    field public static final int STYLE_VERTICAL_TEXT = 1009; // 0x3f1
+    field public static final int STYLE_WAIT = 1004; // 0x3ec
+    field public static final int STYLE_ZOOM_IN = 1018; // 0x3fa
+    field public static final int STYLE_ZOOM_OUT = 1019; // 0x3fb
+  }
+
+  public final class ScaleGestureDetectorCompat {
+    method public static boolean isQuickScaleEnabled(java.lang.Object);
+    method public static void setQuickScaleEnabled(java.lang.Object, boolean);
+  }
+
+  public abstract interface ScrollingView {
+    method public abstract int computeHorizontalScrollExtent();
+    method public abstract int computeHorizontalScrollOffset();
+    method public abstract int computeHorizontalScrollRange();
+    method public abstract int computeVerticalScrollExtent();
+    method public abstract int computeVerticalScrollOffset();
+    method public abstract int computeVerticalScrollRange();
+  }
+
+  public abstract interface TintableBackgroundView {
+    method public abstract android.content.res.ColorStateList getSupportBackgroundTintList();
+    method public abstract android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+    method public abstract void setSupportBackgroundTintList(android.content.res.ColorStateList);
+    method public abstract void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+  }
+
+  public final class VelocityTrackerCompat {
+    method public static float getXVelocity(android.view.VelocityTracker, int);
+    method public static float getYVelocity(android.view.VelocityTracker, int);
+  }
+
+  public class ViewCompat {
+    ctor protected ViewCompat();
+    method public static android.support.v4.view.ViewPropertyAnimatorCompat animate(android.view.View);
+    method public static boolean canScrollHorizontally(android.view.View, int);
+    method public static boolean canScrollVertically(android.view.View, int);
+    method public static int combineMeasuredStates(int, int);
+    method public static android.support.v4.view.WindowInsetsCompat dispatchApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+    method public static void dispatchFinishTemporaryDetach(android.view.View);
+    method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
+    method public static boolean dispatchNestedPreFling(android.view.View, float, float);
+    method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[], int[]);
+    method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]);
+    method public static void dispatchStartTemporaryDetach(android.view.View);
+    method public static int getAccessibilityLiveRegion(android.view.View);
+    method public static android.support.v4.view.accessibility.AccessibilityNodeProviderCompat getAccessibilityNodeProvider(android.view.View);
+    method public static float getAlpha(android.view.View);
+    method public static android.content.res.ColorStateList getBackgroundTintList(android.view.View);
+    method public static android.graphics.PorterDuff.Mode getBackgroundTintMode(android.view.View);
+    method public static android.graphics.Rect getClipBounds(android.view.View);
+    method public static float getElevation(android.view.View);
+    method public static boolean getFitsSystemWindows(android.view.View);
+    method public static int getImportantForAccessibility(android.view.View);
+    method public static int getLabelFor(android.view.View);
+    method public static int getLayerType(android.view.View);
+    method public static int getLayoutDirection(android.view.View);
+    method public static android.graphics.Matrix getMatrix(android.view.View);
+    method public static int getMeasuredHeightAndState(android.view.View);
+    method public static int getMeasuredState(android.view.View);
+    method public static int getMeasuredWidthAndState(android.view.View);
+    method public static int getMinimumHeight(android.view.View);
+    method public static int getMinimumWidth(android.view.View);
+    method public static int getOverScrollMode(android.view.View);
+    method public static int getPaddingEnd(android.view.View);
+    method public static int getPaddingStart(android.view.View);
+    method public static android.view.ViewParent getParentForAccessibility(android.view.View);
+    method public static float getPivotX(android.view.View);
+    method public static float getPivotY(android.view.View);
+    method public static float getRotation(android.view.View);
+    method public static float getRotationX(android.view.View);
+    method public static float getRotationY(android.view.View);
+    method public static float getScaleX(android.view.View);
+    method public static float getScaleY(android.view.View);
+    method public static int getScrollIndicators(android.view.View);
+    method public static java.lang.String getTransitionName(android.view.View);
+    method public static float getTranslationX(android.view.View);
+    method public static float getTranslationY(android.view.View);
+    method public static float getTranslationZ(android.view.View);
+    method public static int getWindowSystemUiVisibility(android.view.View);
+    method public static float getX(android.view.View);
+    method public static float getY(android.view.View);
+    method public static float getZ(android.view.View);
+    method public static boolean hasAccessibilityDelegate(android.view.View);
+    method public static boolean hasNestedScrollingParent(android.view.View);
+    method public static boolean hasOnClickListeners(android.view.View);
+    method public static boolean hasOverlappingRendering(android.view.View);
+    method public static boolean hasPointerCapture(android.view.View);
+    method public static boolean hasTransientState(android.view.View);
+    method public static boolean isAttachedToWindow(android.view.View);
+    method public static boolean isInLayout(android.view.View);
+    method public static boolean isLaidOut(android.view.View);
+    method public static boolean isLayoutDirectionResolved(android.view.View);
+    method public static boolean isNestedScrollingEnabled(android.view.View);
+    method public static boolean isOpaque(android.view.View);
+    method public static boolean isPaddingRelative(android.view.View);
+    method public static void jumpDrawablesToCurrentState(android.view.View);
+    method public static void offsetLeftAndRight(android.view.View, int);
+    method public static void offsetTopAndBottom(android.view.View, int);
+    method public static android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+    method public static void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public static void onInitializeAccessibilityNodeInfo(android.view.View, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+    method public static void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle);
+    method public static void postInvalidateOnAnimation(android.view.View);
+    method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
+    method public static void postOnAnimation(android.view.View, java.lang.Runnable);
+    method public static void postOnAnimationDelayed(android.view.View, java.lang.Runnable, long);
+    method public static void releasePointerCapture(android.view.View);
+    method public static void requestApplyInsets(android.view.View);
+    method public static int resolveSizeAndState(int, int, int);
+    method public static void setAccessibilityDelegate(android.view.View, android.support.v4.view.AccessibilityDelegateCompat);
+    method public static void setAccessibilityLiveRegion(android.view.View, int);
+    method public static void setActivated(android.view.View, boolean);
+    method public static void setAlpha(android.view.View, float);
+    method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList);
+    method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode);
+    method public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup, boolean);
+    method public static void setClipBounds(android.view.View, android.graphics.Rect);
+    method public static void setElevation(android.view.View, float);
+    method public static void setFitsSystemWindows(android.view.View, boolean);
+    method public static void setHasTransientState(android.view.View, boolean);
+    method public static void setImportantForAccessibility(android.view.View, int);
+    method public static void setLabelFor(android.view.View, int);
+    method public static void setLayerPaint(android.view.View, android.graphics.Paint);
+    method public static void setLayerType(android.view.View, int, android.graphics.Paint);
+    method public static void setLayoutDirection(android.view.View, int);
+    method public static void setNestedScrollingEnabled(android.view.View, boolean);
+    method public static void setOnApplyWindowInsetsListener(android.view.View, android.support.v4.view.OnApplyWindowInsetsListener);
+    method public static void setOverScrollMode(android.view.View, int);
+    method public static void setPaddingRelative(android.view.View, int, int, int, int);
+    method public static void setPivotX(android.view.View, float);
+    method public static void setPivotY(android.view.View, float);
+    method public static void setPointerCapture(android.view.View);
+    method public static void setPointerIcon(android.view.View, android.support.v4.view.PointerIconCompat);
+    method public static void setRotation(android.view.View, float);
+    method public static void setRotationX(android.view.View, float);
+    method public static void setRotationY(android.view.View, float);
+    method public static void setSaveFromParentEnabled(android.view.View, boolean);
+    method public static void setScaleX(android.view.View, float);
+    method public static void setScaleY(android.view.View, float);
+    method public static void setScrollIndicators(android.view.View, int);
+    method public static void setScrollIndicators(android.view.View, int, int);
+    method public static void setTransitionName(android.view.View, java.lang.String);
+    method public static void setTranslationX(android.view.View, float);
+    method public static void setTranslationY(android.view.View, float);
+    method public static void setTranslationZ(android.view.View, float);
+    method public static void setX(android.view.View, float);
+    method public static void setY(android.view.View, float);
+    method public static void setZ(android.view.View, float);
+    method public static boolean startNestedScroll(android.view.View, int);
+    method public static void stopNestedScroll(android.view.View);
+    field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
+    field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
+    field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
+    field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
+    field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+    field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
+    field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
+    field public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
+    field public static final int LAYER_TYPE_NONE = 0; // 0x0
+    field public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
+    field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+    field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+    field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+    field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+    field public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+    field public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+    field public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+    field public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+    field public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
+    field public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+    field public static final int OVER_SCROLL_NEVER = 2; // 0x2
+    field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+    field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+    field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+    field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+    field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+    field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+    field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+    field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+    field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+  }
+
+  public final class ViewConfigurationCompat {
+    method public static int getScaledPagingTouchSlop(android.view.ViewConfiguration);
+    method public static boolean hasPermanentMenuKey(android.view.ViewConfiguration);
+  }
+
+  public final class ViewGroupCompat {
+    method public static int getLayoutMode(android.view.ViewGroup);
+    method public static int getNestedScrollAxes(android.view.ViewGroup);
+    method public static boolean isTransitionGroup(android.view.ViewGroup);
+    method public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public static void setLayoutMode(android.view.ViewGroup, int);
+    method public static void setMotionEventSplittingEnabled(android.view.ViewGroup, boolean);
+    method public static void setTransitionGroup(android.view.ViewGroup, boolean);
+    field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+    field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+  }
+
+  public final class ViewParentCompat {
+    method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int);
+    method public static boolean onNestedFling(android.view.ViewParent, android.view.View, float, float, boolean);
+    method public static boolean onNestedPreFling(android.view.ViewParent, android.view.View, float, float);
+    method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[]);
+    method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
+    method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
+    method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int);
+    method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
+    method public static boolean requestSendAccessibilityEvent(android.view.ViewParent, android.view.View, android.view.accessibility.AccessibilityEvent);
+  }
+
+  public final class ViewPropertyAnimatorCompat {
+    method public android.support.v4.view.ViewPropertyAnimatorCompat alpha(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat alphaBy(float);
+    method public void cancel();
+    method public long getDuration();
+    method public android.view.animation.Interpolator getInterpolator();
+    method public long getStartDelay();
+    method public android.support.v4.view.ViewPropertyAnimatorCompat rotation(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat rotationBy(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat rotationX(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat rotationXBy(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat rotationY(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat rotationYBy(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat scaleX(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat scaleXBy(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat scaleY(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat scaleYBy(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat setDuration(long);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat setInterpolator(android.view.animation.Interpolator);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat setListener(android.support.v4.view.ViewPropertyAnimatorListener);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat setStartDelay(long);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat setUpdateListener(android.support.v4.view.ViewPropertyAnimatorUpdateListener);
+    method public void start();
+    method public android.support.v4.view.ViewPropertyAnimatorCompat translationX(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat translationXBy(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat translationY(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat translationYBy(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat translationZ(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat translationZBy(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat withEndAction(java.lang.Runnable);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat withLayer();
+    method public android.support.v4.view.ViewPropertyAnimatorCompat withStartAction(java.lang.Runnable);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat x(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat xBy(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat y(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat yBy(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat z(float);
+    method public android.support.v4.view.ViewPropertyAnimatorCompat zBy(float);
+  }
+
+  public abstract interface ViewPropertyAnimatorListener {
+    method public abstract void onAnimationCancel(android.view.View);
+    method public abstract void onAnimationEnd(android.view.View);
+    method public abstract void onAnimationStart(android.view.View);
+  }
+
+  public class ViewPropertyAnimatorListenerAdapter implements android.support.v4.view.ViewPropertyAnimatorListener {
+    ctor public ViewPropertyAnimatorListenerAdapter();
+    method public void onAnimationCancel(android.view.View);
+    method public void onAnimationEnd(android.view.View);
+    method public void onAnimationStart(android.view.View);
+  }
+
+  public abstract interface ViewPropertyAnimatorUpdateListener {
+    method public abstract void onAnimationUpdate(android.view.View);
+  }
+
+  public final class WindowCompat {
+    field public static final int FEATURE_ACTION_BAR = 8; // 0x8
+    field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
+    field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+  }
+
+  public class WindowInsetsCompat {
+    method public android.support.v4.view.WindowInsetsCompat consumeStableInsets();
+    method public android.support.v4.view.WindowInsetsCompat consumeSystemWindowInsets();
+    method public int getStableInsetBottom();
+    method public int getStableInsetLeft();
+    method public int getStableInsetRight();
+    method public int getStableInsetTop();
+    method public int getSystemWindowInsetBottom();
+    method public int getSystemWindowInsetLeft();
+    method public int getSystemWindowInsetRight();
+    method public int getSystemWindowInsetTop();
+    method public boolean hasInsets();
+    method public boolean hasStableInsets();
+    method public boolean hasSystemWindowInsets();
+    method public boolean isConsumed();
+    method public boolean isRound();
+    method public android.support.v4.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
+    method public android.support.v4.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
+  }
+
+}
+
+package android.support.v4.view.accessibility {
+
+  public final class AccessibilityEventCompat {
+    method public static void appendRecord(android.view.accessibility.AccessibilityEvent, android.support.v4.view.accessibility.AccessibilityRecordCompat);
+    method public static android.support.v4.view.accessibility.AccessibilityRecordCompat asRecord(android.view.accessibility.AccessibilityEvent);
+    method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
+    method public static android.support.v4.view.accessibility.AccessibilityRecordCompat getRecord(android.view.accessibility.AccessibilityEvent, int);
+    method public static int getRecordCount(android.view.accessibility.AccessibilityEvent);
+    method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
+    field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+    field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
+    field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
+    field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
+    field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+    field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+    field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+    field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+    field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+    field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+    field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+    field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+    field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+    field public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+    field public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+    field public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+    field public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+    field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+    field public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+  }
+
+  public final class AccessibilityManagerCompat {
+    method public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat);
+    method public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager, int);
+    method public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager);
+    method public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager);
+    method public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat);
+  }
+
+  public static abstract class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat {
+    ctor public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+    method public abstract void onAccessibilityStateChanged(boolean);
+  }
+
+  public class AccessibilityNodeInfoCompat {
+    ctor public AccessibilityNodeInfoCompat(java.lang.Object);
+    method public void addAction(int);
+    method public void addAction(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat);
+    method public void addChild(android.view.View);
+    method public void addChild(android.view.View, int);
+    method public boolean canOpenPopup();
+    method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(java.lang.String);
+    method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByViewId(java.lang.String);
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat findFocus(int);
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat focusSearch(int);
+    method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat> getActionList();
+    method public int getActions();
+    method public void getBoundsInParent(android.graphics.Rect);
+    method public void getBoundsInScreen(android.graphics.Rect);
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getChild(int);
+    method public int getChildCount();
+    method public java.lang.CharSequence getClassName();
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat getCollectionInfo();
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat getCollectionItemInfo();
+    method public java.lang.CharSequence getContentDescription();
+    method public java.lang.CharSequence getError();
+    method public android.os.Bundle getExtras();
+    method public java.lang.Object getInfo();
+    method public int getInputType();
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getLabelFor();
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getLabeledBy();
+    method public int getLiveRegion();
+    method public int getMaxTextLength();
+    method public int getMovementGranularities();
+    method public java.lang.CharSequence getPackageName();
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getParent();
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat getRangeInfo();
+    method public java.lang.CharSequence getRoleDescription();
+    method public java.lang.CharSequence getText();
+    method public int getTextSelectionEnd();
+    method public int getTextSelectionStart();
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getTraversalAfter();
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getTraversalBefore();
+    method public java.lang.String getViewIdResourceName();
+    method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getWindow();
+    method public int getWindowId();
+    method public boolean hasImage();
+    method public boolean isAccessibilityFocused();
+    method public boolean isCheckable();
+    method public boolean isChecked();
+    method public boolean isClickable();
+    method public boolean isContentInvalid();
+    method public boolean isDismissable();
+    method public boolean isEditable();
+    method public boolean isEnabled();
+    method public boolean isFocusable();
+    method public boolean isFocused();
+    method public boolean isLongClickable();
+    method public boolean isMultiLine();
+    method public boolean isPassword();
+    method public boolean isScrollable();
+    method public boolean isSelected();
+    method public boolean isVisibleToUser();
+    method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain(android.view.View);
+    method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain(android.view.View, int);
+    method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain();
+    method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+    method public boolean performAction(int);
+    method public boolean performAction(int, android.os.Bundle);
+    method public void recycle();
+    method public boolean refresh();
+    method public boolean removeAction(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat);
+    method public boolean removeChild(android.view.View);
+    method public boolean removeChild(android.view.View, int);
+    method public void setAccessibilityFocused(boolean);
+    method public void setBoundsInParent(android.graphics.Rect);
+    method public void setBoundsInScreen(android.graphics.Rect);
+    method public void setCanOpenPopup(boolean);
+    method public void setCheckable(boolean);
+    method public void setChecked(boolean);
+    method public void setClassName(java.lang.CharSequence);
+    method public void setClickable(boolean);
+    method public void setCollectionInfo(java.lang.Object);
+    method public void setCollectionItemInfo(java.lang.Object);
+    method public void setContentDescription(java.lang.CharSequence);
+    method public void setContentInvalid(boolean);
+    method public void setDismissable(boolean);
+    method public void setEditable(boolean);
+    method public void setEnabled(boolean);
+    method public void setError(java.lang.CharSequence);
+    method public void setFocusable(boolean);
+    method public void setFocused(boolean);
+    method public void setHasImage(boolean);
+    method public void setInputType(int);
+    method public void setLabelFor(android.view.View);
+    method public void setLabelFor(android.view.View, int);
+    method public void setLabeledBy(android.view.View);
+    method public void setLabeledBy(android.view.View, int);
+    method public void setLiveRegion(int);
+    method public void setLongClickable(boolean);
+    method public void setMaxTextLength(int);
+    method public void setMovementGranularities(int);
+    method public void setMultiLine(boolean);
+    method public void setPackageName(java.lang.CharSequence);
+    method public void setParent(android.view.View);
+    method public void setParent(android.view.View, int);
+    method public void setPassword(boolean);
+    method public void setRangeInfo(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat);
+    method public void setRoleDescription(java.lang.CharSequence);
+    method public void setScrollable(boolean);
+    method public void setSelected(boolean);
+    method public void setSource(android.view.View);
+    method public void setSource(android.view.View, int);
+    method public void setText(java.lang.CharSequence);
+    method public void setTextSelection(int, int);
+    method public void setTraversalAfter(android.view.View);
+    method public void setTraversalAfter(android.view.View, int);
+    method public void setTraversalBefore(android.view.View);
+    method public void setTraversalBefore(android.view.View, int);
+    method public void setViewIdResourceName(java.lang.String);
+    method public void setVisibleToUser(boolean);
+    field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+    field public static final java.lang.String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+    field public static final java.lang.String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+    field public static final java.lang.String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+    field public static final java.lang.String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+    field public static final java.lang.String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+    field public static final java.lang.String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+    field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
+    field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+    field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+    field public static final int ACTION_CLICK = 16; // 0x10
+    field public static final int ACTION_COLLAPSE = 524288; // 0x80000
+    field public static final int ACTION_COPY = 16384; // 0x4000
+    field public static final int ACTION_CUT = 65536; // 0x10000
+    field public static final int ACTION_DISMISS = 1048576; // 0x100000
+    field public static final int ACTION_EXPAND = 262144; // 0x40000
+    field public static final int ACTION_FOCUS = 1; // 0x1
+    field public static final int ACTION_LONG_CLICK = 32; // 0x20
+    field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
+    field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+    field public static final int ACTION_PASTE = 32768; // 0x8000
+    field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
+    field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
+    field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
+    field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
+    field public static final int ACTION_SELECT = 4; // 0x4
+    field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+    field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
+    field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
+    field public static final int FOCUS_INPUT = 1; // 0x1
+    field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+    field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+    field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+    field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+    field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
+  }
+
+  public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
+    ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, java.lang.CharSequence);
+    method public int getId();
+    method public java.lang.CharSequence getLabel();
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_ACCESSIBILITY_FOCUS;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_FOCUS;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_SELECTION;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLICK;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_COLLAPSE;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_COPY;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CUT;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DISMISS;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_EXPAND;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_FOCUS;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_LONG_CLICK;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_NEXT_HTML_ELEMENT;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PASTE;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PREVIOUS_HTML_ELEMENT;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_BACKWARD;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_FORWARD;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SELECT;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_SELECTION;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_TEXT;
+  }
+
+  public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+    method public int getColumnCount();
+    method public int getRowCount();
+    method public boolean isHierarchical();
+    method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat obtain(int, int, boolean, int);
+    field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+    field public static final int SELECTION_MODE_NONE = 0; // 0x0
+    field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+  }
+
+  public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
+    method public int getColumnIndex();
+    method public int getColumnSpan();
+    method public int getRowIndex();
+    method public int getRowSpan();
+    method public boolean isHeading();
+    method public boolean isSelected();
+    method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat obtain(int, int, int, int, boolean, boolean);
+  }
+
+  public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
+    method public float getCurrent();
+    method public float getMax();
+    method public float getMin();
+    method public int getType();
+    field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
+    field public static final int RANGE_TYPE_INT = 0; // 0x0
+    field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
+  }
+
+  public class AccessibilityNodeProviderCompat {
+    ctor public AccessibilityNodeProviderCompat();
+    ctor public AccessibilityNodeProviderCompat(java.lang.Object);
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat createAccessibilityNodeInfo(int);
+    method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(java.lang.String, int);
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat findFocus(int);
+    method public java.lang.Object getProvider();
+    method public boolean performAction(int, int, android.os.Bundle);
+  }
+
+  public class AccessibilityRecordCompat {
+    ctor public deprecated AccessibilityRecordCompat(java.lang.Object);
+    method public int getAddedCount();
+    method public java.lang.CharSequence getBeforeText();
+    method public java.lang.CharSequence getClassName();
+    method public java.lang.CharSequence getContentDescription();
+    method public int getCurrentItemIndex();
+    method public int getFromIndex();
+    method public deprecated java.lang.Object getImpl();
+    method public int getItemCount();
+    method public int getMaxScrollX();
+    method public int getMaxScrollY();
+    method public android.os.Parcelable getParcelableData();
+    method public int getRemovedCount();
+    method public int getScrollX();
+    method public int getScrollY();
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getSource();
+    method public java.util.List<java.lang.CharSequence> getText();
+    method public int getToIndex();
+    method public int getWindowId();
+    method public boolean isChecked();
+    method public boolean isEnabled();
+    method public boolean isFullScreen();
+    method public boolean isPassword();
+    method public boolean isScrollable();
+    method public static android.support.v4.view.accessibility.AccessibilityRecordCompat obtain(android.support.v4.view.accessibility.AccessibilityRecordCompat);
+    method public static android.support.v4.view.accessibility.AccessibilityRecordCompat obtain();
+    method public void recycle();
+    method public void setAddedCount(int);
+    method public void setBeforeText(java.lang.CharSequence);
+    method public void setChecked(boolean);
+    method public void setClassName(java.lang.CharSequence);
+    method public void setContentDescription(java.lang.CharSequence);
+    method public void setCurrentItemIndex(int);
+    method public void setEnabled(boolean);
+    method public void setFromIndex(int);
+    method public void setFullScreen(boolean);
+    method public void setItemCount(int);
+    method public void setMaxScrollX(int);
+    method public void setMaxScrollY(int);
+    method public void setParcelableData(android.os.Parcelable);
+    method public void setPassword(boolean);
+    method public void setRemovedCount(int);
+    method public void setScrollX(int);
+    method public void setScrollY(int);
+    method public void setScrollable(boolean);
+    method public void setSource(android.view.View);
+    method public void setSource(android.view.View, int);
+    method public void setToIndex(int);
+  }
+
+  public class AccessibilityWindowInfoCompat {
+    method public void getBoundsInScreen(android.graphics.Rect);
+    method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getChild(int);
+    method public int getChildCount();
+    method public int getId();
+    method public int getLayer();
+    method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getParent();
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getRoot();
+    method public int getType();
+    method public boolean isAccessibilityFocused();
+    method public boolean isActive();
+    method public boolean isFocused();
+    method public static android.support.v4.view.accessibility.AccessibilityWindowInfoCompat obtain();
+    method public static android.support.v4.view.accessibility.AccessibilityWindowInfoCompat obtain(android.support.v4.view.accessibility.AccessibilityWindowInfoCompat);
+    method public void recycle();
+    field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
+    field public static final int TYPE_APPLICATION = 1; // 0x1
+    field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+    field public static final int TYPE_SYSTEM = 3; // 0x3
+  }
+
+}
+
+package android.support.v4.view.animation {
+
+  public final class PathInterpolatorCompat {
+    method public static android.view.animation.Interpolator create(android.graphics.Path);
+    method public static android.view.animation.Interpolator create(float, float);
+    method public static android.view.animation.Interpolator create(float, float, float, float);
+  }
+
+}
+
+package android.support.v4.widget {
+
+  public final class CompoundButtonCompat {
+    method public static android.graphics.drawable.Drawable getButtonDrawable(android.widget.CompoundButton);
+    method public static android.content.res.ColorStateList getButtonTintList(android.widget.CompoundButton);
+    method public static android.graphics.PorterDuff.Mode getButtonTintMode(android.widget.CompoundButton);
+    method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList);
+    method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode);
+  }
+
+  public final class EdgeEffectCompat {
+    ctor public EdgeEffectCompat(android.content.Context);
+    method public boolean draw(android.graphics.Canvas);
+    method public void finish();
+    method public boolean isFinished();
+    method public boolean onAbsorb(int);
+    method public deprecated boolean onPull(float);
+    method public boolean onPull(float, float);
+    method public boolean onRelease();
+    method public void setSize(int, int);
+  }
+
+  public final class ListPopupWindowCompat {
+    method public static android.view.View.OnTouchListener createDragToOpenListener(java.lang.Object, android.view.View);
+  }
+
+  public final class ListViewCompat {
+    method public static void scrollListBy(android.widget.ListView, int);
+  }
+
+  public final class PopupMenuCompat {
+    method public static android.view.View.OnTouchListener getDragToOpenListener(java.lang.Object);
+  }
+
+  public final class PopupWindowCompat {
+    method public static boolean getOverlapAnchor(android.widget.PopupWindow);
+    method public static int getWindowLayoutType(android.widget.PopupWindow);
+    method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
+    method public static void setWindowLayoutType(android.widget.PopupWindow, int);
+    method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
+  }
+
+  public final class ScrollerCompat {
+    method public void abortAnimation();
+    method public boolean computeScrollOffset();
+    method public static android.support.v4.widget.ScrollerCompat create(android.content.Context);
+    method public static android.support.v4.widget.ScrollerCompat create(android.content.Context, android.view.animation.Interpolator);
+    method public void fling(int, int, int, int, int, int, int, int);
+    method public void fling(int, int, int, int, int, int, int, int, int, int);
+    method public float getCurrVelocity();
+    method public int getCurrX();
+    method public int getCurrY();
+    method public int getFinalX();
+    method public int getFinalY();
+    method public boolean isFinished();
+    method public boolean isOverScrolled();
+    method public void notifyHorizontalEdgeReached(int, int, int);
+    method public void notifyVerticalEdgeReached(int, int, int);
+    method public boolean springBack(int, int, int, int, int, int);
+    method public void startScroll(int, int, int, int);
+    method public void startScroll(int, int, int, int, int);
+  }
+
+  public final class SearchViewCompat {
+    method public static java.lang.CharSequence getQuery(android.view.View);
+    method public static boolean isIconified(android.view.View);
+    method public static boolean isQueryRefinementEnabled(android.view.View);
+    method public static boolean isSubmitButtonEnabled(android.view.View);
+    method public static android.view.View newSearchView(android.content.Context);
+    method public static void setIconified(android.view.View, boolean);
+    method public static void setImeOptions(android.view.View, int);
+    method public static void setInputType(android.view.View, int);
+    method public static void setMaxWidth(android.view.View, int);
+    method public static void setOnCloseListener(android.view.View, android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat);
+    method public static void setOnQueryTextListener(android.view.View, android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat);
+    method public static void setQuery(android.view.View, java.lang.CharSequence, boolean);
+    method public static void setQueryHint(android.view.View, java.lang.CharSequence);
+    method public static void setQueryRefinementEnabled(android.view.View, boolean);
+    method public static void setSearchableInfo(android.view.View, android.content.ComponentName);
+    method public static void setSubmitButtonEnabled(android.view.View, boolean);
+  }
+
+  public static abstract class SearchViewCompat.OnCloseListenerCompat {
+    ctor public SearchViewCompat.OnCloseListenerCompat();
+    method public boolean onClose();
+  }
+
+  public static abstract class SearchViewCompat.OnQueryTextListenerCompat {
+    ctor public SearchViewCompat.OnQueryTextListenerCompat();
+    method public boolean onQueryTextChange(java.lang.String);
+    method public boolean onQueryTextSubmit(java.lang.String);
+  }
+
+  public final class TextViewCompat {
+    method public static int getMaxLines(android.widget.TextView);
+    method public static int getMinLines(android.widget.TextView);
+    method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+    method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+    method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, int, int, int, int);
+    method public static void setTextAppearance(android.widget.TextView, int);
+  }
+
+  public abstract interface TintableCompoundButton {
+    method public abstract android.content.res.ColorStateList getSupportButtonTintList();
+    method public abstract android.graphics.PorterDuff.Mode getSupportButtonTintMode();
+    method public abstract void setSupportButtonTintList(android.content.res.ColorStateList);
+    method public abstract void setSupportButtonTintMode(android.graphics.PorterDuff.Mode);
+  }
+
+}
+
diff --git a/compat/api/removed.txt b/compat/api/removed.txt
new file mode 100644
index 0000000..98f8c44
--- /dev/null
+++ b/compat/api/removed.txt
@@ -0,0 +1,18 @@
+package android.support.v4.content {
+
+  public class ContextCompat {
+    method public static deprecated android.content.Context createDeviceEncryptedStorageContext(android.content.Context);
+    method public static deprecated boolean isDeviceEncryptedStorage(android.content.Context);
+  }
+
+}
+
+package android.support.v4.os {
+
+  public class UserManagerCompat {
+    method public static deprecated boolean isUserRunningAndLocked(android.content.Context);
+    method public static deprecated boolean isUserRunningAndUnlocked(android.content.Context);
+  }
+
+}
+
diff --git a/v4/api21/android/support/v4/app/ActivityCompat21.java b/compat/api21/android/support/v4/app/ActivityCompat21.java
similarity index 100%
rename from v4/api21/android/support/v4/app/ActivityCompat21.java
rename to compat/api21/android/support/v4/app/ActivityCompat21.java
diff --git a/v4/api21/android/support/v4/app/ActivityOptionsCompat21.java b/compat/api21/android/support/v4/app/ActivityOptionsCompat21.java
similarity index 100%
rename from v4/api21/android/support/v4/app/ActivityOptionsCompat21.java
rename to compat/api21/android/support/v4/app/ActivityOptionsCompat21.java
diff --git a/v4/api21/android/support/v4/content/ContextCompatApi21.java b/compat/api21/android/support/v4/content/ContextCompatApi21.java
similarity index 100%
rename from v4/api21/android/support/v4/content/ContextCompatApi21.java
rename to compat/api21/android/support/v4/content/ContextCompatApi21.java
diff --git a/v4/api21/android/support/v4/content/res/ResourcesCompatApi21.java b/compat/api21/android/support/v4/content/res/ResourcesCompatApi21.java
similarity index 100%
rename from v4/api21/android/support/v4/content/res/ResourcesCompatApi21.java
rename to compat/api21/android/support/v4/content/res/ResourcesCompatApi21.java
diff --git a/v4/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java b/compat/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java
similarity index 100%
rename from v4/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java
rename to compat/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java
diff --git a/v4/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java b/compat/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java
similarity index 100%
rename from v4/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java
rename to compat/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java
diff --git a/v4/api21/android/support/v4/view/LayoutInflaterCompatLollipop.java b/compat/api21/android/support/v4/view/LayoutInflaterCompatLollipop.java
similarity index 100%
rename from v4/api21/android/support/v4/view/LayoutInflaterCompatLollipop.java
rename to compat/api21/android/support/v4/view/LayoutInflaterCompatLollipop.java
diff --git a/v4/api21/android/support/v4/view/ViewCompatLollipop.java b/compat/api21/android/support/v4/view/ViewCompatLollipop.java
similarity index 100%
rename from v4/api21/android/support/v4/view/ViewCompatLollipop.java
rename to compat/api21/android/support/v4/view/ViewCompatLollipop.java
diff --git a/v4/api21/android/support/v4/view/ViewGroupCompatLollipop.java b/compat/api21/android/support/v4/view/ViewGroupCompatLollipop.java
similarity index 100%
rename from v4/api21/android/support/v4/view/ViewGroupCompatLollipop.java
rename to compat/api21/android/support/v4/view/ViewGroupCompatLollipop.java
diff --git a/v4/api21/android/support/v4/view/ViewParentCompatLollipop.java b/compat/api21/android/support/v4/view/ViewParentCompatLollipop.java
similarity index 100%
rename from v4/api21/android/support/v4/view/ViewParentCompatLollipop.java
rename to compat/api21/android/support/v4/view/ViewParentCompatLollipop.java
diff --git a/v4/api21/android/support/v4/view/ViewPropertyAnimatorCompatLollipop.java b/compat/api21/android/support/v4/view/ViewPropertyAnimatorCompatLollipop.java
similarity index 100%
rename from v4/api21/android/support/v4/view/ViewPropertyAnimatorCompatLollipop.java
rename to compat/api21/android/support/v4/view/ViewPropertyAnimatorCompatLollipop.java
diff --git a/v4/api21/android/support/v4/view/WindowInsetsCompatApi21.java b/compat/api21/android/support/v4/view/WindowInsetsCompatApi21.java
similarity index 100%
rename from v4/api21/android/support/v4/view/WindowInsetsCompatApi21.java
rename to compat/api21/android/support/v4/view/WindowInsetsCompatApi21.java
diff --git a/v4/api21/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi21.java b/compat/api21/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi21.java
similarity index 100%
rename from v4/api21/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi21.java
rename to compat/api21/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi21.java
diff --git a/v4/api21/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi21.java b/compat/api21/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi21.java
similarity index 100%
rename from v4/api21/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi21.java
rename to compat/api21/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi21.java
diff --git a/v4/api21/android/support/v4/view/animation/PathInterpolatorCompatApi21.java b/compat/api21/android/support/v4/view/animation/PathInterpolatorCompatApi21.java
similarity index 100%
rename from v4/api21/android/support/v4/view/animation/PathInterpolatorCompatApi21.java
rename to compat/api21/android/support/v4/view/animation/PathInterpolatorCompatApi21.java
diff --git a/v4/api21/android/support/v4/widget/CompoundButtonCompatLollipop.java b/compat/api21/android/support/v4/widget/CompoundButtonCompatLollipop.java
similarity index 100%
rename from v4/api21/android/support/v4/widget/CompoundButtonCompatLollipop.java
rename to compat/api21/android/support/v4/widget/CompoundButtonCompatLollipop.java
diff --git a/v4/api21/android/support/v4/widget/EdgeEffectCompatLollipop.java b/compat/api21/android/support/v4/widget/EdgeEffectCompatLollipop.java
similarity index 100%
rename from v4/api21/android/support/v4/widget/EdgeEffectCompatLollipop.java
rename to compat/api21/android/support/v4/widget/EdgeEffectCompatLollipop.java
diff --git a/v4/api21/android/support/v4/widget/PopupWindowCompatApi21.java b/compat/api21/android/support/v4/widget/PopupWindowCompatApi21.java
similarity index 100%
rename from v4/api21/android/support/v4/widget/PopupWindowCompatApi21.java
rename to compat/api21/android/support/v4/widget/PopupWindowCompatApi21.java
diff --git a/v4/api22/android/support/v4/app/ActivityCompat22.java b/compat/api22/android/support/v4/app/ActivityCompat22.java
similarity index 100%
rename from v4/api22/android/support/v4/app/ActivityCompat22.java
rename to compat/api22/android/support/v4/app/ActivityCompat22.java
diff --git a/v4/api22/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi22.java b/compat/api22/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi22.java
similarity index 100%
rename from v4/api22/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi22.java
rename to compat/api22/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi22.java
diff --git a/v4/api23/android/support/v4/app/ActivityCompat23.java b/compat/api23/android/support/v4/app/ActivityCompat23.java
similarity index 100%
rename from v4/api23/android/support/v4/app/ActivityCompat23.java
rename to compat/api23/android/support/v4/app/ActivityCompat23.java
diff --git a/v4/api23/android/support/v4/app/AppOpsManagerCompat23.java b/compat/api23/android/support/v4/app/AppOpsManagerCompat23.java
similarity index 100%
rename from v4/api23/android/support/v4/app/AppOpsManagerCompat23.java
rename to compat/api23/android/support/v4/app/AppOpsManagerCompat23.java
diff --git a/v4/api23/android/support/v4/content/ContextCompatApi23.java b/compat/api23/android/support/v4/content/ContextCompatApi23.java
similarity index 100%
rename from v4/api23/android/support/v4/content/ContextCompatApi23.java
rename to compat/api23/android/support/v4/content/ContextCompatApi23.java
diff --git a/v4/api23/android/support/v4/content/res/ResourcesCompatApi23.java b/compat/api23/android/support/v4/content/res/ResourcesCompatApi23.java
similarity index 100%
rename from v4/api23/android/support/v4/content/res/ResourcesCompatApi23.java
rename to compat/api23/android/support/v4/content/res/ResourcesCompatApi23.java
diff --git a/v4/api23/android/support/v4/graphics/drawable/DrawableCompatApi23.java b/compat/api23/android/support/v4/graphics/drawable/DrawableCompatApi23.java
similarity index 100%
rename from v4/api23/android/support/v4/graphics/drawable/DrawableCompatApi23.java
rename to compat/api23/android/support/v4/graphics/drawable/DrawableCompatApi23.java
diff --git a/v4/api23/android/support/v4/hardware/fingerprint/FingerprintManagerCompatApi23.java b/compat/api23/android/support/v4/hardware/fingerprint/FingerprintManagerCompatApi23.java
similarity index 100%
rename from v4/api23/android/support/v4/hardware/fingerprint/FingerprintManagerCompatApi23.java
rename to compat/api23/android/support/v4/hardware/fingerprint/FingerprintManagerCompatApi23.java
diff --git a/v4/api23/android/support/v4/text/ICUCompatApi23.java b/compat/api23/android/support/v4/text/ICUCompatApi23.java
similarity index 100%
rename from v4/api23/android/support/v4/text/ICUCompatApi23.java
rename to compat/api23/android/support/v4/text/ICUCompatApi23.java
diff --git a/v4/api23/android/support/v4/view/ViewCompatMarshmallow.java b/compat/api23/android/support/v4/view/ViewCompatMarshmallow.java
similarity index 100%
rename from v4/api23/android/support/v4/view/ViewCompatMarshmallow.java
rename to compat/api23/android/support/v4/view/ViewCompatMarshmallow.java
diff --git a/v4/api23/android/support/v4/widget/CompoundButtonCompatApi23.java b/compat/api23/android/support/v4/widget/CompoundButtonCompatApi23.java
similarity index 100%
rename from v4/api23/android/support/v4/widget/CompoundButtonCompatApi23.java
rename to compat/api23/android/support/v4/widget/CompoundButtonCompatApi23.java
diff --git a/v4/api23/android/support/v4/widget/PopupWindowCompatApi23.java b/compat/api23/android/support/v4/widget/PopupWindowCompatApi23.java
similarity index 100%
rename from v4/api23/android/support/v4/widget/PopupWindowCompatApi23.java
rename to compat/api23/android/support/v4/widget/PopupWindowCompatApi23.java
diff --git a/v4/api23/android/support/v4/widget/TextViewCompatApi23.java b/compat/api23/android/support/v4/widget/TextViewCompatApi23.java
similarity index 100%
rename from v4/api23/android/support/v4/widget/TextViewCompatApi23.java
rename to compat/api23/android/support/v4/widget/TextViewCompatApi23.java
diff --git a/v4/api24/android/support/v4/content/ContextCompatApi24.java b/compat/api24/android/support/v4/content/ContextCompatApi24.java
similarity index 100%
rename from v4/api24/android/support/v4/content/ContextCompatApi24.java
rename to compat/api24/android/support/v4/content/ContextCompatApi24.java
diff --git a/v4/api24/android/support/v4/net/TrafficStatsCompatApi24.java b/compat/api24/android/support/v4/net/TrafficStatsCompatApi24.java
similarity index 100%
rename from v4/api24/android/support/v4/net/TrafficStatsCompatApi24.java
rename to compat/api24/android/support/v4/net/TrafficStatsCompatApi24.java
diff --git a/v4/api24/android/support/v4/os/UserManagerCompatApi24.java b/compat/api24/android/support/v4/os/UserManagerCompatApi24.java
similarity index 100%
rename from v4/api24/android/support/v4/os/UserManagerCompatApi24.java
rename to compat/api24/android/support/v4/os/UserManagerCompatApi24.java
diff --git a/v4/api24/android/support/v4/view/PointerIconCompatApi24.java b/compat/api24/android/support/v4/view/PointerIconCompatApi24.java
similarity index 100%
rename from v4/api24/android/support/v4/view/PointerIconCompatApi24.java
rename to compat/api24/android/support/v4/view/PointerIconCompatApi24.java
diff --git a/v4/api24/android/support/v4/view/ViewCompatApi24.java b/compat/api24/android/support/v4/view/ViewCompatApi24.java
similarity index 100%
rename from v4/api24/android/support/v4/view/ViewCompatApi24.java
rename to compat/api24/android/support/v4/view/ViewCompatApi24.java
diff --git a/compat/build.gradle b/compat/build.gradle
new file mode 100644
index 0000000..36edc8d
--- /dev/null
+++ b/compat/build.gradle
@@ -0,0 +1,133 @@
+apply plugin: 'com.android.library'
+archivesBaseName = 'support-compat'
+
+
+createApiSourceSets(project, gradle.ext.studioCompat.modules.v4.apiTargets)
+dependencies {
+    androidTestCompile ('com.android.support.test:runner:0.4.1') {
+        exclude module: 'support-annotations'
+    }
+    androidTestCompile ('com.android.support.test.espresso:espresso-core:2.2.1') {
+        exclude module: 'support-annotations'
+    }
+    androidTestCompile 'org.mockito:mockito-core:1.9.5'
+    androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
+    androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
+    testCompile 'junit:junit:4.12'
+}
+
+sourceCompatibility = JavaVersion.VERSION_1_7
+targetCompatibility = JavaVersion.VERSION_1_7
+setApiModuleDependencies(project, dependencies, gradle.ext.studioCompat.modules.v4.dependencies)
+
+android {
+    compileSdkVersion 4
+
+    defaultConfig {
+        minSdkVersion 4
+        // TODO: get target from branch
+        //targetSdkVersion 19
+
+        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+    }
+
+    sourceSets {
+        main.manifest.srcFile 'AndroidManifest.xml'
+        main.java.srcDirs = ['java']
+        main.aidl.srcDirs = ['java']
+
+        androidTest.setRoot('tests')
+        androidTest.java.srcDir 'tests/java'
+        androidTest.res.srcDir 'tests/res'
+        androidTest.manifest.srcFile 'tests/AndroidManifest.xml'
+    }
+
+    lintOptions {
+        // TODO: fix errors and reenable.
+        abortOnError false
+    }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_7
+        targetCompatibility JavaVersion.VERSION_1_7
+    }
+
+    testOptions {
+        unitTests.returnDefaultValues = true
+        compileSdkVersion project.ext.currentSdk
+    }
+}
+
+android.libraryVariants.all { variant ->
+    def name = variant.buildType.name
+
+    if (name.equals(com.android.builder.core.BuilderConstants.DEBUG)) {
+        return; // Skip debug builds.
+    }
+    def suffix = name.capitalize()
+
+    def jarTask = project.tasks.create(name: "jar${suffix}", type: Jar){
+        dependsOn variant.javaCompile
+        from variant.javaCompile.destinationDir
+        from 'LICENSE.txt'
+    }
+    def javadocTask = project.tasks.create(name: "javadoc${suffix}", type: Javadoc) {
+        source android.sourceSets.main.java
+        classpath = files(variant.javaCompile.classpath.files) + files(
+                "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar")
+    }
+
+    def javadocJarTask = project.tasks.create(name: "javadocJar${suffix}", type: Jar) {
+        classifier = 'javadoc'
+        from 'build/docs/javadoc'
+    }
+
+    def sourcesJarTask = project.tasks.create(name: "sourceJar${suffix}", type: Jar) {
+        classifier = 'sources'
+        from android.sourceSets.main.java.srcDirs
+        exclude('android/content/pm/**')
+        exclude('android/service/media/**')
+    }
+
+    project.ext.allSS.each { ss ->
+        javadocTask.source ss.java
+        sourcesJarTask.from ss.java.srcDirs
+    }
+
+    artifacts.add('archives', javadocJarTask);
+    artifacts.add('archives', sourcesJarTask);
+}
+
+uploadArchives {
+    repositories {
+        mavenDeployer {
+            repository(url: uri(rootProject.ext.supportRepoOut)) {
+            }
+
+            pom.project {
+                name 'Android Support Library compat'
+                description "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 4 or later."
+                url 'http://developer.android.com/tools/extras/support-library.html'
+                inceptionYear '2011'
+
+                licenses {
+                    license {
+                        name 'The Apache Software License, Version 2.0'
+                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+                        distribution 'repo'
+                    }
+                }
+
+                scm {
+                    url "http://source.android.com"
+                    connection "scm:git:https://android.googlesource.com/platform/frameworks/support"
+                }
+                developers {
+                    developer {
+                        name 'The Android Open Source Project'
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/v4/donut/android/support/v4/animation/AnimatorListenerCompat.java b/compat/donut/android/support/v4/animation/AnimatorListenerCompat.java
similarity index 100%
rename from v4/donut/android/support/v4/animation/AnimatorListenerCompat.java
rename to compat/donut/android/support/v4/animation/AnimatorListenerCompat.java
diff --git a/v4/donut/android/support/v4/animation/AnimatorProvider.java b/compat/donut/android/support/v4/animation/AnimatorProvider.java
similarity index 100%
rename from v4/donut/android/support/v4/animation/AnimatorProvider.java
rename to compat/donut/android/support/v4/animation/AnimatorProvider.java
diff --git a/v4/donut/android/support/v4/animation/AnimatorUpdateListenerCompat.java b/compat/donut/android/support/v4/animation/AnimatorUpdateListenerCompat.java
similarity index 100%
rename from v4/donut/android/support/v4/animation/AnimatorUpdateListenerCompat.java
rename to compat/donut/android/support/v4/animation/AnimatorUpdateListenerCompat.java
diff --git a/v4/donut/android/support/v4/animation/DonutAnimatorCompatProvider.java b/compat/donut/android/support/v4/animation/DonutAnimatorCompatProvider.java
similarity index 100%
rename from v4/donut/android/support/v4/animation/DonutAnimatorCompatProvider.java
rename to compat/donut/android/support/v4/animation/DonutAnimatorCompatProvider.java
diff --git a/v4/donut/android/support/v4/animation/ValueAnimatorCompat.java b/compat/donut/android/support/v4/animation/ValueAnimatorCompat.java
similarity index 100%
rename from v4/donut/android/support/v4/animation/ValueAnimatorCompat.java
rename to compat/donut/android/support/v4/animation/ValueAnimatorCompat.java
diff --git a/v4/donut/android/support/v4/app/BundleCompatDonut.java b/compat/donut/android/support/v4/app/BundleCompatDonut.java
similarity index 100%
rename from v4/donut/android/support/v4/app/BundleCompatDonut.java
rename to compat/donut/android/support/v4/app/BundleCompatDonut.java
diff --git a/v4/donut/android/support/v4/content/res/ConfigurationHelperDonut.java b/compat/donut/android/support/v4/content/res/ConfigurationHelperDonut.java
similarity index 100%
rename from v4/donut/android/support/v4/content/res/ConfigurationHelperDonut.java
rename to compat/donut/android/support/v4/content/res/ConfigurationHelperDonut.java
diff --git a/v4/donut/android/support/v4/graphics/drawable/DrawableCompatBase.java b/compat/donut/android/support/v4/graphics/drawable/DrawableCompatBase.java
similarity index 100%
rename from v4/donut/android/support/v4/graphics/drawable/DrawableCompatBase.java
rename to compat/donut/android/support/v4/graphics/drawable/DrawableCompatBase.java
diff --git a/v4/donut/android/support/v4/graphics/drawable/DrawableWrapper.java b/compat/donut/android/support/v4/graphics/drawable/DrawableWrapper.java
similarity index 100%
rename from v4/donut/android/support/v4/graphics/drawable/DrawableWrapper.java
rename to compat/donut/android/support/v4/graphics/drawable/DrawableWrapper.java
diff --git a/v4/donut/android/support/v4/graphics/drawable/DrawableWrapperDonut.java b/compat/donut/android/support/v4/graphics/drawable/DrawableWrapperDonut.java
similarity index 100%
rename from v4/donut/android/support/v4/graphics/drawable/DrawableWrapperDonut.java
rename to compat/donut/android/support/v4/graphics/drawable/DrawableWrapperDonut.java
diff --git a/v4/donut/android/support/v4/graphics/drawable/TintAwareDrawable.java b/compat/donut/android/support/v4/graphics/drawable/TintAwareDrawable.java
similarity index 100%
rename from v4/donut/android/support/v4/graphics/drawable/TintAwareDrawable.java
rename to compat/donut/android/support/v4/graphics/drawable/TintAwareDrawable.java
diff --git a/compat/donut/android/support/v4/os/BuildCompat.java b/compat/donut/android/support/v4/os/BuildCompat.java
new file mode 100644
index 0000000..513e153
--- /dev/null
+++ b/compat/donut/android/support/v4/os/BuildCompat.java
@@ -0,0 +1,40 @@
+/*
+ * 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.os;
+
+import android.os.Build.VERSION;
+
+/**
+ * BuildCompat contains additional platform version checking methods for
+ * testing compatibility with new features.
+ */
+public class BuildCompat {
+    private BuildCompat() {
+    }
+
+    /**
+     * Check if the device is running on the Android N release or newer.
+     * This method is suitable for use with preview SDKs and associated
+     * prerelease device builds.
+     *
+     * @return true if N APIs are available for use
+     */
+    public static boolean isAtLeastN() {
+        return "N".equals(VERSION.CODENAME);
+    }
+}
diff --git a/v4/donut/android/support/v4/view/LayoutInflaterCompatBase.java b/compat/donut/android/support/v4/view/LayoutInflaterCompatBase.java
similarity index 100%
rename from v4/donut/android/support/v4/view/LayoutInflaterCompatBase.java
rename to compat/donut/android/support/v4/view/LayoutInflaterCompatBase.java
diff --git a/v4/donut/android/support/v4/view/LayoutInflaterFactory.java b/compat/donut/android/support/v4/view/LayoutInflaterFactory.java
similarity index 100%
rename from v4/donut/android/support/v4/view/LayoutInflaterFactory.java
rename to compat/donut/android/support/v4/view/LayoutInflaterFactory.java
diff --git a/v4/donut/android/support/v4/view/OnApplyWindowInsetsListener.java b/compat/donut/android/support/v4/view/OnApplyWindowInsetsListener.java
similarity index 100%
rename from v4/donut/android/support/v4/view/OnApplyWindowInsetsListener.java
rename to compat/donut/android/support/v4/view/OnApplyWindowInsetsListener.java
diff --git a/v4/donut/android/support/v4/view/TintableBackgroundView.java b/compat/donut/android/support/v4/view/TintableBackgroundView.java
similarity index 100%
rename from v4/donut/android/support/v4/view/TintableBackgroundView.java
rename to compat/donut/android/support/v4/view/TintableBackgroundView.java
diff --git a/v4/donut/android/support/v4/view/ViewCompatBase.java b/compat/donut/android/support/v4/view/ViewCompatBase.java
similarity index 100%
rename from v4/donut/android/support/v4/view/ViewCompatBase.java
rename to compat/donut/android/support/v4/view/ViewCompatBase.java
diff --git a/v4/donut/android/support/v4/view/WindowInsetsCompat.java b/compat/donut/android/support/v4/view/WindowInsetsCompat.java
similarity index 100%
rename from v4/donut/android/support/v4/view/WindowInsetsCompat.java
rename to compat/donut/android/support/v4/view/WindowInsetsCompat.java
diff --git a/v4/donut/android/support/v4/view/animation/PathInterpolatorCompatBase.java b/compat/donut/android/support/v4/view/animation/PathInterpolatorCompatBase.java
similarity index 100%
rename from v4/donut/android/support/v4/view/animation/PathInterpolatorCompatBase.java
rename to compat/donut/android/support/v4/view/animation/PathInterpolatorCompatBase.java
diff --git a/v4/donut/android/support/v4/view/animation/PathInterpolatorDonut.java b/compat/donut/android/support/v4/view/animation/PathInterpolatorDonut.java
similarity index 100%
rename from v4/donut/android/support/v4/view/animation/PathInterpolatorDonut.java
rename to compat/donut/android/support/v4/view/animation/PathInterpolatorDonut.java
diff --git a/v4/donut/android/support/v4/widget/CompoundButtonCompatDonut.java b/compat/donut/android/support/v4/widget/CompoundButtonCompatDonut.java
similarity index 100%
rename from v4/donut/android/support/v4/widget/CompoundButtonCompatDonut.java
rename to compat/donut/android/support/v4/widget/CompoundButtonCompatDonut.java
diff --git a/v4/donut/android/support/v4/widget/ListViewCompatDonut.java b/compat/donut/android/support/v4/widget/ListViewCompatDonut.java
similarity index 100%
rename from v4/donut/android/support/v4/widget/ListViewCompatDonut.java
rename to compat/donut/android/support/v4/widget/ListViewCompatDonut.java
diff --git a/v4/donut/android/support/v4/widget/TintableCompoundButton.java b/compat/donut/android/support/v4/widget/TintableCompoundButton.java
similarity index 100%
rename from v4/donut/android/support/v4/widget/TintableCompoundButton.java
rename to compat/donut/android/support/v4/widget/TintableCompoundButton.java
diff --git a/v4/eclair-mr1/android/support/v4/view/ViewCompatEclairMr1.java b/compat/eclair-mr1/android/support/v4/view/ViewCompatEclairMr1.java
similarity index 100%
rename from v4/eclair-mr1/android/support/v4/view/ViewCompatEclairMr1.java
rename to compat/eclair-mr1/android/support/v4/view/ViewCompatEclairMr1.java
diff --git a/v4/eclair/android/support/v4/app/ActivityCompatEclair.java b/compat/eclair/android/support/v4/app/ActivityCompatEclair.java
similarity index 100%
rename from v4/eclair/android/support/v4/app/ActivityCompatEclair.java
rename to compat/eclair/android/support/v4/app/ActivityCompatEclair.java
diff --git a/v4/eclair/android/support/v4/graphics/drawable/DrawableCompatEclair.java b/compat/eclair/android/support/v4/graphics/drawable/DrawableCompatEclair.java
similarity index 100%
rename from v4/eclair/android/support/v4/graphics/drawable/DrawableCompatEclair.java
rename to compat/eclair/android/support/v4/graphics/drawable/DrawableCompatEclair.java
diff --git a/v4/eclair/android/support/v4/graphics/drawable/DrawableWrapperEclair.java b/compat/eclair/android/support/v4/graphics/drawable/DrawableWrapperEclair.java
similarity index 100%
rename from v4/eclair/android/support/v4/graphics/drawable/DrawableWrapperEclair.java
rename to compat/eclair/android/support/v4/graphics/drawable/DrawableWrapperEclair.java
diff --git a/v4/eclair/android/support/v4/view/KeyEventCompatEclair.java b/compat/eclair/android/support/v4/view/KeyEventCompatEclair.java
similarity index 100%
rename from v4/eclair/android/support/v4/view/KeyEventCompatEclair.java
rename to compat/eclair/android/support/v4/view/KeyEventCompatEclair.java
diff --git a/v4/eclair/android/support/v4/view/MotionEventCompatEclair.java b/compat/eclair/android/support/v4/view/MotionEventCompatEclair.java
similarity index 100%
rename from v4/eclair/android/support/v4/view/MotionEventCompatEclair.java
rename to compat/eclair/android/support/v4/view/MotionEventCompatEclair.java
diff --git a/v4/froyo/android/support/v4/content/ContextCompatFroyo.java b/compat/froyo/android/support/v4/content/ContextCompatFroyo.java
similarity index 100%
rename from v4/froyo/android/support/v4/content/ContextCompatFroyo.java
rename to compat/froyo/android/support/v4/content/ContextCompatFroyo.java
diff --git a/v4/froyo/android/support/v4/view/ViewConfigurationCompatFroyo.java b/compat/froyo/android/support/v4/view/ViewConfigurationCompatFroyo.java
similarity index 100%
rename from v4/froyo/android/support/v4/view/ViewConfigurationCompatFroyo.java
rename to compat/froyo/android/support/v4/view/ViewConfigurationCompatFroyo.java
diff --git a/v4/gingerbread/android/support/v4/content/EditorCompatGingerbread.java b/compat/gingerbread/android/support/v4/content/EditorCompatGingerbread.java
similarity index 100%
rename from v4/gingerbread/android/support/v4/content/EditorCompatGingerbread.java
rename to compat/gingerbread/android/support/v4/content/EditorCompatGingerbread.java
diff --git a/v4/gingerbread/android/support/v4/net/ConnectivityManagerCompatGingerbread.java b/compat/gingerbread/android/support/v4/net/ConnectivityManagerCompatGingerbread.java
similarity index 100%
rename from v4/gingerbread/android/support/v4/net/ConnectivityManagerCompatGingerbread.java
rename to compat/gingerbread/android/support/v4/net/ConnectivityManagerCompatGingerbread.java
diff --git a/v4/gingerbread/android/support/v4/view/MotionEventCompatGingerbread.java b/compat/gingerbread/android/support/v4/view/MotionEventCompatGingerbread.java
similarity index 100%
rename from v4/gingerbread/android/support/v4/view/MotionEventCompatGingerbread.java
rename to compat/gingerbread/android/support/v4/view/MotionEventCompatGingerbread.java
diff --git a/v4/gingerbread/android/support/v4/view/ViewCompatGingerbread.java b/compat/gingerbread/android/support/v4/view/ViewCompatGingerbread.java
similarity index 100%
rename from v4/gingerbread/android/support/v4/view/ViewCompatGingerbread.java
rename to compat/gingerbread/android/support/v4/view/ViewCompatGingerbread.java
diff --git a/v4/gingerbread/android/support/v4/widget/PopupWindowCompatGingerbread.java b/compat/gingerbread/android/support/v4/widget/PopupWindowCompatGingerbread.java
similarity index 100%
rename from v4/gingerbread/android/support/v4/widget/PopupWindowCompatGingerbread.java
rename to compat/gingerbread/android/support/v4/widget/PopupWindowCompatGingerbread.java
diff --git a/v4/gingerbread/android/support/v4/widget/ScrollerCompatGingerbread.java b/compat/gingerbread/android/support/v4/widget/ScrollerCompatGingerbread.java
similarity index 100%
rename from v4/gingerbread/android/support/v4/widget/ScrollerCompatGingerbread.java
rename to compat/gingerbread/android/support/v4/widget/ScrollerCompatGingerbread.java
diff --git a/v4/honeycomb/android/support/v4/app/ActivityCompatHoneycomb.java b/compat/honeycomb/android/support/v4/app/ActivityCompatHoneycomb.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/app/ActivityCompatHoneycomb.java
rename to compat/honeycomb/android/support/v4/app/ActivityCompatHoneycomb.java
diff --git a/v4/honeycomb/android/support/v4/content/ContextCompatHoneycomb.java b/compat/honeycomb/android/support/v4/content/ContextCompatHoneycomb.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/content/ContextCompatHoneycomb.java
rename to compat/honeycomb/android/support/v4/content/ContextCompatHoneycomb.java
diff --git a/v4/honeycomb/android/support/v4/content/ExecutorCompatHoneycomb.java b/compat/honeycomb/android/support/v4/content/ExecutorCompatHoneycomb.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/content/ExecutorCompatHoneycomb.java
rename to compat/honeycomb/android/support/v4/content/ExecutorCompatHoneycomb.java
diff --git a/v4/honeycomb/android/support/v4/content/IntentCompatHoneycomb.java b/compat/honeycomb/android/support/v4/content/IntentCompatHoneycomb.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/content/IntentCompatHoneycomb.java
rename to compat/honeycomb/android/support/v4/content/IntentCompatHoneycomb.java
diff --git a/v4/honeycomb/android/support/v4/graphics/drawable/DrawableCompatHoneycomb.java b/compat/honeycomb/android/support/v4/graphics/drawable/DrawableCompatHoneycomb.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/graphics/drawable/DrawableCompatHoneycomb.java
rename to compat/honeycomb/android/support/v4/graphics/drawable/DrawableCompatHoneycomb.java
diff --git a/v4/honeycomb/android/support/v4/graphics/drawable/DrawableWrapperHoneycomb.java b/compat/honeycomb/android/support/v4/graphics/drawable/DrawableWrapperHoneycomb.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/graphics/drawable/DrawableWrapperHoneycomb.java
rename to compat/honeycomb/android/support/v4/graphics/drawable/DrawableWrapperHoneycomb.java
diff --git a/v4/honeycomb/android/support/v4/os/AsyncTaskCompatHoneycomb.java b/compat/honeycomb/android/support/v4/os/AsyncTaskCompatHoneycomb.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/os/AsyncTaskCompatHoneycomb.java
rename to compat/honeycomb/android/support/v4/os/AsyncTaskCompatHoneycomb.java
diff --git a/v4/honeycomb/android/support/v4/view/KeyEventCompatHoneycomb.java b/compat/honeycomb/android/support/v4/view/KeyEventCompatHoneycomb.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/view/KeyEventCompatHoneycomb.java
rename to compat/honeycomb/android/support/v4/view/KeyEventCompatHoneycomb.java
diff --git a/v4/honeycomb/android/support/v4/view/LayoutInflaterCompatHC.java b/compat/honeycomb/android/support/v4/view/LayoutInflaterCompatHC.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/view/LayoutInflaterCompatHC.java
rename to compat/honeycomb/android/support/v4/view/LayoutInflaterCompatHC.java
diff --git a/v4/honeycomb/android/support/v4/view/MenuItemCompatHoneycomb.java b/compat/honeycomb/android/support/v4/view/MenuItemCompatHoneycomb.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/view/MenuItemCompatHoneycomb.java
rename to compat/honeycomb/android/support/v4/view/MenuItemCompatHoneycomb.java
diff --git a/v4/honeycomb/android/support/v4/view/VelocityTrackerCompatHoneycomb.java b/compat/honeycomb/android/support/v4/view/VelocityTrackerCompatHoneycomb.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/view/VelocityTrackerCompatHoneycomb.java
rename to compat/honeycomb/android/support/v4/view/VelocityTrackerCompatHoneycomb.java
diff --git a/v4/honeycomb/android/support/v4/view/ViewCompatHC.java b/compat/honeycomb/android/support/v4/view/ViewCompatHC.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/view/ViewCompatHC.java
rename to compat/honeycomb/android/support/v4/view/ViewCompatHC.java
diff --git a/v4/honeycomb/android/support/v4/view/ViewGroupCompatHC.java b/compat/honeycomb/android/support/v4/view/ViewGroupCompatHC.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/view/ViewGroupCompatHC.java
rename to compat/honeycomb/android/support/v4/view/ViewGroupCompatHC.java
diff --git a/v4/honeycomb/android/support/v4/widget/SearchViewCompatHoneycomb.java b/compat/honeycomb/android/support/v4/widget/SearchViewCompatHoneycomb.java
similarity index 100%
rename from v4/honeycomb/android/support/v4/widget/SearchViewCompatHoneycomb.java
rename to compat/honeycomb/android/support/v4/widget/SearchViewCompatHoneycomb.java
diff --git a/v4/honeycomb_mr1/android/support/v4/animation/HoneycombMr1AnimatorCompatProvider.java b/compat/honeycomb_mr1/android/support/v4/animation/HoneycombMr1AnimatorCompatProvider.java
similarity index 100%
rename from v4/honeycomb_mr1/android/support/v4/animation/HoneycombMr1AnimatorCompatProvider.java
rename to compat/honeycomb_mr1/android/support/v4/animation/HoneycombMr1AnimatorCompatProvider.java
diff --git a/v4/honeycomb_mr1/android/support/v4/graphics/BitmapCompatHoneycombMr1.java b/compat/honeycomb_mr1/android/support/v4/graphics/BitmapCompatHoneycombMr1.java
similarity index 100%
rename from v4/honeycomb_mr1/android/support/v4/graphics/BitmapCompatHoneycombMr1.java
rename to compat/honeycomb_mr1/android/support/v4/graphics/BitmapCompatHoneycombMr1.java
diff --git a/v4/honeycomb_mr1/android/support/v4/view/MotionEventCompatHoneycombMr1.java b/compat/honeycomb_mr1/android/support/v4/view/MotionEventCompatHoneycombMr1.java
similarity index 100%
rename from v4/honeycomb_mr1/android/support/v4/view/MotionEventCompatHoneycombMr1.java
rename to compat/honeycomb_mr1/android/support/v4/view/MotionEventCompatHoneycombMr1.java
diff --git a/v4/honeycomb_mr2/android/support/v4/content/res/ConfigurationHelperHoneycombMr2.java b/compat/honeycomb_mr2/android/support/v4/content/res/ConfigurationHelperHoneycombMr2.java
similarity index 100%
rename from v4/honeycomb_mr2/android/support/v4/content/res/ConfigurationHelperHoneycombMr2.java
rename to compat/honeycomb_mr2/android/support/v4/content/res/ConfigurationHelperHoneycombMr2.java
diff --git a/v4/honeycomb_mr2/android/support/v4/net/ConnectivityManagerCompatHoneycombMR2.java b/compat/honeycomb_mr2/android/support/v4/net/ConnectivityManagerCompatHoneycombMR2.java
similarity index 100%
rename from v4/honeycomb_mr2/android/support/v4/net/ConnectivityManagerCompatHoneycombMR2.java
rename to compat/honeycomb_mr2/android/support/v4/net/ConnectivityManagerCompatHoneycombMR2.java
diff --git a/v4/honeycomb_mr2/android/support/v4/os/ParcelableCompatCreatorCallbacks.java b/compat/honeycomb_mr2/android/support/v4/os/ParcelableCompatCreatorCallbacks.java
similarity index 100%
rename from v4/honeycomb_mr2/android/support/v4/os/ParcelableCompatCreatorCallbacks.java
rename to compat/honeycomb_mr2/android/support/v4/os/ParcelableCompatCreatorCallbacks.java
diff --git a/v4/honeycomb_mr2/android/support/v4/os/ParcelableCompatHoneycombMR2.java b/compat/honeycomb_mr2/android/support/v4/os/ParcelableCompatHoneycombMR2.java
similarity index 100%
rename from v4/honeycomb_mr2/android/support/v4/os/ParcelableCompatHoneycombMR2.java
rename to compat/honeycomb_mr2/android/support/v4/os/ParcelableCompatHoneycombMR2.java
diff --git a/v4/ics-mr1/android/support/v4/content/IntentCompatIcsMr1.java b/compat/ics-mr1/android/support/v4/content/IntentCompatIcsMr1.java
similarity index 100%
rename from v4/ics-mr1/android/support/v4/content/IntentCompatIcsMr1.java
rename to compat/ics-mr1/android/support/v4/content/IntentCompatIcsMr1.java
diff --git a/v4/ics-mr1/android/support/v4/content/res/ResourcesCompatIcsMr1.java b/compat/ics-mr1/android/support/v4/content/res/ResourcesCompatIcsMr1.java
similarity index 100%
rename from v4/ics-mr1/android/support/v4/content/res/ResourcesCompatIcsMr1.java
rename to compat/ics-mr1/android/support/v4/content/res/ResourcesCompatIcsMr1.java
diff --git a/v4/ics-mr1/android/support/v4/view/ViewCompatICSMr1.java b/compat/ics-mr1/android/support/v4/view/ViewCompatICSMr1.java
similarity index 100%
rename from v4/ics-mr1/android/support/v4/view/ViewCompatICSMr1.java
rename to compat/ics-mr1/android/support/v4/view/ViewCompatICSMr1.java
diff --git a/v4/ics-mr1/android/support/v4/view/accessibility/AccessibilityRecordCompatIcsMr1.java b/compat/ics-mr1/android/support/v4/view/accessibility/AccessibilityRecordCompatIcsMr1.java
similarity index 100%
rename from v4/ics-mr1/android/support/v4/view/accessibility/AccessibilityRecordCompatIcsMr1.java
rename to compat/ics-mr1/android/support/v4/view/accessibility/AccessibilityRecordCompatIcsMr1.java
diff --git a/v4/ics/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java b/compat/ics/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java
rename to compat/ics/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java
diff --git a/v4/ics/android/support/v4/app/ShareCompatICS.java b/compat/ics/android/support/v4/app/ShareCompatICS.java
similarity index 100%
rename from v4/ics/android/support/v4/app/ShareCompatICS.java
rename to compat/ics/android/support/v4/app/ShareCompatICS.java
diff --git a/v4/ics/android/support/v4/net/DatagramSocketWrapper.java b/compat/ics/android/support/v4/net/DatagramSocketWrapper.java
similarity index 100%
rename from v4/ics/android/support/v4/net/DatagramSocketWrapper.java
rename to compat/ics/android/support/v4/net/DatagramSocketWrapper.java
diff --git a/v4/ics/android/support/v4/net/TrafficStatsCompatIcs.java b/compat/ics/android/support/v4/net/TrafficStatsCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/net/TrafficStatsCompatIcs.java
rename to compat/ics/android/support/v4/net/TrafficStatsCompatIcs.java
diff --git a/v4/ics/android/support/v4/text/ICUCompatIcs.java b/compat/ics/android/support/v4/text/ICUCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/text/ICUCompatIcs.java
rename to compat/ics/android/support/v4/text/ICUCompatIcs.java
diff --git a/v4/ics/android/support/v4/view/AccessibilityDelegateCompatIcs.java b/compat/ics/android/support/v4/view/AccessibilityDelegateCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/view/AccessibilityDelegateCompatIcs.java
rename to compat/ics/android/support/v4/view/AccessibilityDelegateCompatIcs.java
diff --git a/v4/ics/android/support/v4/view/MenuItemCompatIcs.java b/compat/ics/android/support/v4/view/MenuItemCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/view/MenuItemCompatIcs.java
rename to compat/ics/android/support/v4/view/MenuItemCompatIcs.java
diff --git a/v4/ics/android/support/v4/view/MotionEventCompatICS.java b/compat/ics/android/support/v4/view/MotionEventCompatICS.java
similarity index 100%
rename from v4/ics/android/support/v4/view/MotionEventCompatICS.java
rename to compat/ics/android/support/v4/view/MotionEventCompatICS.java
diff --git a/v4/ics/android/support/v4/view/ViewCompatICS.java b/compat/ics/android/support/v4/view/ViewCompatICS.java
similarity index 100%
rename from v4/ics/android/support/v4/view/ViewCompatICS.java
rename to compat/ics/android/support/v4/view/ViewCompatICS.java
diff --git a/v4/ics/android/support/v4/view/ViewConfigurationCompatICS.java b/compat/ics/android/support/v4/view/ViewConfigurationCompatICS.java
similarity index 100%
rename from v4/ics/android/support/v4/view/ViewConfigurationCompatICS.java
rename to compat/ics/android/support/v4/view/ViewConfigurationCompatICS.java
diff --git a/v4/ics/android/support/v4/view/ViewGroupCompatIcs.java b/compat/ics/android/support/v4/view/ViewGroupCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/view/ViewGroupCompatIcs.java
rename to compat/ics/android/support/v4/view/ViewGroupCompatIcs.java
diff --git a/v4/ics/android/support/v4/view/ViewParentCompatICS.java b/compat/ics/android/support/v4/view/ViewParentCompatICS.java
similarity index 100%
rename from v4/ics/android/support/v4/view/ViewParentCompatICS.java
rename to compat/ics/android/support/v4/view/ViewParentCompatICS.java
diff --git a/v4/ics/android/support/v4/view/ViewPropertyAnimatorCompatICS.java b/compat/ics/android/support/v4/view/ViewPropertyAnimatorCompatICS.java
similarity index 100%
rename from v4/ics/android/support/v4/view/ViewPropertyAnimatorCompatICS.java
rename to compat/ics/android/support/v4/view/ViewPropertyAnimatorCompatICS.java
diff --git a/v4/ics/android/support/v4/view/ViewPropertyAnimatorListener.java b/compat/ics/android/support/v4/view/ViewPropertyAnimatorListener.java
similarity index 100%
rename from v4/ics/android/support/v4/view/ViewPropertyAnimatorListener.java
rename to compat/ics/android/support/v4/view/ViewPropertyAnimatorListener.java
diff --git a/v4/java/android/support/v4/view/ViewPropertyAnimatorListenerAdapter.java b/compat/ics/android/support/v4/view/ViewPropertyAnimatorListenerAdapter.java
similarity index 100%
rename from v4/java/android/support/v4/view/ViewPropertyAnimatorListenerAdapter.java
rename to compat/ics/android/support/v4/view/ViewPropertyAnimatorListenerAdapter.java
diff --git a/v4/ics/android/support/v4/view/ViewPropertyAnimatorUpdateListener.java b/compat/ics/android/support/v4/view/ViewPropertyAnimatorUpdateListener.java
similarity index 100%
rename from v4/ics/android/support/v4/view/ViewPropertyAnimatorUpdateListener.java
rename to compat/ics/android/support/v4/view/ViewPropertyAnimatorUpdateListener.java
diff --git a/v4/ics/android/support/v4/view/accessibility/AccessibilityEventCompatIcs.java b/compat/ics/android/support/v4/view/accessibility/AccessibilityEventCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/view/accessibility/AccessibilityEventCompatIcs.java
rename to compat/ics/android/support/v4/view/accessibility/AccessibilityEventCompatIcs.java
diff --git a/v4/ics/android/support/v4/view/accessibility/AccessibilityManagerCompatIcs.java b/compat/ics/android/support/v4/view/accessibility/AccessibilityManagerCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/view/accessibility/AccessibilityManagerCompatIcs.java
rename to compat/ics/android/support/v4/view/accessibility/AccessibilityManagerCompatIcs.java
diff --git a/v4/ics/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatIcs.java b/compat/ics/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatIcs.java
rename to compat/ics/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatIcs.java
diff --git a/v4/ics/android/support/v4/view/accessibility/AccessibilityRecordCompatIcs.java b/compat/ics/android/support/v4/view/accessibility/AccessibilityRecordCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/view/accessibility/AccessibilityRecordCompatIcs.java
rename to compat/ics/android/support/v4/view/accessibility/AccessibilityRecordCompatIcs.java
diff --git a/v4/ics/android/support/v4/widget/EdgeEffectCompatIcs.java b/compat/ics/android/support/v4/widget/EdgeEffectCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/widget/EdgeEffectCompatIcs.java
rename to compat/ics/android/support/v4/widget/EdgeEffectCompatIcs.java
diff --git a/v4/ics/android/support/v4/widget/ScrollerCompatIcs.java b/compat/ics/android/support/v4/widget/ScrollerCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/widget/ScrollerCompatIcs.java
rename to compat/ics/android/support/v4/widget/ScrollerCompatIcs.java
diff --git a/v4/ics/android/support/v4/widget/SearchViewCompatIcs.java b/compat/ics/android/support/v4/widget/SearchViewCompatIcs.java
similarity index 100%
rename from v4/ics/android/support/v4/widget/SearchViewCompatIcs.java
rename to compat/ics/android/support/v4/widget/SearchViewCompatIcs.java
diff --git a/v4/java/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java b/compat/java/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java
similarity index 100%
rename from v4/java/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java
rename to compat/java/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java
diff --git a/v4/java/android/support/v4/accessibilityservice/package.html b/compat/java/android/support/v4/accessibilityservice/package.html
similarity index 100%
rename from v4/java/android/support/v4/accessibilityservice/package.html
rename to compat/java/android/support/v4/accessibilityservice/package.html
diff --git a/v4/java/android/support/v4/animation/AnimatorCompatHelper.java b/compat/java/android/support/v4/animation/AnimatorCompatHelper.java
similarity index 100%
rename from v4/java/android/support/v4/animation/AnimatorCompatHelper.java
rename to compat/java/android/support/v4/animation/AnimatorCompatHelper.java
diff --git a/v4/java/android/support/v4/app/ActivityCompat.java b/compat/java/android/support/v4/app/ActivityCompat.java
similarity index 100%
rename from v4/java/android/support/v4/app/ActivityCompat.java
rename to compat/java/android/support/v4/app/ActivityCompat.java
diff --git a/v4/java/android/support/v4/app/ActivityManagerCompat.java b/compat/java/android/support/v4/app/ActivityManagerCompat.java
similarity index 100%
rename from v4/java/android/support/v4/app/ActivityManagerCompat.java
rename to compat/java/android/support/v4/app/ActivityManagerCompat.java
diff --git a/v4/java/android/support/v4/app/ActivityOptionsCompat.java b/compat/java/android/support/v4/app/ActivityOptionsCompat.java
similarity index 100%
rename from v4/java/android/support/v4/app/ActivityOptionsCompat.java
rename to compat/java/android/support/v4/app/ActivityOptionsCompat.java
diff --git a/v4/java/android/support/v4/app/AppOpsManagerCompat.java b/compat/java/android/support/v4/app/AppOpsManagerCompat.java
similarity index 100%
rename from v4/java/android/support/v4/app/AppOpsManagerCompat.java
rename to compat/java/android/support/v4/app/AppOpsManagerCompat.java
diff --git a/v4/java/android/support/v4/app/BundleCompat.java b/compat/java/android/support/v4/app/BundleCompat.java
similarity index 100%
rename from v4/java/android/support/v4/app/BundleCompat.java
rename to compat/java/android/support/v4/app/BundleCompat.java
diff --git a/v4/java/android/support/v4/app/ServiceCompat.java b/compat/java/android/support/v4/app/ServiceCompat.java
similarity index 100%
rename from v4/java/android/support/v4/app/ServiceCompat.java
rename to compat/java/android/support/v4/app/ServiceCompat.java
diff --git a/v4/java/android/support/v4/app/ShareCompat.java b/compat/java/android/support/v4/app/ShareCompat.java
similarity index 100%
rename from v4/java/android/support/v4/app/ShareCompat.java
rename to compat/java/android/support/v4/app/ShareCompat.java
diff --git a/v4/java/android/support/v4/app/SharedElementCallback.java b/compat/java/android/support/v4/app/SharedElementCallback.java
similarity index 100%
rename from v4/java/android/support/v4/app/SharedElementCallback.java
rename to compat/java/android/support/v4/app/SharedElementCallback.java
diff --git a/compat/java/android/support/v4/app/package.html b/compat/java/android/support/v4/app/package.html
new file mode 100755
index 0000000..02d1b79
--- /dev/null
+++ b/compat/java/android/support/v4/app/package.html
@@ -0,0 +1,8 @@
+<body>
+
+Support android.app classes to assist with development of applications for
+android API level 4 or later.  The main features here are backwards-compatible
+versions of {@link android.support.v4.app.FragmentManager} and
+{@link android.support.v4.app.LoaderManager}.
+
+</body>
diff --git a/v4/java/android/support/v4/content/ContentResolverCompat.java b/compat/java/android/support/v4/content/ContentResolverCompat.java
similarity index 100%
rename from v4/java/android/support/v4/content/ContentResolverCompat.java
rename to compat/java/android/support/v4/content/ContentResolverCompat.java
diff --git a/v4/java/android/support/v4/content/ContextCompat.java b/compat/java/android/support/v4/content/ContextCompat.java
similarity index 100%
rename from v4/java/android/support/v4/content/ContextCompat.java
rename to compat/java/android/support/v4/content/ContextCompat.java
diff --git a/v4/java/android/support/v4/content/IntentCompat.java b/compat/java/android/support/v4/content/IntentCompat.java
similarity index 100%
rename from v4/java/android/support/v4/content/IntentCompat.java
rename to compat/java/android/support/v4/content/IntentCompat.java
diff --git a/v4/java/android/support/v4/content/ModernAsyncTask.java b/compat/java/android/support/v4/content/ModernAsyncTask.java
similarity index 100%
rename from v4/java/android/support/v4/content/ModernAsyncTask.java
rename to compat/java/android/support/v4/content/ModernAsyncTask.java
diff --git a/v4/java/android/support/v4/content/ParallelExecutorCompat.java b/compat/java/android/support/v4/content/ParallelExecutorCompat.java
similarity index 100%
rename from v4/java/android/support/v4/content/ParallelExecutorCompat.java
rename to compat/java/android/support/v4/content/ParallelExecutorCompat.java
diff --git a/v4/java/android/support/v4/content/SharedPreferencesCompat.java b/compat/java/android/support/v4/content/SharedPreferencesCompat.java
similarity index 100%
rename from v4/java/android/support/v4/content/SharedPreferencesCompat.java
rename to compat/java/android/support/v4/content/SharedPreferencesCompat.java
diff --git a/compat/java/android/support/v4/content/package.html b/compat/java/android/support/v4/content/package.html
new file mode 100755
index 0000000..33bf4b5
--- /dev/null
+++ b/compat/java/android/support/v4/content/package.html
@@ -0,0 +1,10 @@
+<body>
+
+Support android.content classes to assist with development of applications for
+android API level 4 or later.  The main features here are
+{@link android.support.v4.content.Loader} and related classes and
+{@link android.support.v4.content.LocalBroadcastManager} to
+provide a cleaner implementation of broadcasts that don't need to go outside
+of an app.
+
+</body>
diff --git a/v4/java/android/support/v4/content/pm/ActivityInfoCompat.java b/compat/java/android/support/v4/content/pm/ActivityInfoCompat.java
similarity index 100%
rename from v4/java/android/support/v4/content/pm/ActivityInfoCompat.java
rename to compat/java/android/support/v4/content/pm/ActivityInfoCompat.java
diff --git a/v4/java/android/support/v4/content/pm/package.html b/compat/java/android/support/v4/content/pm/package.html
similarity index 100%
rename from v4/java/android/support/v4/content/pm/package.html
rename to compat/java/android/support/v4/content/pm/package.html
diff --git a/v4/java/android/support/v4/content/res/ConfigurationHelper.java b/compat/java/android/support/v4/content/res/ConfigurationHelper.java
similarity index 100%
rename from v4/java/android/support/v4/content/res/ConfigurationHelper.java
rename to compat/java/android/support/v4/content/res/ConfigurationHelper.java
diff --git a/v4/java/android/support/v4/content/res/ResourcesCompat.java b/compat/java/android/support/v4/content/res/ResourcesCompat.java
similarity index 100%
rename from v4/java/android/support/v4/content/res/ResourcesCompat.java
rename to compat/java/android/support/v4/content/res/ResourcesCompat.java
diff --git a/v4/java/android/support/v4/database/DatabaseUtilsCompat.java b/compat/java/android/support/v4/database/DatabaseUtilsCompat.java
similarity index 100%
rename from v4/java/android/support/v4/database/DatabaseUtilsCompat.java
rename to compat/java/android/support/v4/database/DatabaseUtilsCompat.java
diff --git a/v4/java/android/support/v4/database/package.html b/compat/java/android/support/v4/database/package.html
similarity index 100%
rename from v4/java/android/support/v4/database/package.html
rename to compat/java/android/support/v4/database/package.html
diff --git a/v4/java/android/support/v4/graphics/BitmapCompat.java b/compat/java/android/support/v4/graphics/BitmapCompat.java
similarity index 100%
rename from v4/java/android/support/v4/graphics/BitmapCompat.java
rename to compat/java/android/support/v4/graphics/BitmapCompat.java
diff --git a/v4/java/android/support/v4/graphics/drawable/DrawableCompat.java b/compat/java/android/support/v4/graphics/drawable/DrawableCompat.java
similarity index 100%
rename from v4/java/android/support/v4/graphics/drawable/DrawableCompat.java
rename to compat/java/android/support/v4/graphics/drawable/DrawableCompat.java
diff --git a/v4/java/android/support/v4/hardware/display/DisplayManagerCompat.java b/compat/java/android/support/v4/hardware/display/DisplayManagerCompat.java
similarity index 100%
rename from v4/java/android/support/v4/hardware/display/DisplayManagerCompat.java
rename to compat/java/android/support/v4/hardware/display/DisplayManagerCompat.java
diff --git a/v4/java/android/support/v4/hardware/fingerprint/FingerprintManagerCompat.java b/compat/java/android/support/v4/hardware/fingerprint/FingerprintManagerCompat.java
similarity index 100%
rename from v4/java/android/support/v4/hardware/fingerprint/FingerprintManagerCompat.java
rename to compat/java/android/support/v4/hardware/fingerprint/FingerprintManagerCompat.java
diff --git a/v4/java/android/support/v4/internal/view/SupportMenu.java b/compat/java/android/support/v4/internal/view/SupportMenu.java
similarity index 100%
rename from v4/java/android/support/v4/internal/view/SupportMenu.java
rename to compat/java/android/support/v4/internal/view/SupportMenu.java
diff --git a/v4/java/android/support/v4/internal/view/SupportMenuItem.java b/compat/java/android/support/v4/internal/view/SupportMenuItem.java
similarity index 100%
rename from v4/java/android/support/v4/internal/view/SupportMenuItem.java
rename to compat/java/android/support/v4/internal/view/SupportMenuItem.java
diff --git a/v4/java/android/support/v4/internal/view/SupportSubMenu.java b/compat/java/android/support/v4/internal/view/SupportSubMenu.java
similarity index 100%
rename from v4/java/android/support/v4/internal/view/SupportSubMenu.java
rename to compat/java/android/support/v4/internal/view/SupportSubMenu.java
diff --git a/v4/java/android/support/v4/net/ConnectivityManagerCompat.java b/compat/java/android/support/v4/net/ConnectivityManagerCompat.java
similarity index 100%
rename from v4/java/android/support/v4/net/ConnectivityManagerCompat.java
rename to compat/java/android/support/v4/net/ConnectivityManagerCompat.java
diff --git a/v4/java/android/support/v4/net/TrafficStatsCompat.java b/compat/java/android/support/v4/net/TrafficStatsCompat.java
similarity index 100%
rename from v4/java/android/support/v4/net/TrafficStatsCompat.java
rename to compat/java/android/support/v4/net/TrafficStatsCompat.java
diff --git a/v4/java/android/support/v4/os/AsyncTaskCompat.java b/compat/java/android/support/v4/os/AsyncTaskCompat.java
similarity index 100%
rename from v4/java/android/support/v4/os/AsyncTaskCompat.java
rename to compat/java/android/support/v4/os/AsyncTaskCompat.java
diff --git a/v4/java/android/support/v4/os/CancellationSignal.java b/compat/java/android/support/v4/os/CancellationSignal.java
similarity index 100%
rename from v4/java/android/support/v4/os/CancellationSignal.java
rename to compat/java/android/support/v4/os/CancellationSignal.java
diff --git a/v4/java/android/support/v4/os/EnvironmentCompat.java b/compat/java/android/support/v4/os/EnvironmentCompat.java
similarity index 100%
rename from v4/java/android/support/v4/os/EnvironmentCompat.java
rename to compat/java/android/support/v4/os/EnvironmentCompat.java
diff --git a/v4/java/android/support/v4/os/OperationCanceledException.java b/compat/java/android/support/v4/os/OperationCanceledException.java
similarity index 100%
rename from v4/java/android/support/v4/os/OperationCanceledException.java
rename to compat/java/android/support/v4/os/OperationCanceledException.java
diff --git a/v4/java/android/support/v4/os/ParcelableCompat.java b/compat/java/android/support/v4/os/ParcelableCompat.java
similarity index 100%
rename from v4/java/android/support/v4/os/ParcelableCompat.java
rename to compat/java/android/support/v4/os/ParcelableCompat.java
diff --git a/v4/java/android/support/v4/os/TraceCompat.java b/compat/java/android/support/v4/os/TraceCompat.java
similarity index 100%
rename from v4/java/android/support/v4/os/TraceCompat.java
rename to compat/java/android/support/v4/os/TraceCompat.java
diff --git a/v4/java/android/support/v4/os/UserManagerCompat.java b/compat/java/android/support/v4/os/UserManagerCompat.java
similarity index 100%
rename from v4/java/android/support/v4/os/UserManagerCompat.java
rename to compat/java/android/support/v4/os/UserManagerCompat.java
diff --git a/compat/java/android/support/v4/os/package.html b/compat/java/android/support/v4/os/package.html
new file mode 100755
index 0000000..929c967
--- /dev/null
+++ b/compat/java/android/support/v4/os/package.html
@@ -0,0 +1,6 @@
+<body>
+
+Support android.os classes to assist with development of applications for
+android API level 4 or later.
+
+</body>
diff --git a/v4/java/android/support/v4/text/ICUCompat.java b/compat/java/android/support/v4/text/ICUCompat.java
similarity index 100%
rename from v4/java/android/support/v4/text/ICUCompat.java
rename to compat/java/android/support/v4/text/ICUCompat.java
diff --git a/v4/java/android/support/v4/text/TextDirectionHeuristicCompat.java b/compat/java/android/support/v4/text/TextDirectionHeuristicCompat.java
similarity index 100%
rename from v4/java/android/support/v4/text/TextDirectionHeuristicCompat.java
rename to compat/java/android/support/v4/text/TextDirectionHeuristicCompat.java
diff --git a/v4/java/android/support/v4/text/TextDirectionHeuristicsCompat.java b/compat/java/android/support/v4/text/TextDirectionHeuristicsCompat.java
similarity index 100%
rename from v4/java/android/support/v4/text/TextDirectionHeuristicsCompat.java
rename to compat/java/android/support/v4/text/TextDirectionHeuristicsCompat.java
diff --git a/v4/java/android/support/v4/text/TextUtilsCompat.java b/compat/java/android/support/v4/text/TextUtilsCompat.java
similarity index 100%
rename from v4/java/android/support/v4/text/TextUtilsCompat.java
rename to compat/java/android/support/v4/text/TextUtilsCompat.java
diff --git a/v4/java/android/support/v4/util/ArrayMap.java b/compat/java/android/support/v4/util/ArrayMap.java
similarity index 100%
rename from v4/java/android/support/v4/util/ArrayMap.java
rename to compat/java/android/support/v4/util/ArrayMap.java
diff --git a/v4/java/android/support/v4/util/AtomicFile.java b/compat/java/android/support/v4/util/AtomicFile.java
similarity index 100%
rename from v4/java/android/support/v4/util/AtomicFile.java
rename to compat/java/android/support/v4/util/AtomicFile.java
diff --git a/v4/java/android/support/v4/util/CircularArray.java b/compat/java/android/support/v4/util/CircularArray.java
similarity index 100%
rename from v4/java/android/support/v4/util/CircularArray.java
rename to compat/java/android/support/v4/util/CircularArray.java
diff --git a/v4/java/android/support/v4/util/CircularIntArray.java b/compat/java/android/support/v4/util/CircularIntArray.java
similarity index 100%
rename from v4/java/android/support/v4/util/CircularIntArray.java
rename to compat/java/android/support/v4/util/CircularIntArray.java
diff --git a/v4/java/android/support/v4/util/ContainerHelpers.java b/compat/java/android/support/v4/util/ContainerHelpers.java
similarity index 100%
rename from v4/java/android/support/v4/util/ContainerHelpers.java
rename to compat/java/android/support/v4/util/ContainerHelpers.java
diff --git a/v4/java/android/support/v4/util/DebugUtils.java b/compat/java/android/support/v4/util/DebugUtils.java
similarity index 100%
rename from v4/java/android/support/v4/util/DebugUtils.java
rename to compat/java/android/support/v4/util/DebugUtils.java
diff --git a/v4/java/android/support/v4/util/LogWriter.java b/compat/java/android/support/v4/util/LogWriter.java
similarity index 100%
rename from v4/java/android/support/v4/util/LogWriter.java
rename to compat/java/android/support/v4/util/LogWriter.java
diff --git a/v4/java/android/support/v4/util/LongSparseArray.java b/compat/java/android/support/v4/util/LongSparseArray.java
similarity index 100%
rename from v4/java/android/support/v4/util/LongSparseArray.java
rename to compat/java/android/support/v4/util/LongSparseArray.java
diff --git a/v4/java/android/support/v4/util/LruCache.java b/compat/java/android/support/v4/util/LruCache.java
similarity index 100%
rename from v4/java/android/support/v4/util/LruCache.java
rename to compat/java/android/support/v4/util/LruCache.java
diff --git a/v4/java/android/support/v4/util/MapCollections.java b/compat/java/android/support/v4/util/MapCollections.java
similarity index 100%
rename from v4/java/android/support/v4/util/MapCollections.java
rename to compat/java/android/support/v4/util/MapCollections.java
diff --git a/v4/java/android/support/v4/util/Pair.java b/compat/java/android/support/v4/util/Pair.java
similarity index 100%
rename from v4/java/android/support/v4/util/Pair.java
rename to compat/java/android/support/v4/util/Pair.java
diff --git a/v4/java/android/support/v4/util/Pools.java b/compat/java/android/support/v4/util/Pools.java
similarity index 100%
rename from v4/java/android/support/v4/util/Pools.java
rename to compat/java/android/support/v4/util/Pools.java
diff --git a/v4/java/android/support/v4/util/SimpleArrayMap.java b/compat/java/android/support/v4/util/SimpleArrayMap.java
similarity index 100%
rename from v4/java/android/support/v4/util/SimpleArrayMap.java
rename to compat/java/android/support/v4/util/SimpleArrayMap.java
diff --git a/v4/java/android/support/v4/util/SparseArrayCompat.java b/compat/java/android/support/v4/util/SparseArrayCompat.java
similarity index 100%
rename from v4/java/android/support/v4/util/SparseArrayCompat.java
rename to compat/java/android/support/v4/util/SparseArrayCompat.java
diff --git a/v4/java/android/support/v4/util/TimeUtils.java b/compat/java/android/support/v4/util/TimeUtils.java
similarity index 100%
rename from v4/java/android/support/v4/util/TimeUtils.java
rename to compat/java/android/support/v4/util/TimeUtils.java
diff --git a/v4/java/android/support/v4/util/package.html b/compat/java/android/support/v4/util/package.html
old mode 100755
new mode 100644
similarity index 100%
rename from v4/java/android/support/v4/util/package.html
rename to compat/java/android/support/v4/util/package.html
diff --git a/v4/java/android/support/v4/view/AccessibilityDelegateCompat.java b/compat/java/android/support/v4/view/AccessibilityDelegateCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/AccessibilityDelegateCompat.java
rename to compat/java/android/support/v4/view/AccessibilityDelegateCompat.java
diff --git a/v4/java/android/support/v4/view/ActionProvider.java b/compat/java/android/support/v4/view/ActionProvider.java
similarity index 100%
rename from v4/java/android/support/v4/view/ActionProvider.java
rename to compat/java/android/support/v4/view/ActionProvider.java
diff --git a/v4/java/android/support/v4/view/GestureDetectorCompat.java b/compat/java/android/support/v4/view/GestureDetectorCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/GestureDetectorCompat.java
rename to compat/java/android/support/v4/view/GestureDetectorCompat.java
diff --git a/v4/java/android/support/v4/view/GravityCompat.java b/compat/java/android/support/v4/view/GravityCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/GravityCompat.java
rename to compat/java/android/support/v4/view/GravityCompat.java
diff --git a/v4/java/android/support/v4/view/InputDeviceCompat.java b/compat/java/android/support/v4/view/InputDeviceCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/InputDeviceCompat.java
rename to compat/java/android/support/v4/view/InputDeviceCompat.java
diff --git a/v4/java/android/support/v4/view/KeyEventCompat.java b/compat/java/android/support/v4/view/KeyEventCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/KeyEventCompat.java
rename to compat/java/android/support/v4/view/KeyEventCompat.java
diff --git a/v4/java/android/support/v4/view/LayoutInflaterCompat.java b/compat/java/android/support/v4/view/LayoutInflaterCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/LayoutInflaterCompat.java
rename to compat/java/android/support/v4/view/LayoutInflaterCompat.java
diff --git a/v4/java/android/support/v4/view/MarginLayoutParamsCompat.java b/compat/java/android/support/v4/view/MarginLayoutParamsCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/MarginLayoutParamsCompat.java
rename to compat/java/android/support/v4/view/MarginLayoutParamsCompat.java
diff --git a/v4/java/android/support/v4/view/MenuCompat.java b/compat/java/android/support/v4/view/MenuCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/MenuCompat.java
rename to compat/java/android/support/v4/view/MenuCompat.java
diff --git a/v4/java/android/support/v4/view/MenuItemCompat.java b/compat/java/android/support/v4/view/MenuItemCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/MenuItemCompat.java
rename to compat/java/android/support/v4/view/MenuItemCompat.java
diff --git a/v4/java/android/support/v4/view/MotionEventCompat.java b/compat/java/android/support/v4/view/MotionEventCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/MotionEventCompat.java
rename to compat/java/android/support/v4/view/MotionEventCompat.java
diff --git a/v4/java/android/support/v4/view/NestedScrollingChild.java b/compat/java/android/support/v4/view/NestedScrollingChild.java
similarity index 100%
rename from v4/java/android/support/v4/view/NestedScrollingChild.java
rename to compat/java/android/support/v4/view/NestedScrollingChild.java
diff --git a/v4/java/android/support/v4/view/NestedScrollingParent.java b/compat/java/android/support/v4/view/NestedScrollingParent.java
similarity index 100%
rename from v4/java/android/support/v4/view/NestedScrollingParent.java
rename to compat/java/android/support/v4/view/NestedScrollingParent.java
diff --git a/v4/java/android/support/v4/view/PointerIconCompat.java b/compat/java/android/support/v4/view/PointerIconCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/PointerIconCompat.java
rename to compat/java/android/support/v4/view/PointerIconCompat.java
diff --git a/v4/java/android/support/v4/view/ScaleGestureDetectorCompat.java b/compat/java/android/support/v4/view/ScaleGestureDetectorCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/ScaleGestureDetectorCompat.java
rename to compat/java/android/support/v4/view/ScaleGestureDetectorCompat.java
diff --git a/v4/java/android/support/v4/view/ScrollingView.java b/compat/java/android/support/v4/view/ScrollingView.java
similarity index 100%
rename from v4/java/android/support/v4/view/ScrollingView.java
rename to compat/java/android/support/v4/view/ScrollingView.java
diff --git a/v4/java/android/support/v4/view/VelocityTrackerCompat.java b/compat/java/android/support/v4/view/VelocityTrackerCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/VelocityTrackerCompat.java
rename to compat/java/android/support/v4/view/VelocityTrackerCompat.java
diff --git a/v4/java/android/support/v4/view/ViewCompat.java b/compat/java/android/support/v4/view/ViewCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/ViewCompat.java
rename to compat/java/android/support/v4/view/ViewCompat.java
diff --git a/v4/java/android/support/v4/view/ViewConfigurationCompat.java b/compat/java/android/support/v4/view/ViewConfigurationCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/ViewConfigurationCompat.java
rename to compat/java/android/support/v4/view/ViewConfigurationCompat.java
diff --git a/v4/java/android/support/v4/view/ViewGroupCompat.java b/compat/java/android/support/v4/view/ViewGroupCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/ViewGroupCompat.java
rename to compat/java/android/support/v4/view/ViewGroupCompat.java
diff --git a/v4/java/android/support/v4/view/ViewParentCompat.java b/compat/java/android/support/v4/view/ViewParentCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/ViewParentCompat.java
rename to compat/java/android/support/v4/view/ViewParentCompat.java
diff --git a/v4/java/android/support/v4/view/ViewPropertyAnimatorCompat.java b/compat/java/android/support/v4/view/ViewPropertyAnimatorCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/ViewPropertyAnimatorCompat.java
rename to compat/java/android/support/v4/view/ViewPropertyAnimatorCompat.java
diff --git a/v4/java/android/support/v4/view/WindowCompat.java b/compat/java/android/support/v4/view/WindowCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/WindowCompat.java
rename to compat/java/android/support/v4/view/WindowCompat.java
diff --git a/v4/java/android/support/v4/view/accessibility/AccessibilityEventCompat.java b/compat/java/android/support/v4/view/accessibility/AccessibilityEventCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/accessibility/AccessibilityEventCompat.java
rename to compat/java/android/support/v4/view/accessibility/AccessibilityEventCompat.java
diff --git a/v4/java/android/support/v4/view/accessibility/AccessibilityManagerCompat.java b/compat/java/android/support/v4/view/accessibility/AccessibilityManagerCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/accessibility/AccessibilityManagerCompat.java
rename to compat/java/android/support/v4/view/accessibility/AccessibilityManagerCompat.java
diff --git a/v4/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java b/compat/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java
rename to compat/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java
diff --git a/v4/java/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.java b/compat/java/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.java
rename to compat/java/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.java
diff --git a/v4/java/android/support/v4/view/accessibility/AccessibilityRecordCompat.java b/compat/java/android/support/v4/view/accessibility/AccessibilityRecordCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/accessibility/AccessibilityRecordCompat.java
rename to compat/java/android/support/v4/view/accessibility/AccessibilityRecordCompat.java
diff --git a/v4/java/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.java b/compat/java/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.java
rename to compat/java/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.java
diff --git a/v4/java/android/support/v4/view/accessibility/package.html b/compat/java/android/support/v4/view/accessibility/package.html
similarity index 100%
rename from v4/java/android/support/v4/view/accessibility/package.html
rename to compat/java/android/support/v4/view/accessibility/package.html
diff --git a/v4/java/android/support/v4/view/animation/PathInterpolatorCompat.java b/compat/java/android/support/v4/view/animation/PathInterpolatorCompat.java
similarity index 100%
rename from v4/java/android/support/v4/view/animation/PathInterpolatorCompat.java
rename to compat/java/android/support/v4/view/animation/PathInterpolatorCompat.java
diff --git a/compat/java/android/support/v4/view/package.html b/compat/java/android/support/v4/view/package.html
new file mode 100755
index 0000000..d80ef70
--- /dev/null
+++ b/compat/java/android/support/v4/view/package.html
@@ -0,0 +1,11 @@
+<body>
+
+Support android.util classes to assist with development of applications for
+android API level 4 or later.  The main features here are a variety of classes
+for handling backwards compatibility with views (for example
+{@link android.support.v4.view.MotionEventCompat} allows retrieving multi-touch
+data if available), and a new
+{@link android.support.v4.view.ViewPager} widget (which at some point should be moved over
+to the widget package).
+
+</body>
diff --git a/v4/java/android/support/v4/widget/CompoundButtonCompat.java b/compat/java/android/support/v4/widget/CompoundButtonCompat.java
similarity index 100%
rename from v4/java/android/support/v4/widget/CompoundButtonCompat.java
rename to compat/java/android/support/v4/widget/CompoundButtonCompat.java
diff --git a/v4/java/android/support/v4/widget/EdgeEffectCompat.java b/compat/java/android/support/v4/widget/EdgeEffectCompat.java
similarity index 100%
rename from v4/java/android/support/v4/widget/EdgeEffectCompat.java
rename to compat/java/android/support/v4/widget/EdgeEffectCompat.java
diff --git a/v4/java/android/support/v4/widget/ListPopupWindowCompat.java b/compat/java/android/support/v4/widget/ListPopupWindowCompat.java
similarity index 100%
rename from v4/java/android/support/v4/widget/ListPopupWindowCompat.java
rename to compat/java/android/support/v4/widget/ListPopupWindowCompat.java
diff --git a/v4/java/android/support/v4/widget/ListViewCompat.java b/compat/java/android/support/v4/widget/ListViewCompat.java
similarity index 100%
rename from v4/java/android/support/v4/widget/ListViewCompat.java
rename to compat/java/android/support/v4/widget/ListViewCompat.java
diff --git a/v4/java/android/support/v4/widget/PopupMenuCompat.java b/compat/java/android/support/v4/widget/PopupMenuCompat.java
similarity index 100%
rename from v4/java/android/support/v4/widget/PopupMenuCompat.java
rename to compat/java/android/support/v4/widget/PopupMenuCompat.java
diff --git a/v4/java/android/support/v4/widget/PopupWindowCompat.java b/compat/java/android/support/v4/widget/PopupWindowCompat.java
similarity index 100%
rename from v4/java/android/support/v4/widget/PopupWindowCompat.java
rename to compat/java/android/support/v4/widget/PopupWindowCompat.java
diff --git a/v4/java/android/support/v4/widget/ScrollerCompat.java b/compat/java/android/support/v4/widget/ScrollerCompat.java
similarity index 100%
rename from v4/java/android/support/v4/widget/ScrollerCompat.java
rename to compat/java/android/support/v4/widget/ScrollerCompat.java
diff --git a/v4/java/android/support/v4/widget/SearchViewCompat.java b/compat/java/android/support/v4/widget/SearchViewCompat.java
similarity index 100%
rename from v4/java/android/support/v4/widget/SearchViewCompat.java
rename to compat/java/android/support/v4/widget/SearchViewCompat.java
diff --git a/v4/java/android/support/v4/widget/TextViewCompat.java b/compat/java/android/support/v4/widget/TextViewCompat.java
similarity index 100%
rename from v4/java/android/support/v4/widget/TextViewCompat.java
rename to compat/java/android/support/v4/widget/TextViewCompat.java
diff --git a/v4/java/android/support/v4/widget/TextViewCompatDonut.java b/compat/java/android/support/v4/widget/TextViewCompatDonut.java
similarity index 100%
rename from v4/java/android/support/v4/widget/TextViewCompatDonut.java
rename to compat/java/android/support/v4/widget/TextViewCompatDonut.java
diff --git a/compat/java/android/support/v4/widget/package.html b/compat/java/android/support/v4/widget/package.html
new file mode 100755
index 0000000..e2c636d
--- /dev/null
+++ b/compat/java/android/support/v4/widget/package.html
@@ -0,0 +1,8 @@
+<body>
+
+Support android.widget classes to assist with development of applications for
+android API level 4 or later.  This includes a complete modern implementation
+of {@link android.support.v4.widget.CursorAdapter} and related classes, which
+is needed for use with {@link android.support.v4.content.CursorLoader}.
+
+</body>
diff --git a/v4/jellybean-mr1/android/support/v4/content/res/ConfigurationHelperJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/content/res/ConfigurationHelperJellybeanMr1.java
similarity index 100%
rename from v4/jellybean-mr1/android/support/v4/content/res/ConfigurationHelperJellybeanMr1.java
rename to compat/jellybean-mr1/android/support/v4/content/res/ConfigurationHelperJellybeanMr1.java
diff --git a/v4/jellybean-mr1/android/support/v4/graphics/drawable/DrawableCompatJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/graphics/drawable/DrawableCompatJellybeanMr1.java
similarity index 100%
rename from v4/jellybean-mr1/android/support/v4/graphics/drawable/DrawableCompatJellybeanMr1.java
rename to compat/jellybean-mr1/android/support/v4/graphics/drawable/DrawableCompatJellybeanMr1.java
diff --git a/v4/jellybean-mr1/android/support/v4/hardware/display/DisplayManagerJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/hardware/display/DisplayManagerJellybeanMr1.java
similarity index 100%
rename from v4/jellybean-mr1/android/support/v4/hardware/display/DisplayManagerJellybeanMr1.java
rename to compat/jellybean-mr1/android/support/v4/hardware/display/DisplayManagerJellybeanMr1.java
diff --git a/v4/jellybean-mr1/android/support/v4/text/TextUtilsCompatJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/text/TextUtilsCompatJellybeanMr1.java
similarity index 100%
rename from v4/jellybean-mr1/android/support/v4/text/TextUtilsCompatJellybeanMr1.java
rename to compat/jellybean-mr1/android/support/v4/text/TextUtilsCompatJellybeanMr1.java
diff --git a/v4/jellybean-mr1/android/support/v4/view/GravityCompatJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/view/GravityCompatJellybeanMr1.java
similarity index 100%
rename from v4/jellybean-mr1/android/support/v4/view/GravityCompatJellybeanMr1.java
rename to compat/jellybean-mr1/android/support/v4/view/GravityCompatJellybeanMr1.java
diff --git a/v4/jellybean-mr1/android/support/v4/view/MarginLayoutParamsCompatJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/view/MarginLayoutParamsCompatJellybeanMr1.java
similarity index 100%
rename from v4/jellybean-mr1/android/support/v4/view/MarginLayoutParamsCompatJellybeanMr1.java
rename to compat/jellybean-mr1/android/support/v4/view/MarginLayoutParamsCompatJellybeanMr1.java
diff --git a/v4/jellybean-mr1/android/support/v4/view/ViewCompatJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/view/ViewCompatJellybeanMr1.java
similarity index 100%
rename from v4/jellybean-mr1/android/support/v4/view/ViewCompatJellybeanMr1.java
rename to compat/jellybean-mr1/android/support/v4/view/ViewCompatJellybeanMr1.java
diff --git a/v4/jellybean-mr1/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr1.java
similarity index 100%
rename from v4/jellybean-mr1/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr1.java
rename to compat/jellybean-mr1/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr1.java
diff --git a/v4/jellybean-mr1/android/support/v4/widget/TextViewCompatJbMr1.java b/compat/jellybean-mr1/android/support/v4/widget/TextViewCompatJbMr1.java
similarity index 100%
rename from v4/jellybean-mr1/android/support/v4/widget/TextViewCompatJbMr1.java
rename to compat/jellybean-mr1/android/support/v4/widget/TextViewCompatJbMr1.java
diff --git a/v4/jellybean-mr2/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2.java b/compat/jellybean-mr2/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2.java
similarity index 100%
rename from v4/jellybean-mr2/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2.java
rename to compat/jellybean-mr2/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2.java
diff --git a/v4/jellybean-mr2/android/support/v4/app/BundleCompatJellybeanMR2.java b/compat/jellybean-mr2/android/support/v4/app/BundleCompatJellybeanMR2.java
similarity index 100%
rename from v4/jellybean-mr2/android/support/v4/app/BundleCompatJellybeanMR2.java
rename to compat/jellybean-mr2/android/support/v4/app/BundleCompatJellybeanMR2.java
diff --git a/v4/jellybean-mr2/android/support/v4/graphics/BitmapCompatJellybeanMR2.java b/compat/jellybean-mr2/android/support/v4/graphics/BitmapCompatJellybeanMR2.java
similarity index 100%
rename from v4/jellybean-mr2/android/support/v4/graphics/BitmapCompatJellybeanMR2.java
rename to compat/jellybean-mr2/android/support/v4/graphics/BitmapCompatJellybeanMR2.java
diff --git a/v4/jellybean-mr2/android/support/v4/os/TraceJellybeanMR2.java b/compat/jellybean-mr2/android/support/v4/os/TraceJellybeanMR2.java
similarity index 100%
rename from v4/jellybean-mr2/android/support/v4/os/TraceJellybeanMR2.java
rename to compat/jellybean-mr2/android/support/v4/os/TraceJellybeanMR2.java
diff --git a/v4/jellybean-mr2/android/support/v4/view/ViewCompatJellybeanMr2.java b/compat/jellybean-mr2/android/support/v4/view/ViewCompatJellybeanMr2.java
similarity index 100%
rename from v4/jellybean-mr2/android/support/v4/view/ViewCompatJellybeanMr2.java
rename to compat/jellybean-mr2/android/support/v4/view/ViewCompatJellybeanMr2.java
diff --git a/v4/jellybean-mr2/android/support/v4/view/ViewGroupCompatJellybeanMR2.java b/compat/jellybean-mr2/android/support/v4/view/ViewGroupCompatJellybeanMR2.java
similarity index 100%
rename from v4/jellybean-mr2/android/support/v4/view/ViewGroupCompatJellybeanMR2.java
rename to compat/jellybean-mr2/android/support/v4/view/ViewGroupCompatJellybeanMR2.java
diff --git a/v4/jellybean-mr2/android/support/v4/view/ViewPropertyAnimatorCompatJellybeanMr2.java b/compat/jellybean-mr2/android/support/v4/view/ViewPropertyAnimatorCompatJellybeanMr2.java
similarity index 100%
rename from v4/jellybean-mr2/android/support/v4/view/ViewPropertyAnimatorCompatJellybeanMr2.java
rename to compat/jellybean-mr2/android/support/v4/view/ViewPropertyAnimatorCompatJellybeanMr2.java
diff --git a/v4/jellybean-mr2/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr2.java b/compat/jellybean-mr2/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr2.java
similarity index 100%
rename from v4/jellybean-mr2/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr2.java
rename to compat/jellybean-mr2/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr2.java
diff --git a/v4/jellybean-mr2/android/support/v4/widget/TextViewCompatJbMr2.java b/compat/jellybean-mr2/android/support/v4/widget/TextViewCompatJbMr2.java
similarity index 100%
rename from v4/jellybean-mr2/android/support/v4/widget/TextViewCompatJbMr2.java
rename to compat/jellybean-mr2/android/support/v4/widget/TextViewCompatJbMr2.java
diff --git a/v4/jellybean/android/support/v4/app/ActivityCompatJB.java b/compat/jellybean/android/support/v4/app/ActivityCompatJB.java
similarity index 100%
rename from v4/jellybean/android/support/v4/app/ActivityCompatJB.java
rename to compat/jellybean/android/support/v4/app/ActivityCompatJB.java
diff --git a/v4/jellybean/android/support/v4/app/ActivityOptionsCompatJB.java b/compat/jellybean/android/support/v4/app/ActivityOptionsCompatJB.java
similarity index 100%
rename from v4/jellybean/android/support/v4/app/ActivityOptionsCompatJB.java
rename to compat/jellybean/android/support/v4/app/ActivityOptionsCompatJB.java
diff --git a/v4/jellybean/android/support/v4/app/ShareCompatJB.java b/compat/jellybean/android/support/v4/app/ShareCompatJB.java
similarity index 100%
rename from v4/jellybean/android/support/v4/app/ShareCompatJB.java
rename to compat/jellybean/android/support/v4/app/ShareCompatJB.java
diff --git a/v4/jellybean/android/support/v4/content/ContentResolverCompatJellybean.java b/compat/jellybean/android/support/v4/content/ContentResolverCompatJellybean.java
similarity index 100%
rename from v4/jellybean/android/support/v4/content/ContentResolverCompatJellybean.java
rename to compat/jellybean/android/support/v4/content/ContentResolverCompatJellybean.java
diff --git a/v4/jellybean/android/support/v4/content/ContextCompatJellybean.java b/compat/jellybean/android/support/v4/content/ContextCompatJellybean.java
similarity index 100%
rename from v4/jellybean/android/support/v4/content/ContextCompatJellybean.java
rename to compat/jellybean/android/support/v4/content/ContextCompatJellybean.java
diff --git a/v4/jellybean/android/support/v4/net/ConnectivityManagerCompatJellyBean.java b/compat/jellybean/android/support/v4/net/ConnectivityManagerCompatJellyBean.java
similarity index 100%
rename from v4/jellybean/android/support/v4/net/ConnectivityManagerCompatJellyBean.java
rename to compat/jellybean/android/support/v4/net/ConnectivityManagerCompatJellyBean.java
diff --git a/v4/jellybean/android/support/v4/os/CancellationSignalCompatJellybean.java b/compat/jellybean/android/support/v4/os/CancellationSignalCompatJellybean.java
similarity index 100%
rename from v4/jellybean/android/support/v4/os/CancellationSignalCompatJellybean.java
rename to compat/jellybean/android/support/v4/os/CancellationSignalCompatJellybean.java
diff --git a/v4/jellybean/android/support/v4/view/AccessibilityDelegateCompatJellyBean.java b/compat/jellybean/android/support/v4/view/AccessibilityDelegateCompatJellyBean.java
similarity index 100%
rename from v4/jellybean/android/support/v4/view/AccessibilityDelegateCompatJellyBean.java
rename to compat/jellybean/android/support/v4/view/AccessibilityDelegateCompatJellyBean.java
diff --git a/v4/jellybean/android/support/v4/view/ViewCompatJB.java b/compat/jellybean/android/support/v4/view/ViewCompatJB.java
similarity index 100%
rename from v4/jellybean/android/support/v4/view/ViewCompatJB.java
rename to compat/jellybean/android/support/v4/view/ViewCompatJB.java
diff --git a/v4/jellybean/android/support/v4/view/ViewPropertyAnimatorCompatJB.java b/compat/jellybean/android/support/v4/view/ViewPropertyAnimatorCompatJB.java
similarity index 100%
rename from v4/jellybean/android/support/v4/view/ViewPropertyAnimatorCompatJB.java
rename to compat/jellybean/android/support/v4/view/ViewPropertyAnimatorCompatJB.java
diff --git a/v4/jellybean/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellyBean.java b/compat/jellybean/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellyBean.java
similarity index 100%
rename from v4/jellybean/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellyBean.java
rename to compat/jellybean/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellyBean.java
diff --git a/v4/jellybean/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatJellyBean.java b/compat/jellybean/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatJellyBean.java
similarity index 100%
rename from v4/jellybean/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatJellyBean.java
rename to compat/jellybean/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatJellyBean.java
diff --git a/v4/jellybean/android/support/v4/view/accessibility/AccessibilityRecordCompatJellyBean.java b/compat/jellybean/android/support/v4/view/accessibility/AccessibilityRecordCompatJellyBean.java
similarity index 100%
rename from v4/jellybean/android/support/v4/view/accessibility/AccessibilityRecordCompatJellyBean.java
rename to compat/jellybean/android/support/v4/view/accessibility/AccessibilityRecordCompatJellyBean.java
diff --git a/v4/jellybean/android/support/v4/widget/TextViewCompatJb.java b/compat/jellybean/android/support/v4/widget/TextViewCompatJb.java
similarity index 100%
rename from v4/jellybean/android/support/v4/widget/TextViewCompatJb.java
rename to compat/jellybean/android/support/v4/widget/TextViewCompatJb.java
diff --git a/v4/kitkat/android/support/v4/app/ActivityManagerCompatKitKat.java b/compat/kitkat/android/support/v4/app/ActivityManagerCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/app/ActivityManagerCompatKitKat.java
rename to compat/kitkat/android/support/v4/app/ActivityManagerCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/content/ContextCompatKitKat.java b/compat/kitkat/android/support/v4/content/ContextCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/content/ContextCompatKitKat.java
rename to compat/kitkat/android/support/v4/content/ContextCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/graphics/BitmapCompatKitKat.java b/compat/kitkat/android/support/v4/graphics/BitmapCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/graphics/BitmapCompatKitKat.java
rename to compat/kitkat/android/support/v4/graphics/BitmapCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/graphics/drawable/DrawableCompatKitKat.java b/compat/kitkat/android/support/v4/graphics/drawable/DrawableCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/graphics/drawable/DrawableCompatKitKat.java
rename to compat/kitkat/android/support/v4/graphics/drawable/DrawableCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/graphics/drawable/DrawableWrapperKitKat.java b/compat/kitkat/android/support/v4/graphics/drawable/DrawableWrapperKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/graphics/drawable/DrawableWrapperKitKat.java
rename to compat/kitkat/android/support/v4/graphics/drawable/DrawableWrapperKitKat.java
diff --git a/v4/kitkat/android/support/v4/os/EnvironmentCompatKitKat.java b/compat/kitkat/android/support/v4/os/EnvironmentCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/os/EnvironmentCompatKitKat.java
rename to compat/kitkat/android/support/v4/os/EnvironmentCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/view/ScaleGestureDetectorCompatKitKat.java b/compat/kitkat/android/support/v4/view/ScaleGestureDetectorCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/view/ScaleGestureDetectorCompatKitKat.java
rename to compat/kitkat/android/support/v4/view/ScaleGestureDetectorCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/view/ViewCompatKitKat.java b/compat/kitkat/android/support/v4/view/ViewCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/view/ViewCompatKitKat.java
rename to compat/kitkat/android/support/v4/view/ViewCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/view/ViewParentCompatKitKat.java b/compat/kitkat/android/support/v4/view/ViewParentCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/view/ViewParentCompatKitKat.java
rename to compat/kitkat/android/support/v4/view/ViewParentCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/view/ViewPropertyAnimatorCompatKK.java b/compat/kitkat/android/support/v4/view/ViewPropertyAnimatorCompatKK.java
similarity index 100%
rename from v4/kitkat/android/support/v4/view/ViewPropertyAnimatorCompatKK.java
rename to compat/kitkat/android/support/v4/view/ViewPropertyAnimatorCompatKK.java
diff --git a/v4/kitkat/android/support/v4/view/accessibility/AccessibilityEventCompatKitKat.java b/compat/kitkat/android/support/v4/view/accessibility/AccessibilityEventCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/view/accessibility/AccessibilityEventCompatKitKat.java
rename to compat/kitkat/android/support/v4/view/accessibility/AccessibilityEventCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatKitKat.java b/compat/kitkat/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatKitKat.java
rename to compat/kitkat/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatKitKat.java b/compat/kitkat/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatKitKat.java
rename to compat/kitkat/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/widget/ListPopupWindowCompatKitKat.java b/compat/kitkat/android/support/v4/widget/ListPopupWindowCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/widget/ListPopupWindowCompatKitKat.java
rename to compat/kitkat/android/support/v4/widget/ListPopupWindowCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/widget/ListViewCompatKitKat.java b/compat/kitkat/android/support/v4/widget/ListViewCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/widget/ListViewCompatKitKat.java
rename to compat/kitkat/android/support/v4/widget/ListViewCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/widget/PopupMenuCompatKitKat.java b/compat/kitkat/android/support/v4/widget/PopupMenuCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/widget/PopupMenuCompatKitKat.java
rename to compat/kitkat/android/support/v4/widget/PopupMenuCompatKitKat.java
diff --git a/v4/kitkat/android/support/v4/widget/PopupWindowCompatKitKat.java b/compat/kitkat/android/support/v4/widget/PopupWindowCompatKitKat.java
similarity index 100%
rename from v4/kitkat/android/support/v4/widget/PopupWindowCompatKitKat.java
rename to compat/kitkat/android/support/v4/widget/PopupWindowCompatKitKat.java
diff --git a/compat/tests/AndroidManifest.xml b/compat/tests/AndroidManifest.xml
new file mode 100644
index 0000000..61bc05e
--- /dev/null
+++ b/compat/tests/AndroidManifest.xml
@@ -0,0 +1,58 @@
+<?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.
+  -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          xmlns:tools="http://schemas.android.com/tools"
+          package="android.support.v4.test">
+    <uses-sdk
+            android:minSdkVersion="4"
+            android:targetSdkVersion="23"
+            tools:overrideLibrary="android.support.test, android.app, android.support.test.rule,
+                      android.support.test.espresso, android.support.test.espresso.idling"/>
+
+    <uses-permission android:name="android.permission.VIBRATE"/>
+    <uses-permission android:name="android.permission.WAKE_LOCK"/>
+    <uses-permission android:name="android.permission.READ_CONTACTS"/>
+    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
+
+    <application
+            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"/>
+
+        <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"
+                     android:targetPackage="android.support.v4.test"
+                     />
+</manifest>
diff --git a/compat/tests/NO_DOCS b/compat/tests/NO_DOCS
new file mode 100644
index 0000000..0c81e4a
--- /dev/null
+++ b/compat/tests/NO_DOCS
@@ -0,0 +1,17 @@
+# 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.
+
+Having this file, named NO_DOCS, in a directory will prevent
+Android javadocs from being generated for java files under
+the directory. This is especially useful for test projects.
diff --git a/compat/tests/java/android/support/v4/BaseInstrumentationTestCase.java b/compat/tests/java/android/support/v4/BaseInstrumentationTestCase.java
new file mode 100644
index 0000000..5f9ce85
--- /dev/null
+++ b/compat/tests/java/android/support/v4/BaseInstrumentationTestCase.java
@@ -0,0 +1,33 @@
+/*
+ * 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;
+
+import android.app.Activity;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+import org.junit.Rule;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public abstract class BaseInstrumentationTestCase<A extends Activity> {
+    @Rule
+    public final ActivityTestRule<A> mActivityTestRule;
+
+    protected BaseInstrumentationTestCase(Class<A> activityClass) {
+        mActivityTestRule = new ActivityTestRule<A>(activityClass);
+    }
+}
diff --git a/compat/tests/java/android/support/v4/BaseTestActivity.java b/compat/tests/java/android/support/v4/BaseTestActivity.java
new file mode 100755
index 0000000..e0682ce
--- /dev/null
+++ b/compat/tests/java/android/support/v4/BaseTestActivity.java
@@ -0,0 +1,39 @@
+/*
+ * 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;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.WindowManager;
+
+public abstract class BaseTestActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+        final int contentView = getContentViewLayoutResId();
+        if (contentView > 0) {
+            setContentView(contentView);
+        }
+        onContentViewSet();
+        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+    }
+
+    protected abstract int getContentViewLayoutResId();
+
+    protected void onContentViewSet() {}
+}
diff --git a/compat/tests/java/android/support/v4/ThemedYellowActivity.java b/compat/tests/java/android/support/v4/ThemedYellowActivity.java
new file mode 100644
index 0000000..e256251
--- /dev/null
+++ b/compat/tests/java/android/support/v4/ThemedYellowActivity.java
@@ -0,0 +1,35 @@
+/*
+ * 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/content/ContextCompatTest.java b/compat/tests/java/android/support/v4/content/ContextCompatTest.java
similarity index 100%
rename from v4/tests/java/android/support/v4/content/ContextCompatTest.java
rename to compat/tests/java/android/support/v4/content/ContextCompatTest.java
diff --git a/v4/tests/java/android/support/v4/content/res/ResourcesCompatTest.java b/compat/tests/java/android/support/v4/content/res/ResourcesCompatTest.java
similarity index 100%
rename from v4/tests/java/android/support/v4/content/res/ResourcesCompatTest.java
rename to compat/tests/java/android/support/v4/content/res/ResourcesCompatTest.java
diff --git a/compat/tests/java/android/support/v4/graphics/ColorUtilsTest.java b/compat/tests/java/android/support/v4/graphics/ColorUtilsTest.java
new file mode 100644
index 0000000..998980b
--- /dev/null
+++ b/compat/tests/java/android/support/v4/graphics/ColorUtilsTest.java
@@ -0,0 +1,314 @@
+/*
+ * 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.graphics;
+
+import android.graphics.Color;
+import android.support.test.runner.AndroidJUnit4;
+import android.test.suitebuilder.annotation.SmallTest;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.lang.Integer;
+import java.util.ArrayList;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class ColorUtilsTest {
+
+    // 0.5% of the max value
+    private static final float ALLOWED_OFFSET_HUE = 360 * 0.005f;
+    private static final float ALLOWED_OFFSET_SATURATION = 0.005f;
+    private static final float ALLOWED_OFFSET_LIGHTNESS = 0.005f;
+    private static final float ALLOWED_OFFSET_MIN_ALPHA = 0.01f;
+    private static final double ALLOWED_OFFSET_LAB = 0.01;
+    private static final double ALLOWED_OFFSET_XYZ = 0.01;
+
+    private static final int ALLOWED_OFFSET_RGB_COMPONENT = 2;
+
+    private static final ArrayList<TestEntry> sEntryList = new ArrayList<>();
+
+    static {
+        sEntryList.add(new TestEntry(Color.BLACK).setHsl(0f, 0f, 0f)
+                .setLab(0, 0, 0).setXyz(0, 0, 0)
+                .setWhiteMinAlpha30(0.35f).setWhiteMinAlpha45(0.46f));
+
+        sEntryList.add(new TestEntry(Color.WHITE).setHsl(0f, 0f, 1f)
+                .setLab(100, 0.005, -0.01).setXyz(95.05, 100, 108.9)
+                .setBlackMinAlpha30(0.42f).setBlackMinAlpha45(0.54f));
+
+        sEntryList.add(new TestEntry(Color.BLUE).setHsl(240f, 1f, 0.5f)
+                .setLab(32.303, 79.197, -107.864).setXyz(18.05, 7.22, 95.05)
+                .setWhiteMinAlpha30(0.55f).setWhiteMinAlpha45(0.71f));
+
+        sEntryList.add(new TestEntry(Color.GREEN).setHsl(120f, 1f, 0.5f)
+                .setLab(87.737, -86.185, 83.181).setXyz(35.76, 71.520, 11.920)
+                .setBlackMinAlpha30(0.43f).setBlackMinAlpha45(0.55f));
+
+        sEntryList.add(new TestEntry(Color.RED).setHsl(0f, 1f, 0.5f)
+                .setLab(53.233, 80.109, 67.22).setXyz(41.24, 21.26, 1.93)
+                .setWhiteMinAlpha30(0.84f).setBlackMinAlpha30(0.55f).setBlackMinAlpha45(0.78f));
+
+        sEntryList.add(new TestEntry(Color.CYAN).setHsl(180f, 1f, 0.5f)
+                .setLab(91.117, -48.08, -14.138).setXyz(53.81, 78.74, 106.97)
+                .setBlackMinAlpha30(0.43f).setBlackMinAlpha45(0.55f));
+
+        sEntryList.add(new TestEntry(0xFF2196F3).setHsl(207f, 0.9f, 0.54f)
+                .setLab(60.433, 2.091, -55.116).setXyz(27.711, 28.607, 88.855)
+                .setBlackMinAlpha30(0.52f).setWhiteMinAlpha30(0.97f).setBlackMinAlpha45(0.7f));
+
+        sEntryList.add(new TestEntry(0xFFD1C4E9).setHsl(261f, 0.46f, 0.84f)
+                .setLab(81.247, 11.513, -16.677).setXyz(60.742, 58.918, 85.262)
+                .setBlackMinAlpha30(0.45f).setBlackMinAlpha45(0.58f));
+
+        sEntryList.add(new TestEntry(0xFF311B92).setHsl(251.09f, 0.687f, 0.339f)
+                .setLab(21.988, 44.301, -60.942).setXyz(6.847, 3.512, 27.511)
+                .setWhiteMinAlpha30(0.39f).setWhiteMinAlpha45(0.54f));
+    }
+
+    public void testColorToHSL() {
+        for (TestEntry entry : sEntryList) {
+            verifyColorToHSL(entry.rgb, entry.hsl);
+        }
+    }
+
+    @Test
+    public void testHSLToColor() {
+        for (TestEntry entry : sEntryList) {
+            verifyHSLToColor(entry.hsl, entry.rgb);
+        }
+    }
+
+    @Test
+    public void testColorToHslLimits() {
+        final float[] hsl = new float[3];
+
+        for (TestEntry entry : sEntryList) {
+            ColorUtils.colorToHSL(entry.rgb, hsl);
+
+            assertTrue(hsl[0] >= 0f && hsl[0] <= 360f);
+            assertTrue(hsl[1] >= 0f && hsl[1] <= 1f);
+            assertTrue(hsl[2] >= 0f && hsl[2] <= 1f);
+        }
+    }
+
+    @Test
+    public void testColorToXYZ() {
+        for (TestEntry entry : sEntryList) {
+            verifyColorToXYZ(entry.rgb, entry.xyz);
+        }
+    }
+
+    @Test
+    public void testColorToLAB() {
+        for (TestEntry entry : sEntryList) {
+            verifyColorToLAB(entry.rgb, entry.lab);
+        }
+    }
+
+    @Test
+    public void testLABToXYZ() {
+        for (TestEntry entry : sEntryList) {
+            verifyLABToXYZ(entry.lab, entry.xyz);
+        }
+    }
+
+    @Test
+    public void testXYZToColor() {
+        for (TestEntry entry : sEntryList) {
+            verifyXYZToColor(entry.xyz, entry.rgb);
+        }
+    }
+
+    @Test
+    public void testLABToColor() {
+        for (TestEntry entry : sEntryList) {
+            verifyLABToColor(entry.lab, entry.rgb);
+        }
+    }
+
+    @Test
+    public void testMinAlphas() {
+        for (TestEntry entry : sEntryList) {
+            verifyMinAlpha("Black title", entry.rgb, entry.blackMinAlpha30,
+                    ColorUtils.calculateMinimumAlpha(Color.BLACK, entry.rgb, 3.0f));
+            verifyMinAlpha("Black body", entry.rgb, entry.blackMinAlpha45,
+                    ColorUtils.calculateMinimumAlpha(Color.BLACK, entry.rgb, 4.5f));
+            verifyMinAlpha("White title", entry.rgb, entry.whiteMinAlpha30,
+                    ColorUtils.calculateMinimumAlpha(Color.WHITE, entry.rgb, 3.0f));
+            verifyMinAlpha("White body", entry.rgb, entry.whiteMinAlpha45,
+                    ColorUtils.calculateMinimumAlpha(Color.WHITE, entry.rgb, 4.5f));
+        }
+    }
+
+    @Test
+    public void testCircularInterpolationForwards() {
+        assertEquals(0f, ColorUtils.circularInterpolate(0, 180, 0f), 0f);
+        assertEquals(90f, ColorUtils.circularInterpolate(0, 180, 0.5f), 0f);
+        assertEquals(180f, ColorUtils.circularInterpolate(0, 180, 1f), 0f);
+    }
+
+    @Test
+    public void testCircularInterpolationBackwards() {
+        assertEquals(180f, ColorUtils.circularInterpolate(180, 0, 0f), 0f);
+        assertEquals(90f, ColorUtils.circularInterpolate(180, 0, 0.5f), 0f);
+        assertEquals(0f, ColorUtils.circularInterpolate(180, 0, 1f), 0f);
+    }
+
+    @Test
+    public void testCircularInterpolationCrossZero() {
+        assertEquals(270f, ColorUtils.circularInterpolate(270, 90, 0f), 0f);
+        assertEquals(180f, ColorUtils.circularInterpolate(270, 90, 0.5f), 0f);
+        assertEquals(90f, ColorUtils.circularInterpolate(270, 90, 1f), 0f);
+    }
+
+    private static void verifyMinAlpha(String title, int color, float expected, int actual) {
+        final String message = title + " text within error for #" + Integer.toHexString(color);
+        if (expected < 0) {
+            assertEquals(message, actual, -1);
+        } else {
+            assertEquals(message, expected, actual / 255f, ALLOWED_OFFSET_MIN_ALPHA);
+        }
+    }
+
+    private static void verifyColorToHSL(int color, float[] expected) {
+        float[] actualHSL = new float[3];
+        ColorUtils.colorToHSL(color, actualHSL);
+
+        assertEquals("Hue not within offset", expected[0], actualHSL[0],
+                ALLOWED_OFFSET_HUE);
+        assertEquals("Saturation not within offset", expected[1], actualHSL[1],
+                ALLOWED_OFFSET_SATURATION);
+        assertEquals("Lightness not within offset", expected[2], actualHSL[2],
+                ALLOWED_OFFSET_LIGHTNESS);
+    }
+
+    private static void verifyHSLToColor(float[] hsl, int expected) {
+        final int actualRgb = ColorUtils.HSLToColor(hsl);
+
+        assertEquals("Red not within offset", Color.red(expected), Color.red(actualRgb),
+                ALLOWED_OFFSET_RGB_COMPONENT);
+        assertEquals("Green not within offset", Color.green(expected), Color.green(actualRgb),
+                ALLOWED_OFFSET_RGB_COMPONENT);
+        assertEquals("Blue not within offset", Color.blue(expected), Color.blue(actualRgb),
+                ALLOWED_OFFSET_RGB_COMPONENT);
+    }
+
+    private static void verifyColorToLAB(int color, double[] expected) {
+        double[] result = new double[3];
+        ColorUtils.colorToLAB(color, result);
+
+        assertEquals("L not within offset", expected[0], result[0], ALLOWED_OFFSET_LAB);
+        assertEquals("A not within offset", expected[1], result[1], ALLOWED_OFFSET_LAB);
+        assertEquals("B not within offset", expected[2], result[2], ALLOWED_OFFSET_LAB);
+    }
+
+    private static void verifyColorToXYZ(int color, double[] expected) {
+        double[] result = new double[3];
+        ColorUtils.colorToXYZ(color, result);
+
+        assertEquals("X not within offset", expected[0], result[0], ALLOWED_OFFSET_XYZ);
+        assertEquals("Y not within offset", expected[1], result[1], ALLOWED_OFFSET_XYZ);
+        assertEquals("Z not within offset", expected[2], result[2], ALLOWED_OFFSET_XYZ);
+    }
+
+    private static void verifyLABToXYZ(double[] lab, double[] expected) {
+        double[] result = new double[3];
+        ColorUtils.LABToXYZ(lab[0], lab[1], lab[2], result);
+
+        assertEquals("X not within offset", expected[0], result[0], ALLOWED_OFFSET_XYZ);
+        assertEquals("Y not within offset", expected[1], result[1], ALLOWED_OFFSET_XYZ);
+        assertEquals("Z not within offset", expected[2], result[2], ALLOWED_OFFSET_XYZ);
+    }
+
+    private static void verifyXYZToColor(double[] xyz, int expected) {
+        final int result = ColorUtils.XYZToColor(xyz[0], xyz[1], xyz[2]);
+        verifyRGBComponentsClose(expected, result);
+    }
+
+    private static void verifyLABToColor(double[] lab, int expected) {
+        final int result = ColorUtils.LABToColor(lab[0], lab[1], lab[2]);
+        verifyRGBComponentsClose(expected, result);
+    }
+
+    private static void verifyRGBComponentsClose(int expected, int actual) {
+        final String message = "Expected: #" + Integer.toHexString(expected)
+                + ", Actual: #" + Integer.toHexString(actual);
+        assertEquals("R not equal: " + message, Color.red(expected), Color.red(actual), 1);
+        assertEquals("G not equal: " + message, Color.green(expected), Color.green(actual), 1);
+        assertEquals("B not equal: " + message, Color.blue(expected), Color.blue(actual), 1);
+    }
+
+    private static class TestEntry {
+        final int rgb;
+        final float[] hsl = new float[3];
+        final double[] xyz = new double[3];
+        final double[] lab = new double[3];
+
+        float blackMinAlpha45 = -1;
+        float blackMinAlpha30 = -1;
+        float whiteMinAlpha45 = -1;
+        float whiteMinAlpha30 = -1;
+
+        TestEntry(int rgb) {
+            this.rgb = rgb;
+        }
+
+        TestEntry setHsl(float h, float s, float l) {
+            hsl[0] = h;
+            hsl[1] = s;
+            hsl[2] = l;
+            return this;
+        }
+
+        TestEntry setXyz(double x, double y, double z) {
+            xyz[0] = x;
+            xyz[1] = y;
+            xyz[2] = z;
+            return this;
+        }
+
+        TestEntry setLab(double l, double a, double b) {
+            lab[0] = l;
+            lab[1] = a;
+            lab[2] = b;
+            return this;
+        }
+
+        TestEntry setBlackMinAlpha30(float minAlpha) {
+            blackMinAlpha30 = minAlpha;
+            return this;
+        }
+
+        TestEntry setBlackMinAlpha45(float minAlpha) {
+            blackMinAlpha45 = minAlpha;
+            return this;
+        }
+
+        TestEntry setWhiteMinAlpha30(float minAlpha) {
+            whiteMinAlpha30 = minAlpha;
+            return this;
+        }
+
+        TestEntry setWhiteMinAlpha45(float minAlpha) {
+            whiteMinAlpha45 = minAlpha;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/v4/tests/java/android/support/v4/graphics/DrawableCompatTest.java b/compat/tests/java/android/support/v4/graphics/DrawableCompatTest.java
similarity index 100%
rename from v4/tests/java/android/support/v4/graphics/DrawableCompatTest.java
rename to compat/tests/java/android/support/v4/graphics/DrawableCompatTest.java
diff --git a/v4/tests/java/android/support/v4/graphics/TestTintAwareDrawable.java b/compat/tests/java/android/support/v4/graphics/TestTintAwareDrawable.java
similarity index 100%
rename from v4/tests/java/android/support/v4/graphics/TestTintAwareDrawable.java
rename to compat/tests/java/android/support/v4/graphics/TestTintAwareDrawable.java
diff --git a/compat/tests/java/android/support/v4/testutils/LayoutDirectionActions.java b/compat/tests/java/android/support/v4/testutils/LayoutDirectionActions.java
new file mode 100755
index 0000000..25ae971
--- /dev/null
+++ b/compat/tests/java/android/support/v4/testutils/LayoutDirectionActions.java
@@ -0,0 +1,53 @@
+/*
+ * 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/compat/tests/java/android/support/v4/testutils/TestUtils.java b/compat/tests/java/android/support/v4/testutils/TestUtils.java
new file mode 100644
index 0000000..9b1acee
--- /dev/null
+++ b/compat/tests/java/android/support/v4/testutils/TestUtils.java
@@ -0,0 +1,141 @@
+/*
+ * 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.IllegalArgumentException;
+import java.lang.RuntimeException;
+
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Rect;
+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,
+     * this method will call <code>Assert.fail</code> with detailed description of the mismatch.
+     */
+    public static void assertAllPixelsOfColor(String failMessagePrefix, @NonNull Drawable drawable,
+            @ColorInt int color) {
+        int drawableWidth = drawable.getIntrinsicWidth();
+        int drawableHeight = drawable.getIntrinsicHeight();
+
+        if ((drawableWidth <= 0) || (drawableHeight <= 0)) {
+            throw new IllegalArgumentException("Drawable must be configured to have non-zero size");
+        }
+
+        assertAllPixelsOfColor(failMessagePrefix, drawable, drawableWidth, drawableHeight, color,
+                false);
+    }
+
+    /**
+     * Checks whether all the pixels in the specified drawable are of the same specified color.
+     *
+     * In case there is a color mismatch, the behavior of this method depends on the
+     * <code>throwExceptionIfFails</code> parameter. If it is <code>true</code>, this method will
+     * throw an <code>Exception</code> describing the mismatch. Otherwise this method will call
+     * <code>Assert.fail</code> with detailed description of the mismatch.
+     */
+    public static void assertAllPixelsOfColor(String failMessagePrefix, @NonNull Drawable drawable,
+            int drawableWidth, int drawableHeight, @ColorInt int color,
+            boolean throwExceptionIfFails) {
+        // Create a bitmap
+        Bitmap bitmap = Bitmap.createBitmap(drawableWidth, drawableHeight, Bitmap.Config.ARGB_8888);
+        // Create a canvas that wraps the bitmap
+        Canvas canvas = new Canvas(bitmap);
+        // Configure the drawable to have bounds that match its intrinsic size
+        drawable.setBounds(0, 0, drawableWidth, drawableHeight);
+        // And ask the drawable to draw itself to the canvas / bitmap
+        drawable.draw(canvas);
+
+        try {
+            int[] rowPixels = new int[drawableWidth];
+            for (int row = 0; row < drawableHeight; row++) {
+                bitmap.getPixels(rowPixels, 0, drawableWidth, 0, row, drawableWidth, 1);
+                for (int column = 0; column < drawableWidth; column++) {
+                    if (rowPixels[column] != color) {
+                        String mismatchDescription = failMessagePrefix
+                                + ": expected all drawable colors to be ["
+                                + Color.red(color) + "," + Color.green(color) + ","
+                                + Color.blue(color)
+                                + "] but at position (" + row + "," + column + ") found ["
+                                + Color.red(rowPixels[column]) + ","
+                                + Color.green(rowPixels[column]) + ","
+                                + Color.blue(rowPixels[column]) + "]";
+                        if (throwExceptionIfFails) {
+                            throw new RuntimeException(mismatchDescription);
+                        } else {
+                            Assert.fail(mismatchDescription);
+                        }
+                    }
+                }
+            }
+        } finally {
+            bitmap.recycle();
+        }
+    }
+
+    /**
+     * Checks whether the specified rectangle matches the specified left / top / right /
+     * bottom bounds.
+     */
+    public static void assertRectangleBounds(String failMessagePrefix, @NonNull Rect rectangle,
+            int left, int top, int right, int bottom) {
+        Assert.assertEquals(failMessagePrefix + " left", rectangle.left, left);
+        Assert.assertEquals(failMessagePrefix + " top", rectangle.top, top);
+        Assert.assertEquals(failMessagePrefix + " right", rectangle.right, right);
+        Assert.assertEquals(failMessagePrefix + " bottom", rectangle.bottom, bottom);
+    }
+}
\ No newline at end of file
diff --git a/compat/tests/java/android/support/v4/testutils/TestUtilsAssertions.java b/compat/tests/java/android/support/v4/testutils/TestUtilsAssertions.java
new file mode 100644
index 0000000..161c0c7
--- /dev/null
+++ b/compat/tests/java/android/support/v4/testutils/TestUtilsAssertions.java
@@ -0,0 +1,64 @@
+/*
+ * 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
new file mode 100644
index 0000000..c6f07e5
--- /dev/null
+++ b/compat/tests/java/android/support/v4/testutils/TestUtilsMatchers.java
@@ -0,0 +1,272 @@
+/*
+ * 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/java/android/support/v4/testutils/TextViewActions.java b/compat/tests/java/android/support/v4/testutils/TextViewActions.java
new file mode 100644
index 0000000..f67e8c0
--- /dev/null
+++ b/compat/tests/java/android/support/v4/testutils/TextViewActions.java
@@ -0,0 +1,230 @@
+/*
+ * 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/java/android/support/v4/view/GravityCompatTest.java b/compat/tests/java/android/support/v4/view/GravityCompatTest.java
similarity index 100%
rename from v4/tests/java/android/support/v4/view/GravityCompatTest.java
rename to compat/tests/java/android/support/v4/view/GravityCompatTest.java
diff --git a/v4/tests/java/android/support/v4/view/MarginLayoutParamsCompatTest.java b/compat/tests/java/android/support/v4/view/MarginLayoutParamsCompatTest.java
similarity index 100%
rename from v4/tests/java/android/support/v4/view/MarginLayoutParamsCompatTest.java
rename to compat/tests/java/android/support/v4/view/MarginLayoutParamsCompatTest.java
diff --git a/v4/tests/java/android/support/v4/view/ViewCompatTest.java b/compat/tests/java/android/support/v4/view/ViewCompatTest.java
similarity index 100%
rename from v4/tests/java/android/support/v4/view/ViewCompatTest.java
rename to compat/tests/java/android/support/v4/view/ViewCompatTest.java
diff --git a/v4/tests/java/android/support/v4/view/ViewPropertyAnimatorCompatTest.java b/compat/tests/java/android/support/v4/view/ViewPropertyAnimatorCompatTest.java
similarity index 100%
rename from v4/tests/java/android/support/v4/view/ViewPropertyAnimatorCompatTest.java
rename to compat/tests/java/android/support/v4/view/ViewPropertyAnimatorCompatTest.java
diff --git a/v4/tests/java/android/support/v4/widget/DonutScrollerCompatTest.java b/compat/tests/java/android/support/v4/widget/DonutScrollerCompatTest.java
similarity index 100%
rename from v4/tests/java/android/support/v4/widget/DonutScrollerCompatTest.java
rename to compat/tests/java/android/support/v4/widget/DonutScrollerCompatTest.java
diff --git a/v4/tests/java/android/support/v4/widget/GingerbreadScrollerCompatTest.java b/compat/tests/java/android/support/v4/widget/GingerbreadScrollerCompatTest.java
similarity index 100%
rename from v4/tests/java/android/support/v4/widget/GingerbreadScrollerCompatTest.java
rename to compat/tests/java/android/support/v4/widget/GingerbreadScrollerCompatTest.java
diff --git a/v4/tests/java/android/support/v4/widget/IcsScrollerCompatTest.java b/compat/tests/java/android/support/v4/widget/IcsScrollerCompatTest.java
similarity index 100%
rename from v4/tests/java/android/support/v4/widget/IcsScrollerCompatTest.java
rename to compat/tests/java/android/support/v4/widget/IcsScrollerCompatTest.java
diff --git a/v4/tests/java/android/support/v4/widget/ScrollerCompatTestBase.java b/compat/tests/java/android/support/v4/widget/ScrollerCompatTestBase.java
similarity index 100%
rename from v4/tests/java/android/support/v4/widget/ScrollerCompatTestBase.java
rename to compat/tests/java/android/support/v4/widget/ScrollerCompatTestBase.java
diff --git a/v4/tests/java/android/support/v4/widget/TextViewCompatTest.java b/compat/tests/java/android/support/v4/widget/TextViewCompatTest.java
similarity index 100%
rename from v4/tests/java/android/support/v4/widget/TextViewCompatTest.java
rename to compat/tests/java/android/support/v4/widget/TextViewCompatTest.java
diff --git a/v4/tests/java/android/support/v4/widget/TextViewTestActivity.java b/compat/tests/java/android/support/v4/widget/TextViewTestActivity.java
similarity index 100%
rename from v4/tests/java/android/support/v4/widget/TextViewTestActivity.java
rename to compat/tests/java/android/support/v4/widget/TextViewTestActivity.java
diff --git a/compat/tests/res/anim/fade_in.xml b/compat/tests/res/anim/fade_in.xml
new file mode 100644
index 0000000..92d5bbe
--- /dev/null
+++ b/compat/tests/res/anim/fade_in.xml
@@ -0,0 +1,23 @@
+<?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
new file mode 100644
index 0000000..bc5a2ab
--- /dev/null
+++ b/compat/tests/res/anim/fade_out.xml
@@ -0,0 +1,23 @@
+<?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
new file mode 100644
index 0000000..5d6f496
--- /dev/null
+++ b/compat/tests/res/anim/long_fade_in.xml
@@ -0,0 +1,6 @@
+<?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
new file mode 100644
index 0000000..fe9fc6a
--- /dev/null
+++ b/compat/tests/res/anim/long_fade_out.xml
@@ -0,0 +1,6 @@
+<?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/color/complex_themed_selector.xml b/compat/tests/res/color/complex_themed_selector.xml
new file mode 100644
index 0000000..8ef5060
--- /dev/null
+++ b/compat/tests/res/color/complex_themed_selector.xml
@@ -0,0 +1,22 @@
+<?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/compat/tests/res/color/complex_unthemed_selector.xml b/compat/tests/res/color/complex_unthemed_selector.xml
new file mode 100644
index 0000000..bdb93c9
--- /dev/null
+++ b/compat/tests/res/color/complex_unthemed_selector.xml
@@ -0,0 +1,22 @@
+<?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/compat/tests/res/color/simple_themed_selector.xml b/compat/tests/res/color/simple_themed_selector.xml
new file mode 100644
index 0000000..e225add
--- /dev/null
+++ b/compat/tests/res/color/simple_themed_selector.xml
@@ -0,0 +1,20 @@
+<?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/compat/tests/res/drawable-hdpi/density_aware_drawable.png b/compat/tests/res/drawable-hdpi/density_aware_drawable.png
new file mode 100644
index 0000000..dd8a7fe
--- /dev/null
+++ b/compat/tests/res/drawable-hdpi/density_aware_drawable.png
Binary files differ
diff --git a/compat/tests/res/drawable-ldpi/aliased_drawable_alternate.png b/compat/tests/res/drawable-ldpi/aliased_drawable_alternate.png
new file mode 100644
index 0000000..909b23a
--- /dev/null
+++ b/compat/tests/res/drawable-ldpi/aliased_drawable_alternate.png
Binary files differ
diff --git a/compat/tests/res/drawable-mdpi/density_aware_drawable.png b/compat/tests/res/drawable-mdpi/density_aware_drawable.png
new file mode 100644
index 0000000..5c0ff0e
--- /dev/null
+++ b/compat/tests/res/drawable-mdpi/density_aware_drawable.png
Binary files differ
diff --git a/compat/tests/res/drawable-mdpi/test_drawable.png b/compat/tests/res/drawable-mdpi/test_drawable.png
new file mode 100644
index 0000000..1ce5321e
--- /dev/null
+++ b/compat/tests/res/drawable-mdpi/test_drawable.png
Binary files differ
diff --git a/compat/tests/res/drawable-xhdpi/density_aware_drawable.png b/compat/tests/res/drawable-xhdpi/density_aware_drawable.png
new file mode 100644
index 0000000..ce7e2c6
--- /dev/null
+++ b/compat/tests/res/drawable-xhdpi/density_aware_drawable.png
Binary files differ
diff --git a/compat/tests/res/drawable-xxhdpi/density_aware_drawable.png b/compat/tests/res/drawable-xxhdpi/density_aware_drawable.png
new file mode 100644
index 0000000..c2ebfcb
--- /dev/null
+++ b/compat/tests/res/drawable-xxhdpi/density_aware_drawable.png
Binary files differ
diff --git a/compat/tests/res/drawable/test_drawable_blue.xml b/compat/tests/res/drawable/test_drawable_blue.xml
new file mode 100644
index 0000000..5d05ef2
--- /dev/null
+++ b/compat/tests/res/drawable/test_drawable_blue.xml
@@ -0,0 +1,25 @@
+<?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/compat/tests/res/drawable/test_drawable_green.xml b/compat/tests/res/drawable/test_drawable_green.xml
new file mode 100644
index 0000000..9f33104
--- /dev/null
+++ b/compat/tests/res/drawable/test_drawable_green.xml
@@ -0,0 +1,25 @@
+<?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/compat/tests/res/drawable/test_drawable_red.xml b/compat/tests/res/drawable/test_drawable_red.xml
new file mode 100644
index 0000000..cd1af56
--- /dev/null
+++ b/compat/tests/res/drawable/test_drawable_red.xml
@@ -0,0 +1,25 @@
+<?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/compat/tests/res/drawable/themed_bitmap.xml b/compat/tests/res/drawable/themed_bitmap.xml
new file mode 100644
index 0000000..111d14e
--- /dev/null
+++ b/compat/tests/res/drawable/themed_bitmap.xml
@@ -0,0 +1,19 @@
+<?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/compat/tests/res/drawable/themed_drawable.xml b/compat/tests/res/drawable/themed_drawable.xml
new file mode 100644
index 0000000..08d89c7
--- /dev/null
+++ b/compat/tests/res/drawable/themed_drawable.xml
@@ -0,0 +1,25 @@
+<?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/compat/tests/res/layout/activity_content.xml b/compat/tests/res/layout/activity_content.xml
new file mode 100644
index 0000000..8870e60
--- /dev/null
+++ b/compat/tests/res/layout/activity_content.xml
@@ -0,0 +1,20 @@
+<?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
new file mode 100644
index 0000000..22c95b4
--- /dev/null
+++ b/compat/tests/res/layout/explore_by_touch_helper_activity.xml
@@ -0,0 +1,27 @@
+<?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
new file mode 100644
index 0000000..38e0423
--- /dev/null
+++ b/compat/tests/res/layout/fragment_a.xml
@@ -0,0 +1,25 @@
+<?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
new file mode 100644
index 0000000..d8ed961
--- /dev/null
+++ b/compat/tests/res/layout/fragment_b.xml
@@ -0,0 +1,25 @@
+<?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
new file mode 100644
index 0000000..ed3c753
--- /dev/null
+++ b/compat/tests/res/layout/fragment_c.xml
@@ -0,0 +1,25 @@
+<?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
new file mode 100644
index 0000000..aa3d9e8
--- /dev/null
+++ b/compat/tests/res/layout/fragment_end.xml
@@ -0,0 +1,34 @@
+<?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
new file mode 100644
index 0000000..7d1409b
--- /dev/null
+++ b/compat/tests/res/layout/fragment_middle.xml
@@ -0,0 +1,29 @@
+<?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
new file mode 100644
index 0000000..793e9b5
--- /dev/null
+++ b/compat/tests/res/layout/fragment_start.xml
@@ -0,0 +1,34 @@
+<?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
new file mode 100644
index 0000000..324f8d0
--- /dev/null
+++ b/compat/tests/res/layout/strict_view_fragment.xml
@@ -0,0 +1,23 @@
+<?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
new file mode 100644
index 0000000..d925ecf
--- /dev/null
+++ b/compat/tests/res/layout/swipe_refresh_layout_activity.xml
@@ -0,0 +1,27 @@
+<?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/text_view_activity.xml b/compat/tests/res/layout/text_view_activity.xml
new file mode 100644
index 0000000..ba5d688
--- /dev/null
+++ b/compat/tests/res/layout/text_view_activity.xml
@@ -0,0 +1,26 @@
+<?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/compat/tests/res/layout/view_pager_with_tab_strip.xml b/compat/tests/res/layout/view_pager_with_tab_strip.xml
new file mode 100644
index 0000000..115b672
--- /dev/null
+++ b/compat/tests/res/layout/view_pager_with_tab_strip.xml
@@ -0,0 +1,30 @@
+<?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
new file mode 100644
index 0000000..de248df
--- /dev/null
+++ b/compat/tests/res/layout/view_pager_with_title_strip.xml
@@ -0,0 +1,30 @@
+<?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/layout/vpa_activity.xml b/compat/tests/res/layout/vpa_activity.xml
new file mode 100644
index 0000000..2363160
--- /dev/null
+++ b/compat/tests/res/layout/vpa_activity.xml
@@ -0,0 +1,28 @@
+<?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:id="@+id/content"
+             android:layout_width="match_parent"
+             android:layout_height="match_parent">
+
+    <View
+        android:id="@+id/view"
+        android:background="#f00"
+        android:layout_width="400dp"
+        android:layout_height="200dp"/>
+
+</LinearLayout>
diff --git a/compat/tests/res/transition/change_bounds.xml b/compat/tests/res/transition/change_bounds.xml
new file mode 100644
index 0000000..766bcea3
--- /dev/null
+++ b/compat/tests/res/transition/change_bounds.xml
@@ -0,0 +1,16 @@
+<?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
new file mode 100644
index 0000000..617f70e
--- /dev/null
+++ b/compat/tests/res/transition/fade.xml
@@ -0,0 +1,16 @@
+<?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-hdpi/dimens.xml b/compat/tests/res/values-hdpi/dimens.xml
new file mode 100755
index 0000000..eb1ff54
--- /dev/null
+++ b/compat/tests/res/values-hdpi/dimens.xml
@@ -0,0 +1,18 @@
+<?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/compat/tests/res/values-mdpi/dimens.xml b/compat/tests/res/values-mdpi/dimens.xml
new file mode 100755
index 0000000..5766379
--- /dev/null
+++ b/compat/tests/res/values-mdpi/dimens.xml
@@ -0,0 +1,18 @@
+<?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/compat/tests/res/values-xhdpi/dimens.xml b/compat/tests/res/values-xhdpi/dimens.xml
new file mode 100755
index 0000000..a25d23d
--- /dev/null
+++ b/compat/tests/res/values-xhdpi/dimens.xml
@@ -0,0 +1,18 @@
+<?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/compat/tests/res/values-xxhdpi/dimens.xml b/compat/tests/res/values-xxhdpi/dimens.xml
new file mode 100755
index 0000000..399cde1
--- /dev/null
+++ b/compat/tests/res/values-xxhdpi/dimens.xml
@@ -0,0 +1,18 @@
+<?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/compat/tests/res/values/attrs.xml b/compat/tests/res/values/attrs.xml
new file mode 100644
index 0000000..36d1e9e
--- /dev/null
+++ b/compat/tests/res/values/attrs.xml
@@ -0,0 +1,21 @@
+<?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/compat/tests/res/values/colors.xml b/compat/tests/res/values/colors.xml
new file mode 100644
index 0000000..15158cf
--- /dev/null
+++ b/compat/tests/res/values/colors.xml
@@ -0,0 +1,37 @@
+<?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">
+    <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>
+    <color name="test_yellow">#F0F000</color>
+</resources>
diff --git a/compat/tests/res/values/dimens.xml b/compat/tests/res/values/dimens.xml
new file mode 100644
index 0000000..5c82462
--- /dev/null
+++ b/compat/tests/res/values/dimens.xml
@@ -0,0 +1,22 @@
+<?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="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/compat/tests/res/values/drawables.xml b/compat/tests/res/values/drawables.xml
new file mode 100644
index 0000000..b2955a5
--- /dev/null
+++ b/compat/tests/res/values/drawables.xml
@@ -0,0 +1,18 @@
+<?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/compat/tests/res/values/ids.xml b/compat/tests/res/values/ids.xml
new file mode 100644
index 0000000..e5fcf63
--- /dev/null
+++ b/compat/tests/res/values/ids.xml
@@ -0,0 +1,27 @@
+<?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
new file mode 100644
index 0000000..b804faf
--- /dev/null
+++ b/compat/tests/res/values/strings.xml
@@ -0,0 +1,24 @@
+<?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">
+    <!-- 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/compat/tests/res/values/styles.xml b/compat/tests/res/values/styles.xml
new file mode 100644
index 0000000..447d5ec
--- /dev/null
+++ b/compat/tests/res/values/styles.xml
@@ -0,0 +1,37 @@
+<?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">
+    <style name="TestActivityTheme">
+        <item name="android:windowAnimationStyle">@null</item>
+    </style>
+    <style name="TextMediumStyle" parent="@android:style/TextAppearance.Medium">
+        <item name="android:textSize">@dimen/text_medium_size</item>
+        <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
diff --git a/core-combined/Android.mk b/core-combined/Android.mk
new file mode 100644
index 0000000..a267f85
--- /dev/null
+++ b/core-combined/Android.mk
@@ -0,0 +1,34 @@
+# 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.
+
+LOCAL_PATH := $(call my-dir)
+
+# Here is the final static library that apps can link against.
+# Applications that use this library must specify
+#
+#   LOCAL_STATIC_ANDROID_LIBRARIES := \
+#       android-support-v4
+#
+# in their makefiles to include the resources and their dependencies in their package.
+include $(CLEAR_VARS)
+LOCAL_USE_AAPT2 := true
+LOCAL_MODULE := android-support-v4
+LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    android-support-compat \
+    android-support-core
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+LOCAL_JAR_EXCLUDE_FILES := none
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/core-combined/AndroidManifest.xml b/core-combined/AndroidManifest.xml
new file mode 100644
index 0000000..01eaccf
--- /dev/null
+++ b/core-combined/AndroidManifest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          xmlns:tools="http://schemas.android.com/tools"
+          package="android.support.v4">
+    <uses-sdk android:minSdkVersion="4" tools:overrideLibrary="android.support.v4"/>
+    <application />
+</manifest>
diff --git a/core-combined/build.gradle b/core-combined/build.gradle
new file mode 100644
index 0000000..72cbe63
--- /dev/null
+++ b/core-combined/build.gradle
@@ -0,0 +1,29 @@
+apply plugin: 'com.android.library'
+
+archivesBaseName = 'support-v4'
+dependencies {
+    compile project(':support-compat')
+    compile project(':support-core')
+}
+
+android {
+    compileSdkVersion project.ext.currentSdk
+
+    defaultConfig {
+        minSdkVersion 4
+        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+        // This disables the builds tools automatic vector -> PNG generation
+        generatedDensities = []
+    }
+
+    sourceSets {
+        main.manifest.srcFile 'AndroidManifest.xml'
+    }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_7
+        targetCompatibility JavaVersion.VERSION_1_7
+    }
+}
+
+
diff --git a/settings.gradle b/settings.gradle
index 0e5c223..501bce6 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -2,8 +2,14 @@
 include ':support-annotations'
 project(':support-annotations').projectDir = new File(rootDir, 'annotations')
 
+include ':support-compat'
+project(':support-compat').projectDir = new File(rootDir, 'compat')
+
+include ':support-core'
+project(':support-core').projectDir = new File(rootDir, 'v4')
+
 include ':support-v4'
-project(':support-v4').projectDir = new File(rootDir, 'v4')
+project(':support-v4').projectDir = new File(rootDir, 'core-combined')
 
 include ':support-appcompat-v7'
 project(':support-appcompat-v7').projectDir = new File(rootDir, 'v7/appcompat')
diff --git a/v4/Android.mk b/v4/Android.mk
index 1e8adad..bff36e6 100644
--- a/v4/Android.mk
+++ b/v4/Android.mk
@@ -19,12 +19,12 @@
 LOCAL_MODULE := android-support-v4-donut
 LOCAL_SDK_VERSION := 4
 LOCAL_SRC_FILES := $(call all-java-files-under, donut)
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-annotations
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-annotations android-support-compat
 LOCAL_JAVA_LANGUAGE_VERSION := 1.7
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
 support_module_src_files := $(LOCAL_SRC_FILES)
-support_module_java_libraries := android-support-annotations
+support_module_java_libraries := android-support-annotations android-support-compat
 
 # -----------------------------------------------------------------------
 
@@ -265,23 +265,31 @@
 # Here is the final static library that apps can link against.
 include $(CLEAR_VARS)
 LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-v4
+LOCAL_MODULE := android-support-core
 LOCAL_SDK_VERSION := 4
 LOCAL_AIDL_INCLUDES := frameworks/support/v4/java
 LOCAL_SRC_FILES := $(call all-java-files-under, java) \
     $(call all-Iaidl-files-under, java)
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
 LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4-api24
+LOCAL_SHARED_ANDROID_LIBRARIES := \
+    android-support-compat \
+    android-support-annotations
 LOCAL_JAR_EXCLUDE_FILES := none
 LOCAL_JAVA_LANGUAGE_VERSION := 1.7
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
 support_module_src_files += $(LOCAL_SRC_FILES)
+support_module_src_files += $(call all-java-files-under, ../compat/java)
+support_module_src_files += $(call all-java-files-under, ../compat/donut)
+support_module_src_files += $(call all-java-files-under, ../compat/honeycomb_mr2)
+support_module_src_files += $(call all-java-files-under, ../compat/ics)
 support_module_aidl_includes := $(LOCAL_AIDL_INCLUDES)
 
 # API Check
 # ---------------------------------------------
 support_module := $(LOCAL_MODULE)
 support_module_api_dir := $(LOCAL_PATH)/api
+support_module_java_libraries := $(LOCAL_JAVA_LIBRARIES)
 support_module_java_packages := android.support.v4.*
 include $(SUPPORT_API_CHECK)
diff --git a/v4/AndroidManifest.xml b/v4/AndroidManifest.xml
index 01eaccf..735cd45 100644
--- a/v4/AndroidManifest.xml
+++ b/v4/AndroidManifest.xml
@@ -15,7 +15,7 @@
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           xmlns:tools="http://schemas.android.com/tools"
-          package="android.support.v4">
-    <uses-sdk android:minSdkVersion="4" tools:overrideLibrary="android.support.v4"/>
+          package="android.support.core">
+    <uses-sdk android:minSdkVersion="4" tools:overrideLibrary="android.support.core"/>
     <application />
 </manifest>
diff --git a/v4/build.gradle b/v4/build.gradle
index 4da2100..6b63ba4 100644
--- a/v4/build.gradle
+++ b/v4/build.gradle
@@ -1,9 +1,10 @@
 apply plugin: 'com.android.library'
-archivesBaseName = 'support-v4'
+archivesBaseName = 'support-core'
 
 
 createApiSourceSets(project, gradle.ext.studioCompat.modules.v4.apiTargets)
 dependencies {
+    compile project(':support-compat')
     androidTestCompile ('com.android.support.test:runner:0.4.1') {
         exclude module: 'support-annotations'
     }
diff --git a/v4/ics-mr1/android/support/v4/speech/tts/TextToSpeechICSMR1.java b/v4/ics-mr1/android/support/v4/speech/tts/TextToSpeechICSMR1.java
deleted file mode 100644
index bbad4c1..0000000
--- a/v4/ics-mr1/android/support/v4/speech/tts/TextToSpeechICSMR1.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package android.support.v4.speech.tts;
-
-import android.speech.tts.TextToSpeech;
-import android.speech.tts.UtteranceProgressListener;
-import android.speech.tts.TextToSpeech.OnUtteranceCompletedListener;
-
-import java.util.Locale;
-import java.util.Set;
-
-/** Helper class for TTS functionality introduced in ICS MR1 */
-class TextToSpeechICSMR1 {
-    /**
-     * Call {@link TextToSpeech#getFeatures} if available.
-     *
-     * @return {@link TextToSpeech#getFeatures} or null on older devices.
-     */
-    static Set<String> getFeatures(TextToSpeech tts, Locale locale) {
-        if (android.os.Build.VERSION.SDK_INT >=
-                android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
-            return tts.getFeatures(locale);
-        }
-        return null;
-    }
-
-    public static final String KEY_FEATURE_EMBEDDED_SYNTHESIS = "embeddedTts";
-    public static final String KEY_FEATURE_NETWORK_SYNTHESIS = "networkTts";
-
-    static interface UtteranceProgressListenerICSMR1 {
-        void onDone(String utteranceId);
-        void onError(String utteranceId);
-        void onStart(String utteranceId);
-    }
-
-    /**
-     * Call {@link TextToSpeech#setOnUtteranceProgressListener} if ICS-MR1 or newer.
-     *
-     * On pre ICS-MR1 devices,{@link TextToSpeech#setOnUtteranceCompletedListener} is
-     * used to emulate its behavior - at the end of synthesis we call
-     * {@link UtteranceProgressListenerICSMR1#onStart(String)} and
-     * {@link UtteranceProgressListenerICSMR1#onDone(String)} one after the other.
-     * Errors can't be detected.
-     */
-    static void setUtteranceProgressListener(TextToSpeech tts,
-            final UtteranceProgressListenerICSMR1 listener) {
-        if (android.os.Build.VERSION.SDK_INT >=
-                android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
-            tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
-                @Override
-                public void onStart(String utteranceId) {
-                    listener.onStart(utteranceId);
-                }
-
-                @Override
-                public void onError(String utteranceId) {
-                    listener.onError(utteranceId);
-                }
-
-                @Override
-                public void onDone(String utteranceId) {
-                    listener.onDone(utteranceId);
-                }
-            });
-        } else {
-            tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() {
-                @Override
-                public void onUtteranceCompleted(String utteranceId) {
-                    // Emulate onStart. Clients are expecting it will happen.
-                    listener.onStart(utteranceId);
-                    listener.onDone(utteranceId);
-                }
-            });
-        }
-    }
-}
diff --git a/v4/ics/android/support/v4/speech/tts/TextToSpeechICS.java b/v4/ics/android/support/v4/speech/tts/TextToSpeechICS.java
deleted file mode 100644
index 4e0c041..0000000
--- a/v4/ics/android/support/v4/speech/tts/TextToSpeechICS.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package android.support.v4.speech.tts;
-
-import android.content.Context;
-import android.os.Build;
-import android.speech.tts.TextToSpeech;
-import android.speech.tts.TextToSpeech.OnInitListener;
-import android.util.Log;
-
-/** Helper class for TTS functionality introduced in ICS */
-class TextToSpeechICS {
-    private static final String TAG = "android.support.v4.speech.tts";
-
-    static TextToSpeech construct(Context context, OnInitListener onInitListener,
-            String engineName) {
-        if (Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
-            if (engineName == null) {
-                return new TextToSpeech(context, onInitListener);
-            } else {
-                Log.w(TAG, "Can't specify tts engine on this device");
-                return new TextToSpeech(context, onInitListener);
-            }
-        } else {
-            return new TextToSpeech(context, onInitListener, engineName);
-        }
-    }
-
-}
diff --git a/v4/java/android/support/v4/view/NestedScrollingChildHelper.java b/v4/java/android/support/v4/view/NestedScrollingChildHelper.java
index 9e25667..745eafd 100644
--- a/v4/java/android/support/v4/view/NestedScrollingChildHelper.java
+++ b/v4/java/android/support/v4/view/NestedScrollingChildHelper.java
@@ -30,7 +30,8 @@
  * method implementation. This implements the standard framework policy for nested scrolling.</p>
  *
  * <p>Views invoking nested scrolling functionality should always do so from the relevant
- * {@link ViewCompat}, {@link ViewGroupCompat} or {@link ViewParentCompat} compatibility
+ * {@link android.support.v4.view.ViewCompat}, {@link android.support.v4.view.ViewGroupCompat} or
+ * {@link android.support.v4.view.ViewParentCompat} compatibility
  * shim static methods. This ensures interoperability with nested scrolling views on Android
  * 5.0 Lollipop and newer.</p>
  */
@@ -51,8 +52,8 @@
      * Enable nested scrolling.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.View View} subclass
-     * method/{@link NestedScrollingChild} interface method with the same signature to implement
-     * the standard policy.</p>
+     * method/{@link android.support.v4.view.NestedScrollingChild} interface method with the same
+     * signature to implement the standard policy.</p>
      *
      * @param enabled true to enable nested scrolling dispatch from this view, false otherwise
      */
@@ -67,8 +68,8 @@
      * Check if nested scrolling is enabled for this view.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.View View} subclass
-     * method/{@link NestedScrollingChild} interface method with the same signature to implement
-     * the standard policy.</p>
+     * method/{@link android.support.v4.view.NestedScrollingChild} interface method with the same
+     * signature to implement the standard policy.</p>
      *
      * @return true if nested scrolling is enabled for this view
      */
@@ -81,8 +82,8 @@
      * a nested scroll in progress.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.View View} subclass
-     * method/{@link NestedScrollingChild} interface method with the same signature to implement
-     * the standard policy.</p>
+     * method/{@link android.support.v4.view.NestedScrollingChild} interface method with the same
+     * signature to implement the standard policy.</p>
      *
      * @return true if this view has a nested scrolling parent, false otherwise
      */
@@ -94,11 +95,11 @@
      * Start a new nested scroll for this view.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.View View} subclass
-     * method/{@link NestedScrollingChild} interface method with the same signature to implement
-     * the standard policy.</p>
+     * method/{@link android.support.v4.view.NestedScrollingChild} interface method with the same
+     * signature to implement the standard policy.</p>
      *
      * @param axes Supported nested scroll axes.
-     *             See {@link NestedScrollingChild#startNestedScroll(int)}.
+     *             See {@link android.support.v4.view.NestedScrollingChild#startNestedScroll(int)}.
      * @return true if a cooperating parent view was found and nested scrolling started successfully
      */
     public boolean startNestedScroll(int axes) {
@@ -128,8 +129,8 @@
      * Stop a nested scroll in progress.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.View View} subclass
-     * method/{@link NestedScrollingChild} interface method with the same signature to implement
-     * the standard policy.</p>
+     * method/{@link android.support.v4.view.NestedScrollingChild} interface method with the same
+     * signature to implement the standard policy.</p>
      */
     public void stopNestedScroll() {
         if (mNestedScrollingParent != null) {
@@ -142,8 +143,8 @@
      * Dispatch one step of a nested scrolling operation to the current nested scrolling parent.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.View View} subclass
-     * method/{@link NestedScrollingChild} interface method with the same signature to implement
-     * the standard policy.</p>
+     * method/{@link android.support.v4.view.NestedScrollingChild} interface method with the same
+     * signature to implement the standard policy.</p>
      *
      * @return true if the parent consumed any of the nested scroll
      */
@@ -181,8 +182,8 @@
      * Dispatch one step of a nested pre-scrolling operation to the current nested scrolling parent.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.View View} subclass
-     * method/{@link NestedScrollingChild} interface method with the same signature to implement
-     * the standard policy.</p>
+     * method/{@link android.support.v4.view.NestedScrollingChild} interface method with the same
+     * signature to implement the standard policy.</p>
      *
      * @return true if the parent consumed any of the nested scroll
      */
@@ -225,8 +226,8 @@
      * Dispatch a nested fling operation to the current nested scrolling parent.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.View View} subclass
-     * method/{@link NestedScrollingChild} interface method with the same signature to implement
-     * the standard policy.</p>
+     * method/{@link android.support.v4.view.NestedScrollingChild} interface method with the same
+     * signature to implement the standard policy.</p>
      *
      * @return true if the parent consumed the nested fling
      */
@@ -242,8 +243,8 @@
      * Dispatch a nested pre-fling operation to the current nested scrolling parent.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.View View} subclass
-     * method/{@link NestedScrollingChild} interface method with the same signature to implement
-     * the standard policy.</p>
+     * method/{@link android.support.v4.view.NestedScrollingChild} interface method with the same
+     * signature to implement the standard policy.</p>
      *
      * @return true if the parent consumed the nested fling
      */
@@ -260,8 +261,8 @@
      * <code>NestedScrollingChildHelper</code> when detached from a window.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.View View} subclass
-     * method/{@link NestedScrollingChild} interface method with the same signature to implement
-     * the standard policy.</p>
+     * method/{@link android.support.v4.view.NestedScrollingChild} interface method with the same
+     * signature to implement the standard policy.</p>
      */
     public void onDetachedFromWindow() {
         ViewCompat.stopNestedScroll(mView);
@@ -271,8 +272,8 @@
      * Called when a nested scrolling child stops its current nested scroll operation.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.View View} subclass
-     * method/{@link NestedScrollingChild} interface method with the same signature to implement
-     * the standard policy.</p>
+     * method/{@link android.support.v4.view.NestedScrollingChild} interface method with the same
+     * signature to implement the standard policy.</p>
      *
      * @param child Child view stopping its nested scroll. This may not be a direct child view.
      */
diff --git a/v4/java/android/support/v4/view/NestedScrollingParentHelper.java b/v4/java/android/support/v4/view/NestedScrollingParentHelper.java
index 91522f1..75936e9 100644
--- a/v4/java/android/support/v4/view/NestedScrollingParentHelper.java
+++ b/v4/java/android/support/v4/view/NestedScrollingParentHelper.java
@@ -31,7 +31,8 @@
  * for nested scrolling.</p>
  *
  * <p>Views invoking nested scrolling functionality should always do so from the relevant
- * {@link ViewCompat}, {@link ViewGroupCompat} or {@link ViewParentCompat} compatibility
+ * {@link android.support.v4.view.ViewCompat}, {@link android.support.v4.view.ViewGroupCompat} or
+ * {@link android.support.v4.view.ViewParentCompat} compatibility
  * shim static methods. This ensures interoperability with nested scrolling views on Android
  * 5.0 Lollipop and newer.</p>
  */
@@ -51,8 +52,8 @@
      * by this ViewGroup.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.ViewGroup ViewGroup}
-     * subclass method/{@link NestedScrollingParent} interface method with the same signature
-     * to implement the standard policy.</p>
+     * subclass method/{@link android.support.v4.view.NestedScrollingParent} interface method with
+     * the same signature to implement the standard policy.</p>
      */
     public void onNestedScrollAccepted(View child, View target, int axes) {
         mNestedScrollAxes = axes;
@@ -62,8 +63,8 @@
      * Return the current axes of nested scrolling for this ViewGroup.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.ViewGroup ViewGroup}
-     * subclass method/{@link NestedScrollingParent} interface method with the same signature
-     * to implement the standard policy.</p>
+     * subclass method/{@link android.support.v4.view.NestedScrollingParent} interface method with
+     * the same signature to implement the standard policy.</p>
      */
     public int getNestedScrollAxes() {
         return mNestedScrollAxes;
@@ -73,8 +74,8 @@
      * React to a nested scroll operation ending.
      *
      * <p>This is a delegate method. Call it from your {@link android.view.ViewGroup ViewGroup}
-     * subclass method/{@link NestedScrollingParent} interface method with the same signature
-     * to implement the standard policy.</p>
+     * subclass method/{@link android.support.v4.view.NestedScrollingParent} interface method with
+     * the same signature to implement the standard policy.</p>
      *
      * @param target View that initiated the nested scroll
      */